metznet/machines/otto.scm uses (nongnu packages mozilla), but guix pull
builds this channel's own modules in isolation unless a dependency is
declared, so that module came up as "no code for module" too. Declare
nonguix using the same introduction already used in channels.d/nonguix.scm.
"./channels.d" only resolved because guix pull -C channels.scm happened
to be invoked with CWD == this file's directory. Once guix pull loads
this file as a plain module (e.g. from the store, to build its package
cache), CWD is unrelated to the checkout, so scandir returned #f and map
blew up with "Not a list: #f". Use (current-filename) instead so it works
regardless of how/where this file gets loaded from.
guix pull compiles every .scm file under a channel's checkout as an
ordinary package module and then loads each by its path-derived module
name to build the package cache. channels.scm and channels.d/*.scm never
had define-module clauses -- they relied on guix pull -C's implicit (guix
channels) import, which only applies to the -C argument itself, not to
files swept up as part of the channel's own module tree. That produced
first an unbound-variable error on `channel` at compile time, and after
adding plain use-modules imports, a "no code for module" error at
package-cache load time. Match the dual-purpose pattern already used by
metznet/machines/*.scm: a real define-module (so the module system finds
it under its expected name) plus a use-module for (guix channels) (so
guix pull -C channels.scm still works when it loads these directly).
That repo (system) is being deprecated in favor of keeping deploy
tooling alongside the channel it deploys -- cloning this repo alone is
now enough to either build docker images for local testing (docker/,
docker-compose.yml, scripts/guix-docker.sh) or reconfigure a real
machine (channels.scm registers this channel plus nonguix/games/guix;
scripts/qemu.sh and network.sh for the KVM-based workflow on real
Linux hosts).
docker-compose.yml and scripts/guix-docker.sh updated for the merge:
no more local-channel indirection (docker/channels.local.scm, a
file:// bind mount to a sibling repo) -- guix system docker-image now
passes -L /workspace directly against this checkout, so uncommitted
edits are picked up immediately without a commit+pull round-trip.
These were deleted from this repo in 425b173 ("moved system configs
completely to separate repo") and never faithfully migrated there --
the separate system repo's servers/kadmin.scm turned out to be a
standalone kdb5_util-based placeholder that doesn't match what's
actually deployed (a kldap-configuration-backed KDC sharing the LDAP
server's directory). Restored/rebuilt against current APIs:
- base-server.scm: generic base server, new
- ldap.scm: restored from 425b173^, unchanged (no seed data -- the
real server already has a populated directory tree)
- kerberos.scm: restored from 425b173^ (was machines/kerberos.scm),
the real LDAP-backed KDC config, updated to use this channel's
current (metznet services kdc)/(metznet packages kdc) instead of
the inline definitions that file had before they were split out
- otto.scm: ported from the system repo's clients/otto.scm (Noah's
laptop), updated for renamed/restructured upstream packages
(texlive -> texlive-scheme-full, gcc-arm-none-eabi-* -> constructor
functions) and a sddm/xorg-server service conflict. firefox and the
ARM toolchain are left out of its package list for now -- both need
a from-scratch LLVM/Clang build with no available substitute, which
is impractical for routine docker-image testing; see docker/README.md
for how to add them back for a real deploy.
Each file is both a proper channel module (define-module + #:export,
so `(metznet machines ldap)` etc. are importable/reusable) and a
directly buildable script (ends with a bare reference to its exported
operating-system value, which `guix system build FILE.scm` requires).
- openldap-slapd: GCC 14 turned several of its autoconf-era C
conformance checks (implicit-function-declaration, implicit-int,
int-conversion, incompatible-pointer-types) into hard errors by
default, breaking the configure-time regex/pthread_detach checks and
a real build error in valsort.c. Force -std=gnu17 plus matching
-Wno-* flags. Also add libxcrypt as an input since glibc dropped
crypt().
- sssd-service-type's nscd-service-type extension was hardcoded to the
bare `sssd` package instead of the configurable `sssd` field on
sssd-configuration -- a real bug, not just a compat shim.
- Add metznet-sssd/metznet-kitty package overrides: strip sssd's
Makefile.am `--install-layout=deb` flag (setuptools dropped support),
and disable tests for both -- the failures are specific to the
Docker/Rosetta test environment (O_TMPFILE atomicity, a cmocka
buffer test), not real regressions. Build-time only, no runtime
behavior change.
- base-system.scm: extend %metznet-desktop-services with the
nonguix substitute-key config, tun udev rule, and network-manager
vpn-plugin wiring that only existed in the old separate system repo.
That package moved out of (gnu packages golang)/(gnu packages
golang-check) upstream; go-github-com-azure-go-ntlmssp's native-inputs
referenced it without an import.
isc-dhcp's client service type was removed upstream; dhcpcd-service-type
is the modern replacement and is a drop-in default (dhcpcd-configuration
has the same bare-service defaults).
nss-certs moved out of (gnu packages certs) upstream; both aws.scm and
base-system.scm referenced it without importing the module it's
actually defined in now.