[TOC]

替换ISO内核并生成自定义iso镜像文件

一些说明

initrd.img

  • 什么是initrd?安装系统引到模式下的RAM镜像

    initrd 的英文含义是 boot loader initialized RAM disk,就是由 boot loader 初始化的内存盘。在 linux内核启动前, boot loader会将存储介质中的 initrd 文件加载到内存,内核启动时会在访问真正的根文件系统前先访问该内存中的 initrd 文件系统

  • initrd具体干了什么

    把 initrd.img 初始化成一个设备 /dev/intrd。接着boot loader 把内核以及/dev/initrd的内容加载到内存

squashfs.img

  • Squashfs(.sfs)是一套供Linux核心使用的GPL开源只读压缩文件系统

rootfs.img

  • 由squashfs.img解压得到
  • 根文件系统,是ramfs的一种,是为安装系统准备的环境

注意事项

系统安装过程中需要用到megaraid_sas驱动,故需要替换initrd.img和squashfs.img内的驱动,并修改自动加载mod的配置。

安装iso过程中会安装kernel-4.14.rpm内核包,要在系统安装成功后也能用megaraid_sas驱动,需要修改kernel-4.14.rpm内核包中的的驱动,并新增开机自动加载mod的配置文件。

一.挂载并获取原iso镜像内容

1.需要用到的临时目录

临时目录在打包好iso后会删除

1
2
3
4
5
dtos_iso_mount_path=/work/mkiso/bootiso-up
dtos_iso_create_tmp_path=/work/mkiso/anaconda/createCD-up
dtos_iso_initrd_tmp_path=/work/mkiso/initrd-up
dtos_iso_squashfs_tmp_path=/work/mkiso/squashfs-up
dtos_iso_packages_tmp_path=/work/mkiso/Packages-up

备份目录,备份原iso镜像文件

1
2
3
4
5
6
#原驱动文件
/work/mkiso/backup/dtos7.4/old/megaraid_sas.ko.xz
#原initrd.img文件
/work/mkiso/backup/dtos7.4/old/initrd.img
#原squashfs.img文件
/work/mkiso/backup/dtos7.4/old/squashfs.img

2.新建目录&iso镜像挂载

1
2
mkdir -p /work/mkiso/bootiso-up
mount -o loop /work/release/dtos/dtos-7.4-x86_64-20190111.iso /work/mkiso/bootiso-up

3.将镜像内容复制到新目录,并取消挂载镜像

1
2
3
4
5
6
7
8
rm -rf /work/mkiso/anaconda/createCD-up/
mkdir -p /work/mkiso/anaconda/createCD-up
cd /work/mkiso/bootiso-up
cp -a . /work/mkiso/anaconda/createCD-up
sed -i 's/CentOS/dtos/g' /work/mkiso/anaconda/createCD-up/isolinux/isolinux.cfg
sed -i 's/CentOS/dtos/g' /work/mkiso/anaconda/createCD-up/isolinux/grub.conf
cd /work/mkiso/anaconda/createCD-up/
umount /work/mkiso/bootiso-up && rmdir /work/mkiso/bootiso-up

4.安装需要用到的工具

1
yum install -y createrepo mkisofs isomd5sum squashfs-tools rpmbuild rpmrebuild

二.initrd.img解压&修改&打包

initrd.img为安装iso时使用的系统,如果是装机过程中用到的驱动或工具,是必须要修改initrd.img的

1.新建目录

1
2
rm -rf /work/mkiso/initrd-up
mkdir -p /work/mkiso/initrd-up

2.解压initrd.img

1
2
3
4
5
6
7
8
9
[root@infi-builder initrd-up]# ll -h /work/mkiso/anaconda/createCD-up/images/pxeboot/initrd.img
-rw-r--r-- 1 root root 47M Jan 11  2019 /work/mkiso/anaconda/createCD-up/images/pxeboot/initrd.img

mkdir -p /work/mkiso/initrd-up/initrd
cd /work/mkiso/initrd-up/initrd
xz -dc / /work/mkiso/anaconda/createCD-up/images/pxeboot/initrd.img | cpio -id

[root@infi-builder initrd]# ls
bin  dev  etc  init  lib  lib64  proc  root  run  sbin  shutdown  sys  sysroot  tmp  usr  var

