Rcstartup, SysV vs. BSD

From Free Knowledge Base- The DUCK Project: information for everyone
Jump to: navigation, search
SysV vs. BSD: Runlevels vs. No Runlevels

* OpenBSD does not have runlevels.  OpenBSD uses an rc(8) style startup

* A Unix administrator can achieve all of the functionality of runlevels 
without using runlevels.

* Whereas /etc/inittab sets the default runlevel on a Linux system, a BSD
* system
uses /etc/ttys to determine whether the system will boot into multiuser
command 
line or multiuser GUI.

* On a Linux system, each runlevel has an associated subdirectory: rc0.d for
runlevel 0, rc1.d for runlevel 1, and so on. The symlink names begin with
either
S (for start) or K (for kill).

* On OpenBSD the "system" startup scripts are found in /etc/rc.d and "user
added" startup scripts in /usr/local/etc/rc.d

* On OpenBSD, instead of using symbolic links beginning with S or K, a handful
of scripts in /etc whose names start with rc control which scripts run at
startup and shutdown.

* Most of the scripts found in Linux's /etc/init.d and BSD's /etc/rc.d share
similar behavior.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *

etc/rc.conf.local is an extension of /etc/rc.conf, which is used to set
variables for /etc/rc, which is run by init. Custom startup scripts belong in
/etc/rc.local, which is part of the default install.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *

NAME
     rc - command scripts for system startup

SYNOPSIS
     /etc/rc
     /etc/rc.local
     /etc/rc.securelevel

FILES
     /etc/rc                Command scripts for system startup.
     /etc/rc.local          Site specific command scripts for system startup.
     /etc/rc.conf           System daemon configuration database.
     /etc/rc.conf.local     Site specific daemon configuration database.
     /etc/rc.securelevel    Commands run before the security level changes.
     /etc/rc.shutdown       Commands run at system shutdown.
     /etc/login.conf        Login class capability database.
     /etc/netstart          Command script for network startup.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *

In rc.conf or rc.conf.local it is sufficient to have a service startup by
using the empty quotes:

  sshd_flags=""     <- this tells sshd to start with no arguments
  sshd_flags=NO     <- sshd will not start automatically

You can specify startup parameters that would otherwise appear behind the
binary on the command line.  Example:

  named_flags="-t /var/named -u named"

But sometimes an additional line is necessary, to get the service to start
automatically when the system loads.

  named_enable=YES 

So, for bind to start on system startup it apparently requires both of the
following:

  named_flags="-t /var/named -u named"
  named_enable=YES

However, it is not cleary as to when both are required, and when only the
first is required.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *

10.3 - How do I start daemons with the system? (Overview of rc(8))

OpenBSD uses an rc(8) style startup. This uses a few key files for startup.

    * /etc/rc - Main script. Should not be edited.
    * /etc/rc.conf - Configuration file used by /etc/rc to know what daemons
    * should start with the system.
    * /etc/rc.conf.local - Configuration file you can use to override settings
    * in /etc/rc.conf so you don't have to touch /etc/rc.conf itself, which is
    * convenient when upgrading your system.
    * /etc/netstart - Script used to initialize the network. Shouldn't be
    * edited.
    * /etc/rc.local - Script used for local administration. This is where new
    * daemons or host specific information should be stored.
    * /etc/rc.securelevel - Script which runs commands that must be run before
    * the security level changes. See init(8)
    * /etc/rc.shutdown - Script run on shutdown. Put anything you want done
    * before shutdown in this file. See rc.shutdown(8) 

How does rc(8) work?

The main files a system administrator should concentrate on are /etc/rc.conf
(or
/etc/rc.conf.local), /etc/rc.local and /etc/rc.shutdown. To get a look of how
the rc(8) procedure works, here is the flow:

After the kernel is booted, /etc/rc is started:

    * Filesystems are checked.
    * Configuration variables are read in from /etc/rc.conf and, afterwards,
    * /etc/rc.conf.local. Settings in rc.conf.local will override those in
    * rc.conf.
    * Filesystems are mounted
    * Clears out /tmp and preserves any editor files
    * Configures the network via /etc/netstart
          o Configures your interfaces up.
          o Sets your hostname, domainname, etc. 
    * Starts system daemons
    * Performs various other checks (quotas, savecore, etc)
    * Local daemons are run, via /etc/rc.local 

Starting Daemons and Services that come with OpenBSD

Most daemons and services that come with OpenBSD by default can be started on
boot by simply editing the /etc/rc.conf configuration file. To start out take
a
look at the default /etc/rc.conf file. You'll see lines similar to this:

    ftpd_flags=NO           # for non-inetd use: ftpd_flags="-D"

A line like this shows that ftpd is not to start up with the system (at least
not via rc(8), read the Anonymous FTP FAQ to read more about this). In any
case,
each line has a comment showing you the flags for NORMAL usage of that daemon
or
service. This doesn't mean that you must run that daemon or service with those
flags. Read the relevant manual page to see how you can have that daemon or
service start up in any way you like. For example, here is the default line
pertaining to httpd(8).

    httpd_flags=NO          # for normal use: "" (or "-DSSL" after reading
ssl(8))

Here you can obviously see that starting up httpd normally no flags are
necessary. So a line like: " httpd_flags=""" would be necessary. But to start
httpd with ssl enabled. (Refer to the SSL FAQ or ssl(8)) You should start with
a
line like: "httpd_flags="-DSSL"".

A good approach is to never touch /etc/rc.conf itself. Instead, create the
file
/etc/rc.conf.local, copy just the lines you are about to change from
/etc/rc.conf and adjust them as you like. This makes future upgrades easier --
all the changes are in the one file.
Starting up local daemons and configuration

For other daemons which you might install on the system via packages or other
ways, you should use the /etc/rc.local file. For example, I've installed a
daemon which lies at /usr/local/sbin/daemonx. I want it to start at boot time.
I
would put an entry into /etc/rc.local like this:

    if [ -x /usr/local/sbin/daemonx ]; then
                 echo -n ' daemonx';       /usr/local/sbin/daemonx
    fi

(If the daemon does not automatically detach on startup, remember to add a "&"
at the end of the command line.)

From now on, this daemon will be started at boot. You will be able to see any
errors on boot, a normal boot with no errors would show a line like this:

    Starting local daemons: daemonx.

rc.shutdown

/etc/rc.shutdown is a script that is run at shutdown. Anything you want done
before the system shuts down should be added to this file. If you have apm,
you
can also set "powerdown=YES", which will give you the equivalent of "shutdown
-p".