#!/bin/sh # This script injects a "test-mode" file into a copy of the main disk image. # It begins by parsing the partition table of the disk image to identify the # 'aux' partition, which is then extracted. An empty 'test-mode' file is # injected into the extracted partition, and the modified partition is written # back to the output image. The output image can subsequently be used as a # backing image for Copy-on-Write (QCOW) images utilized by Qeneth. set -e while getopts "b:o:" opt; do case $opt in b) base_img="$OPTARG" ;; # Base image (Original image) o) output_img="$OPTARG" ;; # Output image (Backing image for QCoW images) *) echo "Usage: $0 -b -o " ; exit 1 ;; esac done if [ -z "$base_img" ] || [ -z "$output_img" ]; then echo "Both -b (base image) and -o (output image) parameters are required." exit 1 fi rm -f "$output_img" if ! cp "$base_img" "$output_img"; then echo "Error: Failed to copy $base_img to $output_img" exit 1 fi if ! part_table=$(fdisk -l "$output_img" 2>/dev/null); then echo "Error: Failed to read partition table from $output_img" exit 1 fi aux_line=$(echo "$part_table" | grep 'aux') if [ -z "$aux_line" ]; then echo "Error: 'aux' partition not found in $output_img" exit 1 fi start=$(echo "$aux_line" | awk '{print $2}') end=$(echo "$aux_line" | awk '{print $3}') count=$(($end - $start + 1)) block_size=$(echo "$part_table" | grep "Logical sector size" | awk '{print $4}') dd if="$output_img" of="tmpaux" skip="$start" count="$count" bs="$block_size" status=none touch tmp-empty-file e2cp tmp-empty-file tmpaux:/test-mode rm tmp-empty-file dd of="$output_img" if="tmpaux" seek="$start" count="$count" bs="$block_size" status=none conv=notrunc rm tmpaux