3.替换修改initrd.img

我这里是替换了megaraid_sas驱动

1
2
3
4
5
[root@infi-builder initrd-up]# ll -h /work/mkiso/initrd-up/initrd/usr/lib/modules/3.10.0-693.el7.x86_64/kernel/drivers/scsi/megaraid/megaraid_sas.ko.xz
-rw-r--r-- 1 root root 61K Apr 20 17:25 /work/mkiso/initrd-up/initrd/usr/lib/modules/3.10.0-693.el7.x86_64/kernel/drivers/scsi/megaraid/megaraid_sas.ko.xz

cp /work/mkiso/modules/drivers/3.10.0-693.el7x86_64/megaraid_sas.ko.xz /work/mkiso/initrd-up/initrd/usr/lib/modules/3.10.0-693.el7.x86_64/kernel/drivers/scsi/megaraid/megaraid_sas.ko.xz
cp /work/mkiso/modules/drivers/3.10.0-693.el7x86_64/megaraid_sas.ko.xz /work/mkiso/initrd-up/initrd/lib/modules/3.10.0-693.el7.x86_64/kernel/drivers/scsi/megaraid/megaraid_sas.ko.xz

4.压缩initrd

1
2
3
cd /work/mkiso/initrd-up/initrd
find . | cpio -c -o | xz -9 --check=crc32 > ../initrd.img
hexdump -C ../initrd.img | head -10

5.替换iso中的initrd.img

1
2
3
4
5
6
7
[root@infi-builder initrd-up]# ll -h /work/mkiso/initrd-up/initrd.img
-rw-r--r-- 1 root root 45M Apr 20 17:35 /work/mkiso/initrd-up/initrd.img

cp -rf /work/mkiso/initrd-up/initrd.img /work/mkiso/anaconda/createCD-up/images/pxeboot/initrd.img
cp -rf /work/mkiso/initrd-up/initrd.img /work/mkiso/anaconda/createCD-up/isolinux/initrd.img

rm -rf /work/mkiso/initrd-up

6.安装iso过程中出现的问题

改完之后直接cpio+xz打回去之后发现不能用,不识别initrd.img导致启动失败

1
2
3
4
5
6
7
#查看文件头,发现和原有initrd.img文件不太一样
hexdump -C ../initrd.img | head -10
hexdump -C initrd.img | head -10
#文件校验块原来是01重新压回去为啥变04了?fd 37 7a 58 5a 00 00 01 → fd 37 7a 58 5a 00 00 04
#查询xz算法和xz工具后发现新的xz工具在压缩的时候自动采用了新的校验算法crc64,虽然说这个crc64要优于原本的crc32,但是linux内核用的还是crc32而且不认识crc64。怪不得报错呢。
#在参数上指定强制使用crc32校验算法即可
xz -zk initrd.img --check=crc32

7.出现问题,尝试另一种处理方式

 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
#拷贝源文件到新目录
rm -rf /work/mkiso/initrd-up
mkdir -p /work/mkiso/initrd-up
cd /work/mkiso/initrd-up
cp -rf /work/mkiso/anaconda/createCD-up/isolinux/initrd.img /work/mkiso/initrd-up/initrd.img

#解压initrd.img
[root@infi-builder initrd-up]# file /work/mkiso/initrd-up/initrd.img
/work/mkiso/initrd-up/initrd.img: XZ compressed data
#是个xz压缩文件,继续解压
mv initrd.img initrd.img.xz
xz -d initrd.img.xz
[root@infi-builder initrd-up]# file initrd.img
initrd.img: ASCII cpio archive (SVR4 with no CRC)
#是个二进制镜像文件,继续解
mkdir initd
cd initd
cpio -i -F ../initrd.img  
#可以看到解压完的内容
[root@infi-builder initd]# ls
bin  dev  etc  init  lib  lib64  proc  root  run  sbin  shutdown  sys  sysroot  tmp  usr  var

#替换修改initrd.img
cp -rf /work/mkiso/modules/drivers/3.10.0-693.el7x86_64/megaraid_sas.ko.xz /work/mkiso/initrd-up/initd/usr/lib/modules/3.10.0-693.el7.x86_64/kernel/drivers/scsi/megaraid/megaraid_sas.ko.xz
cp -rf /work/mkiso/modules/drivers/3.10.0-693.el7x86_64/megaraid_sas.ko.xz /work/mkiso/initrd-up/initd/lib/modules/3.10.0-693.el7.x86_64/kernel/drivers/scsi/megaraid/megaraid_sas.ko.xz

