Linux: Init Process and PC Boot Procedure



[pic]

Linux Init Process / PC Boot Procedure

[pic]

| |PC Boot and Linux Init Process: |

| | |

| |BIOS: The Basic Input/Output System is the lowest level interface between the computer and peripherals. |

| |The BIOS performs integrity checks on memory and seeks instructions on the Master Boor Record (MBR) on the floppy drive or hard drive. |

| |The MBR points to the boot loader (GRUB or LILO: Linux boot loader). |

| |Boot loader (GRUB or LILO) will then ask for the OS label which will identify which kernel to run and where it is located (hard drive and partition specified). |

| |The installation process requires to creation/identification of partitions and where to install the OS. GRUB/LILO are also configured during this process. The |

| |boot loader then loads the Linux operating system. |

| |The first thing the kernel does is to execute init program. Init is the root/parent of all processes executing on Linux. |

| |The first processes that init starts is a script /etc/rc.d/rc.sysinit |

| |Based on the appropriate run-level, scripts are executed to start various processes to run the system and make it functional. |

| |The Linux Init Processes: |

| | |

| |The init process is the last step in the boot procedure and identified by process id "1". Init is responsible for starting system processes as defined in the |

| |/etc/inittab file. Init typically will start multiple instances of "getty" which waits for console logins which spawn one's user shell process. Upon shutdown, |

| |init controls the sequence and processes for shutdown. The init process is never shut down. It is a user process and not a kernel system process although it does|

| |run as root. |

| |System Processes: |

| |Process ID |

| |Description |

| | |

| |0 |

| |The Scheduler |

| | |

| |1 |

| |The init process |

| | |

| |2 |

| |kflushd |

| | |

| |3 |

| |kupdate |

| | |

| |4 |

| |kpiod |

| | |

| |5 |

| |kswapd |

| | |

| |6 |

| |mdrecoveryd |

| | |

| |Init config file (Red Hat 7.3-9.0, Fedora Core 1-3): /etc/inittab |

| |# Author: Miquel van Smoorenburg, |

| |# Modified for RHS Linux by Marc Ewing and Donnie Barnes |

| | |

| |id:3:initdefault: |

| | |

| |# System initialization. |

| |si::sysinit:/etc/rc.d/rc.sysinit |

| | |

| |l0:0:wait:/etc/rc.d/rc 0 |

| |l1:1:wait:/etc/rc.d/rc 1 |

| |l2:2:wait:/etc/rc.d/rc 2 |

| |l3:3:wait:/etc/rc.d/rc 3 |

| |l4:4:wait:/etc/rc.d/rc 4 |

| |l5:5:wait:/etc/rc.d/rc 5 |

| |l6:6:wait:/etc/rc.d/rc 6 |

| | |

| |# Things to run in every runlevel. This line is only in Red Hat 7.X Used to flush disk buffers. |

| |ud::once:/sbin/update |

| | |

| |# Trap CTRL-ALT-DELETE |

| |ca::ctrlaltdel:/sbin/shutdown -t3 -r now |

| | |

| |# When our UPS tells us power has failed, schedule a shutdown for 2 minutes from now. |

| |pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down" |

| | |

| |# If power was restored before the shutdown kicked in, cancel it. |

| |pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled" |

| | |

| |# Run gettys in standard runlevels |

| |1:2345:respawn:/sbin/mingetty tty1 |

| |2:2345:respawn:/sbin/mingetty tty2 |

| |3:2345:respawn:/sbin/mingetty tty3 |

| |4:2345:respawn:/sbin/mingetty tty4 |

| |5:2345:respawn:/sbin/mingetty tty5 |

| |6:2345:respawn:/sbin/mingetty tty6 |

| | |

| |# Run xdm in runlevel 5 |

| |x:5:respawn:/etc/X11/prefdm -nodaemon |

| | |

| |Note that this config file directs the init process to run the shell script /etc/rc.d/rc.sysinit. This script should be used as is and NOT changed. Extend |

| |rc.local and NOT this script. This will (not in exact order): |

| |Run /sbin/initlog |

| |Run devfs to generate/manage system devices |

| |Run network scripts: /etc/sysconfig/network |

| |Start graphical boot (If so configured): rhgb |

| |Start console terminals, load keymap, system fonts and print console greeting: mingetty, setsysfonts |

| |The various virtual console sessions can be viewed with the key-stroke: ctrl-alt-F1 through F6. F7 is reserved for the GUI screen invoked in run level 5. |

| |Mount /proc and start device controllers. |

| |Done with boot configuration for root drive. (initrd) Unmount root drive. |

| |Re-mount root file system as read/write |

| |Direct kernel to load kernel parameters and modules: sysctl, depmod, modprobe |

