mirror of
https://github.com/ryan4yin/nix-config.git
synced 2026-11-13 12:13:46 +01:00
refactor: scope host tools, locate and mDNS by purpose (#356)
This commit is contained in:
1 parent
ce416240b2
commit
885dabb49d
7 files changed
+143
-60
No files matched your search
@@ -126,4 +126,12 @@ in
|
||||
};
|
||||
|
||||
system.stateVersion = "26.05";
|
||||
|
||||
# MicroVM guests share the host's store and have no physical hardware to
|
||||
# inspect, nothing to trace, no persisted /var/cache for a `locate` index,
|
||||
# and nothing to advertise over mDNS.
|
||||
modules.hardwareTools.enable = false;
|
||||
modules.debugTools.enable = false;
|
||||
modules.locate.enable = false;
|
||||
modules.mdns.enable = false;
|
||||
}
|
||||
@@ -1,13 +1,30 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
# Whole-filesystem filename search (`locate`), backed by plocate. It complements
|
||||
# `nix-index`/`nix-locate`, which only index the nix store.
|
||||
#
|
||||
# The database lives at /var/cache/locatedb. Hosts with an ephemeral root must
|
||||
# persist /var/cache as a directory (see hosts/idols-ai/preservation.nix): plocate
|
||||
# replaces the DB via a temp file + rename, which fails on a bind-mounted file.
|
||||
services.locate = {
|
||||
enable = true;
|
||||
package = pkgs.plocate;
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.modules.locate;
|
||||
in
|
||||
{
|
||||
options.modules.locate.enable = lib.mkEnableOption ''
|
||||
Whole-filesystem filename search (`locate`), backed by plocate. It
|
||||
complements `nix-index`/`nix-locate`, which only index the nix store.
|
||||
|
||||
The database lives at /var/cache/locatedb. Hosts with an ephemeral root
|
||||
must persist /var/cache as a directory (see hosts/idols-ai/preservation.nix):
|
||||
plocate replaces the DB via a temp file + rename, which fails on a
|
||||
bind-mounted file.
|
||||
|
||||
Off by default: the daily `updatedb` scan is only worth it on hosts that
|
||||
persist /var/cache and actually use `locate` (currently idols-ai).
|
||||
'';
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
services.locate = {
|
||||
enable = true;
|
||||
package = pkgs.plocate;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
{
|
||||
# Network discovery on a local network, mDNS
|
||||
# With this enabled, you can access your machine at <hostname>.local
|
||||
# it's more convenient than using the IP address.
|
||||
# https://avahi.org/
|
||||
services.avahi = {
|
||||
enable = true;
|
||||
nssmdns4 = true;
|
||||
publish = {
|
||||
enable = true;
|
||||
domain = true;
|
||||
userServices = true;
|
||||
};
|
||||
};
|
||||
|
||||
# avahi and systemd-resolved both run an mDNS responder, which makes mDNS
|
||||
# unreliable ("Detected another IPv4/IPv6 mDNS stack running on this host").
|
||||
# Keep avahi (needed for DNS-SD, e.g. CUPS printer discovery) and turn off
|
||||
# resolved's own mDNS.
|
||||
services.resolved.settings.Resolve.MulticastDNS = false;
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.modules.mdns;
|
||||
in
|
||||
{
|
||||
options.modules.mdns.enable =
|
||||
lib.mkEnableOption ''
|
||||
mDNS/DNS-SD responder, backed by avahi: `<hostname>.local` access and CUPS
|
||||
printer discovery.
|
||||
|
||||
On by default for physical hosts; MicroVM guests turn it off since they
|
||||
have nothing to advertise.
|
||||
''
|
||||
// {
|
||||
default = true;
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
# Network discovery on a local network, mDNS
|
||||
# With this enabled, you can access your machine at <hostname>.local
|
||||
# it's more convenient than using the IP address.
|
||||
# https://avahi.org/
|
||||
services.avahi = {
|
||||
enable = true;
|
||||
nssmdns4 = true;
|
||||
publish = {
|
||||
enable = true;
|
||||
domain = true;
|
||||
userServices = true;
|
||||
};
|
||||
};
|
||||
|
||||
# avahi and systemd-resolved both run an mDNS responder, which makes mDNS
|
||||
# unreliable ("Detected another IPv4/IPv6 mDNS stack running on this host").
|
||||
# Keep avahi (needed for DNS-SD, e.g. CUPS printer discovery) and turn off
|
||||
# resolved's own mDNS.
|
||||
services.resolved.settings.Resolve.MulticastDNS = false;
|
||||
};
|
||||
}
|
||||
@@ -1,35 +1,62 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
# List packages installed in system profile. To search, run:
|
||||
# $ nix search wget
|
||||
environment.systemPackages = with pkgs; [
|
||||
# system call monitoring
|
||||
strace # system call monitoring
|
||||
lsof # list open files
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
inherit (config.modules) hardwareTools debugTools;
|
||||
in
|
||||
{
|
||||
options.modules.hardwareTools.enable =
|
||||
lib.mkEnableOption ''
|
||||
Basic hardware and disk introspection tools (lm_sensors, pciutils,
|
||||
usbutils, dmidecode, parted, smartmontools, nvme-cli).
|
||||
|
||||
# ebpf related tools
|
||||
# https://github.com/bpftrace/bpftrace
|
||||
bpftrace # powerful tracing tool
|
||||
On by default for physical hosts; MicroVM guests turn it off since they
|
||||
share the host's store and cannot use any of it.
|
||||
''
|
||||
// {
|
||||
default = true;
|
||||
};
|
||||
|
||||
# system monitoring
|
||||
sysstat
|
||||
iotop-c
|
||||
sysbench
|
||||
pv # pipe view
|
||||
options.modules.debugTools.enable = lib.mkEnableOption ''
|
||||
Tracing and benchmarking tools (strace, bpftrace, sysstat, iotop-c,
|
||||
sysbench and the BCC tools).
|
||||
|
||||
# system tools
|
||||
psmisc # killall/pstree/prtstat/fuser/...
|
||||
lm_sensors # for `sensors` command
|
||||
ethtool
|
||||
pciutils # lspci
|
||||
usbutils # lsusb
|
||||
dmidecode # a tool that reads information about your system's hardware from the BIOS according to the SMBIOS/DMI standard
|
||||
parted
|
||||
smartmontools # smartctl -a /dev/nvme0n1
|
||||
nvme-cli
|
||||
];
|
||||
Off by default: opt in on hosts where you actually profile with them
|
||||
(currently idols-ai).
|
||||
'';
|
||||
|
||||
# BCC - Tools for BPF-based Linux IO analysis, networking, monitoring, and more
|
||||
# https://github.com/iovisor/bcc
|
||||
programs.bcc.enable = true;
|
||||
config = {
|
||||
environment.systemPackages =
|
||||
with pkgs;
|
||||
[
|
||||
# broadly useful on every host
|
||||
lsof # list open files
|
||||
psmisc # killall/pstree/prtstat/fuser/...
|
||||
ethtool
|
||||
pv # pipe view
|
||||
]
|
||||
++ lib.optionals hardwareTools.enable [
|
||||
lm_sensors # `sensors` command
|
||||
pciutils # lspci
|
||||
usbutils # lsusb
|
||||
dmidecode # SMBIOS/DMI hardware info (from the BIOS)
|
||||
parted
|
||||
smartmontools # smartctl -a /dev/nvme0n1
|
||||
nvme-cli
|
||||
]
|
||||
++ lib.optionals debugTools.enable [
|
||||
strace # system call tracing
|
||||
bpftrace # eBPF tracing, https://github.com/bpftrace/bpftrace
|
||||
sysstat
|
||||
iotop-c
|
||||
sysbench
|
||||
];
|
||||
|
||||
# BCC - tools for BPF-based IO/network analysis/monitoring
|
||||
# https://github.com/iovisor/bcc
|
||||
programs.bcc.enable = debugTools.enable;
|
||||
};
|
||||
}
|
||||
@@ -27,6 +27,12 @@ in
|
||||
# Mesa userspace (OpenGL/Vulkan) for every GUI host.
|
||||
{
|
||||
hardware.graphics.enable = true;
|
||||
|
||||
# Desktops opt in to the tracing/benchmark tooling and the
|
||||
# whole-filesystem `locate` index (both off by default; see
|
||||
# modules/nixos/base/{packages,locate}.nix).
|
||||
modules.debugTools.enable = true;
|
||||
modules.locate.enable = true;
|
||||
}
|
||||
|
||||
(mkIf cfgWayland.enable {
|
||||
|
||||
@@ -22,6 +22,9 @@
|
||||
# disable backups in the VM
|
||||
modules.btrbk.enable = lib.mkForce false;
|
||||
|
||||
# VM guest: no physical hardware to inspect.
|
||||
modules.hardwareTools.enable = lib.mkForce false;
|
||||
|
||||
boot.growPartition = true;
|
||||
boot.kernelParams = [ "console=ttyS0" ];
|
||||
boot.loader.grub.device = "/dev/vda";
|
||||
|
||||
Reference in new issue
Block a user