stages: add test stage
Adds a new systemd unit to the image that will be pulled in by default, run a given command, forward the output to a virtio serial port and shutdown the machine. We add a sample that uses this to verify that systemd conciders the machine successfully booted. A simple way to run this test from the commandline is to use `$ socat UNIX-LISTEN:qemu.sock -` to listen for either `running` for success or `degraded` or `maintenance` for failure. The image should then be booted using something like `$ qemu-kvm -m 1024 -nographic -monitor none -serial none -chardev socket,path=qemu.sock,id=char0 -device virtio-serial -device virtserialport,chardev=char0,id=test0 -snapshot base.qcow2` Signed-off-by: Tom Gundersen <teg@jklm.no>
This commit is contained in:
parent
a914627c89
commit
fc838a8e20
3 changed files with 114 additions and 6 deletions
|
|
@ -53,12 +53,6 @@
|
||||||
"kernel_opts": "ro biosdevname=0 net.ifnames=0"
|
"kernel_opts": "ro biosdevname=0 net.ifnames=0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "org.osbuild.debug-shell",
|
|
||||||
"options": {
|
|
||||||
"tty": "/dev/ttyS0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "org.osbuild.selinux",
|
"name": "org.osbuild.selinux",
|
||||||
"options": {
|
"options": {
|
||||||
|
|
|
||||||
80
samples/base-test.json
Normal file
80
samples/base-test.json
Normal file
|
|
@ -0,0 +1,80 @@
|
||||||
|
{
|
||||||
|
"name": "base-qcow2",
|
||||||
|
"stages": [
|
||||||
|
{
|
||||||
|
"name": "org.osbuild.dnf",
|
||||||
|
"options": {
|
||||||
|
"releasever": "30",
|
||||||
|
"install_weak_deps": true,
|
||||||
|
"repos": {
|
||||||
|
"fedora": {
|
||||||
|
"name": "Fedora",
|
||||||
|
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||||
|
"gpgkey": "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"packages": [
|
||||||
|
"@Core",
|
||||||
|
"chrony",
|
||||||
|
"kernel",
|
||||||
|
"selinux-policy-targeted",
|
||||||
|
"grub2-pc",
|
||||||
|
"spice-vdagent",
|
||||||
|
"qemu-guest-agent",
|
||||||
|
"xen-libs",
|
||||||
|
"langpacks-en"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "org.osbuild.locale",
|
||||||
|
"options": {
|
||||||
|
"language": "en_US"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "org.osbuild.fstab",
|
||||||
|
"options": {
|
||||||
|
"filesystems": [
|
||||||
|
{
|
||||||
|
"uuid": "76a22bf4-f153-4541-b6c7-0332c0dfaeac",
|
||||||
|
"vfs_type": "ext4",
|
||||||
|
"path": "/",
|
||||||
|
"freq": "1",
|
||||||
|
"passno": "1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "org.osbuild.grub2",
|
||||||
|
"options": {
|
||||||
|
"root_fs_uuid": "76a22bf4-f153-4541-b6c7-0332c0dfaeac",
|
||||||
|
"kernel_opts": "ro biosdevname=0 net.ifnames=0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "org.osbuild.test",
|
||||||
|
"options": {
|
||||||
|
"script": "/usr/bin/systemctl is-system-running --wait"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "org.osbuild.selinux",
|
||||||
|
"options": {
|
||||||
|
"file_contexts": "etc/selinux/targeted/contexts/files/file_contexts"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "org.osbuild.fix-bls"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"assembler":
|
||||||
|
{
|
||||||
|
"name": "org.osbuild.qcow2",
|
||||||
|
"options": {
|
||||||
|
"filename": "base.qcow2",
|
||||||
|
"root_fs_uuid": "76a22bf4-f153-4541-b6c7-0332c0dfaeac"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
34
stages/org.osbuild.test
Executable file
34
stages/org.osbuild.test
Executable file
|
|
@ -0,0 +1,34 @@
|
||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def main(tree, options):
|
||||||
|
script = options["script"]
|
||||||
|
|
||||||
|
unit = f"""
|
||||||
|
[Unit]
|
||||||
|
Description=Boot Test
|
||||||
|
Wants=dev-vport0p1.device
|
||||||
|
After=dev-vport0p1.device
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
StandardOutput=file:/dev/vport0p1
|
||||||
|
ExecStart={script}
|
||||||
|
ExecStopPost=/usr/bin/systemctl poweroff
|
||||||
|
"""
|
||||||
|
with open(f"{tree}/etc/systemd/system/osbuild-test.service", "w") as f:
|
||||||
|
f.write(unit)
|
||||||
|
|
||||||
|
os.symlink("../osbuild-test.service",
|
||||||
|
f"{tree}/etc/systemd/system/multi-user.target.wants/osbuild-test.service")
|
||||||
|
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
args = json.load(sys.stdin)
|
||||||
|
r = main(args["tree"], args["options"])
|
||||||
|
sys.exit(r)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue