From 69b9536fb4a8aec0ff9eed5d8b67d917800c7cd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Mass=C3=A9?= Date: Tue, 9 Sep 2025 15:37:45 -0400 Subject: [PATCH] wip --- bootc/scenario3a/Containerfile | 8 ++++++ bootc/scenario3a/config.toml | 0 bootc/scenario3a/custom.sh | 26 +++++++++++++++++++ .../etc/default/bootstrap-vm-nextcloud.env | 5 ++++ .../check/required.d/30_nextcloud_check.sh | 20 ++++++++++++++ .../qemu/networks/autostart/default.xml | 1 + .../etc/libvirt/qemu/networks/default.xml | 19 ++++++++++++++ .../etc/systemd/system/bootstrap-vm@.service | 17 ++++++++++++ .../root/usr/local/bin/bootstrap-vm.sh | 25 ++++++++++++++++++ .../local/libvirt/images/nextcloud/.gitignore | 2 ++ bootc/scripts/build.sh | 5 ++++ 11 files changed, 128 insertions(+) create mode 100644 bootc/scenario3a/Containerfile create mode 100644 bootc/scenario3a/config.toml create mode 100755 bootc/scenario3a/custom.sh create mode 100644 bootc/scenario3a/root/etc/default/bootstrap-vm-nextcloud.env create mode 100755 bootc/scenario3a/root/etc/greenboot/check/required.d/30_nextcloud_check.sh create mode 120000 bootc/scenario3a/root/etc/libvirt/qemu/networks/autostart/default.xml create mode 100644 bootc/scenario3a/root/etc/libvirt/qemu/networks/default.xml create mode 100644 bootc/scenario3a/root/etc/systemd/system/bootstrap-vm@.service create mode 100644 bootc/scenario3a/root/usr/local/bin/bootstrap-vm.sh create mode 100644 bootc/scenario3a/root/usr/local/libvirt/images/nextcloud/.gitignore diff --git a/bootc/scenario3a/Containerfile b/bootc/scenario3a/Containerfile new file mode 100644 index 0000000..c6d3b77 --- /dev/null +++ b/bootc/scenario3a/Containerfile @@ -0,0 +1,8 @@ +FROM edge-registry.itix.fr/demo-edge-retail/base:latest + +ADD --chown=root:root root / + +RUN < /dev/null && pwd )" +PROJECT_DIR="$(dirname "$SCRIPT_DIR")" + +. "$PROJECT_DIR/config.env" + +function bootc_image_builder () { + local config="$1" + shift + podman run --rm -it --privileged --pull=newer --security-opt label=type:unconfined_t -v "$config:/$(basename $config):ro" \ + -v $PWD/root/usr/local/libvirt/images/nextcloud:/output -v /var/lib/containers/storage:/var/lib/containers/storage \ + registry.redhat.io/rhel10/bootc-image-builder:latest --config "/$(basename $config)" "$@" +} + +BOOTC_IMAGE="$(echo -n "$TARGET_IMAGE_TEMPLATE" | SCENARIO=scenario1 envsubst)" +echo "Building qcow2 from $BOOTC_IMAGE..." +bootc_image_builder "$PWD/config.toml" --type qcow2 "$BOOTC_IMAGE" + diff --git a/bootc/scenario3a/root/etc/default/bootstrap-vm-nextcloud.env b/bootc/scenario3a/root/etc/default/bootstrap-vm-nextcloud.env new file mode 100644 index 0000000..248ba46 --- /dev/null +++ b/bootc/scenario3a/root/etc/default/bootstrap-vm-nextcloud.env @@ -0,0 +1,5 @@ +DOMAIN_VCPUS=4 +DOMAIN_RAM=8192 +DOMAIN_DISK_SIZE=100 +DOMAIN_OS_VARIANT=rhel9.6 +DOMAIN_MAC_ADDRESS=04:00:00:00:00:01 diff --git a/bootc/scenario3a/root/etc/greenboot/check/required.d/30_nextcloud_check.sh b/bootc/scenario3a/root/etc/greenboot/check/required.d/30_nextcloud_check.sh new file mode 100755 index 0000000..aca5e83 --- /dev/null +++ b/bootc/scenario3a/root/etc/greenboot/check/required.d/30_nextcloud_check.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +exit 0 # Temporary disable the check + +set -Eeuo pipefail +MAX_ATTEMPTS=60 + +for (( attempt=1; attempt<=MAX_ATTEMPTS; attempt++ )); do + echo "Checking VM ($attempt/$MAX_ATTEMPTS)..." + + if virsh domstate nextcloud | grep -q 'running'; then + echo "Nextcloud VM is running." + exit 0 + fi + + sleep 5 +done + +echo "Nextcloud VM is not running correctly after $MAX_ATTEMPTS attempts!" +exit 1 diff --git a/bootc/scenario3a/root/etc/libvirt/qemu/networks/autostart/default.xml b/bootc/scenario3a/root/etc/libvirt/qemu/networks/autostart/default.xml new file mode 120000 index 0000000..8339868 --- /dev/null +++ b/bootc/scenario3a/root/etc/libvirt/qemu/networks/autostart/default.xml @@ -0,0 +1 @@ +../default.xml \ No newline at end of file diff --git a/bootc/scenario3a/root/etc/libvirt/qemu/networks/default.xml b/bootc/scenario3a/root/etc/libvirt/qemu/networks/default.xml new file mode 100644 index 0000000..9eef7dd --- /dev/null +++ b/bootc/scenario3a/root/etc/libvirt/qemu/networks/default.xml @@ -0,0 +1,19 @@ + + default + + + + + + host + + + + + + + + + + + diff --git a/bootc/scenario3a/root/etc/systemd/system/bootstrap-vm@.service b/bootc/scenario3a/root/etc/systemd/system/bootstrap-vm@.service new file mode 100644 index 0000000..96e4a6c --- /dev/null +++ b/bootc/scenario3a/root/etc/systemd/system/bootstrap-vm@.service @@ -0,0 +1,17 @@ +[Unit] +Description=RHDE VM Bootstrap Service +Documentation=man:systemd.service(5) + +# Only start if the VM root disk does not exist +#ConditionPathExists=!/var/lib/libvirt/images/%i/root.qcow2 +ConditionPathExists=/dummy + +[Service] +Type=oneshot +Persistent=true +#ExecStartPre=/usr/local/bin/configure-network.sh +ExecStart=/usr/local/bin/bootstrap-vm.sh %i +EnvironmentFile=/etc/default/bootstrap-vm-%i.env + +[Install] +WantedBy=multi-user.target diff --git a/bootc/scenario3a/root/usr/local/bin/bootstrap-vm.sh b/bootc/scenario3a/root/usr/local/bin/bootstrap-vm.sh new file mode 100644 index 0000000..0ed35e9 --- /dev/null +++ b/bootc/scenario3a/root/usr/local/bin/bootstrap-vm.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +set -Eeuo pipefail + +if [[ $# -ne 1 ]]; then + echo "Usage: $0 " + exit 1 +fi + +VM="${1}" + +cp -a "/usr/local/libvirt/images/nextcloud/qcow2/disk.qcow2" "/var/lib/libvirt/images/${VM}/root.qcow2" + +virt-install --name "${VM}" \ + --autostart \ + --cpu=host-passthrough \ + --vcpus=${DOMAIN_VCPUS} \ + --ram=${DOMAIN_RAM} \ + --os-variant=${DOMAIN_OS_VARIANT} \ + --disk=path=/var/lib/libvirt/images/${VM}/root.qcow2,bus=virtio,format=qcow2,size=${DOMAIN_DISK_SIZE}G \ + --console=pty,target_type=virtio \ + --serial=pty \ + --graphics=none \ + --import \ + --network=network=bridged,mac=${DOMAIN_MAC_ADDRESS} diff --git a/bootc/scenario3a/root/usr/local/libvirt/images/nextcloud/.gitignore b/bootc/scenario3a/root/usr/local/libvirt/images/nextcloud/.gitignore new file mode 100644 index 0000000..a7c6a4c --- /dev/null +++ b/bootc/scenario3a/root/usr/local/libvirt/images/nextcloud/.gitignore @@ -0,0 +1,2 @@ +qcow2 +manifest-qcow2.json diff --git a/bootc/scripts/build.sh b/bootc/scripts/build.sh index 79738ef..283dca3 100755 --- a/bootc/scripts/build.sh +++ b/bootc/scripts/build.sh @@ -43,5 +43,10 @@ if [ ! -f "$REGISTRY_AUTH_FILE" ]; then podman login registry.redhat.io fi +if [ -x "$PWD/custom.sh" ]; then + echo "Running custom.sh..." + "$PWD/custom.sh" +fi + podman build --no-cache -t "${TARGET_IMAGE}" . podman push --sign-by-sigstore-private-key "$PROJECT_DIR/signing-key.private" --sign-passphrase-file "$PROJECT_DIR/signing-key.pass" "${TARGET_IMAGE}"