feat: Complete sleeper-service deployment with ZFS and network fixes
Some checks are pending
🏠 Home Lab CI/CD Pipeline / 🔍 Validate Configuration (push) Waiting to run
🏠 Home Lab CI/CD Pipeline / 🔨 Build Configurations (push) Blocked by required conditions
🏠 Home Lab CI/CD Pipeline / 🔒 Security Audit (push) Blocked by required conditions
🏠 Home Lab CI/CD Pipeline / 📚 Documentation & Modules (push) Blocked by required conditions
🏠 Home Lab CI/CD Pipeline / 🔄 Update Dependencies (push) Waiting to run
🏠 Home Lab CI/CD Pipeline / 🚀 Deploy Configuration (push) Blocked by required conditions
🏠 Home Lab CI/CD Pipeline / 📢 Notify Results (push) Blocked by required conditions
Some checks are pending
🏠 Home Lab CI/CD Pipeline / 🔍 Validate Configuration (push) Waiting to run
🏠 Home Lab CI/CD Pipeline / 🔨 Build Configurations (push) Blocked by required conditions
🏠 Home Lab CI/CD Pipeline / 🔒 Security Audit (push) Blocked by required conditions
🏠 Home Lab CI/CD Pipeline / 📚 Documentation & Modules (push) Blocked by required conditions
🏠 Home Lab CI/CD Pipeline / 🔄 Update Dependencies (push) Waiting to run
🏠 Home Lab CI/CD Pipeline / 🚀 Deploy Configuration (push) Blocked by required conditions
🏠 Home Lab CI/CD Pipeline / 📢 Notify Results (push) Blocked by required conditions
✅ Major deployment milestone achieved:
**sleeper-service Configuration:**
- Successfully deployed flake-based NixOS on Intel Xeon file server
- Resolved ZFS mounting conflicts causing boot failures
- Implemented ZFS native mounting (/mnt/storage, /mnt/storage/media)
- Added Pi-hole DNS integration (10.0.0.14) for package resolution
- Configured systemd-networkd with static IP (10.0.0.8)
- System boots cleanly in ~1 minute with ZFS auto-mounting
**Infrastructure Updates:**
- SSH key management deployed and operational
- Network configuration with multi-tier DNS (Pi-hole, router, Google)
- NFS server configuration for network storage
- Data preservation verified: 903GB ZFS pool intact
**Technical Solutions:**
- Added nomodeset kernel parameter for graphics compatibility
- Disabled NVIDIA drivers for headless server operation
- Removed conflicting ZFS entries from hardware-configuration.nix
- Established remote deployment workflow via rsync + SSH
**Documentation:**
- Updated plan.md with deployment status and lessons learned
- Added deployment commands and troubleshooting notes
- Documented ZFS native mounting migration process
**Data Verified:**
- Films: 184GB, Series: 612GB, Audiobooks: 94GB, Music: 9.1GB, Books: 3.5GB
- Storage pool: 903GB used, 896GB available
- All media accessible via proper ZFS auto-mounting
This represents the first successful multi-machine flake deployment in the home lab infrastructure migration.
This commit is contained in:
parent
10a4f8df56
commit
7c650856f2
24 changed files with 537 additions and 72 deletions
|
@ -1,11 +1,10 @@
|
|||
{ config, pkgs, inputs, unstable, ... }: {
|
||||
{ config, lib, pkgs, inputs, unstable, ... }: {
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
../../modules/network/network-sleeper-service.nix
|
||||
|
||||
# Security modules
|
||||
../../modules/security/ssh-keys.nix
|
||||
|
||||
# Network configuration
|
||||
../../modules/network/network-sleeper-service.nix
|
||||
# Services
|
||||
../../modules/services/nfs.nix
|
||||
../../modules/system/transmission.nix
|
||||
|
@ -20,15 +19,55 @@
|
|||
zfsSupport = true;
|
||||
efiSupport = true;
|
||||
efiInstallAsRemovable = true;
|
||||
devices = [ "nodev" ];
|
||||
mirroredBoots = [
|
||||
{ devices = [ "nodev" ]; path = "/boot"; } ];
|
||||
};
|
||||
|
||||
|
||||
boot.supportedFilesystems = [ "zfs" ];
|
||||
boot.loader.grub.memtest86.enable = true;
|
||||
|
||||
# Add nomodeset for graphics compatibility
|
||||
boot.kernelParams = [ "nomodeset" ];
|
||||
|
||||
# ZFS services for file server
|
||||
services.zfs = {
|
||||
autoScrub.enable = true;
|
||||
trim.enable = true;
|
||||
};
|
||||
|
||||
# Enable ZFS auto-mounting since we're using ZFS native mountpoints
|
||||
# systemd.services.zfs-mount.enable = lib.mkForce false;
|
||||
|
||||
# Disable graphics for server use - comment out NVIDIA config for now
|
||||
# hardware.graphics = {
|
||||
# enable = true;
|
||||
# };
|
||||
# hardware.nvidia = {
|
||||
# modesetting.enable = true;
|
||||
# open = false;
|
||||
# package = config.boot.kernelPackages.nvidiaPackages.legacy_470;
|
||||
# };
|
||||
|
||||
# Comment out NVIDIA kernel modules for now
|
||||
# boot.kernelModules = [ "nvidia" "nvidia_modeset" "nvidia_uvm" "nvidia_drm" ];
|
||||
|
||||
# Comment out NVIDIA utilities for now
|
||||
# environment.systemPackages = with pkgs; [
|
||||
# config.boot.kernelPackages.nvidiaPackages.legacy_470
|
||||
# ];
|
||||
|
||||
# Create mount directories early in boot process
|
||||
systemd.tmpfiles.rules = [
|
||||
"d /mnt/storage 0755 root root -"
|
||||
"d /mnt/storage/media 0755 root root -"
|
||||
];
|
||||
|
||||
# Network configuration - using working setup from old config
|
||||
# networking.hostName = "sleeper-service";
|
||||
# services.tailscale.enable = true;
|
||||
# networking.networkmanager.enable = true;
|
||||
# networking.hostId = "8425e349";
|
||||
|
||||
# Time and locale
|
||||
time.timeZone = "Europe/Oslo";
|
||||
i18n.defaultLocale = "en_US.UTF-8";
|
||||
|
@ -41,26 +80,16 @@
|
|||
|
||||
# Enable unfree packages
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
|
||||
# Basic system packages
|
||||
environment.systemPackages = with pkgs; [
|
||||
wget
|
||||
curl
|
||||
git
|
||||
htop
|
||||
eza
|
||||
bat
|
||||
ripgrep
|
||||
du-dust
|
||||
fd
|
||||
ncdu
|
||||
tree
|
||||
];
|
||||
# nixpkgs.config.nvidia.acceptLicense = true; # Commented out for now
|
||||
|
||||
programs.zsh.enable = true;
|
||||
|
||||
# Firewall configuration
|
||||
networking.firewall.allowedTCPPorts = [ 22 ]; # SSH only (Transmission disabled temporarily)
|
||||
# Enable SSH
|
||||
services.openssh.enable = true;
|
||||
|
||||
system.stateVersion = "25.05";
|
||||
# Firewall configuration - disable for simplicity like old config
|
||||
# networking.firewall.enable = false;
|
||||
|
||||
# DO NOT CHANGE - maintains data compatibility
|
||||
system.stateVersion = "23.11";
|
||||
}
|
|
@ -19,8 +19,6 @@
|
|||
|
||||
# ZFS Configuration - only for storage pool
|
||||
boot.zfs.extraPools = [ "storage" ];
|
||||
services.zfs.autoScrub.enable = true;
|
||||
services.zfs.trim.enable = true;
|
||||
|
||||
# OS remains on ext4
|
||||
fileSystems."/" =
|
||||
|
@ -28,11 +26,11 @@
|
|||
fsType = "ext4";
|
||||
};
|
||||
|
||||
# ZFS storage pool mounted for NFS exports
|
||||
fileSystems."/mnt/storage" =
|
||||
{ device = "storage";
|
||||
fsType = "zfs";
|
||||
};
|
||||
# ZFS storage datasets - removed auto-mounting to prevent boot issues
|
||||
# Manual mounting required:
|
||||
# mkdir -p /mnt/storage
|
||||
# mount -t zfs storage /mnt/storage
|
||||
# mount -t zfs storage/media /mnt/storage/media
|
||||
|
||||
fileSystems."/boot" =
|
||||
{ device = "/dev/disk/by-uuid/2C7A-9F08";
|
||||
|
@ -46,7 +44,7 @@
|
|||
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||
# still possible to use this option, but it's recommended to use it in conjunction
|
||||
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||
networking.useDHCP = lib.mkDefault true;
|
||||
# networking.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.enp0s25.useDHCP = lib.mkDefault true;
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
|
|
0
machines/sleeper-service/networking.nix
Normal file
0
machines/sleeper-service/networking.nix
Normal file
Loading…
Add table
Add a link
Reference in a new issue