From 3f4ac15be6b88e083d422bd5a4bf9355355ed43b Mon Sep 17 00:00:00 2001 From: Pratik Surve Date: Mon, 5 Jan 2026 18:38:46 +0530 Subject: [PATCH] Add Docker FIle and script for creating CNV image --- rdr/container_image/{ => busybox}/Dockerfile | 0 rdr/container_image/cnv/Dockerfile | 2 + rdr/container_image/cnv/build.sh | 90 ++++++++++++++++++++ rdr/container_image/cnv/io_dd_verify.sh | 66 ++++++++++++++ 4 files changed, 158 insertions(+) rename rdr/container_image/{ => busybox}/Dockerfile (100%) create mode 100644 rdr/container_image/cnv/Dockerfile create mode 100644 rdr/container_image/cnv/build.sh create mode 100644 rdr/container_image/cnv/io_dd_verify.sh diff --git a/rdr/container_image/Dockerfile b/rdr/container_image/busybox/Dockerfile similarity index 100% rename from rdr/container_image/Dockerfile rename to rdr/container_image/busybox/Dockerfile diff --git a/rdr/container_image/cnv/Dockerfile b/rdr/container_image/cnv/Dockerfile new file mode 100644 index 000000000..8726299d2 --- /dev/null +++ b/rdr/container_image/cnv/Dockerfile @@ -0,0 +1,2 @@ +FROM scratch +ADD disk.qcow2 /disk/disk.qcow2 \ No newline at end of file diff --git a/rdr/container_image/cnv/build.sh b/rdr/container_image/cnv/build.sh new file mode 100644 index 000000000..3160a8c5d --- /dev/null +++ b/rdr/container_image/cnv/build.sh @@ -0,0 +1,90 @@ +#!/usr/bin/env bash +set -euo pipefail + +# ================= CONFIG ================= +IMAGE="quay.io/ocsci/cirros-dd" +VERSION="0.6.3" +BASE_URL="https://download.cirros-cloud.net/${VERSION}" + +# CirrOS-supported disk images +declare -A ARCH_MAP=( + [amd64]="cirros-0.6.3-x86_64-disk.img linux/amd64" + [arm64]="cirros-0.6.3-aarch64-disk.img linux/arm64" + [arm]="cirros-0.6.3-arm-disk.img linux/arm/v7" + [ppc64le]="cirros-0.6.3-ppc64le-disk.img linux/ppc64le" +) + +# ================= CLEANUP ================= +cleanup() { + sudo umount /mnt 2>/dev/null || true + sudo qemu-nbd --disconnect /dev/nbd0 2>/dev/null || true +} +trap cleanup EXIT + +# ================= PREP ================= +sudo modprobe nbd max_part=8 + +# ================= BUILD LOOP ================= +for ARCH in "${!ARCH_MAP[@]}"; do + read -r DISK PLATFORM <<< "${ARCH_MAP[$ARCH]}" + OCI_ARCH="${PLATFORM#linux/}" + + echo "▶ Building for ${ARCH} (${PLATFORM})" + + # ---------- Download disk ---------- + curl -fL -O "${BASE_URL}/${DISK}" + + # ---------- Inject init script ---------- + sudo qemu-nbd --connect=/dev/nbd0 "$DISK" + sleep 2 + sudo mount /dev/nbd0p1 /mnt + + sudo mkdir -p /mnt/usr/local/bin + sudo cp io_dd_verify.sh /mnt/usr/local/bin/io_dd_verify.sh + sudo chmod +x /mnt/usr/local/bin/io_dd_verify.sh + + # Create rc.local (BusyBox init) + sudo mkdir -p /mnt/etc + sudo sh -c 'cat > /mnt/etc/rc.local </dev/null || echo unknown) + +log "===== VM boot detected =====" +log "Hostname: $hostname" + +if [ -f "$HASHFILE" ]; then + log "Verifying existing data" + if md5sum -c "$HASHFILE" >>"$LOGFILE" 2>&1; then + log "Integrity check PASSED" + else + log "Integrity check FAILED" + fi +else + log "No checksum file found, starting fresh" +fi + +while true; do + file="$MOUNT/data_$(date +%s)_${hostname}" + + log "Writing file: $file" + + dd if=/dev/urandom of="$file" \ + bs=4k \ + count=$((RANDOM % 8 + 1)) \ + oflag=direct \ + >>"$LOGFILE" 2>&1 + + rc=$? + if [ "$rc" -ne 0 ]; then + log "dd failed (rc=$rc), removing partial file" + rm -f "$file" + sync + sleep 1 + continue + fi + + md5sum "$file" >>"$HASHFILE" 2>>"$LOGFILE" + sync + + sleep $((RANDOM % 10 + 1)) +done