24.2. 自动化磁盘映像安装

使用 livemedia-creator 可自动完成生成磁盘映像,并在其中执行安装。要执行自动化安装,需要一个安装的系统和一个 Kickstart 文件。不需要手动生成磁盘映像本身。有关生成并使用 Kickstart 文件的详情请查看 第 23 章 Kickstart 安装

24.2.1. livemedia-creator 概述

使用 livemedia-creator 生成自定义映像通常有两个阶段。在第一阶段会生成一个临时文件,同时 Red Hat Enterprise Linux 安装程序 Anaconda 会根据 Kickstart 文件提供的参数,在这个映像中安装系统。然后在第二阶段,livemedia-creator 使用这个临时系统生成最终的可引导映像。
指定附加选项可改变这个行为。例如:可以只完成第一阶段,使用得到的结果作为磁盘映像文件;或者跳过第一阶段而使用现有磁盘或者文件系统映像生成最终可引导 ISO 映像。

重要

目前只支持在 AMD64、Intel 64 (x86_64) 以及 IBM POWER (big endian) 系统中使用 livemedia-creator 生成自定义映像。
另外只有 Red Hat Enterprise Linux 7 支持这个生成过程。也可以生成之前发行本的自定义映像,但 Red Hat 不提供支持。
livemedia-creator 用法示例请查看 第 24.2.4 节 “生成自定义映像”。在安装了 lorax 软件包的系统中,可使用 livemedia-creator --help 命令列出可用选项列表。lorax 之外还安装了附加文档:livemedia-creator(1) man page 和 README.livemedia-creator 文件,位置为 /usr/share/doc/lorax-version/ 目录,其中 version 是您所安装 lorax 软件包的版本。

24.2.2. 安装 livemedia-creator

livemedia-creator 工具是 lorax 软件包的一部分。要安装该软件包,请作为 root 执行以下命令:
# yum install lorax
lorax 之外还需要安装其他几个软件包。这些软件包不是 lorax 的相依性软件包,因此不会自动安装,但您可能会需要他们,具体要看您使用 livemedia-creator 要做什么。这些软件包为:
  • virt-install:提供构建新虚拟机的软件包,除非指定 --no-virt 选项,否则会在生成 live 介质的第一阶段使用这个软件包。
  • libvirtqemu-kvmlibvirt-client 和其他虚拟化工具:使用 virt-install 时,必须让系统准备好创建、运行并管理虚拟机。有关 Red Hat Enterprise Linux 中虚拟化的信息以及安装及使用虚拟化工具的文档,请查看《Red Hat Enterprise Linux 7 虚拟化部署及管理指南》
  • anaconda: Red Hat Enterprise Linux 安装程序,如果使用 --no-virt 选项,则在第一阶段使用,而不是在 virt-install 中使用。
其他可能需要的应用程序不在本章讨论范围。如果您要执行 livemedia-creator 且缺少需要您指定选项的软件包,则该程序会停止,并显示出错信息,通知您在就行进行前需要安装的软件包。

24.2.3. Kickstart 文件示例

要成功生成自定义 live 映像需要一个有效 Kickstart 配置文件。与 lorax 一同安装两个示例。您可以在生成自己的自定义映像时使用这些示例作为参考,也可以复制它们,并根据需要进行修改。两个示例都位于 /usr/share/doc/lorax-version/ 目录,其中 version 是安装在您系统中的 lorax 软件包版本。
可用示例有:
  • rhel7-minimal.ks:提供最小安装的配置文件(@core)组及其他主要内容,比如内核及 GRUB2 引导装载程序)。除 root 外没有生成任何用户,也没有安装任何图形界面或者附加软件包。
  • rhel7-livemedia.ks:可使用图形界面生成 live 系统的更高级的配置文件。除 root 外还生成了名为 liveuser 的用户。
这两个示例都需进行修改使用有效位置后,方可作为安装源使用。方法是使用文本编辑器(比如 vim)打开该文件,找到 url 命令,并将地址改为一个有效安装源。无需进行其他修改就可以使用这些示例。

重要

不要在其原始位置修改示例。将其复制到其他目录中,并修改那些副本。

注意

在 Kickstart 文件中指定安装源和附加库后,请记住:只支持官方提供的 Red Hat 库。自定义库可能也能使用,但 Red Hat 不提供支持。

24.2.4. 生成自定义映像

本小节论述了 livemedia-creator 的几个常用用法模式。在此不会列出所有可用选项。要查看所有可用选项,请运行 livemedia-creator --help 命令或者查看 livemedia-creator(1) man page。

24.2.4.1. 使用 virt-install 生成 Live 映像

