From 9953a99010068fd871ff519edcf25ff6215178c2 Mon Sep 17 00:00:00 2001 From: Dorian Date: Thu, 2 Apr 2026 20:28:53 +0100 Subject: [PATCH] =?UTF-8?q?fix:=20v1.3.3=20=E2=80=94=20firmware,=20fedimin?= =?UTF-8?q?t=20perms,=20GRUB=20fallback,=20data=20dirs,=20Rust=20warnings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add firmware-linux-nonfree to ISO (fixes missing Realtek NIC firmware) - Pre-create nbxplorer/Main and btcpay/Main data directories - Fix fedimint data dir permissions (chmod 775 for non-root container) - GRUB GFX fallback: gfxpayload=keep + console fallback for incompatible hardware - Kill stale Chromium before kiosk restart (prevents duplicate processes) - Suppress Rust warnings: #[allow(dead_code)] on run_boot_reconciliation, #[allow(unused_assignments)] on history_dirty - Version bump to 1.3.3 Co-Authored-By: Claude Opus 4.6 (1M context) --- core/archipelago/Cargo.toml | 2 +- core/archipelago/src/crash_recovery.rs | 1 + core/archipelago/src/health_monitor.rs | 1 + image-recipe/build-auto-installer-iso.sh | 10 +++++++++- image-recipe/configs/archipelago-kiosk-launcher.sh | 4 ++++ neode-ui/package.json | 2 +- scripts/first-boot-containers.sh | 5 +++-- 7 files changed, 20 insertions(+), 5 deletions(-) diff --git a/core/archipelago/Cargo.toml b/core/archipelago/Cargo.toml index af219959..bb272d69 100644 --- a/core/archipelago/Cargo.toml +++ b/core/archipelago/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "archipelago" -version = "1.3.2" +version = "1.3.3" edition = "2021" description = "Archipelago Bitcoin Node OS - Native backend" authors = ["Archipelago Team"] diff --git a/core/archipelago/src/crash_recovery.rs b/core/archipelago/src/crash_recovery.rs index a1c998ee..a659c97b 100644 --- a/core/archipelago/src/crash_recovery.rs +++ b/core/archipelago/src/crash_recovery.rs @@ -409,6 +409,7 @@ fn container_boot_tier(name: &str) -> u8 { /// Run the reconciliation script after boot to fix any config drift. /// Ensures all containers match their canonical specs from container-specs.sh. +#[allow(dead_code)] pub async fn run_boot_reconciliation() { let script = "/home/archipelago/archy/scripts/reconcile-containers.sh"; if !std::path::Path::new(script).exists() { diff --git a/core/archipelago/src/health_monitor.rs b/core/archipelago/src/health_monitor.rs index b13f235d..ef2be988 100644 --- a/core/archipelago/src/health_monitor.rs +++ b/core/archipelago/src/health_monitor.rs @@ -491,6 +491,7 @@ pub fn spawn_health_monitor(state: Arc, data_dir: PathBuf) { // Load persistent restart history and seed the in-memory tracker let mut restart_history = RestartHistory::load(&data_dir).await; restart_history.seed_tracker(&mut tracker); + #[allow(unused_assignments)] let mut history_dirty = false; loop { diff --git a/image-recipe/build-auto-installer-iso.sh b/image-recipe/build-auto-installer-iso.sh index dfe001e3..da538ffc 100755 --- a/image-recipe/build-auto-installer-iso.sh +++ b/image-recipe/build-auto-installer-iso.sh @@ -289,6 +289,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ firmware-realtek \ firmware-iwlwifi \ firmware-misc-nonfree \ + firmware-linux-nonfree \ intel-microcode \ amd64-microcode \ xorg \ @@ -2477,6 +2478,10 @@ rm -f /mnt/target/usr/share/initramfs-tools/hooks/live* 2>/dev/null || true # Suppress os-prober warning in GRUB echo "GRUB_DISABLE_OS_PROBER=true" >> /mnt/target/etc/default/grub +# GFX fallback for hardware without graphical GRUB support +echo 'GRUB_GFXMODE=auto' >> /mnt/target/etc/default/grub +echo 'GRUB_GFXPAYLOAD_LINUX=keep' >> /mnt/target/etc/default/grub +echo 'GRUB_TERMINAL_OUTPUT=gfxterm' >> /mnt/target/etc/default/grub # Install Archipelago GRUB theme on target system if [ -d "$BOOT_MEDIA/boot/grub/themes/archipelago" ]; then @@ -2947,12 +2952,15 @@ fi set timeout=5 set default=0 -# Load font for graphical menu +# Load font for graphical menu — fallback to text mode on hardware without gfxterm if loadfont ($root)/boot/grub/font.pf2; then set gfxmode=auto + set gfxpayload=keep insmod gfxterm insmod png terminal_output gfxterm +else + terminal_output console fi # Archipelago GRUB theme diff --git a/image-recipe/configs/archipelago-kiosk-launcher.sh b/image-recipe/configs/archipelago-kiosk-launcher.sh index 83392f69..25599263 100644 --- a/image-recipe/configs/archipelago-kiosk-launcher.sh +++ b/image-recipe/configs/archipelago-kiosk-launcher.sh @@ -24,6 +24,10 @@ xset s noblank 2>/dev/null # Hide cursor unclutter -idle 3 -root & +# Kill any stale Chromium instances before starting +pkill -u archipelago -f 'chromium.*kiosk' 2>/dev/null +sleep 1 + # Run Chromium as archipelago user in a restart loop while true; do sudo -u archipelago env DISPLAY=:0 HOME=/home/archipelago chromium --kiosk \ diff --git a/neode-ui/package.json b/neode-ui/package.json index c616c2a0..093e8a6d 100644 --- a/neode-ui/package.json +++ b/neode-ui/package.json @@ -1,7 +1,7 @@ { "name": "neode-ui", "private": true, - "version": "1.3.2", + "version": "1.3.3", "type": "module", "scripts": { "start": "./start-dev.sh", diff --git a/scripts/first-boot-containers.sh b/scripts/first-boot-containers.sh index 38133623..dc17f71a 100644 --- a/scripts/first-boot-containers.sh +++ b/scripts/first-boot-containers.sh @@ -649,7 +649,7 @@ if ! $DOCKER ps --format '{{.Names}}' 2>/dev/null | grep -q archy-nbxplorer; the $DOCKER start archy-nbxplorer 2>/dev/null || true else log "Creating NBXplorer..." - mkdir -p /var/lib/archipelago/nbxplorer + mkdir -p /var/lib/archipelago/nbxplorer/Main $DOCKER run -d --name archy-nbxplorer --restart unless-stopped \ --health-cmd="curl -sf http://localhost:32838/ || exit 1" --health-interval=120s --health-timeout=5s --health-retries=3 \ --memory=$(mem_limit archy-nbxplorer) --network archy-net --network-alias archy-nbxplorer \ @@ -667,7 +667,7 @@ track_container "archy-nbxplorer" if ! $DOCKER ps --format '{{.Names}}' 2>/dev/null | grep -q btcpay-server; then log "Creating BTCPay Server..." - mkdir -p /var/lib/archipelago/btcpay + mkdir -p /var/lib/archipelago/btcpay/Main $DOCKER run -d --name btcpay-server --restart unless-stopped \ --health-cmd="curl -sf http://localhost:49392/ || exit 1" --health-interval=120s --health-timeout=5s --health-retries=3 \ --memory=$(mem_limit btcpay-server) --network archy-net --network-alias btcpay-server \ @@ -739,6 +739,7 @@ track_container "lnd" if ! $DOCKER ps --format '{{.Names}}' 2>/dev/null | grep -q fedimint; then log "Creating Fedimint..." mkdir -p /var/lib/archipelago/fedimint + chmod 775 /var/lib/archipelago/fedimint # fedimint container runs as non-root $DOCKER run -d --name fedimint --restart unless-stopped \ --health-cmd="curl -sf http://localhost:8174/ || exit 1" --health-interval=120s --health-timeout=5s --health-retries=3 \ --memory=$(mem_limit fedimint) --network archy-net --network-alias fedimint \