Next Up Previous Contents Index
The Boot Process, Init, and Shutdown

11.9 The Boot Process, Init, and Shutdown

This section contains information on what happens when a Red Hat Linux system is booted and shut down. Let's start with information on the files in /etc/sysconfig.

11.9.1 Sysconfig Information

The following information outlines the various files in /etc/sysconfig, their function, and their contents.

11.9.1.1 Files in /etc/sysconfig

The following files are normally found in /etc/sysconfig:

Let's take a look at each one.

/etc/sysconfig/clock
-- The /etc/sysconfig/clock file controls the interpretation of values read from the system clock. Earlier releases of Red Hat Linux used the following values (which is deprecated):

Currently, the correct values are:

/etc/sysconfig/keyboard
-- The /etc/sysconfig/keyboard files controls the behavior of the keyboard. The following values may be used:

/etc/sysconfig/mouse
-- The /etc/sysconfig/mouse file is used to specify information about the available mouse. The following values may be used:

In addition, /dev/mouse is a symlink that points to the actual mouse device.

/etc/sysconfig/network
-- The /etc/sysconfig/network file is used to specify information about the desired network configuration. The following values may be used:

/etc/sysconfig/pcmcia
-- The /etc/sysconfig/pcmcia file is used to specify PCMCIA configuration information. The following values may be used:

/etc/sysconfig/amd
-- The /etc/sysconfig/amd file is used to specify operational parameters for amd. The following values may be used:

/etc/sysconfig/tape
-- The /etc/sysconfig/tape file is used to specify tape-related configuration information. The following values may be used:

11.9.1.2 Files in /etc/sysconfig/network-scripts/

The following files are normally found in /etc/sysconfig/network-scripts:

Let's take a look at each one.

/etc/sysconfig/network-scripts/ifup, /etc/sysconfig/network-scripts/ifdown
-- Symlinks to /sbin/ifup and /sbin/ifdown, respectively. These are the only two scripts in this directory that should be called directly; these two scripts call all the other scripts as needed. These symlinks are here for legacy purposes only -- they will probably be removed in future versions, so only /sbin/ifup and /sbin/ifdown should currently be used.

These scripts take one argument normally: the name of the device (e.g. ``eth0''). They are called with a second argument of ``boot'' during the boot sequence so that devices that are not meant to be brought up on boot (ONBOOT=no, see below) can be ignored at that time.

/etc/sysconfig/network-scripts/network-functions
-- Not really a public file. Contains functions which the scripts use for bringing interfaces up and down. In particular, it contains most of the code for handling alternative interface configurations and interface change notification through netreport.

/etc/sysconfig/network-scripts/ifcfg-<interface-name>,
/etc/sysconfig/network-scripts/ifcfg-<interface-name>-<clone-name>
-- The first
file defines an interface, while the second file contains only the parts of the definition that are different in a "clone" (or alternative) interface. For example, the network numbers might be different, but everything else might be the same, so only the network numbers would be in the clone file, while all the device information would be in the base ifcfg file.

The items that can be defined in an ifcfg file depend on the interface type.

The following values are common to all base files:

The following values are common to all PPP and SLIP files:

The following values are common to all PPP files:

/etc/sysconfig/network-scripts/chat-<interface-name>
-- This file is a chat script for PPP or SLIP connections, and is intended to establish the connection. For SLIP devices, a DIP script is written from the chat script; for PPP devices, the chat script is used directly.

/etc/sysconfig/network-scripts/dip-<interface-name>
-- This write-only script is created from the chat script by netcfg. Do not modify this file. In the future, this file may disappear and instead will be created on-the-fly from the chat script.

/etc/sysconfig/network-scripts/ifup-post
-- This file is called when any network device (except a SLIP device) comes up. Calls /etc/sysconfig/network-scripts/ifup-routes to bring up static routes that depend on that device. Brings up aliases for that device. Sets the hostname if it is not already set and a hostname can be found for the IP for that device. Sends SIGIO to any programs that have requested notification of network events.

Could be extended to fix up nameservice configuration, call arbitrary scripts, etc, as needed.

/etc/sysconfig/network-scripts/ifdhcpc-done
-- This file is called by dhcpcd once dhcp configuration is complete; sets up /etc/resolv.conf from the version dhcpcd dropped in /etc/dhcpc/resolv.conf.

11.9.2 System V Init

This section is a brief description of the internals of the boot process. It basically covers in detail how the machine boots using SysV init, as well as the differences between the init used in older Linux releases, and SysV init.

Init is the program that gets run by the kernel at boot time. It is in charge of starting all the normal processes that need to run at boot time. These include the gettys that allow you to log in, NFS daemons, FTP daemons, and anything else you want to run when your machine boots.

SysV init is fast becoming the standard in the Linux world to control the startup of software at boot time. This is because it is easier to use and more powerful and flexible than the traditional BSD init.

