Change The World

沉默是一种力量,嘶吼就不是力量了?

0%

通过kickstart定制Centos7系统

环境准备

  • CentOS 环境一个

    1
    2
    [ocloud@centos-linux ~]$ uname -a
    Linux centos-linux.shared 3.10.0-957.1.3.el7.x86_64 #1 SMP Thu Nov 29 14:49:43 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
  • CentOS7 镜像一个

    1
    CentOS-7-x86_64-DVD-1810.iso

开始制作

  1. 安装需要的工具
1
[ocloud@centos-linux ~]$ sudo yum -y install createrepo mkisofs dosfstools syslinux
  1. 挂载CentOS-7-x86_64-DVD-1810.iso 到目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[ocloud@centos-linux ~]$ lsblk //查看磁盘设备,选择对应的光驱设备
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 64G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 63.5G 0 part
├─VolGroup-lv_root 253:0 0 50G 0 lvm /
├─VolGroup-lv_swap 253:1 0 2G 0 lvm [SWAP]
└─VolGroup-lv_home 253:2 0 11.6G 0 lvm /home
sr0 11:0 1 122.5M 0 rom
sr1 11:1 1 4.3G 0 rom //这个即为挂载的CentOS-7-x86_64-DVD-1810.iso

[ocloud@centos-linux ~]$ mkdir ~/originISO
[ocloud@centos-linux ~]$ sudo mount /dev/sr1 ~/originISO
[sudo] ocloud 的密码:
mount: /dev/sr1 写保护,将以只读方式挂载

#如果不是通过光驱加载,则执行以下操作即可,和上面是同样的效果
[ocloud@centos-linux ~]$ sudo mount ~/CentOS-7-x86_64-DVD-1810.iso ~/originISO
  1. 将镜像内容拷贝到即将制作镜像的文件夹
