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
Test NaxOS Module Configurations / test-modules (push) Successful in 9m20s
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user