如何在RHEL 7/8中创建与inst.updates一起使用的anaconda updates.img

时间:2020-01-09 10:37:51  来源:igfitidea点击:

在本文中,我将分享"创建anaconda updates.img"的步骤,并结合示例在GRUB2菜单或者启动菜单的PXE配置文件中与inst.updates一起使用。

什么是product.img或者updates.img图像文件?

" product.img"或者" updates.img"镜像文件是一个归档文件,其中包含替换现有文件或者在安装程序运行时中添加新文件的文件。在启动过程中,Anaconda会从启动媒体上的" images /"目录中加载此文件。然后,它使用该文件中存在的文件替换安装程序文件系统中名称相同的文件。这是定制安装程序所必需的(例如,用自定义镜像替换默认镜像)。

重要的提示:

" product.img"或者" updates.img"镜像必须包含与安装程序相同的目录结构。

创建anaconda updates.img

如果我们正在使用anaconda或者正在查看错误,并且想要测试自己的错误修复,则可以轻松创建自己的updates.img文件。但是,updates.img不仅可以包含来自蟒蛇的文件,还可以包含更多内容。它还可以包括共享库,图形,其他python模块以及anaconda使用的某些数据文件。

现在,在分享创建anacondaupdates.img的步骤之前,我们必须熟悉目录结构,以便更改可以正确地转储到主机上。为了本文的方便,我将创建一个新的udev规则文件并将其添加到我的updates.img文件中

此udev规则文件的位置必须为

/usr/lib/udev/rules.d/

导航到工作目录,例如/tmp,并在一个临时文件夹下创建类似于上述rules.d的目录结构。

# cd /tmp

其中我将创建一个临时目录" custom_updates_img",在该目录中将创建水蟒" updates.img"。

[root@rhel-7 tmp]# mkdir custom_updates_img
[root@rhel-7 tmp]# cd custom_updates_img

创建所需的目录结构

[root@rhel-7 custom_updates_img]# mkdir -p usr/lib/udev/rules.d/

现在将规则文件放在/tmp/custom_updates_img/usr/lib/udev/rules.d /

[root@rhel-7 custom_updates_img]# cd usr/lib/udev/rules.d/
[root@rhel-7 rules.d]# ls -l
total 4
-rw-r--r--. 1 root root 876 Sep 14 01:05 20-persistent-net.rules

对要添加到安装程序中的每个文件重复上述步骤(创建目录结构并将修改后的文件移入其中)。

在目录的根目录中创建一个.buildstamp文件,该文件将成为updates.img文件。 .buildstamp文件描述了系统版本和其他几个参数。以下是Red Hat Enterprise Linux 7.6中的.buildstamp文件的示例:

[Main]
Product=Red Hat Enterprise Linux
Version=7.6
BugURL=your distribution provided bug reporting tool
IsFinal=False
UUID=201904040748.x86_64
[Compose]
Lorax=19.6.92-1

说明:

" IsFinal"参数,用于指定图片是用于产品(True)的发布(GA)版本,还是用于Alpha,Beta或者内部里程碑(False)等预发布版本。由于此更改只是为了演示,因此我将使用" False"

用于创建此类安装介质的工具是lorax。

每当Engineering需要修改boot.iso或者创建ISO时,都会使用lorax。

以下是我们updates.img的最终列表

[root@rhel-7 custom_updates_img]# ls -la
total 8
drwxr-xr-x.  3 root root   36 Sep 14 01:35 .
drwxrwxrwt. 10 root root 4096 Sep 14 01:15 ..
-rw-r--r--.  1 root root  170 Sep 14 01:35 .buildstamp
drwxr-xr-x.  3 root root   17 Sep 14 01:20 usr

切换到/tmp/custom_updates_img目录,并创建updates.img存档:

[root@rhel-7 rules.d]# cd /tmp/custom_updates_img
[root@rhel-7 custom_updates_img]# find . | cpio -c -o | gzip -9cv > ../updates.img
5 blocks
 80.3%

这将在" custom_updates_img /"目录的上一级创建一个" updates.img"文件。

