summaryrefslogtreecommitdiffstats
path: root/scripts/build-image-release.sh
diff options
context:
space:
mode:
authorsalmonik <salmonik@tuta.io>2026-08-27 18:35:59 +0200
committersalmonik <salmonik@tuta.io>2026-08-27 18:35:59 +0200
commitacd0fe1bc38746f36fff24a7497041e5c5010977 (patch)
tree5db6335b732409c7f180f8514196c52a7b88f434 /scripts/build-image-release.sh
parentGUI: fire-and-forget spawn for /bin/gui binaries (diff)
downloadrs-dos-acd0fe1bc38746f36fff24a7497041e5c5010977.tar.gz
rs-dos-acd0fe1bc38746f36fff24a7497041e5c5010977.zip
scripts: migrate all QEMU/test scripts to single system image
boot.sh: replace esp/ + DISK_IMG with single SYSTEM_IMG on ide.0 (hooks into mksystem.sh --force for auto-staging). boot-image.sh: delegate to mksystem.sh --chain (build-image.sh deleted). build-image-release.sh: delegate to mksystem.sh --chain --gpt. qemu.sh: flexible launcher uses SYSTEM_IMG; --chain flag for full-chain build. test-disk.sh: drop ESP_DIR (mksystem.sh stages everything). test-fault.sh: boot system.img on ide.0 + CRASHLOG stick on ide.1; replace deleted mkdisk.sh with inline mkfs.fat. test-gfx.sh: system.img on ide.0, stage via mksystem.sh. test-mouse.sh: system.img on ide.0, stage via mksystem.sh. test-msg.sh: system.img on ide.0, stage via mksystem.sh. Makefile: remove stale build-image.sh/mkdisk.sh references from help; image target delegates to mksystem.sh --chain. All scripts syntax-checked (bash -n). build-image.sh and mkdisk.sh no longer referenced anywhere.
Diffstat (limited to '')
-rwxr-xr-xscripts/build-image-release.sh91
1 files changed, 11 insertions, 80 deletions
diff --git a/scripts/build-image-release.sh b/scripts/build-image-release.sh
index 32f8f91..e4c5250 100755
--- a/scripts/build-image-release.sh
+++ b/scripts/build-image-release.sh
@@ -1,99 +1,30 @@
1#!/usr/bin/env bash 1#!/usr/bin/env bash
2# 2#
3# scripts/build-image.sh — assemble a bootable rs-dos disk image (UEFI/GPT) 3# scripts/build-image-release.sh — build the release GPT disk image
4# 4#
5# Layout: 5# Produces a single dd-able system image with the release build of
6# Partition 1: ESP (FAT32) — rsboot bootloader + kernel 6# the kernel, rsboot bootloader, and all binaries in /bin/.
7#
8# Output:
9# rs-dos.img (or custom path) — bootable raw disk image for UEFI
10# 7#
11# Usage: 8# Usage:
12# ./scripts/build-image.sh [output.img] 9# ./scripts/build-image-release.sh [output.img]
13# 10#
14set -euo pipefail 11set -euo pipefail
15 12
16SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" 13SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
17PROJECT_DIR="$(dirname "$SCRIPT_DIR")" 14PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
18
19cd "$PROJECT_DIR" 15cd "$PROJECT_DIR"
20 16
21BUILD_DIR="$PROJECT_DIR/build" 17IMAGE="${1:-rs-dos.img}"
22ESP_DIR="$PROJECT_DIR/esp"
23
24IMAGE="${1:-$PROJECT_DIR/rs-dos.img}"
25TARGET=x86_64-unknown-uefi
26PROFILE=release
27OUT_DIR="target/${TARGET}/${PROFILE}"
28
29BOOTLOADER="$BUILD_DIR/bootloader/BOOTX64.EFI"
30KERNEL="$OUT_DIR/rsdos.efi"
31BZIMAGE="$ESP_DIR/bzImage"
32INITRD="$ESP_DIR/initramfs.cpio.gz"
33BOOT_EFI="$ESP_DIR/EFI/BOOT/BOOTX64.EFI"
34
35ESP_START=2048 # 1 MiB offset (standard alignment)
36ESP_SIZE_MB=64
37
38IMAGE_SIZE_MB=$((ESP_SIZE_MB + 2)) # ESP + GPT gap + backup
39
40# ---- checks ----
41for cmd in sfdisk mkfs.vfat mcopy truncate dd; do
42 if ! command -v "$cmd" &>/dev/null; then
43 echo "Error: $cmd not found"
44 exit 1
45 fi
46done
47
48# ---- build kernel ----
49echo "[1/4] Building kernel..."
50cargo build --release --package rsdos --target x86_64-unknown-uefi ${CARGO_FLAGS:-}
51
52# ---- build bootloader ----
53echo "[2/4] Building bootloader..."
54if [ ! -f "$BOOTLOADER" ]; then
55 "$SCRIPT_DIR/build-bootloader.sh"
56fi
57
58# ---- assemble ESP ----
59echo "[3/4] Assembling ESP..."
60mkdir -p "$ESP_DIR/EFI/BOOT"
61cp "$KERNEL" "$BZIMAGE"
62cp "$BOOTLOADER" "$BOOT_EFI"
63if [ ! -f "$INITRD" ]; then
64 printf '' | gzip >"$INITRD"
65fi
66
67# ---- create disk image ----
68echo "[4/4] Writing disk image..."
69rm -f "$IMAGE"
70truncate -s "${IMAGE_SIZE_MB}M" "$IMAGE"
71
72# GPT partition table: single EFI System partition
73sfdisk --quiet "$IMAGE" <<EOF
74label: gpt
75type=U, start=$ESP_START, size=+
76EOF
77
78# Build FAT32 image with ESP contents
79ESP_IMG=$(mktemp)
80truncate -s "${ESP_SIZE_MB}M" "$ESP_IMG"
81mkfs.vfat -F 32 -n "RS-DOS" "$ESP_IMG" >/dev/null 2>&1
82 18
83# Copy files into FAT 19echo "=== Building release kernel ==="
84mmd -i "$ESP_IMG" ::/EFI 2>/dev/null || true 20cargo build --release --package rsdos --target x86_64-unknown-uefi
85mmd -i "$ESP_IMG" ::/EFI/BOOT 2>/dev/null || true
86mcopy -i "$ESP_IMG" "$BOOT_EFI" ::/EFI/BOOT/BOOTX64.EFI
87mcopy -i "$ESP_IMG" "$BZIMAGE" ::/bzImage 2>/dev/null || true
88mcopy -i "$ESP_IMG" "$INITRD" ::/initramfs.cpio.gz 2>/dev/null || true
89 21
90# Inject FAT into image at partition offset 22echo "=== Building system image (chain + GPT) ==="
91dd if="$ESP_IMG" of="$IMAGE" bs=512 seek="$ESP_START" conv=notrunc 2>/dev/null 23"$SCRIPT_DIR/mksystem.sh" --chain --gpt "$IMAGE"
92rm -f "$ESP_IMG"
93 24
94echo "" 25echo ""
95echo "=== Done: $IMAGE ===" 26echo "=== Done: $IMAGE ==="
96ls -lh "$IMAGE" 27ls -lh "$IMAGE"
97echo "" 28echo ""
98echo "Boot with: ./scripts/boot-image.sh" 29echo "Boot with: ./scripts/boot-image.sh --gui"
99echo "USB: sudo dd if=$IMAGE of=/dev/sdX bs=4M status=progress" 30echo "USB: sudo dd if=$IMAGE of=/dev/sdX bs=4M status=progress"