diff --git a/sw/stateless-kiosk/kiosk-browser.nix b/sw/stateless-kiosk/kiosk-browser.nix index 4cc2c74..192c095 100644 --- a/sw/stateless-kiosk/kiosk-browser.nix +++ b/sw/stateless-kiosk/kiosk-browser.nix @@ -56,7 +56,17 @@ let fi fi - sleep 2 + # Wait for the URL to resolve, up to 30 seconds + timeout=30 + elapsed=0 + while ! ${pkgs.curl}/bin/curl -sf --max-time 2 "$URL" >/dev/null; do + sleep 1 + elapsed=$((elapsed+1)) + if [ "$elapsed" -ge "$timeout" ]; then + echo "ERROR: $URL did not resolve after $timeout seconds" >&2 + exit 1 + fi + done exec ${pkgs.chromium}/bin/chromium --kiosk --noerrdialogs --disable-infobars --disable-session-crashed-bubble "$URL" ''; diff --git a/sw/stateless-kiosk/net.nix b/sw/stateless-kiosk/net.nix index 4ddc05b..e0e9d27 100644 --- a/sw/stateless-kiosk/net.nix +++ b/sw/stateless-kiosk/net.nix @@ -1,45 +1,24 @@ -# This module configures the network for the stateless kiosk. -# It uses systemd-networkd to set up a VLAN (ID 5) on the primary interface. +# This module configures the network for the stateless kiosk using base networking (no systemd-networkd). { config, lib, pkgs, inputs, ... }: { - # Minimal container networking (systemd-networkd) networking = { - useNetworkd = true; + useNetworkd = false; networkmanager.enable = false; - dhcpcd.enable = false; + dhcpcd.enable = true; useDHCP = false; useHostResolvConf = false; - }; - systemd.network = { - enable = true; - wait-online.enable = true; - - networks."10-wired" = { - matchConfig.Type = "ether"; - networkConfig = { - LinkLocalAddressing = false; - DHCP = "no"; - VLAN = [ "vlan5" ]; - }; - linkConfig.RequiredForOnline = "no"; + # Set up VLAN 5 on the primary interface (assume eth0, adjust if needed) + vlans.vlan5 = { + id = 5; + interface = "eth0"; }; - netdevs."20-vlan5" = { - netdevConfig = { - Kind = "vlan"; - Name = "vlan5"; - }; - vlanConfig.Id = 5; - }; - - networks."30-vlan5" = { - matchConfig.Name = "vlan5"; - networkConfig = { - DHCP = "ipv4"; - IPv6AcceptRA = true; - }; - linkConfig.RequiredForOnline = "routable"; + interfaces.vlan5 = { + useDHCP = true; }; }; + + # Disable systemd-networkd and systemd-hostnamed + systemd.network.enable = false; } diff --git a/sw/stateless-kiosk/services.nix b/sw/stateless-kiosk/services.nix index ddd6596..2416549 100644 --- a/sw/stateless-kiosk/services.nix +++ b/sw/stateless-kiosk/services.nix @@ -30,8 +30,8 @@ in systemd.services.dynamic-hostname = { description = "Set hostname based on MAC address"; wantedBy = [ "sysinit.target" ]; - wants = [ "default.target" ]; - after = [ "default.target" ]; + before = [ "network-pre.target" ]; + wants = [ "network-pre.target" ]; serviceConfig = { Type = "oneshot"; RemainAfterExit = true; @@ -44,10 +44,11 @@ in case "$MAC" in ${shellCases} - *) NEW_HOST="nix-station-unregistered" ;; + *) NEW_HOST="nix-station-anon" ;; esac ${pkgs.nettools}/bin/hostname "$NEW_HOST" + ''; }; };