feat(installer): deploy naxos-api, ui, and modules during install, and build ISO in CI
Test NaxOS Module Configurations / test-modules (push) Successful in 9m20s

This commit is contained in:
Lukas Holzner
2026-09-04 09:54:08 +02:00
parent e54d46e9f5
commit bd1772482d
2 changed files with 81 additions and 4 deletions
+25
View File
@@ -52,3 +52,28 @@ jobs:
echo "Failed to publish package to Gitea Packages ($STATUS): $BODY" echo "Failed to publish package to Gitea Packages ($STATUS): $BODY"
exit 1 exit 1
fi 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"
+56 -4
View File
@@ -143,6 +143,42 @@ if [ "$CREATE_POOL" = true ] && [ -n "${DISK_DEVICES:-}" ]; then
zfs create "$POOL_NAME/container" zfs create "$POOL_NAME/container"
fi 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 # Generate unique hostId
HOST_ID=$(head -c4 /dev/urandom | od -A none -t x4 | tr -d ' ') 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 = [ imports = [
./hardware-configuration.nix ./hardware-configuration.nix
./naxos-os/modules
./naxos-os/profiles/nas-appliance.nix
]; ];
# Bootloader & Filesystem
boot.loader.systemd-boot.enable = true; boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true; boot.loader.efi.canTouchEfiVariables = true;
boot.supportedFilesystems = [ "zfs" ]; boot.supportedFilesystems = [ "zfs" ];
# Appliance Identity & Network
networking.hostName = "$HOSTNAME"; networking.hostName = "$HOSTNAME";
networking.hostId = "$HOST_ID"; networking.hostId = "$HOST_ID";
networking.useDHCP = lib.mkDefault $([ "$USE_DHCP" = "yes" ] && echo "true" || echo "false"); 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\"") ]; boot.zfs.extraPools = [ "$POOL_NAME" $([ -n "$IMPORTED_POOL" ] && echo "\"$IMPORTED_POOL\"") ];
# Administrator user # System Administrator Account
users.users.$ADMIN_USER = { users.users.$ADMIN_USER = {
isNormalUser = true; isNormalUser = true;
extraGroups = [ "wheel" "docker" "video" "render" ]; extraGroups = [ "wheel" "docker" "video" "render" ];
@@ -177,6 +217,18 @@ cat << NIXCONFIG > /mnt/etc/nixos/configuration.nix
# SSH Access # SSH Access
services.openssh.enable = true; 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 # State version
system.stateVersion = "24.11"; system.stateVersion = "24.11";
} }
@@ -188,6 +240,6 @@ nixos-install --no-root-passwd
echo -e "\n${BOLD}${GREEN}==============================================${NC}" echo -e "\n${BOLD}${GREEN}==============================================${NC}"
echo -e "${BOLD}${GREEN} NaxOS Installation Complete!${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} 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}" echo -e "${BOLD}${GREEN}==============================================${NC}"
EOF