1
2
3
4
5
6
7
[ocloud@centos-linux ~]$ mkdir ~/customISO
[ocloud@centos-linux ~]$ sudo cp -ar ~/originISO/* customISO/
[ocloud@centos-linux customISO]$ ls
CentOS_BuildTag EFI EULA GPL images isolinux LiveOS Packages repodata RPM-GPG-KEY-CentOS-7 RPM-GPG-KEY-CentOS-Testing-7 TRANS.TBL

#Packages目录是用来放rpm安装包
#isolinux 目录包含了启动相关的配置文件
  1. 准备我们需要的rpm包, 具体操作如下
1
2
3
4
5
6
7
8
9
# rpm安装有许多的依赖问题,但是我们可以通过yum获取到相关的依赖包
[ocloud@centos-linux ~]$ yum -h
...
--downloadonly 仅下载而不更新
--downloaddir=DLDIR 指定一个其他文件夹用于保存软件包
...

#比如下载qemu-kvm相关的包
[ocloud@centos-linux ~]$ sudo yum -y --downloadonly --downloaddir="~/customISO/Packages" qemu-kvm qemu-kvm-tools qemu-img gpxe-roms-qemu qemu-guest-agent #这里直接包相关联的包下载到我们制作镜像的单独放rpm包的文件夹中
  1. 更新软件组的关联信息

    由于我们添加了新的rpm包,因此需要更新软件组的关联信息,每次更新了rpm包就需要更新软件组的信息

1
2
3
4
5
6
[ocloud@centos-linux ~]$ cd ~/customISO
[ocloud@centos-linux customISO]$ mv repodata/*comps.xml repodata/comps.xml #备份软件组的配置文件,其中包含了软件组元数据
[ocloud@centos-linux customISO]$ cd repodata/
[ocloud@centos-linux repodata]$ ls | grep -v comps.xml$|xargs rm #删除其他文件
[ocloud@centos-linux repodata]$ cd ../
[ocloud@centos-linux customISO] createrepo -g repodata/comps.xml /home/ocloud/customISO #重新生成软件组的数据信息
  1. 准备kickstart文件

    推荐用来生成 Kickstart 文件的方法是在系统中首先执行一次手动安装。安装完成后,安装程序中的所有选择都会保存到名为 anaconda-ks.cfg 的文件中,该文件位于所安装系统的 /root/ 目录下。然后可以复制这个文件,根据需要进行修改,并在以后的安装中使用得到的配置文件。 —来自redhat官网内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# 这个文件是一个示例
install #表示是安装系统
cdrom #安装方式,这里是通过光驱
lang en_US.UTF-8 #设置语言
keyboard us #设置键盘
network --device eth0 --bootproto dhcp #设置网络
rootpw 4a7YAZQ1nvUHI --iscrypted #设置root密码,--iscrypted代表加密 --plaintext代表明文
firewall --service=ssh #指定ssh服务可以通过防火墙
authconfig --enableshadow --passalgo=sha512 --enablefingerprint #系统设置认证选项
selinux --enforcing #开启selinux
timezone --utc Asia/Shanghai #设置时区
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" #引导装载程序
zerombr #在使用之前初始化的磁盘的系统中执行自动安装时需要这个命令。
#磁盘分区
clearpart --all --drives=sda
#EFIpart /boot/efi --fstype=efi --grow --maxsize=200 --size=20
part /boot --fstype=ext4 --size=500
part pv.raid01 --grow --size=1
volgroup VolGroup --pesize=4096 pv.raid01
logvol /home --fstype=ext4 --name=lv_home --vgname=VolGroup --grow --size=100
logvol / --fstype=ext4 --name=lv_root --vgname=VolGroup --grow --size=1024 --maxsize=51200
logvol swap --name=lv_swap --vgname=VolGroup --grow --size=1008 --maxsize=2016
text
reboot
#EFIbootloader --location=partition
#OPT-6key --skip
user --name=ocloud --password=4a7YAZQ1nvUHI --iscrypted --groups=wheel #添加用户
xconfig --startxonboot

#安装所需要的软件包,把自定义的安装包添加进去即可在安装系统时自定义的软件
%packages --ignoremissing
@base
@core
@debugging
@basic-desktop
@gnome-desktop
@desktop-debugging
@desktop-platform
@directory-client
@fonts
@general-desktop
@graphical-admin-tools
@graphics
@input-methods
@java-platform
@legacy-x
@network-file-system-client
@performance
@perl-runtime
@print-client
@remote-desktop-clients
@server-platform
@virtualization
@virtualization-client
@virtualization-platform
@x11
authconfig
system-config-firewall-base
mtools
pax
python-dmidecode
oddjob
sgpio
genisoimage
wodim
abrt-gui
certmonger
pam_krb5
krb5-workstation
nscd
pam_ldap
nss-pam-ldapd
libXmu
perl-DBD-SQLite
python
gcc
make
kernel-devel
checkpolicy
selinux-policy-devel
%end

#安装完系统后,需要做什么事情请写在%post里面
%post
# Get interface up
ifdown eth0
ifup eth0
/usr/bin/chfn -f 'demo' demo
umount /dev/sr0
[ -e /tmp/sepolicy-devel.temp ] && rm /tmp/sepolicy-devel.temp
echo "..."
echo "setting network for openvswitch"
scriptsUrl="/etc/sysconfig/network-scripts"
if [ -e $scriptsUrl/ifcfg-eth0 ]
then
# disable NetworkManager
systemctl disable NetworkManager

# copy device eth0 configure to ovs-br0
cp $scriptsUrl/ifcfg-eth0 $scriptsUrl/ifcfg-br0

else
echo "device eth0 configure isn't exist,please check it!"
fi

sleep 2
reboot
%end

将kickstart文件保存为ks.cfg文件到~/customISO

  1. 修改安装启动信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[ocloud@centos-linux customISO]$ vi isolinux/isolinux.cfg # BIOS引导
...
append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet
...

#将以上多处相同的内容调整为为以下内容,光驱进行安装
...
append initrd=initrd.img inst.ks=cdrom:/ks.cfg quiet
...

#使用硬盘进行安装修改为以下内容
...
append initrd=initrd.img inst.ks=hd:LABEL=CentOS\x207\x20x86_64:/ks.cfg inst.stage2=hd:LABEL=CentOS\x207\x20x86_64:/ks.cfg quiet
...

[ocloud@centos-linux customISO]$ vi EFI/BOOT/grub.cfg # EFI引导
...
linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet
...

#将以上多处相同的内容调整为为以下内容,光驱进行安装
...
linuxefi /images/pxeboot/vmlinuz inst.ks=cdrom:/ks.cfg quiet
...
#使用硬盘进行安装修改为以下内容
...
linuxefi /images/pxeboot/vmlinuz inst.ks=hd:LABEL=CentOS\x207\x20x86_64:/ks.cfg inst.stage2=hd:LABEL=CentOS\x207\x20x86_64:/ks.cfg quiet
...

因为ks.cfg中指定安装方式为cdrom, 如果通过硬盘安装则发现不了系统映像,因此添加 inst.stage2 指定要载入的安装程序运行时映像位置, 在这里引导参数 inst.ksinst.stage2都会被读取, 如果只希望写一个inst.ks则只需要将ks.cfg中的cdrom调整为 url --url hd:LABEL=CentOS\x207\x20x86_64 即可

  1. 制作CentOS7镜像文件

本文出现的CentOS\x207\x20x86_64 即为 CentOS 7 x86_64 的URI编码, 可通过mkisofs命令的参数-V指定

1
2
[ocloud@centos-linux customISO] mkisofs -o /tmp/CentOS-7-x86_64-demo.iso -b isolinux/isolinux.bin -c isolinux/boot.cat --no-emul-boot --boot-load-size 4 --boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot -T -J -R -V "CentOS 7 x86_64" .
[ocloud@centos-linux customISO] isohybrid /tmp/CentOS-7-x86_64-demo.iso #使用mkisofs或genisoimage生成的ISO 9660镜像,以允许混合启动为CD-ROM或硬盘

USB启动盘制作

将U盘插入系统

格式化U盘分区

1
2
3
4
5
6
7
8
[ocloud@centos-linux ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
...
sdb 8:16 1 14.3G 0 disk
└─sdb4 8:20 1 14.3G 0 part #U盘分区
...
[ocloud@centos-linux ~]$ sudo mkfs.vfat -I /dev/sdb
mkfs.fat 3.0.20 (12 Jun 2013)

写入镜像

1
2
[ocloud@centos-linux ~]$ dd if=/tmp/CentOS-7-x86_64-demo.iso of=/dev/sdb
[ocloud@centos-linux ~]$ exit #退出后拔掉U盘即可

完成以上步骤后,即可生成一个自己定制的CentOS7的系统,更多详情请参考参考链接,如果本文有任何问题请发Email

参考

  1. 第 20 章 引导选项
  2. 第 23 章 KICKSTART 安装
不如请我吃根冰棒吧