livemedia-creator 最常规的用法可能包括使用 virt-install 生成临时虚拟机,并在生成 live 映像的过程中使用这个虚拟机。要使用 virt-install 生成 live ISO,需要一个有效 Kickstart 文件和一个可引导 ISO 映像,该映像包含 Anaconda 安装程序。此类映像由 Red Hat 作为“最小引导介质”提供,详情请查看 第 2.2 节 “生成安装 USB 介质”
以下命令是使用 virt-install 生成 live 映像的基本命令:
# livemedia-creator --make-iso --iso=/path/to/boot.iso --ks=/path/to/valid/kickstart.ks
使用最小引导映像路径替换 /path/to/boot.iso,使用在生成该映像的过程中使用的有效 Kickstart 文件路径替换 /path/to/valid/kickstart.ks
在这个具体案例中可能会有帮助的附加选项为:
  • --vnc vnc:可使用这个选项观察使用 VNC 客户端的安装进程,比如TigerVNC。会将这个选项传送给 virt-install 的 --graphics 选项。详情请查看 第 22 章 使用 VNC 安装
  • --ram x:可使用这个选项为临时虚拟机以 MB 为单位指定 RAM 值。
  • --vcpus x:虚拟机处理器数量。

24.2.4.2. 使用 Anaconda 的映像安装生成 Live 映像

生成 live 映像的另一种方法是使用 Anaconda 的映像安装功能。在这种情况下不需要包含安装程序的映像,但必须在系统中安装 anaconda 软件包。同样,这个过程包含两个阶段:首先会生成安装了系统的临时磁盘映像,然后会使用这个映像生成最终可引导 ISO。

警告

使用 Anaconda 生成 live 映像并不安全,因为它是使用系统中的安装程序而不是虚拟机中的安装程序。虽然目前尚未有针对这种情况的 bug,但这个过程仍有可能造成整个系统无法使用。因此建议只在专门用于此目的的虚拟机中运行带 --no-virt 选项的 livemedia-creator 程序。

重要

在使用 Anaconda 生成自定义映像前,请将安全加强 Linux(SELinux)设定为 permissive(或者 disabled)模式。有关设置 SELinux 模式的详情请查看《Red Hat Enterprise Linux 7 SELinux 用户及管理员指南》
要使用 Anaconda 生成 live 映像,请使用 --no-virt 选项。例如:
# livemedia-creator --make-iso --ks=/path/to/valid/kickstart.ks --no-virt

24.2.4.3. 生成磁盘或者文件系统映像

还可以使用 livemedia-creator 生成磁盘或者文件系统映像。就是说只运行生成映像过程的第一阶段。不会生成最终的 ISO,完成在临时磁盘或者文件系统映像文件中的安装过程后该程序就会停止。然后您可以检查整改映像,看看有无错误,这对在修改的 Kickstart 文件中进行故障排除很有帮助,同时您也可以将其留作将来的参考以便在将来生成映像时节省时间。
第一阶段后可采用几种方法停止生成映像的过程。您可以使用 --image-only 选项,如下面的示例所示:
# livemedia-creator --make-iso --ks=/path/to/valid/kickstart.ks --iso=/path/to/boot.iso --image-only
另外您也可以使用 --make-disk 选项而不是 --make-iso
# livemedia-creator --make-disk --ks=/path/to/valid/kickstart.ks --iso=/path/to/boot.iso
还可以使用 --make-fsimage 选项生成文件系统映像而不是分区的磁盘映像:
# livemedia-creator --make-fsimage --ks=/path/to/valid/kickstart.ks --iso=/path/to/boot.iso

注意

还可以在本小节的所有示例中使用 --no-virt 选项。
在所有情况下得到的都是分区的磁盘映像或者文件系统映像,默认位置为 /var/tmp/。要更改所得结果的位置,请使用 --tmp /path/to/temporary/directory/ 选项,其中 /path/to/temporary/directory/ 是目标目录的路径。

24.2.4.4. 使用之前生成的磁盘或者文件系统映像

如果您已经有了一个磁盘或者文件系统映像(请查看 第 24.2.4.3 节 “生成磁盘或者文件系统映像”),livemedia-creator 就可以使用这个映像生成最终可引导 ISO 映像。在这种情况下不需要 Kickstart 文件或者 Anaconda 安装映像;这些只是在生成映像的第一阶段需要,而在目前的情况下是跳过了这个阶段。
要使用现有分区的磁盘映像文件生成最终映像,请使用 --disk-image 选项。例如:
# livemedia-creator --make-iso --disk-image=/path/to/disk/image.img
如果要使用文件系统映像而不是磁盘映像,请使用 --fs-image 选项:
# livemedia-creator --make-iso --fs-image=/path/to/filesystem/image.img