| |Set up clock: /etc/sysconfig/clock |

| |Perform disk operations based on fsck configuration |

| |Check/mount/check/enable quotas non-root file systems: fsck, mount, quotacheck, quotaon |

| |Initialize logical volume management: vgscan, /etc/lvmtab |

| |Activate syslog, write to log files: dmesg |

| |Configure sound: sndconfig |

| |Activate PAM |

| |Activate swapping: swapon |

| |Local system boot processes can be placed in file: /etc/rc.d/rc.local |

| |The system will then boot to the runlevel set by the directive initdefault. |

| |Also see: |

| |init man page |

| |inittab man page |

| |[pic] |

| |Linux init Run Levels: |

| | |

| |LINUX has six states of operation of which "0" is the shutdown state and "3" and above are fully operational with all essential processes running for user |

| |interaction. Upon system boot the LINUX system /sbin/init program starts other processes by performing the following: |

| |Init will bring up the machine by starting processes as defined in the /etc/inittab file. |

| |The computer will be booted to the runlevel as defined by the initdefault directive in the /etc/inittab file. |

| | |

| |id:5:initdefault: |

| | |

| | |

| |In this example a runlevel of "5" is chosen. Runlevel "5" will boot the system into GUI mode using XDM and X-Windows. Booting to runlevel "3" (often called |

| |console mode) is often used by servers which do not need a graphical user interface. If booted to init level "3" one can promote the run level with the command |

| |[root prompt]# init 5. See the more detailed explanation of run levels below. |

| |The inittab file will allow you to capture key sequences (ctrl-alt-del), start dial in internet connections etc. |

| |One of these process started by init is /sbin/rc. This script runs a series of scripts in the directories /etc/rc.d/rc0.d/, /etc/rc.d/rc1.d/, /etc/rc.d/rc2.d/, |

| |etc |

| |Scripts in these directories are executed for each boot state of operation until it becomes fully operational. Scripts beginning with S denote startup scripts |

| |while scripts beginning with K denote shutdown (kill) scripts. Numbers follow these letters to denote the order of execution. (lowest to highest) |

| |[pic] |

| |Runlevel "3" will boot to text or console mode and "5" will boot to the graphical login mode ( "4" for slackware) |

| |Runlevel |

| |Scripts Directory |

| |(Red Hat/Fedora Core) |

| |State |

| | |

| |0 |

| |/etc/rc.d/rc0.d/ |

| |shutdown/halt system |

| | |

| |1 |

| |/etc/rc.d/rc1.d/ |

| |Single user mode |

| | |

| |2 |

| |/etc/rc.d/rc2.d/ |

| |Multiuser with no network services exported |

| | |

| |3 |

| |/etc/rc.d/rc3.d/ |

| |Default text/console only start. Full multiuser |

| | |

| |4 |

| |/etc/rc.d/rc4.d/ |

| |Reserved for local use. Also X-windows (Slackware/BSD) |

| | |

| |5 |

| |/etc/rc.d/rc5.d/ |

| |XDM X-windows GUI mode (Redhat/System V) |

| | |

| |6 |

| |/etc/rc.d/rc6.d/ |

| |Reboot |

| | |

| |s or S |

| | |

| |Single user/Maintenance mode (Slackware) |

| | |

| |M |

| | |

| |Multiuser mode (Slackware) |

| | |

| |One may switch init levels by issuing the init command with the appropriate runlevel. Use the command "init #" where # is one of s,S,0,1,3,5,6. The command |

| |telinit does the same. |

| |The scripts for a given run level are run during boot and shutdown. The scripts are found in the directory /etc/rc.d/rc#.d/ where the symbol # represents the run|

| |level. i.e. the run level "3" will run all the scripts in the directory /etc/rc.d/rc3.d/ which start with the letter "S" during system boot. This starts the |

| |background processes required by the system. During shutdown all scripts in the directory which begin with the letter "K" will be executed. This system provides |

| |an orderly way to bring the system to different states for production and maintenance modes. |

| |If you installed all demons (background processes), Linux will run them all. To avoid slowing down your machine, remove uneeded services from the start-up |

| |procedure. You can start/stop individual demons by changing to the directory: |

| |/etc/rc.d/init.d/ (Red Hat/Fedora ) |

| |/etc/init.d/ (S.u.s.e.) |

| |/etc/init.d/ (Debian) |

| |and issuing the command and either the start, stop, status, restart or reload option i.e. to stop the web server: |

| |cd /etc/rc.d/init.d/ |

| |(or /etc/init.d/ for S.u.s.e. and Debian) |

| |httpd stop |

| |Use the command ps -aux to view all process on your machine. |

| |TIP: List state and run level of all services which can be started by init: chkconfig --list |

