Phase 13.1 — script run-qemu.sh pour le test runtime
Bootstrap automatique des étapes 1 et 2 de la procédure 13.1 : mount harddrive.img via redoxfs (FUSE) → copy compositor + client dans /usr/bin → umount → exec make qemu. Sécurité : - set -euo pipefail - trap EXIT/INT/TERM garantit l'umount même sur Ctrl+C - pré-vérifs sur les 4 fichiers requis (image, redoxfs, 2 binaires) - mountpoint -q + boucle 5 s pour confirmer le mount FUSE - sync avant umount Options : - ./run-qemu.sh cycle complet - ./run-qemu.sh --no-qemu juste mount + copy + umount (CI / itération) - ./run-qemu.sh --help affiche le bloc de doc en tête de fichier - REDOX_SRC=... override le chemin du checkout redox-src Une fois Redox bootée : Ctrl+Alt+F2 → root/password → RUST_LOG=info redox-wl-compositor & sleep 1 ; redox-wl-real-client-simple-window Leyoda 2026 – GPLv3
This commit is contained in:
parent
530d022840
commit
0d8032b5ff
1 changed files with 119 additions and 0 deletions
119
run-qemu.sh
Executable file
119
run-qemu.sh
Executable file
|
|
@ -0,0 +1,119 @@
|
|||
#!/usr/bin/env bash
|
||||
# Phase 13.1 — bootstrap runtime test : copie compositor + client tiers
|
||||
# dans l'image Redox, démonte, lance `make qemu`.
|
||||
#
|
||||
# Usage :
|
||||
# ./run-qemu.sh # cycle complet (mount, copy, umount, qemu)
|
||||
# ./run-qemu.sh --no-qemu # juste mount + copy + umount (pas de boot)
|
||||
# REDOX_SRC=/autre/chemin ./run-qemu.sh
|
||||
#
|
||||
# Pré-requis :
|
||||
# - Avoir cross-compilé les deux binaires :
|
||||
# cd crates/redox-wl-compositor && redoxer build --release
|
||||
# cd crates/redox-wl-real-client-simple-window && redoxer build --release
|
||||
# - redoxfs accessible dans REDOX_SRC/build/fstools/bin/
|
||||
# - L'image harddrive.img présente dans REDOX_SRC/build/x86_64/desktop/
|
||||
# - PAS de QEMU déjà ouvert sur la même image (corromprait le disque).
|
||||
#
|
||||
# Une fois Redox bootée :
|
||||
# Ctrl+Alt+F2 → VT 2 (texte, sans Orbital)
|
||||
# login root / password
|
||||
# RUST_LOG=info redox-wl-compositor &
|
||||
# sleep 1
|
||||
# redox-wl-real-client-simple-window
|
||||
set -euo pipefail
|
||||
|
||||
ROOT="$(cd "$(dirname "$0")" && pwd)"
|
||||
REDOX_SRC="${REDOX_SRC:-$HOME/Projets/Redox/redox-src}"
|
||||
IMAGE="$REDOX_SRC/build/x86_64/desktop/harddrive.img"
|
||||
REDOXFS="$REDOX_SRC/build/fstools/bin/redoxfs"
|
||||
MOUNT="${MOUNT:-/tmp/redox-mnt}"
|
||||
|
||||
COMPOSITOR_BIN="$ROOT/crates/redox-wl-compositor/target/x86_64-unknown-redox/release/redox-wl-compositor"
|
||||
CLIENT_BIN="$ROOT/crates/redox-wl-real-client-simple-window/target/x86_64-unknown-redox/release/redox-wl-real-client-simple-window"
|
||||
|
||||
NO_QEMU=0
|
||||
for arg in "$@"; do
|
||||
case "$arg" in
|
||||
--no-qemu) NO_QEMU=1 ;;
|
||||
-h|--help)
|
||||
awk '/^# / { sub(/^# ?/, ""); print; next } /^[^#]/ { exit }' "$0"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo "ERR : option inconnue : $arg" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
cleanup() {
|
||||
local exit_code=$?
|
||||
if mountpoint -q "$MOUNT" 2>/dev/null; then
|
||||
echo "==> cleanup : umount $MOUNT"
|
||||
fusermount -u "$MOUNT" 2>/dev/null || true
|
||||
fi
|
||||
if [[ -d "$MOUNT" ]] && ! mountpoint -q "$MOUNT" 2>/dev/null; then
|
||||
rmdir "$MOUNT" 2>/dev/null || true
|
||||
fi
|
||||
exit $exit_code
|
||||
}
|
||||
trap cleanup EXIT INT TERM
|
||||
|
||||
# --- 1. Pré-vérifs ---
|
||||
missing=0
|
||||
for f in "$IMAGE" "$REDOXFS" "$COMPOSITOR_BIN" "$CLIENT_BIN"; do
|
||||
if [[ ! -e "$f" ]]; then
|
||||
echo "ERR : introuvable : $f" >&2
|
||||
missing=1
|
||||
fi
|
||||
done
|
||||
if [[ $missing -ne 0 ]]; then
|
||||
echo >&2
|
||||
echo "Si un binaire manque, cross-compile via :" >&2
|
||||
echo " cd crates/<crate> && redoxer build --release" >&2
|
||||
echo "Si redoxfs/image manquent, ajuste REDOX_SRC=... (actuel : $REDOX_SRC)" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# --- 2. Mount ---
|
||||
mkdir -p "$MOUNT"
|
||||
echo "==> monter $IMAGE -> $MOUNT"
|
||||
"$REDOXFS" "$IMAGE" "$MOUNT" &
|
||||
REDOXFS_PID=$!
|
||||
|
||||
# Attendre que le mount soit effectif (redoxfs prend ~100-500 ms à se setup)
|
||||
for i in {1..50}; do
|
||||
if mountpoint -q "$MOUNT"; then
|
||||
break
|
||||
fi
|
||||
sleep 0.1
|
||||
if [[ $i -eq 50 ]]; then
|
||||
echo "ERR : mount $MOUNT n'a pas abouti après 5s" >&2
|
||||
kill $REDOXFS_PID 2>/dev/null || true
|
||||
exit 2
|
||||
fi
|
||||
done
|
||||
echo " monté (pid redoxfs=$REDOXFS_PID)"
|
||||
|
||||
# --- 3. Copy ---
|
||||
echo "==> copier les binaires dans /usr/bin/"
|
||||
cp -v "$COMPOSITOR_BIN" "$MOUNT/usr/bin/"
|
||||
cp -v "$CLIENT_BIN" "$MOUNT/usr/bin/"
|
||||
|
||||
# --- 4. umount avant make qemu (sinon QEMU et FUSE se battent sur le même fichier) ---
|
||||
echo "==> démonter $MOUNT"
|
||||
sync
|
||||
fusermount -u "$MOUNT"
|
||||
rmdir "$MOUNT" 2>/dev/null || true
|
||||
trap - EXIT INT TERM # plus rien à cleaner
|
||||
|
||||
if [[ $NO_QEMU -eq 1 ]]; then
|
||||
echo "==> --no-qemu : on s'arrête là."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# --- 5. Boot QEMU ---
|
||||
echo "==> lancer make qemu (Ctrl+Alt+F2 pour VT2 ; login root / password)"
|
||||
cd "$REDOX_SRC"
|
||||
exec make qemu audio=no QEMU_USER_FLAGS="-k fr"
|
||||
Loading…
Add table
Add a link
Reference in a new issue