From f48cc92c8c187b92e8072a10a256695879e3bd43 Mon Sep 17 00:00:00 2001 From: Helmut Grohne Date: Sun, 15 Jan 2023 19:46:58 +0100 Subject: debvm-run: guess the location of the kernel --- bin/debvm-run | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) (limited to 'bin') diff --git a/bin/debvm-run b/bin/debvm-run index 65eb65c..39928d2 100755 --- a/bin/debvm-run +++ b/bin/debvm-run @@ -16,7 +16,7 @@ B [B<-g>] [B<-i> F] [B<-s> I] [B<--> I] B is essentially a thin wrapper around B for running a virtual machine image created by B or something compatible. The virtual machine image is expected to be a raw ext4 image with file system label B. The architecture of the machine is detected from the contained F. -It must contain a symbolic link pointing to a kernel image at F<(|/boot)/vmlinu[xz]> depending on the architecture and a symbolic link pointing to an initrd image at F. +It must contain a symbolic link pointing to a kernel image at one of F<(|/boot)/vmlinu[xz]> a symbolic link pointing to an initrd image at F in the same directory as the kernel image. Both are extracted and passed to B. A net interface configured for user mode is added automatically. @@ -186,26 +186,20 @@ if command -v elf-arch >/dev/null 2>&1; then /sbin/debugfs "$IMAGE" -R "cat /bin/true" > "$KERNELTMP" VMARCH=$(elf-arch "$KERNELTMP") fi -case "$VMARCH" in - mips*|ppc64el) - KERNELLINK=vmlinux - ;; - *) - KERNELLINK=vmlinuz - ;; -esac - -KERNELPREFIX="" -KERNELLINKFILE=$(/sbin/debugfs "$IMAGE" -R "stat $KERNELLINK") -if test -z "$KERNELLINKFILE"; then - KERNELPREFIX=boot/ - KERNELLINKFILE=$(/sbin/debugfs "$IMAGE" -R "stat ${KERNELPREFIX}$KERNELLINK") -fi - -KERNELNAME=$(echo "$KERNELLINKFILE" | sed 's/Fast link dest: "\(.*\)"/\1/;t;d') -INITRDNAME=$(/sbin/debugfs "$IMAGE" -R "stat ${KERNELPREFIX}initrd.img" | sed 's/Fast link dest: "\(.*\)"/\1/;t;d') +for KERNELLINK in vmlinuz vmlinux boot/vmlinuz boot/vmlinux; do + KERNELNAME=$(/sbin/debugfs "$IMAGE" -R "stat $KERNELLINK" | sed 's/Fast link dest: "\(.*\)"/\1/;t;d') + test -n "$KERNELNAME" && break +done test -n "$KERNELNAME" || die "failed to discover kernel image" + +if test "${KERNELLINK#boot/}" = "$KERNELLINK"; then + INITRDLINK=initrd.img +else + INITRDLINK=boot/initrd.img +fi +INITRDNAME=$(/sbin/debugfs "$IMAGE" -R "stat $INITRDLINK" | sed 's/Fast link dest: "\(.*\)"/\1/;t;d') + test -n "$INITRDNAME" || die "failed to discover initrd image" KERNEL_CMDLINE="root=LABEL=debvm rw" @@ -293,7 +287,7 @@ set -- \ set -ex -/sbin/debugfs "$IMAGE" -R "cat ${KERNELPREFIX}$KERNELNAME" > "$KERNELTMP" -/sbin/debugfs "$IMAGE" -R "cat ${KERNELPREFIX}$INITRDNAME" > "$INITRDTMP" +/sbin/debugfs "$IMAGE" -R "cat $KERNELNAME" > "$KERNELTMP" +/sbin/debugfs "$IMAGE" -R "cat $INITRDNAME" > "$INITRDTMP" "$QEMU" "$@" -- cgit v1.2.3