| |or |

| |service --status-all | grep running (Red Hat/Fedora Core based systems) |

| |GUI tool: /usr/X11R6/bin/tksysv |

| |[pic] |

| |Run Level Commands: |

| | |

| |Shutdown: |

| |init 0 |

| |shutdown -h now |

| |-a: Use file /etc/shutdown.allow |

| |-c: Cancel scheduled shutdown. |

| |halt -p |

| |-p: Turn power off after shutdown. |

| |poweroff |

| |Reboot: |

| |init 6 |

| |shutdown -r now |

| |reboot |

| |Enter single user mode: |

| |init 1 |

| |Init Script Activation: |

| | |

| |Adding a script to the /etc/rc.d/rc#.d/ directory with either an S or K prefix, adds the script to the boot or shutdown process. The scripts are run in numerical|

| |order. S20abc is run before S30xyz. The extensibility to the boot and shutdown procedures of the operating system is one of the strengths of UNIX. The orderly |

| |sequential initiation of processes can be coordinated for dependent processes. The orderly shutdown of processes is often required of complex programs such as |

| |databases. This is how it is done. Individual processes may be monitored, shutdown and started at any time using these scripts. i.e. /etc/rc.d/rc2.d/httpd start.|

| |The modifiers start, stop or status may be used. |

| |The start/stop/status scripts actually reside in the directory: |

| |/etc/rc.d/init.d/ (Red Hat/Fedora) |

| |/etc/init.d/ (S.u.s.e. and Debian) |

| |and are linked to the appropriate directories. These links may be created or destroyed using the chkconfig command. i.e. chkconfig --del httpd will remove the |

| |web server from the startup and shutdown process. Inversely chkconfig --add httpd will add it to the startup/shutdown process by generating links from the script|

| |in /etc/rc.d/init.d/ to the appropriate /etc/rc.d/rc#.d/ directory. For more information see the LINUX manual page on init. |

| |Basic services include: |

| |System Service |

| |Description |

| | |

| |anacron |

| |Run jobs which were scheduled for execution while computer was turned off. Catch up with system duties. |

| | |

| |arpwatch |

| |Keeps track of IP address to MAC address pairings |

| | |

| |Atd |

| |Run scheduled batch jobs. |

| | |

| |Autofs |

| |automounts file systems on demand. |

| | |

| |Crond |

| |Job sheduler for periodic tasks. |

| | |

| |Gpm |

| |Allows console terminal cut and paste. (Non X-window consoles) |

| | |

| |https |

| |Apache web server. |

| | |

| |iptables |

| |Firewall rules interface to kernel. |

| | |

| |keytable |

| |Loads selected keyboard map as set in /etc/sysconfig/keyboard |

| | |

| |kudzu |

| |New harware probe/detection during system boot. |

| | |

| |lpd |

| |Network printer services. |

| | |

| |microcode_ctl |

| |Uploads microcode to kernel and ultimately to the Intle Pentium processor. (Hardware specific.) |

| | |

| |mysqld |

| |Database services |

| | |

| |named |

| |DNS name services (Bind) |

| | |

| |network |

| |Active network services during system boot. |

| | |

| |nfs |

| |Network file system. Unix file sharing services. |

| | |

| |nscd |

| |Password and group lookup services for use with network authentication (NIS, LDAP,...). |

| | |

| |ntpd |

| |Network Time Protocol time synchronization services. |

| | |

| |random |

| |Random number generation tool used for encryprion. |

| | |

| |rawdevices |

| |Enables raw IO. Useful for Oracle and software which utilizes this for high speed disk access. |

| | |

| |smb |

| |SAMBA: MS/Windows PC file sharing services |

| | |

| |syslog |

| |System log file facility. |

| | |

| |ypbind |

| |NIS file sharing/authentication infrastructure service. |

| | |

| |yppasswd |

| |NIS file sharing/authentication infrastructure service. |

| | |

| |ypserv |

| |NIS file sharing/authentication infrastructure service. |

| | |

| |xfs |

| |X-Windows font server. |

| | |

| |Recommended basic services: anacron, ard, autofs, crond, gpm, iptables, keytable, kudzu, microcode_ctl (Intel32 hardware only), network, random. syslog |

| |Graphics Workstation - add: xfs |

| |File Server for PC clients - add: smb |

| |Print Server - add: lpd or cups |

| |File server Linux/Unix clients - add: nfs, netfs, nfslock, portmap, ypbind, yppasswd, ypserv |

| |Web Server - add: httpd, tux, xinetdi, sshd |

| |[pic] |

| |GUI configuration tools: |

| |GUI tools can help you configure the appropriate services to start and provide a description of each service available: |

| |Red Hat 8.0/9.0: /usr/bin/redhat-config-services |

