构建以在 KVM 上部署来宾挂起
Build to deploy guest on KVM hangs
我正在使用 Jenkins 来自动部署虚拟设备。第一步是在 KVM 中构建一个标准的 CentOS7 minimal vm。我写了一个简短的 bash 脚本来完成这个任务,当 运行 在本地 KVM 机器上工作时:
#!/bin/bash
#Variables
diskpath="/var/lib/libvirt/images/"
buildname=$(date +"%m-%d-%y-%H-%M")
vmextension=".dsk"
#Change to images directory
cd /var/lib/libvirt/images/
#Deploy VM with with kickstart file
sudo virt-install \
--name=$buildname \
--nographics \
--hvm \
--virt-type=kvm \
--file=$diskpath$buildname$vmextension \
--file-size=20 \
--nonsparse \
--vcpu=2 \
--ram=2048 \
--network bridge=br0 \
--os-type=linux \
--os-variant=generic \
--location=http://0.0.0.0/iso/ \
--initrd-inject /var/lib/libvirt/images/autobuild-ks.cfg \
--extra-args="ks=http://0.0.0.0/ks/autobuild-ks.cfg console=ttyS0"
(为了安全起见,我更改了 IP 地址)
ISO 和 kickstart 文件存储在另一台服务器上,它们都可以通过 http 访问,以使此脚本正常工作。需要说明的是,脚本确实有效。
我遇到的问题是,当我将此脚本作为构建步骤放入 Jenkins 时,该脚本有效;然而,它在安装 OS 并且 kvm 来宾开始关闭过程后挂起。
这里是 kickstart 文件:
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use Network installation media
url --url=http://0.0.0.0/iso
# Use graphical install
#graphical
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=gb --xlayouts='gb'
# System language
lang en_GB.UTF-8
# Network information
network --bootproto=dhcp --device=ens160 --ipv6=auto --activate
network --hostname=hostname.domain.com
# Root password
rootpw --iscrypted
taken_encryption_output_out_for_the_purposes_of_security
#Shutdown after installation
shutdown
# System services
services --enabled="chronyd"
# System timezone
timezone Europe/London --isUtc
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-
drive=sda
autopart --type=lvm
# Partition clearing information
clearpart --none --initlabel
%packages
@^minimal
@core
chrony
kexec-tools
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
%anaconda
pwpolicy root --minlen=6 --minquality=50 --notstrict --nochanges --
notempty
pwpolicy user --minlen=6 --minquality=50 --notstrict --nochanges --
notempty
pwpolicy luks --minlen=6 --minquality=50 --notstrict --nochanges --
notempty
%end
我怀疑这与 Kickstart 文件中的关闭选项有关,但不确定。当我通过 ssh 连接到 kvm 服务器时,我可以看到我新创建的虚拟机,因此脚本可以正常工作,但 Jenkins 挂起。
[root@sut-kvm01 ~]# virsh list --all
Id Name State
----------------------------------------------------
- 09-22-17-16-21 shut off
到目前为止,我已经尝试过关机、重启,显然 halt 是 kickstart 文件中的默认设置,它们对我也没有用。
关于如何使构建成功完成的任何想法?如果它挂起,我将无法继续构建第 2 步。
请帮忙:-)
好的,所以我设法找出问题所在。这个问题与 Jenkins 或脚本无关,而是与 kickstart 文件有关。简而言之,我编辑了错误的 kickstart 文件。我正在编辑的文件是 /root/ 目录中的默认 kickstart 文件,但它与脚本注入内存的文件不同,因此我所做的更改没有效果。
自言自语 - 仅仅因为脚本有效,并不意味着问题的答案没有写在脚本中。
我正在使用 Jenkins 来自动部署虚拟设备。第一步是在 KVM 中构建一个标准的 CentOS7 minimal vm。我写了一个简短的 bash 脚本来完成这个任务,当 运行 在本地 KVM 机器上工作时:
#!/bin/bash
#Variables
diskpath="/var/lib/libvirt/images/"
buildname=$(date +"%m-%d-%y-%H-%M")
vmextension=".dsk"
#Change to images directory
cd /var/lib/libvirt/images/
#Deploy VM with with kickstart file
sudo virt-install \
--name=$buildname \
--nographics \
--hvm \
--virt-type=kvm \
--file=$diskpath$buildname$vmextension \
--file-size=20 \
--nonsparse \
--vcpu=2 \
--ram=2048 \
--network bridge=br0 \
--os-type=linux \
--os-variant=generic \
--location=http://0.0.0.0/iso/ \
--initrd-inject /var/lib/libvirt/images/autobuild-ks.cfg \
--extra-args="ks=http://0.0.0.0/ks/autobuild-ks.cfg console=ttyS0"
(为了安全起见,我更改了 IP 地址)
ISO 和 kickstart 文件存储在另一台服务器上,它们都可以通过 http 访问,以使此脚本正常工作。需要说明的是,脚本确实有效。
我遇到的问题是,当我将此脚本作为构建步骤放入 Jenkins 时,该脚本有效;然而,它在安装 OS 并且 kvm 来宾开始关闭过程后挂起。
这里是 kickstart 文件:
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use Network installation media
url --url=http://0.0.0.0/iso
# Use graphical install
#graphical
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=gb --xlayouts='gb'
# System language
lang en_GB.UTF-8
# Network information
network --bootproto=dhcp --device=ens160 --ipv6=auto --activate
network --hostname=hostname.domain.com
# Root password
rootpw --iscrypted
taken_encryption_output_out_for_the_purposes_of_security
#Shutdown after installation
shutdown
# System services
services --enabled="chronyd"
# System timezone
timezone Europe/London --isUtc
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-
drive=sda
autopart --type=lvm
# Partition clearing information
clearpart --none --initlabel
%packages
@^minimal
@core
chrony
kexec-tools
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
%anaconda
pwpolicy root --minlen=6 --minquality=50 --notstrict --nochanges --
notempty
pwpolicy user --minlen=6 --minquality=50 --notstrict --nochanges --
notempty
pwpolicy luks --minlen=6 --minquality=50 --notstrict --nochanges --
notempty
%end
我怀疑这与 Kickstart 文件中的关闭选项有关,但不确定。当我通过 ssh 连接到 kvm 服务器时,我可以看到我新创建的虚拟机,因此脚本可以正常工作,但 Jenkins 挂起。
[root@sut-kvm01 ~]# virsh list --all
Id Name State
----------------------------------------------------
- 09-22-17-16-21 shut off
到目前为止,我已经尝试过关机、重启,显然 halt 是 kickstart 文件中的默认设置,它们对我也没有用。
关于如何使构建成功完成的任何想法?如果它挂起,我将无法继续构建第 2 步。
请帮忙:-)
好的,所以我设法找出问题所在。这个问题与 Jenkins 或脚本无关,而是与 kickstart 文件有关。简而言之,我编辑了错误的 kickstart 文件。我正在编辑的文件是 /root/ 目录中的默认 kickstart 文件,但它与脚本注入内存的文件不同,因此我所做的更改没有效果。
自言自语 - 仅仅因为脚本有效,并不意味着问题的答案没有写在脚本中。