Chapter 7——Linux系统流程及kickstart

一、简述linux操作系统启动流程

Linux系统的启动流程,以CentOS为例:

POST:Power On Self Test,设备开机自检

--> Boot Sequence(BIOS,MBR):读取BIOS配置,按次序查找各引导设备,第一个有引导程序信息(MBR,Master Boot Record)的设备即为启动时要用到的设备

--> Bootloader(GRUB):加载引导程序GRUB

--> kernel(ramdisk):通过ramdisk加载内核

--> rootfs(ro):以只读(ro)方式挂载临时根文件系统,加载驱动程序

--> /sbin/init(or /usr/lib/systemd/system) :将实际根文件系统从磁盘加载到内存并启动第一程序(CentOS 5,6为/sbin/init,CentOS 7为/usr/lib/systemd)

--> 读取配置文件:/etc/inittab,/etc/init/*.conf(CentOS 5,6)或/usr/lib/systemd/system/*,/etc/systemd/system/*(CentOS 7)

--> 设置默认运行级别

--> 运行系统初始化脚本,完成系统初始化

--> 关闭及启动对应级别下的服务

--> 设置登陆终端

[--> 启动图形终端]

·

二、简述grub启动引导程序配置及命令行接口详解

GRUB:GRand Unit Bootloader,它是一个多重操作系统启动管理器,可用来引导不同系统,如Windows,Linux。
GRUB的版本:
grub 0.X:grub legacy(CentOS 5,6)
grub 1.X:grub2 (CentOS 7)

grub legacy:
    stage 1:mbr
    stage 1_5:mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统;
    stage 2:磁盘分区(/boot/grub/)

    注:stage2及内核等通常放置于一个基本磁盘分区;否则可能无法识别(例如:/boot放置于基于LVM和软RAID方式的磁盘分区,可能无法识别)
        功用:
            1、提供菜单、并提供交互式接口
                e:编辑模式,用于编辑菜单
                c:命令模式,交互式接口;
            2、加载用户选择的内核或操作系统
                允许传递参数给内核
                可隐藏此菜单
            3、为菜单提供了保护机制
                为编辑菜单进行认证
                为启用内核或操作系统进行认证

1、grub启动引导程序的配置文件:/boot/grub/grub.conf 或/etc/grub.conf(软连接)

[root@localhost ~]# cat /boot/grub/grub.conf 
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/mapper/VolGroup-lv_root
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-431.el6.x86_64)
    root (hd0,0)
    kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=VolGroup/lv_swap crashkernel=auto LANG=zh_CN.UTF-8 rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
    initrd /initramfs-2.6.32-431.el6.x86_64.img
配置项:
    default=#:设定默认启动的菜单项;菜单项(title)编号从0开始;
    timeout=#:指定菜单项等待选项选择的时长;
    splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径;
    hiddenmenu:隐藏菜单;
    password [--md5] STRING:菜单编辑认证;
    title TITLE:定义菜单项“标题”
        root (hd#,#):grub查找stage2及kernel文件所在的设备分区:为grub的“根”
        kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核;
        initrd /PATH/TO/INITRAMFS_FILE:内核匹配的ramfs文件;
        password [--md5] STRING:启动选定的内核或操作系统时进行认证;

注:grub-md5-crypt命令:可生成grub配置文件可识别的密文密码字符串

2、grub程序命令行接口详解

在系统引导过程中的系统选择界面时(即,进入grub引导程序的stage2时),如图:


image.png

按c键可进入grub的命令行接口,如图:


image.png
help:获取帮助列表
    help KEYWORD:详细帮助信息
find (hd#,#)/PATH/TO/SOMEFILE:查找某文件
root (hd#,#):指明哪个为根设备
kernel /PATH/TO/SOMEFILE:设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用的cmdline参数;
    例如:init=/path/to/init,selinux=0
initrd /PATH/TO/INITRAMFS_FILE:设定为选定的内核提供额外文件的ramdisk
boot:引导启动选定的内核

手动在grub命令行接口启动系统:
    grub> root (hd#,#)
    grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE
    grub> initrd /initramfs-VERSION-RELEASE.img
    grub> boot

·

三、实现kickstart文件制作与光盘镜像制作

kickstart文件的制作——常用的两种方式

1、使用当前系统安装时生成的anaconda-ks.cfg文件作为模板,在此基础之上进行修改:
[root@localhost ~]# cp anaconda-ks.cfg ks.cfg
[root@localhost ~]# cat ks.cfg 
# Kickstart file automatically generated by anaconda.

#version=DEVEL
install
cdrom
lang zh_CN.UTF-8
keyboard us
network --onboot no --device eth0 --bootproto dhcp --noipv6
rootpw  --iscrypted $6$L0sbqes6Xp1/mBYR$DECT7xbtaElxFBd.rzfzK9BiE/WC0wDtlLBJUkyzVpd8tbH9qPchMZZoCQeGr6LhY14PDn6iPsatQqVPOufYI1
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --enforcing
timezone --utc Asia/Chongqing
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
#clearpart --all --drives=sda
#volgroup VolGroup --pesize=4096 pv.008002
#logvol / --fstype=ext4 --name=lv_root --vgname=VolGroup --grow --size=1024 --maxsize=51200
#logvol swap --name=lv_swap --vgname=VolGroup --grow --size=2048 --maxsize=2048

#part /boot --fstype=ext4 --size=500
#part pv.008002 --grow --size=1


repo --name="CentOS"  --baseurl=cdrom:sr0 --cost=100

%packages
@chinese-support
@core
@server-policy
@workstation-policy
%end

kickstart文件格式解析:

命令段:指定各种安装前配置选项,如键盘类型等;
    必备命令
    authconfig:认证方式配置
        authconfig --enableshadow --passalgo=sha512     ————本地认证(shadow)
    bootloader:定义bootloader的安装位置及相关配置
        bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
    keyboard:设置键盘类型
        keyboard us
    lang:语言类型
        lang zh_CN.UTF-8
    part:分区布局
        part /boot --fstype=ext4 --size=500
        volgroup VolGroup --pesize=4096 pv.008002
    rootpw:管理员密码
        rootpw  --iscrypted $6$L0sbqes6Xp1/mBYR$DECT7xbtaElxFBd.rzfzK9BiE/WC0wDtlLBJUkyzVpd8tbH9qPchMZZoCQeGr6LhY14PDn6iPsatQqVPOufYI1
    timezone:时区

    可选命令
    install OR upgrade:安装或升级;
    text:安装界面类型,text为tui,默认为GUI
    network:配置网络接口
        network --onboot no --device eth0 --bootproto dhcp --noipv6
    firewall:防火墙
        firewall --disabled:关闭
        firewall --service=ssh:启动并放开指定服务
    selinux:SElinux
        selinux --disabled
    halt、poweroff或reboot:安装完成之后的行为;
    repo:指明安装时使用的repository;
        repo --name="CentOS"  --baseurl=cdrom:sr0 --cost=100
    url:指明安装时使用的repository,但为url格式;
        url --url=http://...

程序包段:指明要安装程序包,以及包组,也包括不安装的程序包;
    %packages
    @group_name
    package
    -package
    %end
脚本段
    %pre:安装前脚本
        运行环境:运行安装介质上的微型Linux系统环境;
    %post:安装后脚本
        运行环境:安装后的系统

    补充:分区相关的其它指令
        clearpart:清空磁盘分区
            clearpart --all --drives=sda
        volgroup:创建逻辑卷组
            volgroup VolGroup --pesize=4096 pv.008002
        logvol:创建逻辑卷
            logvol / --fstype=ext4 --name=lv_root --vgname=VolGroup --grow --size=1024 --maxsize=51200

注:修改完kickstart配置文件后,可通过命令ksvalidator KS_FILE检查ks文件是否存在语法错误。

2、通过图形化工具system-config-kickstart命令制作kickstart文件:
[root@localhost ~]# system-config-kickstart

a、手动一步一步配置每一个选项中的参数:


image.png

配置完成后,可在“文件”—“预览”中查看当前生成的配置文件内容,点击保存即可在指定目录下生成ks文件


image.png

image.png

b、可打开已有的ks文件进行修改,然后保存为指定目录下的ks文件:
image.png

image.png

image.png

光盘镜像制作

mkisofs命令(genisoimage)

- create ISO9660/Joliet/HFS filesystem with optional Rock Ridge attributes

mkisofs [options] [-o filename] pathspec [pathspec ...]
或genisoimage [options] [-o filename] pathspec [pathspec ...]

常用选项:

-r :启用 rock ridge 扩展一般的 unix 系统
-R或-rock:使用Rock Ridge Extensions格式
-J或-joliet:使用Joliet格式的目录与文件名称
-T或-translation-table:建立文件名的转换表,适用于不支持Rock Ridge Extensions的系统上
-v或-verbose:执行时显示详细的信息
--no-emul-boot:Boot image is 'no emulation' image即非模拟模式启动
--boot-load-size 4:Set numbers of load sectors 即设置载入部分的数量
--boot-info-table:Patch boot image with info table 在启动的图像中显示信息
-V "STRING"或-volid<光盘ID>:指定光盘的卷册集ID(光盘名)
-c /PATH/TO/boot.cat:制作可开机光盘时,mkisofs会将开机映像文件中的全-eltorito-catalog<开机文件名称>全部内容作成一个文件
-b /PATH/TO/isolinux.bin:指定在制作可开机光盘时所需的开机映像文件
-o /PATH/TO/ISONAME.iso:生成的光盘镜像文件保存的位置

示例:

[root@localhost ~]# mkdir myboot
[root@localhost ~]# cp -r /mnt/iso/isolinux/ myboot/
[root@localhost ~]# cd myboot/
[root@localhost myboot]# cp /root/anaconda-ks.cfg ks.cfg
[root@localhost myboot]# cd
[root@localhost ~]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6 x86_64 boot" -c isolinux/boot.cat -b isolinux/isolinux.bin -o /root/boot.iso myboot/
I: -input-charset not specified, using utf-8 (detected in locale settings)
genisoimage 1.1.9 (Linux)
Scanning myboot/
Scanning myboot/isolinux
Excluded by match: myboot/isolinux/boot.cat
Excluded: myboot/isolinux/TRANS.TBL
Writing:   Initial Padblock                        Start Block 0
Done with: Initial Padblock                        Block(s)    16
Writing:   Primary Volume Descriptor               Start Block 16
Done with: Primary Volume Descriptor               Block(s)    1
Writing:   Eltorito Volume Descriptor              Start Block 17
Size of boot image is 4 sectors -> No emulation
Done with: Eltorito Volume Descriptor              Block(s)    1
Writing:   Joliet Volume Descriptor                Start Block 18
Done with: Joliet Volume Descriptor                Block(s)    1
Writing:   End Volume Descriptor                   Start Block 19
Done with: End Volume Descriptor                   Block(s)    1
Writing:   Version block                           Start Block 20
Done with: Version block                           Block(s)    1
Writing:   Path table                              Start Block 21
Done with: Path table                              Block(s)    4
Writing:   Joliet path table                       Start Block 25
Done with: Joliet path table                       Block(s)    4
Writing:   Directory tree                          Start Block 29
Done with: Directory tree                          Block(s)    2
Writing:   Joliet directory tree                   Start Block 31
Done with: Joliet directory tree                   Block(s)    2
Writing:   Directory tree cleanup                  Start Block 33
Done with: Directory tree cleanup                  Block(s)    0
Writing:   Extension record                        Start Block 33
Done with: Extension record                        Block(s)    1
Writing:   The File(s)                             Start Block 34
 26.71% done, estimate finish Sun Oct  7 22:32:43 2018
 53.32% done, estimate finish Sun Oct  7 22:32:43 2018
 80.01% done, estimate finish Sun Oct  7 22:32:44 2018
Total translation table size: 4701
Total rockridge attributes bytes: 1438
Total directory bytes: 2654
Path table size(bytes): 26
Done with: The File(s)                             Block(s)    18577
Writing:   Ending Padblock                         Start Block 18611
Done with: Ending Padblock                         Block(s)    150
Max brk space used 0
18761 extents written (36 MB)
[root@localhost ~]# file boot.iso 
boot.iso: ISO 9660 CD-ROM filesystem data 'CentOS 6 x86_64 boot           ' (bootable)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容