引言
上一篇中,我们实现了基于anaconda的网络安装,能够较快速的自定义系统安装,但是anaconda
受限于图形界面和网络环境(虽然可以走CD-ROM安装,但并非每1台主机都是有光驱的),因此,在这种场景下,我们需要的可能是一套不依赖于网络环境,足够快速且可深度定制的无人值守式系统安装方案,即定制化的全功能ISO系统安装文件。
需要什么
1台Linux主机;不小于10GB的磁盘空间;Centos镜像文件(以CentOS 6
为例);定制好的kickstart
文件。
注:红帽系Linux系统的自动化安装基本都依赖于ks文件,该文件可通过system-config-kickstart
生成,如您没有现成的ks文件,请点此参考这篇文章。
具体实现
1.
首先,我们需要创建用于制造目标ISO
文件的工作目录
[root@DataCenter ~]# mkdir /diy
2.
挂载并复制光盘或官方ISO中所有文件到该工作目录。请注意:这一步较易出错,如果您使用cp /mnt/iso/* /diy
拷贝文件,请务必额外复制.discinfo及.treeinfo文件
,因为如果执行cp /source/* /target
命令将不会复制隐藏文件,进而导致最后制作系统 ISO文件失败。
[root@DataCenter ~]# mount /dev/sr1 /mnt/iso
[root@DataCenter ~]# cp -r /mnt/iso/ /diy/mu
[root@DataCenter mu]# cd /diy/mu/
[root@DataCenter mu]# ls -al #查看拷贝后的文件是否全
total 288
dr-xr-xr-x 7 root root 4096 Sep 17 20:44 .
drwxr-xr-x 3 root root 16 Sep 17 20:43 ..
-r--r--r-- 1 root root 14 Sep 17 20:43 CentOS_BuildTag
-r--r--r-- 1 root root 31 Sep 17 20:44 .discinfo => 容易漏拷贝的隐藏文件
dr-xr-xr-x 3 root root 35 Sep 17 20:43 EFI
-r--r--r-- 1 root root 212 Sep 17 20:43 EULA
-r--r--r-- 1 root root 18009 Sep 17 20:43 GPL
dr-xr-xr-x 3 root root 95 Sep 17 20:43 images
dr-xr-xr-x 2 root root 198 Sep 17 20:43 isolinux
dr-xr-xr-x 2 root root 176128 Sep 17 20:44 Packages
-r--r--r-- 1 root root 1359 Sep 17 20:44 RELEASE-NOTES-en-US.html
dr-xr-xr-x 2 root root 4096 Sep 17 20:44 repodata
-r--r--r-- 1 root root 1706 Sep 17 20:44 RPM-GPG-KEY-CentOS-6
-r--r--r-- 1 root root 1730 Sep 17 20:44 RPM-GPG-KEY-CentOS-Debug-6
-r--r--r-- 1 root root 1730 Sep 17 20:44 RPM-GPG-KEY-CentOS-Security-6
-r--r--r-- 1 root root 1734 Sep 17 20:44 RPM-GPG-KEY-CentOS-Testing-6
-r--r--r-- 1 root root 3380 Sep 17 20:44 TRANS.TBL
-r--r--r-- 1 root root 338 Sep 17 20:44 .treeinfo => 容易漏拷贝的隐藏文件
3. 删除TRANS.TBL文件(该文件后面会重新生成)
代码语言:javascript复制[root@DataCenter mu]# find -name TRANS.TBL -exec rm -rf {} ;
[root@DataCenter mu]# find -name TRANS.TBL -ls
4.
备份repodata目录下的包组关系文件到当前路径下(以-comps.xml结尾的xml
文件)。我们将依赖该文件重建YUM仓库元文件
[root@DataCenter mu]# cp repodata/*-comps.xml .
[root@DataCenter mu]# ls
43d8fd068164b0f042845474d6a22262798b9f0d1f49ad1bf9f95b953089777d-c6-x86_64-c
omps.xml
CentOS_BuildTag
EFI
EULA
GPL
images
isolinux
Packages
RELEASE-NOTES-en-US.html
repodata
RPM-GPG-KEY-CentOS-6
RPM-GPG-KEY-CentOS-Debug-6
RPM-GPG-KEY-CentOS-Security-6
RPM-GPG-KEY-CentOS-Testing-6
5. 删除旧的repodata元文件目录
代码语言:javascript复制[root@DataCenter mu]# rm -rf repodata
6. 重建YUM仓库元文件
代码语言:javascript复制[root@DataCenter mu]# yum -y install createrepo
[root@DataCenter mu]# mkdir repodata
[root@DataCenter mu]# cp ./*-comps.xml repodata/
[root@DataCenter mu]# tree repodata/
repodata/
└── 43d8fd068164b0f042845474d6a22262798b9f0d1f49ad1bf9f95b953089777d-c6-x86_
64-comps.xml
0 directories, 1 file
[root@DataCenter mu]# createrepo -g repodata/43d8fd068164b0f042845474d6a2226
2798b9f0d1f49ad1bf9f95b953089777d-c6-x86_64-comps.xml ./ # -g选项用于指定包组文件名
Spawning worker 0 with 1620 pkgs
Spawning worker 1 with 1620 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
[root@DataCenter mu]# tree repodata/
repodata/
├── 1cde788f77b08a7eb3dfdba12fa384a5f0214147a717a1e2d4504368037fba90-c6-x86_
64-comps.xml.gz
├── 43d8fd068164b0f042845474d6a22262798b9f0d1f49ad1bf9f95b953089777d-c6-x86_
64-comps.xml
├── 5b50885f24e9b94cb694cc069cde6fc1b1c78f0e24d5faefe34d2656cb501d6e-other.x
ml.gz
├── 81c42f20b1f15d927008dfd8d3a7c354aade77d489a4641aa4ad30f69cd2cdde-primary
.sqlite.bz2
├── 8926b9aebeab445c95ab5a812a218a1ea5f5841e2f53df1bc186704fef7b8cdf-filelis
ts.xml.gz
├── 97b397de22894936fd4f9c824c57a935d3ffe2cb2f6b269086436ff1ca24c08d-primary
.xml.gz
├── dc92ef7fb537858e5c76c840346bde3f9561415a04714c6f4dc0f8716b596cc5-filelis
ts.sqlite.bz2
├── f6b1dfab3efff3942f7383de117a3195c4c9bc3c54bc168e9d5c5a4d0a4621bc-other.s
qlite.bz2
└── repomd.xml
0 directories, 9 files
7.
将定制好的ks文件复制到当前工作目录下。需要注意的是,由于我们的目标是完全离线安装,因此所有的文件都将包含在ISO文件内部,因此必须保证ks文件中,yum安装包源必须为cdrom
,另,如果您希望使用字符模式安装,请将ks文件中的graphical
改为text
,从而实现真正的无人值守式快速安装(强烈推荐)。
[root@DataCenter mu]# cp /var/ftp/ks/ks6-{desktop,mini}.cfg ks/
[root@DataCenter mu]# tree ks/
ks/
├── ks6-desktop.cfg
└── ks6-mini.cfg
0 directories, 2 files
8. 定制启动菜单。
代码语言:javascript复制[root@DataCenter mu]# vim isolinux/isolinux.cfg
default vesamenu.c32
timeout 600
display boot.msg
menu title Welcome to use System Install Program! by: XiaoMu
label Centos6 Mini
menu label Automic Install Centos6 ^Mini
kernel vmlinuz
append initrd=initrd.img ks=cdrom:/ks/ks6-mini.cfg
label Centos6 Desktop
menu label Automic Install Centos6 ^Desktop
kernel vmlinuz
append initrd=initrd.img ks=cdrom:/ks/ks6-desktop.cfg
label rescue
menu label ^Rescue installed system
kernel vmlinuz
append initrd=initrd.img rescue
label local
menu label Boot from ^local drive
menu default
localboot 0xffff
9.
生成ISO
文件
[root@DataCenter mu]# cd
[root@DataCenter ~]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "XiaoMu_CentOS 6.9 x86_
64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /diy/XiaoMu_Centos6_boot.iso /diy/mu
[root@DataCenter ~]# ll -h /diy/
total 3.8G
dr-xr-xr-x 8 root root 4.0K Sep 17 21:14 mu
-rw-r--r-- 1 root root 3.8G Sep 17 22:03 XiaoMu_Centos6_boot => 生成是ISO文件
10. 将生成的ISO文件烧录到U盘等存储设备即可,也可以直接用该ISO文件引导,如果没有操作失误应该看到和笔者一样的界面。