linux(centos)系统封装

Catalogue
  1. 1. 说道封装系统要知道两件事
  2. 2. 系统安装流程
    1. 2.1. 失败镜像的案例
    2. 2.2. 进入debug界面
  3. 3. 系统安装的一些具体步骤

重新封装centos7

说道封装系统要知道两件事

  1. 系统安装流程
  2. iso镜像文件内各个文件的作用

系统安装流程

用户在安装过程中可以通过按 Ctrl+Alt+F2 键进入 root shell 与之互动。

在isolinux.cfg文件中添加 inst.noshell 可禁止访问

失败镜像的案例

先来说说这个【安装流程】,想知道安装流程有个办法,制作一个失败的系统镜像,这个失败的位置也很关键。不能是依赖的问题(依赖出问题了,在安装自检索引文件时就会发现,【依赖的版本不兼容】 这种问题也不行,因为不能【Report Bug】),最好是下图这样的错误,才能进入调试界面

1.png

这个是 系统找不到new-kernel-pkg这个文件,估计是内核需要这个文件,但是从squashfs.img(跟目录)里复制到硬盘的分区里时,发现没有这个文件

拆解squashfs.img,发现/usr/sbin/目录的确没有这个文件

下图是内核的依赖

2.png

/usr/sbin/new-kernel-pkg这个文件由 grubby 这个包提供

有两种方法可以解决:

  1. 安装grubby这个包
  2. 直接从另一个系统上把/usr/sbin/new-kernel-pkg拷到 squashfs.img 的对应位置上

我用的是第二种,可以解决这个报错

“———————————————-

进入debug界面

点击debug按钮进入debug界面

如下图所示

3.png

切换界面:Alt+Tab

系统安装流程:

加载内核————>运行initrd.img(加载PE系统)————>运行某个装机脚本(例如ks.cfg,或者是默认的那个)————> 把 squashfs.img 解包到loop设备,挂载为根目录,chroot到根目录上————> 根据安装脚本,把所需的文件从 根目录 中拷贝到硬盘的分区中(也就是把系统拷贝过去,并不会把 根目录 中所有的文件都拷过去)

shell界面

选的是光盘安装,sr0就是iso镜像文件,挂载目录是 /run/install/repo

sda是系统盘,已经分区完成了,挂载目录是

1
2
根分区: /mnt/sysimage
boot分区: /mnt/sysimage/boot

loop设备应该是 squashfs.img 解压的,为根目录

安装程序可能在 initrd.img 也可能在 squashfs.img里(这个猜的)

具体的启动流程见 『linux_iso镜像解析』

了解这些就应该可以了

“————————————————-

自动化安装,ks.cfg(或者是别的什么cfg文件,符合kickstart文件规范就行)就是一个脚本,除了安装系统时本来就有的一些操作之外,自定义了一些操作(复制、粘贴、改权限之类的)

repodata里的软件索引文件 *-std.xml 就是rpm包的安装目录

以上就是本人浅显的理解

系统安装的一些具体步骤

  1. 下载iso文件(centos7_mini.iso),挂载该文件,将iso中的所有文件拷贝到目录 /centos_std

    1
    2
    3
    mount -o loop centos_mini.iso /mnt

    cp -a /mnt/* /centos_std
  2. 删除 /centos_std中的所有TRANS.TBL文件,该文件会在封包时自动生成

    1
    rm -rf `find /centos_std -name TRANS.TBL`
  3. 下载需要安装的rpm包及其依赖到/centos_std/Packages里,更新repodata中的软件库索引文件

推荐使用repotrack(该软件在yum-utils包里)

1
2
3
4
5
6
7
8
9
10
11
12
yum -y install yum-utils

repotrack <package-name> -p <下载路径>

<package-name>可以使用 yum install <软件名>查找
例1:
yum install vim,找到包为vim-enhanced-7.4.629-8.el7_9.x86_64
repotrack vim-enhanced -p /centos_std/Packages

这就会下载vim-enhanced包和这个包的依赖

要打的包和依赖都下载完后,要更新软件库索引

更新索引文件

1
2
3
4
5
6
7
8
9
cp /centos_std/repodata/*-std.xml /centos_std/std.xml

编辑std.xml,把要加的软件加进去
把要打的rpm包加到Packages里

rm -rf /centos_std/repodata

createrepo -g /centos_std/std.xml /centos_std/

  1. 编辑kickstart.cfg文件

编辑好了之后,需要修改/centos_std/isolinux.cfg ; /centos_std/EFI/BOOT/grub.cfg文件

1
2
3
4
5
label linux
menu label ^Install CentOS 7
kernel vmlinuz
append initrd=initrd.img inst.stage2=hd:LABEL=centos7 inst.ks=hd:LABEL=centos7:/isolinux/std.cfg quiet

以上是linux启动参数的一部分

『inst.ks=hd:LABEL=centos7:/isolinux/std.cfg』意思就是启动后解析std.cfg,按照该脚本安装系统

『inst.stage2=hd:LABEL=centos7』 (生成后的iso文件卷标为centos7)
门牌号的意思

  1. 生成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文件里的卷标一致

5.x内核的rpm包