Daemon News Ezine BSD News BSD Mall BSD Support Forum BSD Advocacy BSD Updates

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: RC keywords question



On Mon, Dec 05, 2005 at 02:58:05PM +0200, Ion-Mihai Tetcu wrote:
> Hi,
> 
> 
> I'm converting my ports to work with the new HEAD RC style and while at
> it I also thought to check the keywords to make sure they're OK. Read
> rcorder(8) and rc(8).
> 
> Let's take mail/dspam as an example. Obviously it PROVIDE: dspam
> 
> When run in --daemon mode dspam receives messages via LMTP and deliver
> them via SMTP. So it REQUIRE: NETWORK; it also uses syslogd (which
> starts BEFORE: SERVERS).
> 
> Now things start getting interesting.
> 
> Since it's a content filter, it should start before the SMTP server.
> 
> If SMTP server = sendmail|courier it's easy: BEFORE: mail
> 
> If it's postfix it's:
> - if it's started via /etc/rc.d/sendmail (sendmail_enable="YES" and
> postfix in /etc/mail/mailer.conf) BEFORE: mail should be enough (but see
> below); 
> - if sendmail_enable="NO" and /usr/local/sbin/postfix is linked in rc.d
> as sendmail.sh then BEFORE: mail should be OK too since that's before
> rc.d/localpkg (right ?)
> 
> How to interact with various ways to start qmail I have yet to discover.
> 
> So until here I would have:
> PROVIDE: dspam
> REQUIRE: NETWORK syslogd
> BEFORE: mail
> and since mail REQUIRE: LOGIN this is actually:
> REQUIRE: NETWORK syslogd LOGIN
>
> Q: should I write all the REQUIRE keywords or just the last one (LOGIN) ?
> 
> 
> OK, now dspam could also use mysql or pgsql; if the dependency is set
> at compile time, it's easy to have the right REQUIRE; but dspam can
> also use either or none, as instructed in dspam.conf so this is also
> settable at run-time. How can I write the REQUIRE: line in this case ?


"BEFORE: mail" acts for most intents and purposes like all mail scripts
contained "REQUIRE: dspam" so dspam does not depend on LOGIN.  As
a rule, there's no point in depending on syslogd, just depend on
SERVERS instead.  This is actually what DAEMON is.  I'd say that
virtually all ports should "REQUIRE: DAEMON" unless they have more
specific requirements. For the database support, I'd suggest setting the
dependencies based on the ports configure options.  It's harmless to
depend on something that doesn't actually run, but annoying to depend on
something that doesn't exist.

The correct solution for databases is probably to add a new dummy
script DATABASES which all the database startup scripts should declare
they run BEFORE.  Then other startup scripts could REQUIRE that
unconditionally even if they aren't currently configured to use a
database and none are installed.

-- Brooks

-- 
Any statement of the form "X is the one, true Y" is FALSE.
PGP fingerprint 655D 519C 26A7 82E7 2529  9BF0 5D8E 8BE9 F238 1AD4

Attachment: pgpSk9qIVGwft.pgp
Description: PGP signature