q9 (2293B)
1 #!/usr/bin/env bash 2 set -euo pipefail 3 4 DISK="$HOME/misc/random/9front.qcow2" 5 DISK_SIZE="5G" 6 RAM="1024" 7 ISO_PATTERN="$HOME/misc/random/9front-*.iso" 8 9 QEMU_COMMON=( 10 -m "$RAM" 11 -hda "$DISK" 12 -vga std 13 -net nic 14 -net user 15 ) 16 17 if [[ "$(uname)" == "Linux" ]] && [[ -e /dev/kvm ]]; then 18 QEMU_COMMON+=(-enable-kvm) 19 fi 20 21 cmd_help() { 22 cat <<EOF 23 Usage: $(basename "$0") <command> 24 25 Commands: 26 download Download the latest 9front image 27 install Boot from ISO to install 28 run Boot the installed system 29 help Show this message 30 EOF 31 } 32 33 cmd_download() { 34 if compgen -G "$ISO_PATTERN" >/dev/null 2>&1; then 35 echo "ISO already present: $(compgen -G "$ISO_PATTERN" | head -1)" 36 return 37 fi 38 39 DOWNLOAD_DIR="$(dirname "$DISK")" 40 mkdir -p "$DOWNLOAD_DIR" 41 42 BASE_URL="https://9front.org/iso" 43 # Scrape the index page for the latest amd64 .iso.gz link 44 GZ_FILE=$(curl -s "$BASE_URL/" | 45 grep -oE '9front-[0-9]+\.amd64\.iso\.gz' | 46 sort -t- -k2 -rn | 47 head -1) 48 49 if [[ -z "$GZ_FILE" ]]; then 50 echo "Could not find ISO. Check $BASE_URL manually." 51 exit 1 52 fi 53 54 TORRENT_URL="$BASE_URL/$GZ_FILE.torrent" 55 56 echo "Downloading via torrent: $TORRENT_URL" 57 if command -v aria2c &>/dev/null; then 58 aria2c --seed-time=0 --dir="$DOWNLOAD_DIR" "$TORRENT_URL" 59 else 60 comma aria2c --seed-time=0 --dir="$DOWNLOAD_DIR" "$TORRENT_URL" 61 fi 62 63 echo "Decompressing $GZ_FILE" 64 gunzip "$DOWNLOAD_DIR/$GZ_FILE" 65 echo "Done: $(compgen -G "$ISO_PATTERN")" 66 } 67 68 cmd_install() { 69 ISO=$(compgen -G "$ISO_PATTERN" 2>/dev/null | head -1) || true 70 if [[ -z "$ISO" ]]; then 71 echo "No ISO found. Run: $0 download" 72 exit 1 73 fi 74 75 if [[ ! -f "$DISK" ]]; then 76 echo "Creating disk image $DISK ($DISK_SIZE)" 77 if command -v qemu-img &>/dev/null; then 78 qemu-img create -f qcow2 "$DISK" "$DISK_SIZE" 79 else 80 comma qemu-img create -f qcow2 "$DISK" "$DISK_SIZE" 81 fi 82 fi 83 84 echo "Booting installer from $ISO" 85 echo "At the installer prompt run: inst/start" 86 echo "" 87 qemu-system-x86_64 \ 88 "${QEMU_COMMON[@]}" \ 89 -cdrom "$ISO" \ 90 -boot d 91 } 92 93 cmd_run() { 94 if [[ ! -f "$DISK" ]]; then 95 echo "Disk image not found. Run: $0 install" 96 exit 1 97 fi 98 99 echo "Booting $DISK" 100 qemu-system-x86_64 "${QEMU_COMMON[@]}" 101 } 102 103 case "${1:-help}" in 104 download) cmd_download ;; 105 install) cmd_install ;; 106 run) cmd_run ;; 107 help | *) cmd_help ;; 108 esac