验证" updates.img"文件

[root@rhel-7 custom_updates_img]# ls -lh ../updates.img
-rw-r--r--. 1 root root 361 Sep 14 01:15 ../updates.img

检查updates.img图像文件的内容

[root@rhel-7 custom_updates_img]# lsinitrd /tmp/updates.img
Image: /tmp/updates.img: 4.0K
========================================================================
Version:
Arguments:
dracut modules:
========================================================================
drwxr-xr-x   3 root     root            0 Sep 14 01:05 .
-rw-r--r--   1 root     root          170 Sep 14 01:35 .buildstamp
drwxr-xr-x   3 root     root            0 Sep 14 01:02 usr
drwxr-xr-x   3 root     root            0 Sep 14 01:02 usr/lib
drwxr-xr-x   3 root     root            0 Sep 14 01:02 usr/lib/udev
drwxr-xr-x   2 root     root            0 Sep 14 01:05 usr/lib/udev/rules.d
-rw-r--r--   1 root     root          876 Sep 14 01:05 usr/lib/udev/rules.d/20-persistent-net.rules
========================================================================

现在,我们可以将" updates.img"复制到我们要挂载和共享图像文件的位置。

在启动阶段如何使用或者挂载updates.img?

无需在启动媒体上添加updates.img或者product.img文件,我们可以将该文件放置在其他位置,并在启动菜单中使用inst.updates =启动选项来加载它。

在这种情况下,镜像文件可以具有任何名称,并且可以放置在任何位置(USB闪存驱动器,硬盘,HTTP,FTP或者NFS服务器),只要可以从安装系统访问此位置即可。

inst.updates=
Specifies the location of the updates.img file to be applied to the installation program runtime.

下表显示了要使用的语法。在所有格式中,如果我们不指定文件名而是仅指定目录,则安装程序将查找名为updates.img的文件。

安装源选项格式
任何CD/DVD驱动器inst.updates=光盘
专用CD/DVD驱动器inst.updates=光盘:设备
硬盘驱动器inst.updates=高清:设备:/path
HMCinst.updates=hmc
HTTP服务器inst.updates=http://主机/路径
HTTPS服务器inst.updates=https://主机/路径
FTP服务器inst.updates=ftp://用户名:password@host/path
NFS服务器inst.updates=nfs文件:server:/path,nfsvers=3(对于NFSv3)

inst.updates=nfs文件:server:/path,nfsvers=4(对于NFSv4)

使用基于PXE的安装挂载updates.img

其中我正在使用NFS协议在基于PXE的安装的初始阶段安装updates.img。以下是我的示例PXE引导文件默认autoinst

label autoinst
        IPAPPEND 2
        kernel rhel7_64/vmlinuz
        append initrd=rhel7_64/initrd.img ramdisk_size=65536 vga=no ksdevice=bootif ks=nfs:10.10.10.20:/home/custom_install/kickstart.conf,nfsvers=4 inst.updates=nfs:10.10.10.20:/tmp/custom_initrd/updates.img,nfsvers=3

使用基于DVD的安装挂载updates.img

其中我将使用RHEL 7.6 ISO DVD引导在安装在Linux服务器上的Oracle VirtualBox上运行的vm。

我们将获得此屏幕以开始安装,这里按TAB进入启动菜单。

如下所示,使用inst.updates将添加内容添加到挂载updates.img,如下所示(我以HTTP为例,但我们可以使用任何其他受支持的协议)

提取updates.img图像文件

现在,在创建anaconda updates.img之后,我们还可以提取updates.img图像文件以进行进一步修改。再次创建一个临时目录并使用以下命令提取updates.img文件

另请阅读:

如何在RHEL/CentOS Linux中提取和重建不同类型的initramfs文件

[root@rhel-7 custom_updates_img]# gunzip -dc /tmp/updates.img | cpio -id
4 blocks

检查" updates.img"的内容

[root@rhel-7 custom_updates_img]# ls -l
total 0
drwxr-xr-x. 3 root root 17 Sep 14 01:20 usr