diff --git a/.gitea/workflows/test-modules.yaml b/.gitea/workflows/test-modules.yaml index bd26161..cfd6c37 100644 --- a/.gitea/workflows/test-modules.yaml +++ b/.gitea/workflows/test-modules.yaml @@ -52,3 +52,28 @@ jobs: echo "Failed to publish package to Gitea Packages ($STATUS): $BODY" exit 1 fi + + - name: Build & Publish Bootable Installer ISO + run: | + echo "Building NaxOS Bootable Installer ISO..." + nix build .#iso --option max-jobs auto + ISO_FILE=$(ls result/iso/*.iso | head -n 1) + echo "Built ISO image: $ISO_FILE ($(du -h "$ISO_FILE" | cut -f1))" + sha256sum "$ISO_FILE" > "$ISO_FILE.sha256" + + TOKEN="${{ secrets.PACKAGE_TOKEN }}" + if [ -z "$TOKEN" ]; then + TOKEN="${{ secrets.GITEA_TOKEN }}" + fi + + ISO_NAME=$(basename "$ISO_FILE") + echo "Publishing $ISO_NAME to Gitea Packages..." + curl -s -X PUT \ + -H "Authorization: token ${TOKEN}" \ + --upload-file "$ISO_FILE" \ + "${{ github.server_url }}/api/packages/naxos/generic/naxos-installer-iso/1.0.0/$ISO_NAME" || echo "ISO package already exists" + + curl -s -X PUT \ + -H "Authorization: token ${TOKEN}" \ + --upload-file "$ISO_FILE.sha256" \ + "${{ github.server_url }}/api/packages/naxos/generic/naxos-installer-iso/1.0.0/$ISO_NAME.sha256" || echo "Checksum already exists" diff --git a/iso/scripts/naxos-installer.sh b/iso/scripts/naxos-installer.sh index b11f7b1..7507222 100755 --- a/iso/scripts/naxos-installer.sh +++ b/iso/scripts/naxos-installer.sh @@ -143,6 +143,42 @@ if [ "$CREATE_POOL" = true ] && [ -n "${DISK_DEVICES:-}" ]; then zfs create "$POOL_NAME/container" fi +# ------------------------------------------------------------------------------ +# Install NaxOS System Modules, Web Dashboard & Management API +# ------------------------------------------------------------------------------ +echo -e "\n${BOLD}[*] Deploying NaxOS Core Modules, Management Daemon & Web UI...${NC}" + +mkdir -p /mnt/etc/nixos/naxos-os +mkdir -p /mnt/opt/naxos/ui/dist +mkdir -p /mnt/opt/naxos/api +mkdir -p /mnt/var/lib/naxos +mkdir -p /mnt/etc/naxos/repo + +# 1. Install NaxOS NixOS modules +echo " -> Deploying NaxOS appliance modules to /etc/nixos/naxos-os..." +if [ -d "/etc/naxos/naxos-os/modules" ]; then + cp -r /etc/naxos/naxos-os/* /mnt/etc/nixos/naxos-os/ +else + curl -sSL "https://git.lholz.de/api/packages/naxos/generic/naxos-os-modules/1.0.0/naxos-os-modules.tar.gz" | tar -xz -C /mnt/etc/nixos/naxos-os 2>/dev/null || \ + git clone https://git.lholz.de/naxos/naxos-os.git /mnt/etc/nixos/naxos-os +fi + +# 2. Install NaxOS Web Dashboard SPA +echo " -> Deploying NaxOS Web Dashboard into /opt/naxos/ui/dist..." +if [ -d "/opt/naxos/ui/dist" ]; then + cp -r /opt/naxos/ui/dist/* /mnt/opt/naxos/ui/dist/ +else + curl -sSL "https://git.lholz.de/api/packages/naxos/generic/naxos-ui/1.0.0/naxos-ui-dist.tar.gz" | tar -xz -C /mnt/opt/naxos/ui/dist +fi + +# 3. Install NaxOS Management API Daemon +echo " -> Deploying NaxOS Management Daemon into /opt/naxos/api..." +if [ -d "/opt/naxos/api/dist" ]; then + cp -r /opt/naxos/api/* /mnt/opt/naxos/api/ +else + curl -sSL "https://git.lholz.de/api/packages/naxos/generic/naxos-api/1.0.0/naxos-api-1.0.0.tgz" | tar -xz --strip-components=1 -C /mnt/opt/naxos/api +fi + # Generate unique hostId HOST_ID=$(head -c4 /dev/urandom | od -A none -t x4 | tr -d ' ') @@ -153,20 +189,24 @@ cat << NIXCONFIG > /mnt/etc/nixos/configuration.nix { imports = [ ./hardware-configuration.nix + ./naxos-os/modules + ./naxos-os/profiles/nas-appliance.nix ]; + # Bootloader & Filesystem boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; boot.supportedFilesystems = [ "zfs" ]; + # Appliance Identity & Network networking.hostName = "$HOSTNAME"; networking.hostId = "$HOST_ID"; networking.useDHCP = lib.mkDefault $([ "$USE_DHCP" = "yes" ] && echo "true" || echo "false"); - # Safe ZFS extra pools + # OpenZFS storage pools boot.zfs.extraPools = [ "$POOL_NAME" $([ -n "$IMPORTED_POOL" ] && echo "\"$IMPORTED_POOL\"") ]; - # Administrator user + # System Administrator Account users.users.$ADMIN_USER = { isNormalUser = true; extraGroups = [ "wheel" "docker" "video" "render" ]; @@ -177,6 +217,18 @@ cat << NIXCONFIG > /mnt/etc/nixos/configuration.nix # SSH Access services.openssh.enable = true; + # NaxOS Services Activation + services.naxos.api.enable = true; + services.naxos.ui.enable = true; + services.naxos.storage.enable = true; + services.naxos.monitoring.enable = true; + services.naxos.perses.enable = true; + services.naxos.shares.samba.enable = true; + services.naxos.shares.nfs.enable = true; + services.naxos.appEngine.enable = true; + services.naxos.gitops.enable = true; + services.naxos.selfUpdate.enable = true; + # State version system.stateVersion = "24.11"; } @@ -188,6 +240,6 @@ nixos-install --no-root-passwd echo -e "\n${BOLD}${GREEN}==============================================${NC}" echo -e "${BOLD}${GREEN} NaxOS Installation Complete!${NC}" echo -e "${BOLD}${GREEN} Remove the installation USB/ISO and reboot.${NC}" -echo -e "${BOLD}${GREEN} Access Dashboard on: http://$HOSTNAME.local${NC}" +echo -e "${BOLD}${GREEN} Access Web Dashboard on: http://$HOSTNAME.local${NC}" +echo -e "${BOLD}${GREEN} Management API: http://$HOSTNAME.local/api/v1/system/status${NC}" echo -e "${BOLD}${GREEN}==============================================${NC}" -EOF