Dr. Billy Harris
-- Linux booting -- init/services configuration
Copyright © 2002 Billy Harris ([email protected]) You are welcome to use and distribute this document so long as you retain this copyright message. Basic Input/Output System Basic Input/Output System • POST power-on self test
• Video BIOS VGA = 320x200, 256 colors
• Memory test
• Device initialization
• Basic disk drivers
• Setup
• Executes code from the MBR Master Boot Record Very first block of disk holds a boot loader.
The purpose of the boot loader is to load an operating system.
It has 512 bytes for code to do this. Master Boot Record Very first block of disk holds a boot loader.
The purpose of the boot loader is to load an operating system.
It has 512 bytes for code to do this. Minus whatever it uses to maintain the partition table.
Under Windoze systems, the MBR is very simple — it simply loads specified blocks from the disk and JMPs to begin executing. Grand Unified Boot Loader Grand Unified Boot Loader GRUB
• Mounts the boot partition [normally referenced as /boot]
• Configuration is stored as an ordinary text file on the disk.
• Despite its name, it is still x86 specific, and does not support any of the BSD distributions. Other Boot Loaders /boot/loader for BSD systems
LILO [older Linux boot loader] aboot, elilo, milo
All have one purpose: →→ ←← Load Linux Linux Kernel The kernel is the operating system
• Memory management
• Interprocess communication
• File I/O
• Various device drivers. Linux Kernel Linux uses a modular kernel, which means that device drivers can be added and removed without rebooting the system.
But what about device drivers that are needed to boot the system (SCS I ?)
-- Initial ramdisk [initrd] holds copies of these modules and is also loaded by the boot loader. Linux Booting • The kernel loads init
• init launches a whole bunch of programs including a variant of getty.
• getty runs login
• login su's to the user, and executes the user’s shell.
--slight variations if you use an Xwindows-based login. Files which Modify Boot Behavoir /nologin disables non-root logins.
/fastboot disabled fsck
/forcefsck requires fsck
/.autofsck requires fsck Configuring Init Old Days Shell scripts init would execute rc, then rc.local
Wanted a new web server? Edit rc.local.
Wanted a new ftp server? Edit rc.local.
Ranted to replace old web server with a new one?
Edit rc.local System V Conceptually much more complicated…
Each service provides a shell script which lives in the init.d directory, and can start, stop, or restart the service.
The system uses different run levels to determine which services to start and stop. Run Levels Run Level 0: System halt Run Level 1 [S]: Single User Run Level 3: Multi-user; text login Run Level 5: Multi-user; graphical login Run Level 6: System reboot
Also have two customized run levels, A and B, which start or stop services, but do not change the actual run level. Init Scripts # cd /etc/init.d # ls anacron gpm kdcrotate atd halt keytable autofs httpd killall netfs random sshd crond identd kudzu functions iptables lpd
# ./atd status atd (pid 883) is running...
# ./lpd stop Stopping lpd: [ OK ] Service # service httpd restart Stopping httpd: [ OK ] Starting httpd: [ OK ]
Can also use service --status-all service httpd --full-restart Services & Run Levels How does init know which services to start/stop?
• We still have rc.sysinit, rc, and rc.local.
• Better method: each run level has a directory.
Each directory has symbolic links to the init.d scripts
The name of the link determines whether the service should be started/stopped. Services & Run Levels # cd /etc/rc.d/rc3.d # ls K05saslauthd S13portmap S55sshd K65identd S17keytable S56rawdevices S05kudzu S20random S56xinetd S08iptables S25netfs S58ntpd S10network S26ups S60lpd S12syslog S28autofs S78mysqld
# ls -al S60lpd lrwxrwxrwx … S60lpd -> ../init.d/lpd Telinit Use telinit to change run levels
• Examine each K script. If the system is running, execute the script with “stop”
• Examine each S script. If the system is not running, execute the script with “start”
How does init know whether or not the system is running? Configuring Services The RPMS should install the scripts you need. After installing, a simple
# service