24.2.4.5. 生成应用

livemedia-creator 的另一种用途是生成应用映像(及分区的磁盘映像),其中包括包含其描述的 XML 文件。在这种情况下既支持虚拟机安装,也支持映像安装。要生成应用映像及描述,请使用 --make-appliance 选项而不是 --make-iso 选项。例如:
# livemedia-creator --make-appliance --ks=/path/to/valid/kickstart.ks --iso=/path/to/boot.iso
除非使用 --resultdir 选项另行指定,这两个映像及其描述 XML 文件都保存在 /var/tmp/ 目录中。
具体到生成应用所使用的附加选项:
  • --app-name name:指定应用名称,它会出现在 XML 描述文件中,使用 <name> 标签标记。默认值为 None
  • --app-template /path/to/template.tmpl:指定要使用的模板。默认值为 /usr/share/lorax/appliance/libvirt.tmpl
  • --app-file /path/to/app/file.xml:指定所生成 XML 文件名称。默认值为 appliance.xml

24.2.4.6. 生成 Amazon Machine Image (AMI)

请使用 --make-ami 选项生成在亚马逊弹性计算云(Amazon Elastic Compute Cloud,EC2)中使用的 Amazon Machine Image(AMI)。虚拟安装和映像安装都支持 AMI。
# livemedia-creator --make-ami --ks=/path/to/valid/kickstart.ks --iso=/path/to/boot.iso
除非使用 --resultdir 选项指定不同的位置,否则所得映像文件名为 ami-root.img,位于 /var/tmp/ 目录。

24.2.4.7. 附加参数

以下选项可用于上述安装(虚拟安装,Anaconda 映像安装及其他)。
  • --keep-image:指定这个选项时不会删除在安装第一阶段使用的临时磁盘映像文件。该文件位于 /var/tmp/ 目录,采用随机生成的名称,比如 diskgU42Cq.img
  • --image-only:使用这个选项意味着只执行映像生成过程的第一阶段。与生成最终可引导 ISO 映像不同,livemedia-creator 将只生成临时磁盘映像文件并在其中执行安装。因为跳过了耗时的第二阶段和临时磁盘映像文件检查,所以这个选项可在测试 Kickstart 文件时节省时间。
  • --image-name name:可为临时磁盘映像文件指定定制名称。默认名称是随机生成的(例如:disk1Fac8G.img)。
  • --tmp /path/to/temporary/directory/:指定顶层临时目录。默认值为 /var/tmp/。使用这个选项时必须指定已存在的目录。
  • --resultdir /path/to/results/directory/:指定 livemedia-creator 完成时保存所得结果(可引导 ISO 映像)的目录。不得指定现有目录。默认值为 /var/tmp/。这个选项只能用于最终 ISO 映像。如果您要生成磁盘或者文件系统映像并要将其保存到某个具体位置,请使用 --tmp 选项。
  • --logfile /path/to/log/file/:指定该程序日志文件位置。

24.2.5. 解决 livemedia-creator 问题

本小节提供在使用 livemedia-creator 时常见问题的解决方法。如果您遇到的问题不在此列,请查看该程序的日志文件,该文件会在运行时自动生成并保存到您执行这个工具的目录中,除非您使用 --logfile 选项指定不同的目录。根据使用选项的不同这个日志文件也会有所不同 - 例如:使用 --no-virt 选项时不会生成 virt-install.log(反之您会得到来自 anaconda/ 目录的 Anaconda 日志文件)。每次还会生成名为 livemedia.logprogram.log 的文件。
查找解决问题方法的另一个途径是在运行这个程序时使用 --image-only 选项。这个选项会在第一阶段后停止,因此只会生成磁盘映像文件而不是最终的可引导 ISO。然后不需要等待第二阶段完成就可以挂载这个磁盘映像文件并检查其内容。另外您也可以使用 --keep-image 选项,这个选项会完成两个阶段,并保留临时磁盘映像,以便今后进行分析。
建议在测试 Kickstart 文件修改时使用 --vnc 选项。这个选项可让您使用 VNC 客户端连接到虚拟机并观察安装进度。详情请查看 第 22 章 使用 VNC 安装

24.2.5.1. 虚拟机安装停滞

如果在虚拟安装的第一阶段由于任何原因安装程序无法继续,livemedia-creator 也会停滞,等待安装完成。您可以直接中断该程序,也可以通过停止临时虚拟机解决这个问题。livemedia-creator 会探测到被停止的虚拟机操作系统,删除所有临时文件并退出。
请按照以下步骤停止临时虚拟机:

