#!/bin/sh set -e cd /tmp # extract. BSD tar auto recognises compression, unlike GNU tar # only if stdin is a tty, if so need files volume mounted... test -t 0 || bsdtar xzf - global TGZ := $[find . -name '*.tgz' -or -name '*.tar.gz] test -n $TGZ && bsdtar xzf $TGZ global EFI_ISO := $[find . -name '*efi.iso] global ISO := $[find . -name '*.iso] global RAW := $[find . -name '*.raw] global INITRD := $[find . -name '*.img] global KERNEL := $[find . -name vmlinuz64 -or -name '*bzImage] global CMDLINE := $[find . -name '*-cmdline] if test -n $EFI_ISO { global ARGS := ""-pflash /usr/share/ovmf/bios.bin -usbdevice tablet -cdrom $EFI_ISO -boot d -drive file=systemdisk.img,format=raw"" } elif test -n $ISO { global ARGS := ""-cdrom $ISO -drive file=systemdisk.img,format=raw"" } elif test -n $RAW { # should test with more drives global ARGS := ""-drive file=$RAW,format=raw"" } elif test -n $KERNEL { global ARGS := ""-kernel $KERNEL"" if test -n $INITRD { global ARGS := ""$ARGS -initrd $INITRD"" } global ARGS := ""$ARGS -drive file=systemdisk.img,format=raw"" } else { echo "no recognised boot media" >2 exit 1 } echo $ARGS | grep -q systemdisk && qemu-img create -f raw systemdisk.img 256M if test -n $(CMDLINE) { global APPEND := $[cat $CMDLINE] } else { global APPEND := "$ifsjoin(Argv)" } if test -z $(APPEND) { global APPEND := '"console=ttyS0'" } if test -z $EFI_ISO && test -z $ISO { global ARGS := ""-append \"$(APPEND)\" $(ARGS)"" } eval qemu-system-x86_64 -machine q35,accel=kvm:tcg -device virtio-rng-pci -nographic -vnc none -m 1024 $ARGS (CommandList children: [ (C {(set)} {(-e)}) (C {(cd)} {(/tmp)}) (AndOr children: [(C {(Lit_Other "[")} {(-t)} {(0)} {(Lit_Other "]")}) (C {(bsdtar)} {(xzf)} {(-)})] op_id: Op_DPipe ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:TGZ) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(find)} {(.)} {(-name)} {(SQ <"*.tgz">)} {(-or)} {(-name)} {(SQ <"*.tar.gz">)}) ] ) left_token: spids: [39 57] ) ) } spids: [37] ) ] spids: [37] ) (AndOr children: [ (C {(Lit_Other "[")} {(-n)} {(DQ ($ VSub_Name "$TGZ"))} {(Lit_Other "]")}) (C {(bsdtar)} {(xzf)} {(DQ ($ VSub_Name "$TGZ"))}) ] op_id: Op_DAmp ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:EFI_ISO) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [(C {(find)} {(.)} {(-name)} {(SQ <"*efi.iso">)})] ) left_token: spids: [83 93] ) ) } spids: [81] ) ] spids: [81] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ISO) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [(C {(find)} {(.)} {(-name)} {(SQ <"*.iso">)})] ) left_token: spids: [98 108] ) ) } spids: [96] ) ] spids: [96] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:RAW) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [(C {(find)} {(.)} {(-name)} {(SQ <"*.raw">)})] ) left_token: spids: [113 123] ) ) } spids: [111] ) ] spids: [111] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:INITRD) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [(C {(find)} {(.)} {(-name)} {(SQ <"*.img">)})] ) left_token: spids: [128 138] ) ) } spids: [126] ) ] spids: [126] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:KERNEL) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(find)} {(.)} {(-name)} {(vmlinuz64)} {(-or)} {(-name)} {(SQ <"*bzImage">)}) ] ) left_token: spids: [143 159] ) ) } spids: [141] ) ] spids: [141] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:CMDLINE) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [(C {(find)} {(.)} {(-name)} {(SQ <"*-cmdline">)})] ) left_token: spids: [164 174] ) ) } spids: [162] ) ] spids: [162] ) (If arms: [ (if_arm cond: [(C {(Lit_Other "[")} {(-n)} {(DQ ($ VSub_Name "$EFI_ISO"))} {(Lit_Other "]")})] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ARGS) op: Equal rhs: { (DQ ("-pflash /usr/share/ovmf/bios.bin -usbdevice tablet -cdrom ") ($ VSub_Name "$EFI_ISO") (" -boot d -drive file=systemdisk.img,format=raw") ) } spids: [193] ) ] spids: [193] ) ] spids: [-1 190] ) (if_arm cond: [(C {(Lit_Other "[")} {(-n)} {(DQ ($ VSub_Name "$ISO"))} {(Lit_Other "]")})] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ARGS) op: Equal rhs: { (DQ ("-cdrom ") ($ VSub_Name "$ISO") (" -drive file=systemdisk.img,format=raw")) } spids: [215] ) ] spids: [215] ) ] spids: [200 212] ) (if_arm cond: [(C {(Lit_Other "[")} {(-n)} {(DQ ($ VSub_Name "$RAW"))} {(Lit_Other "]")})] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ARGS) op: Equal rhs: {(DQ ("-drive file=") ($ VSub_Name "$RAW") (",format=raw"))} spids: [241] ) ] spids: [241] ) ] spids: [222 234] ) (if_arm cond: [(C {(Lit_Other "[")} {(-n)} {(DQ ($ VSub_Name "$KERNEL"))} {(Lit_Other "]")})] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ARGS) op: Equal rhs: {(DQ ("-kernel ") ($ VSub_Name "$KERNEL"))} spids: [263] ) ] spids: [263] ) (If arms: [ (if_arm cond: [(C {(Lit_Other "[")} {(-n)} {(DQ ($ VSub_Name "$INITRD"))} {(Lit_Other "]")})] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ARGS) op: Equal rhs: {(DQ ($ VSub_Name "$ARGS") (" -initrd ") ($ VSub_Name "$INITRD"))} spids: [286] ) ] spids: [286] ) ] spids: [-1 283] ) ] spids: [-1 294] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ARGS) op: Equal rhs: {(DQ ($ VSub_Name "$ARGS") (" -drive file=systemdisk.img,format=raw"))} spids: [297] ) ] spids: [297] ) ] spids: [248 260] ) ] else_action: [ (SimpleCommand words: [{(echo)} {(DQ ("no recognised boot media"))}] redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(2)} spids:[312])] ) (C {(exit)} {(1)}) ] spids: [303 320] ) (AndOr children: [ (Pipeline children: [(C {(echo)} {(DQ ($ VSub_Name "$ARGS"))}) (C {(grep)} {(-q)} {(systemdisk)})] negated: False ) (C {(qemu-img)} {(create)} {(-f)} {(raw)} {(systemdisk.img)} {(256M)}) ] op_id: Op_DAmp ) (If arms: [ (if_arm cond: [(C {(Lit_Other "[")} {(-n)} {(DQ (${ VSub_Name CMDLINE))} {(Lit_Other "]")})] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:APPEND) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [(C {(cat)} {($ VSub_Name "$CMDLINE")})] ) left_token: spids: [371 375] ) ) } spids: [369] ) ] spids: [369] ) ] spids: [-1 366] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:APPEND) op: Equal rhs: {(DQ ($ VSub_Star "$*"))} spids: [381] ) ] spids: [381] ) ] spids: [378 386] ) (If arms: [ (if_arm cond: [(C {(Lit_Other "[")} {(-z)} {(DQ (${ VSub_Name APPEND))} {(Lit_Other "]")})] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:APPEND) op: Equal rhs: {(DQ ("console=ttyS0"))} spids: [405] ) ] spids: [405] ) ] spids: [-1 402] ) ] spids: [-1 410] ) (If arms: [ (if_arm cond: [ (AndOr children: [ (C {(Lit_Other "[")} {(-z)} {(DQ ($ VSub_Name "$EFI_ISO"))} {(Lit_Other "]")}) (C {(Lit_Other "[")} {(-z)} {(DQ ($ VSub_Name "$ISO"))} {(Lit_Other "]")}) ] op_id: Op_DAmp ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ARGS) op: Equal rhs: { (DQ ("-append ") (EscapedLiteralPart token:) (${ VSub_Name APPEND) (EscapedLiteralPart token:) (" ") (${ VSub_Name ARGS) ) } spids: [440] ) ] spids: [440] ) ] spids: [-1 437] ) ] spids: [-1 454] ) (C {(eval)} {(qemu-system-x86_64)} {(-machine)} {(q35) (Lit_Comma ",") (Lit_VarLike "accel=") (kvm) (Lit_Other ":") (tcg)} {(-device)} {(virtio-rng-pci)} {(-nographic)} {(-vnc)} {(none)} {(-m)} {(1024)} {($ VSub_Name "$ARGS")} ) ] )