The Linux Boot Process
Total Page:16
File Type:pdf, Size:1020Kb
The Linux Boot Process 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 (SCSI ?) -- 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 <name> start should work. Similarly, you can stop a service and use rpm -e to remove it from your system. Chkconfing Chkconfig will add/remove the symbolic links for you. # chkconfig --level 345 ntpd on # chkconfig --list ntpd ntpd 0:off 1:off 2:off 3:on 4:on 5:on 6:off Can also use --del to remove the links entirely [but the script is still in init.d] or --add to add a new service. How does chkconfig know what number to use for the S and K links? Chkconfing Chkconfig will add/remove the symbolic links for you. # chkconfig --level 345 ntpd on # chkconfig --list ntpd ntpd 0:off 1:off 2:off 3:on 4:on 5:on 6:off Can also use --del to remove the links entirely [but the script is still in init.d] or --add to add a new service. How does chkconfig know what number to use for the S and K links? Chkconfing [init.d]# more sshd #!/bin/bash # # Init file for OpenSSH server daemon # # chkconfig: 2345 55 25 # description: OpenSSH server daemon Redhat Service Confifuration ntsysv menu-based text program redhat-configure-services GNOME based program. Both give a list of possible services; you can check/uncheck to enable/disable. Inittab # # inittab This file describes # the system in a id:5:initdefault: # Trap CTRL-ALT-DELETE ca::ctrlaltdel:/sbin/shutdown -t3 -r now l2:2:wait:/etc/rc.d/rc 2 1:2345:respawn:/sbin/mingetty tty1 x:5:respawn:/etc/X11/prefdm -nodaemon.