SysV init also differs from BSD init in that the config files are in a subdirectory of /etc instead of residing directly in /etc. This directory is called rc.d. In there you will find rc.sysinit and the following directories:

init.d
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d

init.d contains a bunch of scripts. Basically, you need one script for each service you may need to start at boot time or when entering another runlevel. Services include things like networking, nfs, sendmail, httpd, etc. Services do not include things like setserial that must only be run once and then exited. Things like that should go in rc.local or rc.serial.

If you want rc.local, it should be in /etc/rc.d. Most systems include one even though it doesn't do much. You can also include an rc.serial in /etc/rc.d if you need to do serial port specific things at boot time.

The chain of events is as follows:

The default runlevel is decided in /etc/inittab. You should have a line close to the top like:

id:3:initdefault:

From this, you'd look in the second column and see that the default runlevel is 3, as should be the case for most systems. If you want to change it, you can edit /etc/inittab by hand and change the 3. Be very careful when you are messing with the inittab. If you do mess up, you can fix it by rebooting and doing:

LILO boot:  linux single

This should allow you to boot into single user mode so you can fix inittab.

Now, how does it run all the right scripts? If you enter ls -l on rc3.d, you might see something like:

lrwxrwxrwx 1 root root 17 3:11 S10network -> ../init.d/network
lrwxrwxrwx 1 root root 16 3:11 S30syslog -> ../init.d/syslog
lrwxrwxrwx 1 root root 14 3:32 S40cron -> ../init.d/cron
lrwxrwxrwx 1 root root 14 3:11 S50inet -> ../init.d/inet
lrwxrwxrwx 1 root root 13 3:11 S60nfs -> ../init.d/nfs
lrwxrwxrwx 1 root root 15 3:11 S70nfsfs -> ../init.d/nfsfs
lrwxrwxrwx 1 root root 18 3:11 S90lpd -> ../init.d/lpd.init
lrwxrwxrwx 1 root root 11 3:11 S99local -> ../rc.local

What you'll notice is that there are no real ``files'' in the directory. Everything there is a link to one of the scripts in the init.d directory. The links also have an ``S'' and a number at the beginning. The ``S'' means to start this particular script and a ``K'' would mean to stop it. The number is there just for ordering purposes. Init will start all the services based on the order they appear. You can duplicate numbers, but it will only confuse you somewhat. You just need to use a two digit number only, along with an upper case ``S'' or ``K'' to start or stop the services you need to.

How does init start and stop services? Simple. Each of the scripts is written to accept an argument which can be ``start'' and ``stop''. You can execute those scripts by hand in fact with a command like:

/etc/rc.d/init.d/httpd.init stop

to stop the httpd server. Init just reads the name and if it has a ``K'', it calls the script with the ``stop'' argument. If it has an ``S'' it calls the script with a ``start'' argument. Why all these runlevels? Some people want an easy way to set up machines to be multi-purpose. I could have a ``server'' runlevel that just runs httpd, sendmail, networking, etc. Then I could have a ``user'' runlevel that runs xdm, networking, etc.

11.9.3 Init Runlevels

Generally, Red Hat Linux runs in run level 3---full multiuser mode. The following runlevels are used in Red Hat Linux:

0
Halt.
1
Single user mode.
2
Multiuser mode, without NFS.
3
Full multiuser mode.
6
Reboot.

If your machine gets into a state where it will not boot due to a bad /etc/inittab, or will not let you log in because you have a corrupted /etc/passwd or have simply forgotten your password, boot into single user mode by typing linux 1 at the LILO boot prompt. A very bare system will come up and you will be given a shell from which you can fix things.

11.9.4 Initscript Utilities

The chkconfig utility provides a simple command-line tool for maintaining the /etc/rc.d directory hierarchy. It relieves system administrators from having to directly manipulate the numerous symlinks in /etc/rc.d.

In addition, there is the ntsysv utility, that provides a screen-oriented interface, versus
chkconfig's command-line interface.

Please see the chkconfig and ntsysv man pages for more information.

11.9.5 Running Programs at Boot Time

The file /etc/rc.d/rc.local is executed at boot time, after all other initialization is complete, and whenever you change runlevels. You can add additional initialization commands here. For instance, you may want to start up additional daemons, or initialize a printer. In addition, if you require serial port setup, you can edit /etc/rc.d/rc.serial, and it will be executed automatically at boot time.

The default /etc/rc.d/rc.local simply creates a nice login banner with your kernel version and machine type.

11.9.6 Shutting Down

To shut down Red Hat Linux, issue the shutdown command. You can read the shutdown man page for complete details, but the two most common usages are:

shutdown -h now
shutdown -r now

Each will cleanly shutdown the system. After shutting everything down, the first will halt the machine, and the second will reboot.

Although the reboot and halt commands are now ``smart'' enough to invoke shutdown if run while the system is in runlevels 1-5, it is a bad habit to get into, as not all Linux-like operating systems have this feature.


Next Up Previous Contents Index