Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 5 Dec 2005 19:09:05 +0200
From:      Ion-Mihai Tetcu <itetcu@people.tecnik93.com>
To:        Brooks Davis <brooks@one-eyed-alien.net>
Cc:        ports@freebsd.org, freebsd-rc@freebsd.org
Subject:   Re: RC keywords question
Message-ID:  <20051205190905.28ad8a0a@it.buh.tecnik93.com>
In-Reply-To: <20051205161656.GC7653@odin.ac.hmc.edu>
References:  <20051205145805.0db6cf26@it.buh.tecnik93.com> <20051205161656.GC7653@odin.ac.hmc.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 5 Dec 2005 08:16:56 -0800
Brooks Davis <brooks@one-eyed-alien.net> wrote:

> 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

I think it's better if I make sure dspam starts before its potential
consumers that the other way around; and this for one reason: I know
that my port's consumers are mail servers, but making each mail server
OPTIONally depend of each content filter is obviously unfeasible (of
course I counld ask the user to modify his server's rc script by hand).
Please correct me if I'm wrong.

> 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.

So I should have REQUIRE: DAEMON and that's all ?
Do I understand this right: BEFORE is for approximately selecting when
the server should start while REQUIRE actually asks for something to be
running ?

> 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.

In my case the user either select one database back-end and that is
statically compiled and then I e.g USE_MYSQL and I can write my BEFORE
line (that's what I'm doing now for mysql); 

Or select multiple WITH_DB_NAME OPTIONS and have support for loading
any of them at runtime. For this case what I'm asking is: is there any
way  to hook-in a script that would parse dspam.conf, see what DB is set
and REQUIERE the right thing ?

> 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.

And what do I do until then ? Or I just let the script as it is (.sh)
on 7.x also ?

Thanks,

-- 
IOnut - Unregistered ;) FreeBSD "user"
  "Intellectual Property" is   nowhere near as valuable   as "Intellect"

BOFH excuse #406:
Bad cafeteria food landed all the sysadmins in the hospital





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20051205190905.28ad8a0a>