重新封装centos7
说道封装系统要知道两件事
- 系统安装流程
- iso镜像文件内各个文件的作用
系统安装流程
用户在安装过程中可以通过按 Ctrl+Alt+F2 键进入 root shell 与之互动。
在isolinux.cfg文件中添加 inst.noshell 可禁止访问
失败镜像的案例
先来说说这个【安装流程】,想知道安装流程有个办法,制作一个失败的系统镜像,这个失败的位置也很关键。不能是依赖的问题(依赖出问题了,在安装自检索引文件时就会发现,【依赖的版本不兼容】 这种问题也不行,因为不能【Report Bug】),最好是下图这样的错误,才能进入调试界面
这个是 系统找不到new-kernel-pkg这个文件,估计是内核需要这个文件,但是从squashfs.img(跟目录)里复制到硬盘的分区里时,发现没有这个文件
拆解squashfs.img,发现/usr/sbin/目录的确没有这个文件
下图是内核的依赖
/usr/sbin/new-kernel-pkg这个文件由 grubby 这个包提供
有两种方法可以解决:
- 安装grubby这个包
- 直接从另一个系统上把/usr/sbin/new-kernel-pkg拷到 squashfs.img 的对应位置上
我用的是第二种,可以解决这个报错
“———————————————-
进入debug界面
点击debug按钮进入debug界面
如下图所示
切换界面:Alt+Tab
系统安装流程:
加载内核————>运行initrd.img(加载PE系统)————>运行某个装机脚本(例如ks.cfg,或者是默认的那个)————> 把 squashfs.img 解包到loop设备,挂载为根目录,chroot到根目录上————> 根据安装脚本,把所需的文件从 根目录 中拷贝到硬盘的分区中(也就是把系统拷贝过去,并不会把 根目录 中所有的文件都拷过去)
shell界面
选的是光盘安装,sr0就是iso镜像文件,挂载目录是 /run/install/repo
sda是系统盘,已经分区完成了,挂载目录是
1 | 根分区: /mnt/sysimage |
loop设备应该是 squashfs.img 解压的,为根目录
安装程序可能在 initrd.img 也可能在 squashfs.img里(这个猜的)
具体的启动流程见 『linux_iso镜像解析』
了解这些就应该可以了
“————————————————-
自动化安装,ks.cfg(或者是别的什么cfg文件,符合kickstart文件规范就行)就是一个脚本,除了安装系统时本来就有的一些操作之外,自定义了一些操作(复制、粘贴、改权限之类的)
repodata里的软件索引文件 *-std.xml 就是rpm包的安装目录
以上就是本人浅显的理解
系统安装的一些具体步骤
下载iso文件(centos7_mini.iso),挂载该文件,将iso中的所有文件拷贝到目录 /centos_std
1
2
3mount -o loop centos_mini.iso /mnt
cp -a /mnt/* /centos_std删除 /centos_std中的所有TRANS.TBL文件,该文件会在封包时自动生成
1
rm -rf `find /centos_std -name TRANS.TBL`
下载需要安装的rpm包及其依赖到/centos_std/Packages里,更新repodata中的软件库索引文件
推荐使用repotrack(该软件在yum-utils包里)
1 | yum -y install yum-utils |
更新索引文件
1 | cp /centos_std/repodata/*-std.xml /centos_std/std.xml |
- 编辑kickstart.cfg文件
编辑好了之后,需要修改/centos_std/isolinux.cfg ; /centos_std/EFI/BOOT/grub.cfg文件
1 | label linux |
以上是linux启动参数的一部分
『inst.ks=hd:LABEL=centos7:/isolinux/std.cfg』意思就是启动后解析std.cfg,按照该脚本安装系统
『inst.stage2=hd:LABEL=centos7』 (生成后的iso文件卷标为centos7)
门牌号的意思
- 生成iso文件
1 | mkisofs -o /STD.iso -b isolinux/isolinux.bin -c isolinux/boot.cat --no-emul-boot --boot-load-size 4 --boot-info-table -J -R -T -V "centos7" /centos_std |
注: mkisofs 的卷标要与/centos_std/isolinux.cfg ; /centos_std/EFI/BOOT/grub.cfg文件里的卷标一致