Đặng Thanh Bình
Service and Boot Loader Management
Contents
• Boot sequence • Runlevels • Bootloader configuration • What is the “init system”? • System V • Upstart • systemd
BOOT SEQUENCE
Boot phases
• BIOS performs integrity checks on memory and seeks instructions on the Master Boor Record (MBR).
• The MBR points to the boot loader (GRUB or LILO). • Boot loader
– asks for the OS label which will identify which
kernel to run and where it is located (hard drive and partition specified).
– loads the Linux operating system.
• The kernel executes init program
(SysV/Upstart/Systemd)
Boot phases
• SysV
/etc/rc.d/rc.sysinit
– The first processes that init starts is a script
• Upstart: Some core boot tasks started by upstart are
– Based on the appropriate run-level, scripts are executed to start various processes to run the system and make it functional.
– Plymouth - The graphical boot animation and logger
– mountall - Mounts all filesystems defined on /etc/fstab
– network* - Network related services
– Display Manager (GDM,KDM,XDM,...)
RUNLEVEL
Runlevel Concept
• A runlevel is a state, or mode, that is defined by the
services listed in the directory /etc/rc.d/rc
• Used by SysV init system and backward compatible
by Upstart and SystemD
7
Runlevel Types
• Red Hat family 0 — Halt 1 — Single-user mode 2 — Not used (user-definable) 3 — Full multi-user mode 4 — Not used (user-definable) 5 — Full multi-user mode (with X-based login screen) 6 — Reboot
8
Runlevel Types
• Debian family (Ubuntu/Mint/...) 0 – shuts the system down. 1 – single user-mode. 2 – full multi-user mode with GUI and networking. 3-5 – The same as 2. 6 – reboots the system
9
Default Runlevel
• CentOS ● Default runlevel can be changed by modifying the /etc/inittab file, as following: id:5:initdefault:
• Ubuntu ● Edit /etc/init/rc-sysinit.conf and change:
• env DEFAULT_RUNLEVEL=2
● To:
• env DEFAULT_RUNLEVEL=N ● Where N is the desired runlevel.
10
Default Runlevel
• The runlevel can be set using kernel parameters. Edit /etc/default/grub, and change:
GRUB_CMDLINE_LINUX="
• to
GRUB_CMDLINE_LINUX="N" • where N is the runlevel you want. • Then run: sudo updategrub • You can also force a one-time boot to a different runlevel by editing the command line from the GRUB menu at boot.
11
Init a Runlevel
• You can init a runlevel by:
– init 5
– teleint 5
12
BOOT LOADER INTRODUCTION
What is a boot loader?
• Upon starting, BIOS reads the first 512 bytes of the bootable media (master boot record, or MBR). • You can store the boot record of only one OS in a
single MBR
• Hence the need for more flexible boot loaders to
support multiple operating systems
• The master boot record holds two things – Some of or all of the boot loader program
– The partition table
• Using the data stored in the MBR, the BIOS
activates the boot loader.
14
Boot Loaders Loading Stages
• First stage
– The BIOS loads a part of the boot loader known as the initial program loader, or IPL – The IPL interrogates the partition table and subsequently is able to load data wherever it may exist on the various media
– This action is used initially to locate the second stage boot loader, which holds the remainder of the loader.
15
Boot Loaders Loading Stages
• First stage
– The BIOS loads a part of the boot loader known as the initial program loader, or IPL – The IPL interrogates the partition table and subsequently is able to load data wherever it may exist on the various media
– This action is used initially to locate the second stage boot loader, which holds the remainder of the loader.
16
Boot Loaders In Action
• Boot loaders are usually configured in one of two
ways – As a primary boot loader – As a secondary boot loader.
• Primary boot loaders are where the first stage of
the boot loader is installed on the MBR
• Secondary boot loaders are where the first stage of the boot loader is installed onto a bootable partition. – A separate boot loader must then be installed into the MBR and configured to pass control to the secondary boot loader.
17
GNU GRUB
Introduction
• The GRand Unified Boot loader (GRUB) is a
choice of nowadays instead of LILO
• GNU GRUB is actively developed by the Free
Software Foundation – Based on the original GRUB program, which was
originally created by Erich Stefan Boleyn
19
Introduction
Original author(s) Erich Boleyn
Developer(s)
GNU Project
Initial release
1995; 20 years ago
Stable release
2.00 (GRUB 2) / June 27, 2012; 3 years ago
Preview release 2.02~beta2 (GRUB 2)/ December 24, 2013; 21 months ago
Development status Active
Written in Assembly, C
Operating system
Linux, OS X, BSD, Solaris (x86 port) and Windows (through chainloading)
Platform IA-32, x86-64, IA-64, ARM, PowerPC, MIPS and SPARC
Available in English and others
Bootloader Type
GNU GPL version 3 License
20 Website www.gnu.org/software/grub/
CONFIGURE GRUB 1
Changing boot menu
● You should edit /boot/grub/grub.conf file
● How about /boot/grub/menu.lst file? It's a
symlink to the grub.conf file.
● These files are initially created by anaconda
during the install. This is logged in /var/log/anaconda.program.log.
● We can see that this anaconda execution
uses grub.conf, not menu.lst
22
/var/log/anaconda.program.log
13:00:23,089 INFO : Running... ['/sbin/grubinstall', 'justcopy']
13:00:23,134 INFO : Running... ['/sbin/grub', 'batch', 'no floppy', 'devicemap=/boot/grub/device.map']
13:00:23,346 INFO :
13:00:23,347 INFO :
13:00:23,347 INFO : GNU GRUB version 0.97 (640K lower / 3072K upper memory)
13:00:23,347 INFO :
13:00:23,348 INFO : [ Minimal BASHlike line editing is supported. For the first word, TAB
13:00:23,348 INFO : lists possible command completions. Anywhere else TAB lists the possible
13:00:23,348 INFO : completions of a device/filename.]
13:00:23,348 INFO : grub> root (hd0,0)
13:00:23,348 INFO : Filesystem type is ext2fs, partition type 0x83
13:00:23,348 INFO : grub> install stage2=/boot/grub/stage2 /boot/grub/stage1 d (hd0) /boot/grub/stage2 p (hd0,0)/boot/grub/grub.conf
13:00:23,348 INFO : grub>
23
Configure GRUB - /boot/grub/grub.conf
24
Options
● default= option signals to GRUB which image to boot from by default after the timeout period.
● This relates to one of the images in the
grub.conf file. 0 is the first specified, 1 is the second specified, etc.
● If you don't specify this option in the
configuration file, it will boot the first image specified in the file.
25
Options
● timeout= is the number of seconds the boot
prompt will wait before automatically loading the default OS, in this case, Red Hat Linux.
● splashimage= is the location of the image to
be used as the background for the GRUB GUI.
26
Options
● password option specifies the MD5-encrypted
password used to gain access to GRUB's interactive boot options
– This does not stop users loading your defined OS
● To generate an md5 password, run the tool grub- md5-crypt (as root), which comes with GRUB. It will
– prompt for the password you want to encrypt
– output the MD5-encrypted password
● Copy this into grub.conf after password --md5 but
on the same line
27
Options
● title identifies the specific OS that will be
booted from at the user interface at runtime
– Spaces could be included in this name.
● password is set in the same way as the
password above
– Do not set this password to the root password if you are planning on sharing this machine with other users.
28
Options
● root option tells GRUB where the OS file
system actually lives
● GRUB references the media in a different
way than LILO
– In LILO, /dev/hdb3 is the third partition of the
second disk
– Grub references this disk as (hd1,2), again the third partition of the second disk (disk 0 being the first disk, partition 0 being the first partition).
29
Options
● kernel: vmlinuz-X.X.XX-XX is the name of the
default boot kernel image within root directory.
● initrd: initrd-X.X.XX-XX.img is the name of the default initrd file within root directory.
– initrd enables loading a RAM disk by the boot
loader
– Allow system startup in 2 phases:
● Kernel comes up with a minimal set of compiled-in
drivers
● Additional modules are loaded from initrd
30
Options
● rootnoverify option tells GRUB to not try to
vary the root of the OS. This saves load errors if the file system is not a supported by GRUB.
● chainloader +1 tells GRUB to use a chain
loader to load this OS, which is required for loading Windows.
31
Additional Configuration At Boot Time
• Press the P key to enter your GRUB password • For edit commands before booting, press E
– This allows user to edit the specific options for the
currently highlighted OS
– If you need to access the machine in single-user mode (giving you root access without specifying a password!), select the Linux OS at the GRUB main screen. • Press E and move to the kernel line • Append single to the end of this line • Press B to boot using changed grub.conf
– Any changes you make in edit mode are not saved to
the grub.conf file
32
Additional Configuration At Boot Time
● To modify kernel arguments, press A
● To get to a BASH-like command-line
interface, press C
33
CONFIGURE GRUB 2
No Traditional Ubuntu
• Classical versions of Ubuntu used menu.lst as
configuration file
• What is “classical”? ==> GRUB1 and earlier
ones
• GRUB 2 uses /boot/grub/grub.cfg file • You shouldn’t edit this file by hand! This file is
just for GRUB2’s own usage
• sudo update-grub to automatically create
this file
35
update-grub command
• update-grub is a stub for running
grubmkconfig o /boot/grub/grub.cfg
• to generate a grub2 config file.
36
What to do?
● Two steps:
1.Edit the /etc/default/grub file
2.Run the sudo update-grub command
• How?
– When you run the update-grub command,
GRUB automatically combines ● the settings from the /etc/default/grub file ● the scripts from the /etc/grub.d/ directory ● and everything else
– to automatically create /boot/grub/grub.cfg
37
Edit the GRUB2 Configuration File
● gksu gedit /etc/default/grub
38
What to Focus?
● Save a Default Operating System:
– If you choose GRUB_DEFAULT=saved
– You also need to add a GRUB_SAVEDEFAULT=true line
39
What to Focus?
● Choose Whether GRUB is Hidden:
– Set GRUB_HIDDEN_TIMEOUT=0
or splash screen for 5 secs, during which you can press any key to view the menu
– If the number is 5, GRUB will display an empty screen
comment the line out — just add a # before it so that it reads #GRUB_HIDDEN_TIMEOUT=0 .
– To prevent GRUB from being automatically hidden,
40
What to Focus?
● Choose a Background Image:
– By default, GRUB uses a white-on-black monochrome look
– The GRUB_BACKGROUND line controls whether a
background image is used
– You can edit like this
GRUB_BACKGROUND=”/home/user/Pics/background.png”
– GRUB supports JPG/JPEG images, but these are limited to
256 colors
– Instead, you’ll probably want to use a PNG image that can
have any number of colors
– You could also use a TGA image file.
41
Make Your Changes Take Effect
● Save what u did to the /etc/default/grub file
● Run sudo update-grub command
●
42
GRUB CUSTOMIZER
What is Grub Customizer?
● Edit the menu entries (reorder, rename, add or remove)
● Edit the contents of menu entries or create new ones
(internally it edits the 40_custom)
● Change the default boot entry
● Change menu visibility and timeout
● Disable recovery entries
● Change GRUB resolution, menu colors or background
image
● GRUB repair & configuration using a Live CD
● Advanced options like booting an ISO, changing kernel
parameters and lots more
44
Install Grub Customizer
● sudo add-apt-repository
ppa:danielrichter2007/grub-customizer
● sudo apt-get update
● sudo apt-get install grub-customizer
45
Use Grub Customizer
● It has a Graphical User Interface, try it by
yourself
46
INIT SYSTEM
What is an “init system”?
• It's the system that launches all other systems on
your machine.
• When you boot Linux, the init system do such
things:
– loads the drivers you need
– turns on your network connection
– fires up the necessary system service
– then loads the desktop
• Without an init system, you have no way to do
anything.
48
What is an “init system”?
• Previous versions of Ubuntu (from 9.10 to 14.10) used a homegrown system called Upstart, which was Ubuntu's attempt to create an init to replace SysV.
• However, Ubuntu
remains a Debian to derivative and with Debian moving systemd, Ubuntu has no choice other than jumping to the systemd boat.
49
SYSTEM V (SYSTEM 5)
System V
• The SysV init runlevel system provides a for controlling which launches or halts when
init
standard process programs initializing a runlevel.
• SysV init was chosen because it is easier to use and more flexible than the traditional BSD-style init process.
51
System V
init are
• The configuration files for SysV located in the /etc/rc.d/ directory.
• Within this directory, are the rc, rc.local, rc.sysinit, and, optionally, the rc.serial scripts as well as the following directories:
init.d/ rc0.d/ rc1.d/ rc2.d/ rc3.d/ rc4.d/ rc5.d/ rc6.d/ • The init.d/ directory contains the scripts used by the /sbin/init command when controlling services.
52
System V Commands
• service frobozz start/stop/restart/status • ls /etc/rc.d/init.d/ • chkconfig frobozz on/off • chkconfig frobozz • chkconfig list • chkconfig list | grep httpd • chkconfig level 35 httpd on • chkconfig level 2345 postfix off • runlevel (view previuos and current runlevel) • init 0 • telinit 0
53
System V Commands
• update-rc.d - install and remove System-V style init script links • Syntax:
– updaterc.d [n] [f] name remove
– updaterc.d [n] name defaults [NN | SS KK]
– updaterc.d [n] name start|stop NN runlevel [runlevel]... . start|stop NN runlevel [runlevel]... . ...
– updaterc.d [n] name disable|enable [S|2|3|4|5]
● Options:
– -n Don't do anything, just show what we would do.
– -f Force removal of symlinks even if /etc/init.d/name still
exists.
54
System V Commands
Insert links using the defaults: updaterc.d foobar defaults
update-rc.d samples • • Equivalent command using explicit argument sets: updaterc.d foobar start 20 2 3 4 5 . stop 20 0 1 6 . •
Insert links at default runlevels when B requires A
updaterc.d script_for_A defaults 80 20
updaterc.d script_for_B defaults 90 10 • Disabling a service:
updaterc.d f foobar remove
•
Installing a system initialization-and-shutdown script: updaterc.d foobar start 45 S . stop 31 0 6 .
updaterc.d foobar stop 20 2 3 4 5 .
55
UPSTART
Intro
• System V init daemon (SysVinit) does not deal
well with modern hardware, including
– hotplug devices
– USB hard and flash drives
– network-mounted filesystems
• Ubuntu replaced
it with the Upstart
init
daemon
– upstart.ubuntu.com
– upstart.ubuntu.com/wiki
57
Reliability
• Upstart is written using the NIH Utility Library ("libnih").
– a very small, efficient and safe library of generic
routines
– designed for applications that run early in the boot
sequence ("plumbing").
• Reliability and safety is critically important for an init
daemon since:
– it runs as the super-user.
– it is responsible for managing critical system
services.
– if init exits for any reason, the kernel panics.
58
Differences to SysV
• SysVinit
uses
daemon
runlevels (recovery/single-user, multiuser, and more) and links from the /etc/rc?.d directories to the init scripts in /etc/init.d to start and stop system services
• The event-based Upstart init daemon uses
events to start and stop system services.
59
Differences to SysV
• Entries in the /etc/init directory will replace the contents of the /etc/init.d and /etc/rc?.d directories
• Runlevels will no longer be a formal feature of Ubuntu, although they will be maintained for compatibility with third-party software.
• Eventually Upstart will also replace crond.
60
Software package
in one
is contained The Upstart system package, which is installed by default: • upstart — Provides the Upstart init daemon
and initctl utility.
61
Definition
• Jobs
– A job is a series of instructions that init reads
– Categorized into tasks and services
• Task
waiting state when it is done.
– A task is a job that performs its work and returns to a
event that triggered it until the program it specifies is finished running
– A task blocks the program/process that emitted the
62
Definition
• Service
itself.
– A service is a job that does not normally terminate by
– The init daemon monitors each service, restarting the service if it fails and killing the service if it is stopped either manually or by an event.
– A service blocks the program/process that emitted the event that triggered it until the program it specifies has started running.
• initctl
Upstart init daemon
– The initctl (init control) utility communicates with the
63
initctl Examples
• To get the version of
• To start/stop/restart/reload a
job/service
the init daemon # initctl version • To set the log priority # initctl debug
# initctl info
#initctl start/stop/restart/reload JOB • To get the status of a service/job # initctl status JOB • To list all the initctl controlled
# initctl message
# initctl warn
# initctl error
# initctl fatal
services/jobs # initctl list • To reload the configuration file # initctl reloadconfiguration JOB
64
A Test Job
• sudo nano /etc/init/testjob.conf description "A test job file"
author "Your Name"
start on runlevel [2345]
at
Job
ran
'date'
>>
Test echo exec /var/log/testjob.log • Save and close this file. • initcheckconf /etc/init/testjob.conf • sudo service testjob start • cat /var/log/testjob.log
65
SYSTEMD
systemd
• systemd is a system and service manager for Linux. • Compatible with SysV and LSB init scripts. • It can work as a drop-in replacement for sysvinit. • Systemd
– Provides aggressive parallelization capabilities
– Uses socket and D-Bus activation for starting services
– Offers on-demand starting of daemons
– Implements transactional dependency-based service
control logic
– Tracks processes using Linux cgroups
– Supports snapshotting and restoring
– Maintains mount and automount points
67
Systemd Components
68
System Init Daemon
• Ubuntu 15.04 (using Systemd by default):
– Systemd runs with PID 1 as /sbin/init.
– Upstart runs with PID 1 as /sbin/upstart.
• Prior versions (using Upstart by default):
– Upstart runs with PID 1 as /sbin/init.
– Systemd runs with PID 1 as
/lib/systemd/systemd.
69
High-level startup concept
• Upstart's model for starting processes (jobs) is "greedy
event-based"
– all available jobs whose startup events happen are
started as early as possible.
• systemd's model for starting processes (units) is "lazy
dependency-based", i. e. a unit will only start if and when some other starting unit depends on it
• During boot, systemd starts a "root unit" (default.target,
can be overridden in grub), which then transitively expands and starts its dependencies
• A new unit needs to add itself as a dependency of a unit of the boot sequence (commonly multi-user.target) in order to become active.
70
Commands
Operation Upstart Command Systemd equivalent
Start service start $job systemctl start $unit
Stop service stop $job systemctl stop $unit
Restart service restart $job systemctl restart $unit
initctl list systemctl status
See status of services
systemd-analyze verify
Check configuration is valid init- checkconf /tmp/foo.c onf
initctl list-env systemctl show-environment
Show job environment
initctl set- env foo=bar systemctl set- environment foo=bar
Set job environment variable
71
Commands
Operation Upstart Command Systemd equivalent
initctl unset- env foo systemctl unset- environment foo
Remove job environment variable
View job log sudo journalctl -u $unit
cat /var/log/upstart /$job.log
sudo journalctl -u $unit -f
tail -f job log
tail - f /var/log/upstart/ $job.log
initctl2dot
systemctl list- dependencies --all
Show relationship between services
72
Example Upstart Service
• /etc/init/foo.conf: # description "Job that runs the foo daemon"
# start in normal runlevels when disks are mounted and networking is available start on runlevel [2345]
# stop on shutdown/halt, singleuser mode and reboot stop on runlevel [016]
env statedir=/var/cache/foo
# create a directory needed by the daemon prestart exec mkdir p "$statedir"
exec /usr/bin/foodaemon arg1 "hello world" statedir "$statedir"
73
Example Systemd service
• /lib/systemd/system/foo.service: [Unit] Description=Job that runs the foo daemon Documentation=man:foo(1)
[Service] Type=forking Environment=statedir=/var/cache/foo ExecStartPre=/usr/bin/mkdir p ${statedir} ExecStart=/usr/bin/foodaemon arg1 "hello world" statedir ${statedir}
[Install] WantedBy=multiuser.target
74