#重新打包initrd.img
find . -depth |cpio -oc -O /work/mkiso/initrd.img
cd /work/mkiso/
xz -zk initrd.img --check=crc32
mv initrd.img.xz initrd.img
[root@infi-builder release]# ll -h initrd.img
-rw-r--r-- 1 root root 46M Apr 20 15:20 initrd.img
[root@infi-builder release]# md5sum initrd.img
5440715388347f3e6c60edf0833fa831  initrd.img

#替换iso中的initrd.img
cp -rf /work/mkiso/initrd.img /work/mkiso/anaconda/createCD-up/isolinux/initrd.img
cp -rf /work/mkiso/initrd.img /work/mkiso/anaconda/createCD-up/images/pxeboot/initrd.img

rm -rf /work/mkiso/initrd.img
rm -rf /work/mkiso/initrd-up

三.squashfs.img解压&修改&打包

squashfs.img为需要安装的系统,如果安装完成后的系统需要用到的驱动或工具,是必须要修改squashfs.img的

1.拷贝源文件到新目录

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
rm -rf /work/mkiso/squashfs-up
mkdir -p /work/mkiso/squashfs-up
cp -rf /work/mkiso/anaconda/createCD-up/LiveOS/squashfs.img /work/mkiso/squashfs-up/squashfs.img

