定制你的全功能ISO系统

2019-03-05 16:13:07 浏览数 (1)

引言

上一篇中,我们实现了基于anaconda的网络安装,能够较快速的自定义系统安装,但是anaconda受限于图形界面和网络环境(虽然可以走CD-ROM安装,但并非每1台主机都是有光驱的),因此,在这种场景下,我们需要的可能是一套不依赖于网络环境,足够快速且可深度定制的无人值守式系统安装方案,即定制化的全功能ISO系统安装文件。

需要什么

1台Linux主机;不小于10GB的磁盘空间;Centos镜像文件(以CentOS 6为例);定制好的kickstart文件。 注:红帽系Linux系统的自动化安装基本都依赖于ks文件,该文件可通过system-config-kickstart生成,如您没有现成的ks文件,请点此参考这篇文章。

具体实现

1. 首先,我们需要创建用于制造目标ISO文件的工作目录

代码语言:javascript复制
[root@DataCenter ~]# mkdir /diy

2. 挂载并复制光盘或官方ISO中所有文件到该工作目录。请注意:这一步较易出错,如果您使用cp /mnt/iso/* /diy拷贝文件,请务必额外复制.discinfo及.treeinfo文件,因为如果执行cp /source/* /target命令将不会复制隐藏文件,进而导致最后制作系统 ISO文件失败。

代码语言:javascript复制
[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仓库元文件

代码语言:javascript复制
[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,从而实现真正的无人值守式快速安装(强烈推荐)。

代码语言:javascript复制
[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文件

代码语言:javascript复制
[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文件引导,如果没有操作失误应该看到和笔者一样的界面。


0 人点赞