Contributed by Tom Rhodes.
Many users choose to install third party software on FreeBSD from the Ports
Collection. In many of these situations it may be necessary to configure the software in
a manner which will allow it to be started upon system initialization. Services, such as
mail/postfix or www/apache13 are just two of the many software packages which
may be started during system initialization. This section explains the procedures
available for starting third party software.
In FreeBSD, most included services, such as cron(8), are started
through the system start up scripts. These scripts may differ depending on FreeBSD or
vendor version; however, the most important aspect to consider is that their start up
configuration can be handled through simple startup scripts.
Before the advent of rc.d, applications would drop a simple
start up script into the /usr/local/etc/rc.d directory which
would be read by the system initialization scripts. These scripts would then be executed
during the latter stages of system start up.
While many individuals have spent hours trying to merge the old configuration style
into the new system, the fact remains that some third party utilities still require a
script simply dropped into the aforementioned directory. The subtle differences in the
scripts depend whether or not rc.d is being used. Prior to
FreeBSD 5.1 the old configuration style is used and in almost all cases a new style
script would do just fine.
While every script must meet some minimal requirements, most of the time these
requirements are FreeBSD version agnostic. Each script must be executable by the system;
this is typically achieved by using the chmod command and
setting the unique permissions of 555. There should also be, at
minimal, options to start and stop the
application.
The simplest start up script would probably look a little bit like this one:
#!/bin/sh
echo -n ' utility'
case "$1" in
start)
/usr/local/bin/utility
;;
stop)
kill -9 `cat /var/run/utility.pid`
;;
*)
echo "Usage: `basename $0` {start|stop}" >&2
exit 64
;;
esac
exit 0
This script provides for a stop and start option for the application hereto referred simply as utility.
Could be started manually with:
# /usr/local/etc/rc.d/utility start
While not all third party software requires the line in rc.conf, almost every day a new port will be modified to accept
this configuration. Check the final output of the installation for more information on a
specific application. Some third party software will provide start up scripts which
permit the application to be used with rc.d; although, this
will be discussed in the next section.
Now that FreeBSD includes rc.d, configuration of application
startup has become easier, and more featureful. Using the key words discussed in the rc.d section, applications may now be set to start after
certain other services for example DNS; may permit
extra flags to be passed through rc.conf in place of hard coded
flags in the start up script, etc. A basic script may look similar to the following:
#!/bin/sh
#
# PROVIDE: utility
# REQUIRE: DAEMON
# KEYWORD: shutdown
#
# DO NOT CHANGE THESE DEFAULT VALUES HERE
# SET THEM IN THE /etc/rc.conf FILE
#
utility_enable=${utility_enable-"NO"}
utility_flags=${utility_flags-""}
utility_pidfile=${utility_pidfile-"/var/run/utility.pid"}
. /etc/rc.subr
name="utility"
rcvar=`set_rcvar`
command="/usr/local/sbin/utility"
load_rc_config $name
pidfile="${utility_pidfile}"
start_cmd="echo \"Starting ${name}.\"; /usr/bin/nice -5 ${command} ${utility_flags} ${command_args}"
run_rc_command "$1"
This script will ensure that the provided utility will be
started after the daemon service. It also provides a method for
setting and tracking the PID, or process ID file.
This application could then have the following line placed in /etc/rc.conf:
utility_enable="YES"
This method also allows for easier manipulation of the command line arguments,
inclusion of the default functions provided in /etc/rc.subr,
compatibility with the rcorder(8) utility and
provides for easier configuration via the rc.conf file.
Other services, such as POP3 server daemons,
IMAP, etc. could be started using the inetd(8). This
involves installing the service utility from the Ports Collection with a configuration
line appended to the /etc/inetd.conf file, or uncommenting one
of the current configuration lines. Working with inetd and its
configuration is described in depth in the inetd
section.
In some cases, it may be more plausible to use the cron(8) daemon to
start system services. This approach has a number of advantages because cron runs these processes as the crontab's
file owner. This allows regular users to start and maintain some applications.
The cron utility provides a unique feature, @reboot, which may be used in place of the time specification. This
will cause the job to be run when cron(8) is started,
normally during system initialization.