[root@infi-builder release]# ll -h /work/mkiso/squashfs-up/squashfs.img
-rw-r--r-- 1 root root 352M Apr 20 15:27 /work/mkiso/squashfs-up/squashfs.img
[root@infi-builder release]# md5sum /work/mkiso/squashfs-up/squashfs.img
9fbbe1469f75bb6d360d6da42f9b4eac  /work/mkiso/squashfs-up/squashfs.img
[root@node1 /work/mkiso/squashfs-up]# hexdump -C squashfs.img | head -10
00000000  68 73 71 73 03 00 00 00  07 a8 ae 59 00 00 02 00  |hsqs.......Y....|
00000010  00 00 00 00 04 00 11 00  c0 04 01 00 04 00 00 00  |................|
00000020  58 00 60 4b 00 00 00 00  56 f8 f7 15 00 00 00 00  |X.`K....V.......|
00000030  4e f8 f7 15 00 00 00 00  ff ff ff ff ff ff ff ff  |N...............|
00000040  2e ac f7 15 00 00 00 00  ec f7 f7 15 00 00 00 00  |................|
00000050  26 f8 f7 15 00 00 00 00  40 f8 f7 15 00 00 00 00  |&.......@.......|
00000060  08 80 00 00 02 00 01 00  00 00 fd 37 7a 58 5a 00  |...........7zXZ.|
00000070  00 01 69 22 de 36 03 c0  a2 16 80 80 08 21 01 0a  |..i".6.......!..|
00000080  00 00 ba d0 61 a1 e1 ff  ff 0b 1a 5d 00 00 6f fd  |....a......]..o.|
00000090  ff ff a3 b7 82 62 39 8a  27 9a 46 6f 4c a2 1d 31  |.....b9.'.FoL..1|

2.安装工具

如果未安装squashfs-tools工具,请执行以下命令

1
yum install -y squashfs-tools

3.使用squashfs工具解压squashfs.img

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
cd /work/mkiso/squashfs-up
[root@node1 /work/mkiso/squashfs-up]# unsquashfs squashfs.img
Parallel unsquashfs: Using 4 processors
1 inodes (16384 blocks) to write

[==============================================================/] 16384/16384 100%

created 1 files
created 2 directories
created 0 symlinks
created 0 devices
created 0 fifos

#获取到rootfs.img镜像
[root@dy-workspace /work/mkiso/squashfs-up]# ll -h squashfs-root/LiveOS/rootfs.img
-rw-r--r--. 1 root root 2.0G 4月  24 13:48 squashfs-root/LiveOS/rootfs.img

4.挂载镜像rootfs.img

1
2
3
4
[root@node1 /work/mkiso/squashfs-up/squashfs-root/LiveOS]# mkdir /work/mkiso/squashfs-up/rootfs/
[root@node1 /work/mkiso/squashfs-up/squashfs-root/LiveOS]# mount /work/mkiso/squashfs-up/squashfs-root/LiveOS/rootfs.img /work/mkiso/squashfs-up/rootfs/
[root@dy-workspace /work/mkiso/squashfs-up]# ls /work/mkiso/squashfs-up/rootfs/
bin  dev  etc  firmware  lib  lib64  lost+found  mnt  modules  proc  root  run  sbin  sys  tmp  usr  var

5.根据需要可以修改/work/mkiso/rootfs目录下文件

我这里是替换了megaraid_sas驱动

1
2
cp -rf /work/mkiso/modules/drivers/3.10.0-693.el7x86_64/megaraid_sas.ko.xz /work/mkiso/squashfs-up/rootfs/usr/lib/modules/3.10.0-693.el7.x86_64/kernel/drivers/scsi/megaraid/megaraid_sas.ko.xz
cp -rf /work/mkiso/modules/drivers/3.10.0-693.el7x86_64/megaraid_sas.ko.xz /work/mkiso/squashfs-up/rootfs/lib/modules/3.10.0-693.el7.x86_64/kernel/drivers/scsi/megaraid/megaraid_sas.ko.xz

6.开机自动加载模块配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
cd /work/mkiso/squashfs-up/rootfs/

#方式一,正常情况下二选一
mkdir -p etc/modules-load.d
vim etc/modules-load.d/config.conf
[添加内容]
megaraid_sas

#方式二,正常情况下二选一
mkdir -p etc/sysconfig/modules
vim etc/sysconfig/modules/megaraid_sas.modules
[添加内容]
modprobe megaraid_sas

7.重新打包squashfs.img

 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
cd /work/mkiso/squashfs-up
umount /work/mkiso/squashfs-up/rootfs/ && rm -rf /work/mkiso/squashfs-up/rootfs/
rm -rf squashfs.img
mksquashfs squashfs-root/ squashfs.img -comp xz -Xbcj x86 -e boot

[root@node1 /work/mkiso/squashfs-up]# mksquashfs squashfs-root/ squashfs.img -comp xz -Xbcj x86 -e boot
Parallel mksquashfs: Using 4 processors
Creating 4.0 filesystem on squashfs.img, block size 131072.
[=============================================================-] 16384/16384 100%

Exportable Squashfs 4.0 filesystem, xz compressed, data block size 131072
        compressed data, compressed metadata, compressed fragments, compressed xattrs
        duplicates are removed
Filesystem size 360866.57 Kbytes (352.41 Mbytes)
        17.21% of uncompressed filesystem size (2097216.33 Kbytes)
Inode table size 19390 bytes (18.94 Kbytes)
        29.52% of uncompressed inode table size (65674 bytes)
Directory table size 58 bytes (0.06 Kbytes)
        100.00% of uncompressed directory table size (58 bytes)
Number of duplicate files found 0
Number of inodes 3
Number of files 1
Number of fragments 0
Number of symbolic links  0
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 2
Number of ids (unique uids + gids) 1
Number of uids 1
        root (0)
Number of gids 1
        root (0)

[root@node1 /work/mkiso/squashfs-up]# ll -h squashfs-root/LiveOS/rootfs.img
-rw-r--r-- 1 root root 2.0G 4月  20 15:36 squashfs-root/LiveOS/rootfs.img
[root@node1 /work/mkiso/squashfs-up]# ll -h
总用量 353M
-rw-r--r-- 1 root root 353M 4月  20 15:43 squashfs.img
drwxr-xr-x 3 root root   20 9月   5 2017 squashfs-root

8.替换iso中的squashfs.img

1
2
3
cp -rf /work/mkiso/squashfs-up/squashfs.img /work/mkiso/anaconda/createCD-up/LiveOS/squashfs.img

rm -rf /work/mkiso/squashfs-up

四.修改并替换Packages中的rpm包

如果有自定义的rpm安装包,且rpm包中驱动会覆盖安装完的系统中的驱动时,需要替换rpm包中驱动

此处修改的是linux内核4.14包:kernel-4.14.37-4.el7.x86_64.rpm

1.新建文件夹,拷贝原始文件

1
2
3
mkdir -p /work/mkiso/Packages-up/
cp -rf /work/mkiso/anaconda/createCD-up/Packages/kernel-4.14.37-4.el7.x86_64.rpm /work/mkiso/Packages-up/kernel-4.14.37-4.el7.x86_64.rpm 
cd /work/mkiso/Packages-up

2.提取rpm的spec文件

1
rpmrebuild --package --notest-install --spec-only=kernel-4.14.37-4.el7.x86_64.spec kernel-4.14.37-4.el7.x86_64.rpm

3.解压rpm包内容

1
2
3
mkdir -p /work/mkiso/Packages-up/kernel-4.14.37-4.el7.x86_64
cd /work/mkiso/Packages-up/kernel-4.14.37-4.el7.x86_64
rpm2cpio ../kernel-4.14.37-4.el7.x86_64.rpm | cpio -div

4.替换驱动

我这里是替换了megaraid_sas驱动

1
cp -rf /work/mkiso/modules/drivers/4.14.37-4.el7.x86_64/megaraid_sas.ko.xz /work/mkiso/Packages-up/kernel-4.14.37-4.el7.x86_64/lib/modules/4.14.37-4.el7.x86_64/kernel/drivers/scsi/megaraid/megaraid_sas.ko.xz

5.开机自动加载模块配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
cd /work/mkiso/Packages-up/kernel-4.14.37-4.el7.x86_64

#方式一,正常情况下二选一
mkdir -p etc/modules-load.d
vim etc/modules-load.d/config.conf
[添加内容]
megaraid_sas

#方式二,正常情况下二选一
mkdir -p etc/sysconfig/modules
vim etc/sysconfig/modules/megaraid_sas.modules
[添加内容]
modprobe megaraid_sas

6.修改kernel-4.14.37-4.el7.x86_64.spec文件

1
2
3
4
5
6
7
8
vim /work/mkiso/Packages-up/kernel-4.14.37-4.el7.x86_64.spec
跳转至:16165行,在 %files 模块新增内容
[新增内容]
%dir %attr(0755, root, root) "/etc/modules-load.d"
%attr(0644, root, root) "/etc/modules-load.d/config.conf"
%dir %attr(0755, root, root) "/etc/sysconfig"
%dir %attr(0755, root, root) "/etc/sysconfig/modules"
%attr(0755, root, root) "/etc/sysconfig/modules/megaraid_sas.modules"

7.重新打包rpm

1
2
3
4
5
6
rm -rf /root/rpmbuild
mkdir -p /root/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
cp -rf /work/mkiso/Packages-up/kernel-4.14.37-4.el7.x86_64 /root/rpmbuild/BUILDROOT/kernel-4.14.37-4.el7.x86_64
cp -rf /work/mkiso/Packages-up/kernel-4.14.37-4.el7.x86_64.spec /root/rpmbuild/SPECS/
cd /root/rpmbuild/SPECS
rpmbuild -ba /root/rpmbuild/SPECS/kernel-4.14.37-4.el7.x86_64.spec

8.替换iso中rpm包

1
2
3
cp -rf /root/rpmbuild/RPMS/x86_64/kernel-4.14.37-4.el7.x86_64.rpm /work/mkiso/anaconda/createCD-up/Packages/kernel-4.14.37-4.el7.x86_64.rpm

rm -rf /work/mkiso/Packages-up

五.打包iso镜像

1.本地yum源

1
2
cd /work/mkiso/anaconda/createCD-up/Packages && createrepo -dpo .. .
createrepo -g /work/mkiso/comps/comps.xml /work/mkiso/anaconda/createCD-up

2.生成新iso镜像

1
2
3
4
5
6
rm -rf /work/mkiso/dtos/dtos-7.4-x86_64-20190111-megaraid_sas.iso
cd /work/mkiso/anaconda/createCD-up

mkisofs -V "dtos 7 x86_64" -o /work/mkiso/dtos/dtos-7.4-x86_64-20190111-megaraid_sas.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -T -eltorito-alt-boot -bimages/efiboot.img -no-emul-boot /work/mkiso/anaconda/createCD-up

rm -rf /work/mkiso/anaconda/createCD-up

3.镜像md5值

1
2
implantisomd5 /work/mkiso/dtos/dtos-7.4-x86_64-20190111-megaraid_sas.iso
md5sum /work/mkiso/dtos/dtos-7.4-x86_64-20190111-megaraid_sas.iso

六.验证iso镜像

  • 本地虚拟机安装新生成的iso镜像

  • 装机开始前CTRL+ALT+F2进入shell环境

  • 发现版本已经由07.701变为07.719,驱动替换成功

    1
    2
    3
    4
    5
    6
    7
    
    [root@node1 /workspace/srv-gw-infinity]# modinfo megaraid_sas
    filename:       /lib/modules/3.10.0-693.el7.x86_64/kernel/drivers/scsi/megaraid/megaraid_sas.ko.xz
    description:    Broadcom MegaRAID SAS Driver
    author:         megaraidlinux.pdl@broadcom.com
    version:        07.719.04.00
    license:        GPL
    srcversion:     05F4386F098293464A7277C
    
  • 发现驱动已经自动加载

    1
    2
    
    [root@dy-workspace /work/mkiso/anaconda/createCD-up]# lsmod |grep megaraid_sas
    megaraid_sas          143360  0
    
  • CTRL+ALT+F6继续装机

  • 装机完成后运行命令

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    
    [root@node1 /workspace/srv-gw-infinity]# rpm -qf /lib/modules/4.14.37-4.el7.x86_64/kernel/drivers/scsi/megaraid/megaraid_sas.ko.xz
    kernel-4.14.37-4.el7.x86_64
    
    [root@node1 /workspace/srv-gw-infinity]# modinfo megaraid_sas
    filename:       /lib/modules/4.14.37-4.el7.x86_64/kernel/drivers/scsi/megaraid/megaraid_sas.ko.xz
    description:    Broadcom MegaRAID SAS Driver
    author:         megaraidlinux.pdl@broadcom.com
    version:        07.719.04.00
    license:        GPL
    srcversion:     05F4386F098293464A7277C
    
    [root@dy-workspace /work/mkiso/anaconda/createCD-up]# lsmod |grep megaraid_sas
    megaraid_sas          143360  0
    
  • 手动加载模块

    1
    2
    3
    4
    
    lsmod | grep megaraid_sas #检查有没有正常加载
    modprobe megaraid_sas #加载模块
    lsmod | grep megaraid_sas #确认模块有没有正常加载
    fdisk –l #确认驱动驱动是否正常
    
  • 查看已挂载的磁盘

    1
    
    lsblk
    

七.自定义打包iso脚本

1
vim buildiso74.sh

写入如下内容

 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
#!/bin/bash
set -x

if [ -z $1 ];then
	ISONAME=dtos-7.4-x86_64-$(date +%Y%m%d).iso
else
	ISONAME=dtos-${1}-x86_64.iso
	version=${1}
fi

centos_file=CentOS-7-x86_64-Minimal-1905-02.iso
#centos_file=CentOS-7-x86_64-Minimal-1905-01.iso
#centos_file=CentOS-7-x86_64-Minimal-1904-01.iso
#centos_file=CentOS-7-x86_64-Minimal-1802-01.iso

userdir="mkiso"
workdir=/work/${userdir}
epelconf=${workdir}/pubscripts/epelconf.txt
if [ ! -e $epelconf ]; then
	echo "config file $epelconf does not exist"
	exit
fi
epels=`cat $epelconf`
#epels="core_append_epel infinity_epel infinity_devel_epel"

if [ -d ${workdir}/anaconda/ ];then
	rm -rf ${workdir}/anaconda/
fi

if [ ! -e ${workdir}/pubscripts/remove_rpm_list_generate.py ]; then
	echo "file remove_rpm_list_generate.py does not exist!"
	#exit
fi

mkdir -p ${workdir}/bootiso
mount -o loop ${workdir}/commons/centos-minimal/${centos_file} ${workdir}/bootiso
[ -e ${workdir}/anaconda/createCD/ ] && rm -fr ${workdir}/anaconda/createCD/

mkdir -p ${workdir}/anaconda/createCD/
cp -r ${workdir}/bootiso/* ${workdir}/anaconda/createCD/
cp -r ${workdir}/bootiso/.treeinfo ${workdir}/anaconda/createCD/
cp -r ${workdir}/bootiso/.discinfo ${workdir}/anaconda/createCD/
sed -i 's/CentOS/dtos/g' ${workdir}/anaconda/createCD/isolinux/isolinux.cfg
sed -i 's/CentOS/dtos/g' ${workdir}/anaconda/createCD/isolinux/grub.conf
#sed -i 's/CentOS/dtos/g' ${workdir}/anaconda/createCD/EFI/BOOT/grub.cfg
umount ${workdir}/bootiso && rmdir ${workdir}/bootiso

#If new kernel rpms exists, copy to Packages
#[ -e ${workdir}/commons/kernel_rpms ] && cp ${workdir}/commons/kernel_rpms/*.rpm ${workdir}/anaconda/createCD/Packages/

#cp ${workdir}/ks.cfg ${workdir}/anaconda/createCD/isolinux/ks.cfg
for epeldir in `echo $epels`; do
	if [ -d ${workdir}/commons/${epeldir} ]; then 
		echo "Copy epel $epeldir"
		cp ${workdir}/commons/${epeldir}/*.rpm ${workdir}/anaconda/createCD/Packages/
	else
		echo "epel $epeldir does not exist"
	fi
done

if [ ! -z ${version} ];then
	cp ${workdir}/commons/dtos-release/dtos-release-${version}-el7.x86_64.rpm ${workdir}/anaconda/createCD/Packages/
fi

#This is to remove rpm with older version from Packages
[ -e rm_rpm.sh ] && rm -f rm_rpm.sh
python ${workdir}/pubscripts/remove_rpm_list_generate.py && ${workdir}/pubscripts/rm_rpm.sh
[ -e ${workdir}/commons/kernel_714rpms ] && cp -vf ${workdir}/commons/kernel_714rpms/*.rpm ${workdir}/anaconda/createCD/Packages/
cp -vf ${workdir}/commons/kernel_714rpms/grub.cfg ${workdir}/anaconda/createCD/EFI/BOOT/grub.cfg
rm -rf ${workdir}/anaconda/createCD/Packages/polkit-0.112-12.el7_3.x86_64.rpm
rm -rf ${workdir}/anaconda/createCD/Packages/openssh-clients-7.4p1*
rm -rf ${workdir}/anaconda/createCD/Packages/openssh-7.4p1-21.el7.x86_64.rpm
rm -rf ${workdir}/anaconda/createCD/Packages/openssh-server-7.4p1-21.el7.x86_64.rpm
rm -rf ${workdir}/anaconda/createCD/Packages/iwl*
rm -rf ${workdir}/anaconda/createCD/Packages/alsa-firmware-1.0.28-2.el7.noarch
rm -rf ${workdir}/anaconda/createCD/Packages/aic94xx-firmware-30-6.el7.noarch
rm -rf ${workdir}/anaconda/createCD/Packages/ivtv-firmware-20080701-26.el7.noarch
rm -rf ${workdir}/anaconda/createCD/Packages/alsa-tools-firmware-1.1.0-1.el7.x86_64
rm -f rm_rpm.sh
rm -rf ${workdir}/anaconda/createCD/Packages/rsync-3.0.9-18.el7.x86_64.rpm
cd ${workdir}/anaconda/createCD/Packages && createrepo -dpo .. .
if [ -z $1 ];then
	createrepo -g ${workdir}/comps/comps.xml ${workdir}/anaconda/createCD
else
	createrepo -g ${workdir}/comps/comps_${1}.xml ${workdir}/anaconda/createCD
fi

#cp -fr ${workdir}/isolinux.cfg ${workdir}/anaconda/createCD/isolinux/isolinux.cfg

cd ${workdir}/anaconda/createCD

mkisofs -V "dtos 7 x86_64" -o ${workdir}/${ISONAME} -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -T -eltorito-alt-boot -bimages/efiboot.img -no-emul-boot ${workdir}/anaconda/createCD

implantisomd5 ${workdir}/${ISONAME}

set +x

八.一些相关资料

iso镜像替换megaraid_sas驱动

使用Centos7.3定制自定义ISO定制iso

替换CentOS ISO内核

CentOS7安装光盘修改过程中initrd.img的解包及打包排雷

使用squashfs工具解压并创建的 squashfs.img文件

使用rpmrebuild从rpm包中提取spec文件

Centos7 开机自动加载模块