nix

configuration files that power my machines
Log | Files | Refs | README | LICENSE

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