KVM 和 Kickstart - 无法关闭

KVM 和 Kickstart - 无法关闭

我正在构建一个工具来帮助我管理我的 KVM 服务器。它生成一个命令,使用 kickstart 文件自动为我安装 KVM 来宾。下面是它生成的用于自动安装 Ubuntu 16.04 客户机的示例命令。

virt-install --connect qemu:///system  \
--nographics \
--os-type linux \
--accelerate \
--hvm \
--network network=default,model=virtio \
--name testing124 \
--os-variant ubuntu16.04 \
--ram 1024 \
--vcpus 2 \
--location http://us.archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/ \
--disk /home/stuart/code-copy/vms/testing124/disk.raw,bus=virtio,format=raw,cache=writethrough \
--extra-args "console=ttyS0 ks=http://pastebin.com/raw/6TznVUuN"

我希望使用 exec 命令从工具内部执行此命令,而不是将其打印出来并要求我手动复制并粘贴它来执行,就像我到目前为止所做的那样。问题是该命令永远不会完成因为虚拟控制台始终保持打开状态。默认情况下,来宾将重新启动,并连接控制台。如果我指定shutdown而不是reboot,那么安装将卡在这一步:

在此输入图像描述

如果我指定halt或 而poweroff不是shutdown,则来宾将关闭,但控制台仍挂在空白屏幕上。 Virsh 还向来宾显示就像running您执行一样virsh list --all

我需要对命令或 kickstart 文件进行哪些更改才能正常完成 KVM 来宾安装?

附录

将 kickstart 文件复制到下面,以防引用的文件发生更改或丢失。

# Ubuntu server 64bit example kickstart/seed with shutdown

# System language
#lang en_US
lang en_GB

# Language modules to install
#langsupport en_US
langsupport en_GB

# System keyboard
keyboard us

# System mouse
mouse

# System timezone
#timezone America/Chicago
timezone --utc America/Chicago

# Root password
rootpw --disabled

# Initial user
user ubuntu --fullname "" --password ubuntu
preseed user-setup/allow-password-weak boolean true

# pick only one of these actions to take after installation completed
#reboot
#shutdown
#halt
poweroff

# Use text mode install
text

# Install OS instead of upgrade
install

# Use http installation media
url --url http://archive.ubuntu.com/ubuntu

# System bootloader configuration
bootloader --location=mbr

# Clear the Master Boot Record
zerombr yes

# Partition clearing information
clearpart --all --initlabel

# Partition setup
part / --fstype ext4 --size 1 --grow
#part /boot --fstype ext2 --size 200 --asprimary
#part swap  --size 1024
#part pv.01 --size 1 --grow
#volgroup rootvg pv.01
#logvol / --fstype ext4 --vgname=rootvg --size=1 --grow --name=rootvol
#preseed partman-lvm/confirm_nooverwrite boolean true

# If you have swap commented out/not specified then you need to have this line.
preseed --owner partman-basicfilesystems partman-basicfilesystems/no_swap boolean false

# System authorization infomation
auth  --useshadow  --enablemd5

# Firewall configuration
firewall --disabled

# Do not configure the X Window System
skipx

# Make sure to install the acpid package so that virsh commands such
# as virsh shutdown will take effect
%packages
@ubuntu-server
@openssh-server
@acpid

答案1

事实证明,这正是--noautoconsolein 中的选项virt-install的完美选择。

描述来自手册页

不要自动尝试连接到访客控制台。默认行为是启动 VNC 客户端以显示图形控制台,或运行“virsh”“console”命令以显示文本控制台。使用此参数将禁用此行为。

现在,程序执行的 virt-install 命令将几乎立即执行并返回,因为它不会连接到控制台并等待来宾完成安装。即使没有任何内容连接到控制台,来宾仍将使用 kickstart 脚本在后台继续安装。只要 kickstart 文件没有任何问题,来宾将在完成后执行完整安装并关闭(如果在 kickstart 文件中指定关闭)。我可以通过轮询知道来宾何时完成安装,virsh list --all直到来宾不再显示为running

更新后的命令如下:

virt-install --connect qemu:///system  \
--nographics \
--os-type linux \
--accelerate \
--hvm \
--network network=default,model=virtio \
--name testing124 \
--os-variant ubuntu16.04 \
--ram 1024 \
--vcpus 2 \
--location http://us.archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/ \
--disk /home/stuart/code-copy/vms/testing124/disk.raw,bus=virtio,format=raw,cache=writethrough \
--noautoconsole \
--extra-args "console=ttyS0 ks=http://pastebin.com/raw/6TznVUuN"

答案2

我通常在自动化安装中使用的--noreboot --noautoconsole几乎涵盖了完全无人值守的安装。话虽virt-builder如此,使用它通常virt-install比完全安装操作系统更快、更好,因为命令更稳定,图像操作更快、更一致。顺便说一句,使用预制模板 VM 映像,速度甚至更快。

相关内容