有时,您可能想通过添加自己的文件来修改映像发行套件。这些文件可以是其他程序、脚本、数据文件或已更新的 Linux 驱动程序。
您可以使用以下方法更新映像资源文件:
最简单的方法是编辑 settings.txt 文件,它位于映像 CD 的根目录或用于 PXE 引导的“ZENworks Imaging Server”的 /srv/tftp/boot 中。
在使用 ZENworks 分区的情况下,可以作为手动或维护模式引导,装入 ZENworks 分区,然后将修改过的 settings.txt 和 initrd 或 root 中的文件复制到装入的 ZENworks 分区。
另一种简单方法是编辑“ZENworks Imaging Server”(用于 PXE 引导)的 /srv/tftp 中的 .cfg 文件。该方法仅适用于“Linux Imaging Server”,因为配置文件是 Novell 的 PXE 版本提供的。
可以修改 initrd 或 root 文件系统中的文件,但需要使用 Linux 环境执行修改过程。初始设置期间(linuxrc 处理期间)所需的文件(如 LAN 卡驱动程序)必须放置在 initrd 文件系统中。zenworks.s 脚本取得控制权后才需要的其他文件可以放置在 root 文件系统中(如映像脚本),或可以使用 driverupdate 文件。
本节中讨论了此方法。
以下几节中提供了用于修改映像资源文件的各种方法:
如果需要将文件加到引导 CD,以便在进入实际映像进程(例如脚本,但通常不是驱动程序模块)后可使用此文件,则可以将这些文件复制到映像 CD 的 /addfiles 目录中。使用此方法可轻松在分发包中插入脚本或其他文件,无需修改 initrd 或 root 文件系统。但是,在引导和模块装载阶段,这些文件不可用。
映像引导 CD 有一个 /addfiles 目录,您可以向该目录添加文件。它们应以正确的目录名称放置在此目录下。然后在映像进程期间它们会在此目录中可用。
例如,可以如下添加文件:
如果要执行您自己的脚本而不是普通映像进程,请创建名为 myscript.s 的脚本文件,并将其放置在引导 CD 中。例如,/addfiles/bin/myscript.s。
重要说明:该脚本文件必须有符合 Linux 要求的 LF 行终结符,而不是 DOS CR 和 LF 行尾字符。换句话说,不能使用 Notepad.exe 创建脚本,而必须使用与 Linux 兼容的文本编辑器,如 TextPad。
要在 settings.txt 中加入以下行,请输入:
export IMGCMD="/bin/myscript.s"
当映像运行时,它会运行 /bin/myscript.s,而不是使用通常的 img ‑auto 命令。
这是更新映像资源文件的首选方法,而且必须在 Linux 环境中执行。
执行下述过程之前,请确保您已经为计划更改的文件创建了备份复本,尤其是 /srv/tftp/boot/initrd 文件。如果要更改映像 CD 上的文件,则需要 ISO 编辑器或其他进程,用于提取并替换 bootcd.iso 映像文件中的文件。
重要说明:在 initrd 或 root 文件系统中更新或添加文件和 Linux 驱动程序时,请记录您所作的更改。Novell 发送给您的更新过的资源文件将不包含您自定义的更改。如果内核版本已被从 Novell 收到的较新资源文件更改,则原来添加的驱动程序必须更新,方式是从生产商获取新版本或使用正确的 Linux 内核版本源文件重新编译该驱动程序。
要向 root 文件系统添加文件,还可以 driverupdate 文件方法,如部分 G.4.3, 使用 drverupdate 文件方法中所述。
修改 initrd 文件系统:
使用 Linux 设备创建工作目录,然后切换到该目录。
要将 initrd 从 PXE 服务器或引导 CD 复制到新的工作目录:
对于 PXE,将 \tftp\boot\initrd 复制到 Linux 工作站的工作目录。
对于 CD,从引导 CD 的 /boot/i386/loader 目录中提取 initrd,然后将提取的 initrd 复制到 Linux 工作站的工作目录。
要将 initrd 重命名为 initrd.gz,请输入:
mv initrd initrd.gz
要解压缩 initrd.gz 文件,请输入:
gunzip initrd.gz
要创建在随后步骤中用作装入点的另一个工作目录,请输入:
mkdir work
cd work
要将 initrd 提取到 /work 目录,请输入:
cpio -idmuv <../initrd >/dev/null 2>&1
要将文件或最新的驱动程序复制到提取的 initrd 文件系统中,请输入:
cp /your_path/module.ko lib/modules/2.6.5-override-default/initrd
其中,您的路径是模块.ko 文件的路径,模块是模块的名称。
要包含在 initrd 文件系统中的其他文件也应复制到相应的目录。
要重新打包 initrd 文件系统,请输入:
find . | cpio --quiet -o -H newc > ../initrd
cd ..
要压缩新的 initrd 文件,请输入:
gzip -v9c initrd > initrd.gz
要将 initrd.gz 重命名回 initrd,请输入:
mv initrd.gz initrd
要将该文件复制回去:
对于 PXE,将更新后的 initrd 文件复制到 PXE 服务器上的 \tftp\boot 目录。
对于 CD,将更新后的 initrd 文件复制到引导 CD 上的 /boot/i386/loader 目录。
修改 root 文件系统:
使用 Linux 设备创建工作目录,然后切换到该目录。
将 PXE 服务器或引导 CD 上的根目录复制到新的工作目录:
对于 PXE,将 /tftp/boot/root 复制到 Linux 工作站的工作目录。
对于 CD,从引导 CD 的 /boot/i386/ 目录中提取 root,然后将提取的 root 复制到 Linux 工作站的工作目录。
要将 root 重命名为 root.gz,请输入:
mv root root.gz
要解压缩 root.gz 文件,请输入:
gunzip root.gz
要创建在随后步骤中用作装入点的另一个工作目录,请输入:
mkdir work
要将根文件系统装入 /work 目录,请输入:
mount -o loop root work
对 /work 目录进行必要的更改。
要卸装 root 文件系统,请输入:
umount work
要压缩新的 root 文件,请输入:
gzip -v9c root > root.gz
要将 root.gz 重命名回 root,请输入:
mv root.gz root
要将该文件复制回去:
对于 PXE,将更新后的 root 文件复制到 PXE 服务器上的 /tftp/boot 目录。
对于 CD,将更新后的 root 文件复制到引导 CD 上的 /boot/i386/ 目录。
自定义 Novell 映像发行套件的另一种方法是使用所有 SUSE 发行套件内置的驱动程序更新机制。此方法需要修改名为 driverupdate 的文件,该文件位于“映像服务器”的 /srv/tftp/boot 目录或映像引导 CD 的根目录 (/)。
与修改 initrd 或 root 文件系统相比,此方法的入侵性较低。您只需创建一个附加文件,以供在引导期间合并到映像操作系统中。
可执行的驱动程序更新操作共有三种类型:
安装内核模块或硬件驱动程序
安装文件并执行脚本
将文件置于操作系统中
本节将说明如何安装文件和执行脚本。有关其他两种方法的详细信息,请参见 Novell Connection Magazine 中的 Tech Talk #3 - Spittin’ Image。特别是请参见文章中的“SUSE Linux Driver Updates”和“Adding files to the distro "root" file”两段。
本节示例使用的程序“树”在当前映像发行套件中无法使用,会在引导期间加以安装。
驱动程序更新机制会搜索 driverupdate 文件,此文件中包含的目录结构会在使用 ZENwork 发行套件引导设备后模仿操作系统的目录结构。如果此文件存在,linuxrc 就会在引导期间下载,并以动态方式合并到操作系统中。
driverupdate 文件是一种文件系统文件,可属于任意文件系统类型(例如 EXT3 或 REISER)。为了简化说明,本示例将使用 CRAMFS 文件系统。
将树程序置于 driverupdate 文件中:
在“映像服务器”上创建工作目录,例如 /work。
如果使用 driverupdate 文件,则将 driverupdate.tgz 文件下载到 /work 目录,然后输入以下内容进行解压缩:
mkdir work cd work wget http://www.novell.com/connectionmagazine/2005/11/download/driverupdate.tgz tar -xzvf driverupdate.tgz
driverupdate.tgz 文件包含的目录结构与在步骤 3中创建的结构相同。
如果选择手动创建目录,则在 /work 目录下创建以下目录结构:
`-- linux `-- suse |-- i386-sles10 |-- dud.config |-- inst-sys `-- lib `-- bin |-- adddir.s
dud.config 文件内容应包含与以下列出行相似的行。您应通过提供自己的数据来维护关键字。但可以使用下列值:
UpdateName: ZENworks 10 Patch
UpdateID: a37f92556e4dd99e
UpdatePriority: 100
adddir.s 文件应为包含以下几行的可执行脚本:
echo "Processing: adddir.s" > /dev/tty3 2>&1 # driver update: add files to inst-sys for i in /update/[0-9]*/inst-sys ; do [ -d "$i" ] && adddir "$i" / done
# driver update: run update.pre scripts for i in /update/[0?9]*/install/update.pre ; do echo "Processing: $i" > /dev/tty3 2>&1 [ -x "$i" ] && "$i" done
要将树程序复制到 /bin 目录,请输入:
cp /usr/bin/tree dirstruct/linux/suse/i386-9.2/inst-sys/bin/
要创建 CRAMFS 文件,请输入:
mkfs.cramfs work/ driverupdate
SUSE 分发分发包需要 CRAMFS 文件。
要将 driverupdate 文件复制到 /srv/tftp/boot,请输入:
cp driverupdate /srv/tftp/boot
在 /srv/tftp/boot/settings.txt 文件末尾添加以下几行:
# SUSE driver update for i in /update/[0?9]*/install/adddir.s ; do [ -x "$i" ] && "$i" rm $i done
adddir.s 脚本随即运行,创建指向所有要复制的新文件的软链接。
这些行可能已存在于 settings.txt 文件中。
重引导启用 PXE 的设备。
引导操作系统后,在映像维护模式提示符处会显示“ZENworks 10 Patch”。
执行树程序。
完成引导后,您存放于 driverupdate 文件中的所有文件都将位于操作系统的 /update 目录下。然后,adddir.s 脚本(或在中添加到 settings.txt步骤 7 文件的代码)会在 root 文件系统下方,创建指向 /update 目录结构下相应文件的软链接。可运行以下命令来进行校验:
/# which tree /bin/tree /# ll /bin/tree lrwxrwxrwx 1 root root 29 Aug 31 21:45 /bin/tree -> /update/000/inst-sys/bin/tree
如果仅要在映像操作系统里包含新的硬件驱动程序或内核模块,则较为简单的过程是将 .ko 文件复制到 /dirstruct/linux/suse/i386-9.2/modules/ 目录中。然后,映像操作系统会自动装载此目录中的所有 .ko 文件。