| |Fedora/RHEL: /usr/bin/system-config-services |

| |Ubuntu 6 / Debian: |

| |/usr/bin/services-admin |

| |bum (Boot Up Manager) |

| |Red Hat / Fedora Core GUI: system-config-services (and redhat-config-services) |

| |[pic] |

| |Red Hat/Fedora Core text console services selection tool: /usr/sbin/ntsysv |

| |[pic] |

| |Init Script: |

| | |

| |A single copy of the script is located in the directory: /etc/rc.d/init.d/script-name (Red Hat/Fedora) or /etc/init.d/script-name (Debian). |

| |Use the command chkconfig to generate soft links to the appropriate directories for the various run levels. |

| |#!/bin/sh |

| |# |

| |# Startup script for program |

| |# |

| |# chkconfig: 345 85 15 - This statement tells the chkconfig command how to add or delete this process to the boot process |

| |# description: Description of program |

| |# processname: process-name |

| |# pidfile: /var/run/process-name.pid |

| | |

| |# Source function library. This creates the operating environment for the process to be started |

| |. /etc/rc.d/init.d/functions |

| | |

| |case "$1" in |

| |start) |

| |echo -n "Starting process-name: " |

| |daemon process-name - Starts only one process of a given name. |

| |echo |

| |touch /var/lock/subsys/process-name |

| |;; |

| |stop) |

| |echo -n "Shutting down process-name: " |

| |killproc process-name |

| |echo |

| |rm -f /var/lock/subsys/process-name |

| |rm -f /var/run/process-name.pid - Only if process generates this file |

| |;; |

| |status) |

| |status process-name |

| |;; |

| |restart) |

| |$0 stop |

| |$0 start |

| |;; |

| |reload) |

| |echo -n "Reloading process-name: " |

| |killproc process-name -HUP |

| |echo |

| |;; |

| |*) |

| |echo "Usage: $0 {start|stop|restart|reload|status}" |

| |exit 1 |

| |esac |

| | |

| |exit 0 |

| | |

| | |

| |The bash script functions daemon, killproc and status can all be found in the script /etc/rc.d/init.d/functions. (Red Hat/Fedora distributions) |

| |[pic] |

| |The script must be executable to work. (chmod +x script-name). |

| |The script may be used to start and stop processes. i.e.: |

| |/etc/rc.d/init.d/httpd restart |

| |(S.u.s.e.: /etc/init.d/apache2 restart) |

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

| |/etc/rc.d/init.d/httpd start |

| |OR use the Red Hat/Fedora core based service command: |

| |service httpd restart |

| |service httpd stop |

| |service httpd start |

| |Note that two lines in the script enable the chkconfig command to control the script for the boot and shutdown process. |

| |# chkconfig: 345 85 15 |

| |# description: Description of program |

| |When added to the boot process using the "chkconfig --add script-name" command the start order/priority will be set to 80 while the stop/shutdown order will be |

| |set to 15. The process will be added to runlevels 3, 4 and 5. This is enabled by generating links from the location of the script (/etc/rc.d/init.d/) to the |

| |directory for the appropriate run level: /etc/rc.d/rc#.d/. The file name in the run level directory will reflect if it is used for boot (starts with an "S") or |

| |shutdown (starts with a "K") |

| |chkconfig: |

| | |

| |The (Red Hat/Fedora/IRIX) chkconfig command generates and breaks links between the directory /etc/rc.d/init.d/ and the appropriate run level directory: |

| |/etc/rc.d/rc[0-6].d/ to control boot process initiation and process shutdown. |

| |chkconfig [--level ] on | off | reset > |

| |chkconfig --list |

| |chkconfig --list |

| |chkconfig --add |

| | |

| |chkconfig --del |

| |chkconfig --level 0123456 off |

| |Examples: |

| |chkconfig --level 345 httpd on - forces apache to be invoked for run levels 3, 4 and 5. |

| |chkconfig --add httpd - Start the web server daemon upon system boot. |

| |chkconfig --del sendmail - Do not start the sendmail daemon upon system boot. |

| |chkconfig --list - List all services and init levels. |

| |chkconfig --list | grep on - List all services to be started upon system boot. |

| |Using chkconfig to administer xinetd processes. |

| |chkconfig wu-ftpd on - Turn on FTP service managed by xinetd. |

| |chkconfig ipop3 off - Turn off POP3 service managed by xinetd. |

| |This will reconfigure the appropriate xinetd file (in directory /etc/xinetd.d/) and restart the xinetdprocess. |

| | |

| | |

| | |

| | |

| | |

| |service |

| |Display status of system services. |

| |Example: service --status-all |

| |Help: service --help |

| | |

| | |

................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download