The modprobe.conf approach failed because the network interface doesn't exist when the module loads at boot. Now using a systemd service to configure netconsole via configfs after network-online. Also raise console_loglevel to 8 so all kernel messages (not just KERN_WARNING and above) are sent to netconsole. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
71 lines
2.5 KiB
Nix
71 lines
2.5 KiB
Nix
{ pkgs, inputs, config, ... }:
|
|
{
|
|
imports = [
|
|
../../common/encrypted-btrfs-layout.nix
|
|
../../common/global
|
|
../../common/desktop-node.nix # Hyprland + GUI environment
|
|
../../common/cluster-member.nix # Consul + storage clients
|
|
../../common/cluster-tools.nix # Nomad CLI (no service)
|
|
./hardware.nix
|
|
];
|
|
|
|
diskLayout = {
|
|
mainDiskDevice = "/dev/disk/by-id/nvme-CT1000P3PSSD8_25164F81F31D";
|
|
#keyDiskDevice = "/dev/disk/by-id/usb-Intenso_Micro_Line_22080777650797-0:0";
|
|
keyDiskDevice = "/dev/sda";
|
|
};
|
|
|
|
networking.hostName = "beefy";
|
|
networking.cluster.primaryInterface = "enp1s0";
|
|
services.tailscaleAutoconnect.authkey = "tskey-auth-k79UsDTw2v11CNTRL-oYqji35BE9c7CqM89Dzs9cBF14PmqYsi";
|
|
|
|
# Console blanking after 5 minutes (for greeter display sleep)
|
|
# NMI watchdog for hardlockup detection
|
|
boot.kernelParams = [ "consoleblank=300" "nmi_watchdog=1" ];
|
|
|
|
# Netconsole - stream kernel messages to zippy (192.168.1.2)
|
|
# Must configure via configfs after network is up (interface doesn't exist at module load)
|
|
boot.kernelModules = [ "netconsole" ];
|
|
boot.kernel.sysctl."kernel.printk" = "8 4 1 7"; # Raise console_loglevel to send all messages
|
|
systemd.services.netconsole-sender = {
|
|
description = "Configure netconsole to send kernel messages to zippy";
|
|
wantedBy = [ "multi-user.target" ];
|
|
after = [ "network-online.target" ];
|
|
wants = [ "network-online.target" ];
|
|
serviceConfig = {
|
|
Type = "oneshot";
|
|
RemainAfterExit = true;
|
|
};
|
|
script = ''
|
|
mkdir -p /sys/kernel/config/netconsole/target1
|
|
echo enp1s0 > /sys/kernel/config/netconsole/target1/dev_name
|
|
echo 192.168.1.2 > /sys/kernel/config/netconsole/target1/remote_ip
|
|
echo 6666 > /sys/kernel/config/netconsole/target1/remote_port
|
|
echo c0:3f:d5:62:55:bb > /sys/kernel/config/netconsole/target1/remote_mac
|
|
echo 1 > /sys/kernel/config/netconsole/target1/enabled
|
|
'';
|
|
};
|
|
|
|
# Kdump for kernel crash analysis
|
|
boot.crashDump = {
|
|
enable = true;
|
|
reservedMemory = "256M";
|
|
};
|
|
|
|
# Lockup detectors - panic on detection so kdump captures state
|
|
boot.kernel.sysctl = {
|
|
# Enable all SysRq functions for debugging hangs
|
|
"kernel.sysrq" = 1;
|
|
# Panic on soft lockup (CPU not scheduling for >20s)
|
|
"kernel.softlockup_panic" = 1;
|
|
# Panic on hung tasks (blocked >120s)
|
|
"kernel.hung_task_panic" = 1;
|
|
"kernel.hung_task_timeout_secs" = 120;
|
|
};
|
|
|
|
# Persist crash dumps
|
|
environment.persistence.${config.custom.impermanence.persistPath}.directories = [
|
|
"/var/crash"
|
|
];
|
|
}
|