过程 24.1. 停止临时虚拟机

  1. 使用 virsh 列出目前该系统中可以使用的所有虚拟机(guest)。结果应类似如下:
    # virsh list --all
    Id    Name                           State
    ----------------------------------------------------
    93    LiveOS-2a198971-ba97-454e-a056-799f453e1bd7 running
    -     RHEL7                      shut off
    
    识别临时虚拟机。其名称总是以 LiveOS 开头,后接随机数字字符组成的字符串。
  2. 识别临时虚拟机后,使用 virsh destroy name 命令停止该虚拟机,其中 name 是该虚拟机名称:
    # virsh destroy LiveOS-2a198971-ba97-454e-a056-799f453e1bd7
    Domain LiveOS-2a198971-ba97-454e-a056-799f453e1bd7 destroyed
    

24.2.5.2. 放弃虚拟机安装

如果要执行虚拟安装,但出于某种原因该进程在第一阶段被中断(不如硬件故障、断电或者误按键盘),必须删除所生成的临时磁盘映像及虚拟机后方可再次启动 virt-install。
不是每一次都要执行所有步骤。例如:如果是从系统崩溃中恢复,则不需要停止临时虚拟机,只要取消其定义即可。如果只是要清除 livemedia-creator 生成的临时文件,还可以使用第四和第五步。

过程 24.2. 删除临时虚拟机和磁盘映像文件

  1. 使用 virsh 列出目前该系统中可以使用的所有虚拟机(guest)。结果应类似如下:
    # virsh list --all
    Id    Name                           State
    ----------------------------------------------------
    93    LiveOS-2a198971-ba97-454e-a056-799f453e1bd7 running
    -     RHEL7                      shut off
    
    识别临时虚拟机。其名称总是以 LiveOS 开头,后接随机数字字符组成的字符串。
  2. 识别临时虚拟机后,使用 virsh destroy name 命令停止该虚拟机,其中 name 是该虚拟机名称:
    # virsh destroy LiveOS-2a198971-ba97-454e-a056-799f453e1bd7
    Domain LiveOS-2a198971-ba97-454e-a056-799f453e1bd7 destroyed
    
  3. 使用 virsh undefine name 删除临时虚拟机,采用与上一步相同的名称替换 name
    # virsh undefine LiveOS-2a198971-ba97-454e-a056-799f453e1bd7
    Domain LiveOS-2a198971-ba97-454e-a056-799f453e1bd7 has been undefined
    
  4. 找到临时文件系统的挂载。应在 /var/tmp/ 目录中查找,其名称格式为 lorax.imgutils 后接留个随机数字或者字符。
    # findmnt -T /var/tmp/lorax.imgutils*
    TARGET                         SOURCE     FSTYPE  OPTIONS
    /var/tmp/lorax.imgutils.bg6iPJ /dev/loop1 iso9660 ro,relatime
    
    然后使用 umount 命令挂载它:
    # umount /var/tmp/lorax.imgutils.bg6iPJ
  5. /var/tmp 目录中找到由 virt-install 生成的临时磁盘映像。在安装过程的开始会在命令行中显示这个文件名称,除非使用 --image-name 选项指定一个名称,否则会随机生成。例如:
    2013-10-30 09:53:03,161: disk_size = 5GB
    2013-10-30 09:53:03,161: disk_img = /var/tmp/diskQBkzRz.img
    2013-10-30 09:53:03,161: install_log = /home/pbokoc/lorax/virt-install.log
    mount: /dev/loop1 is write-protected, mounting read-only
    
    在上述示例中,临时磁盘映像是 /var/tmp/diskQBkzRz.img
    如果无法找到最初的信息,则可以手动识别临时文件。请使用 ls 命令列出 /var/tmp 目录的所有内容,并根据名称在输出结果中过滤包含 disk 的文件:
    # ls /var/tmp/ | grep disk
    diskQBkzRz.img
    
    然后删除该临时磁盘映像:
    # rm -f /var/tmp/diskQBkzRz.img
如果完全安装这些步骤执行,现在就可以使用 virt-install 启动新的安装。

24.2.5.3. 使用 --no-virt 失败的安装

可执行 anaconda-cleanup 脚本使用 Anaconda 映像安装功能恢复中断的安装(--no-virt 选项),该脚本随 anaconda 软件包一同安装。这个脚本位于 /usr/bin/ 目录。
使用以下命令执行清除脚本。您必须有 root 权限方可执行此操作。
# anaconda-cleanup