/ scripts / run-qemu.sh
run-qemu.sh
 1  #!/bin/bash
 2  set -e
 3  
 4  # QEMU runner script for libp2p-efi
 5  # Usage: ./scripts/run-qemu.sh [path-to-efi-binary]
 6  
 7  SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
 8  PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
 9  EFI_BINARY="${1:-$PROJECT_DIR/target/x86_64-unknown-uefi/debug/libp2p-efi.efi}"
10  
11  # OVMF firmware paths (check common locations)
12  OVMF_PATHS=(
13      "/usr/share/edk2/x64/OVMF.4m.fd"
14      "/usr/share/ovmf/x64/OVMF.fd"
15      "/usr/share/ovmf/OVMF.fd"
16      "/usr/share/edk2-ovmf/x64/OVMF.fd"
17      "/usr/share/OVMF/OVMF_CODE.fd"
18      "/usr/share/qemu/OVMF.fd"
19  )
20  
21  OVMF=""
22  for path in "${OVMF_PATHS[@]}"; do
23      if [[ -f "$path" ]]; then
24          OVMF="$path"
25          break
26      fi
27  done
28  
29  if [[ -z "$OVMF" ]]; then
30      echo "Error: OVMF firmware not found. Install ovmf package."
31      echo "  Arch: pacman -S edk2-ovmf"
32      echo "  Ubuntu/Debian: apt install ovmf"
33      echo "  Fedora: dnf install edk2-ovmf"
34      exit 1
35  fi
36  
37  if [[ ! -f "$EFI_BINARY" ]]; then
38      echo "Error: EFI binary not found: $EFI_BINARY"
39      echo "Run 'cargo build' first."
40      exit 1
41  fi
42  
43  # Create ESP (EFI System Partition) structure
44  ESP_DIR=$(mktemp -d)
45  mkdir -p "$ESP_DIR/EFI/BOOT"
46  cp "$EFI_BINARY" "$ESP_DIR/EFI/BOOT/BOOTX64.EFI"
47  
48  cleanup() {
49      rm -rf "$ESP_DIR"
50  }
51  trap cleanup EXIT
52  
53  echo "Starting QEMU with UEFI firmware..."
54  echo "  OVMF: $OVMF"
55  echo "  Binary: $EFI_BINARY"
56  echo ""
57  
58  qemu-system-x86_64 \
59      -bios "$OVMF" \
60      -drive format=raw,file=fat:rw:"$ESP_DIR" \
61      -device virtio-net-pci,netdev=net0 \
62      -netdev user,id=net0,hostfwd=udp::9999-:9999 \
63      -nographic \
64      -serial mon:stdio