# NetworkManager 1.52.0 — **la variante del CORPUS: el gestor de red de verdad, con WiFi.** # # ══ POR QUÉ EXISTE ESTA COPIA (2026-09-13) ═════════════════════════════════════════════════════ # `incoming-kde/networkmanager.toml` se escribió para UN objetivo —dar `libnm.so` a # networkmanager-qt → plasma-nm, el applet de KDE— y sus perillas lo dicen: **`-Dwifi=true`**. Eso # es correcto ahí y es inservible en cualquier otro lado. Y desde GNOME, COSMIC o sway esa receta # **no se alcanza**: una receta resuelve sibling-first y después el catálogo PADRE, nunca una cola # hermana. Resultado medido en el barrido de perfiles: `networkmanager` figuraba SÓLO en # `escritorio-kde`, y los otros tres escritorios no tenían con qué gestionar una red. # # ⇒ Esta copia va al corpus —el único sitio desde el que las cuatro imágenes la ven, el mismo # argumento que `mpv`, `atuq` y `wireplumber`— y cambia DOS cosas respecto de la de KDE: # # 1. **`-Dwifi=true`.** Sin esto NM no maneja interfaces inalámbricas: el demonio arranca, el # applet se dibuja y no hay una sola red que listar. Habla `nl80211` por `libnl` (ya era dep) y # delega el handshake WPA2 en `wpa_supplicant`, que desde hoy está declarado en `perfil.base` # — por eso va también en `[deps] runtime`: sin el supplicant, WiFi=true es un cartel. # 2. **`-Dnmcli=true -Dreadline=libreadline` + `readline` en `[deps] build`.** Los tres, y hizo # falta medirlo: con sólo la dep, `nmcli` NO se construyó (`-Dnmcli` vale `true` de fábrica, # pero `-Dreadline` es un combo que por defecto va en `auto` y sin que nadie le diga dónde # mirar resolvió a «none» ⇒ meson apagó el CLI en silencio). Se nombran los tres. El artefacto de la # variante KDE NO trae `nmcli` —comprobado sobre el store, no deducido— así que promoverla tal # cual habría dado un demonio sin con qué manejarlo. En sway eso es la diferencia entre tener # red y no tenerla; en GNOME y COSMIC hay panel gráfico, pero el CLI es lo que funciona el día # que el panel no arranca. # # ⚠ SE QUEDA `-Dcrypto=null`, y es una limitación REAL que conviene escribir: sin cripto NM no # valida certificados **802.1X / WPA-Enterprise** (el WiFi de una oficina o universidad). WPA2-PSK # —el de casa— funciona, porque ése lo hace `wpa_supplicant`, que a su vez va con `CONFIG_TLS=internal` # por la misma razón. Encender nss o gnutls arrastra dos cadenas enormes (nspr/sqlite, o # nettle/libtasn1/p11-kit): es su propia unidad de trabajo, no una perilla de paso. # # ⚠ Y hay DOS variantes vivas (corpus y `incoming-kde`) con hashes distintos, a propósito. No es la # enfermedad de las dos glib: ninguna imagen hidrata las dos. KDE sigue con la suya porque su cadena # —networkmanager-qt, plasma-nm— está sellada contra ese hash y re-apuntarla es trabajo del frente # KDE, no de este barrido. # # Lo que sigue es la documentación original de la variante de KDE, de la que ésta es copia. # # El tarball NO está en download.gnome.org (sólo llega a 1.9.x; NM migró) ⇒ git-archive de # gitlab.freedesktop.org. # # **-Dcrypto=null es la clave**: NM ofrece crypto ∈ {nss, gnutls, null}; 'null' evita nss (→nspr/sqlite) y # gnutls (→nettle/libtasn1/p11-kit), dos cadenas enormes. Sin cripto no valida certificados 802.1X, pero # libnm compila y la API D-Bus que usa networkmanager-qt es completa. # # Deps DURAS de NM (dependency() sin required:false): libudev (→ libudev-zero YA sellado, da libudev.so.1 # + libudev.pc), libndp (receta nueva), gio-unix-2.0 (→ glib-shared, la deuda Capa 0 recién saldada). # jansson/libpsl son required:false. Todo lo demás se apaga: sin daemon-extras (ovs/ppp/modem/wifi/nmtui/ # teamdctl/ofono/cloud-setup), sin systemd (session_tracking=no, journal off), sin polkit/selinux/audit, # sin introspection/docs/tests/ebpf/firewalld. name = "networkmanager" version = "1.52.0" license = "GPL-2.0-or-later" [source] tarball = "https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/archive/1.52.0/NetworkManager-1.52.0.tar.gz" sha256 = "2ebe60a1497a9650d58336b73413d838189b04543365b3dbc22e1eb8023d205f" [build] compiler = "zig-cc" target = "x86_64-linux-musl" link = "dynamic" flags = [] [build.phases] configure = ''' # meson.build:92 hace `find_program('xsltproc')` INCONDICIONAL (required por defecto), pero xsltproc sólo # se usa en man/meson.build (páginas de manual), que no se construye con -Ddocs=false. Se degrada a # required:false y así se evita la receta libxslt entera. (sed DIRECTO: el sandbox usa busybox grep, que # no soporta --include.) sed -i "s/xsltproc = find_program('xsltproc')/xsltproc = find_program('xsltproc', required: false)/" meson.build PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release \ -Ddefault_library=shared \ -Dld_gc=false -Dconcheck=false -Dnmcli=false -Dreadline=none \ -Dcrypto=null \ -Dsystemdsystemunitdir=no \ -Dsession_tracking=no -Dsession_tracking_consolekit=false -Dsuspend_resume=consolekit \ -Dpolkit=false -Dselinux=false -Dsystemd_journal=false -Dlibaudit=no \ -Dwifi=true -Dppp=false -Dmodem_manager=false -Dovs=false -Dnmtui=false -Dnmcli=true -Dreadline=libreadline -Dnm_cloud_setup=false \ -Dteamdctl=false -Dofono=false -Debpf=false -Dfirewalld_zone=false -Dlibpsl=false \ -Dintrospection=false -Ddocs=false -Dtests=no -Dvapi=false \ -Dconfig_dhcp_default=internal -Dqt=false ''' compile = "PYTHONPATH=/usr/lib/python3.12/site-packages ninja -C output" install = "PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out meson install -C output --no-rebuild" [deps] build = ["meson", "samurai", "python3", "pkgconf", "glib-shared", "pcre2-shared", "libffi", "readline", "libudev-zero", "libndp", "libnl", "zlib-shared", "gettext-tiny", "libxml2", "util-linux", "perl", "dbus", "expat"] # `wpa_supplicant` NO es dep de build (NM habla con él por D-Bus/control socket, no lo enlaza) y SÍ # lo es de runtime: con `-Dwifi=true` y sin supplicant, NM enumera la interfaz y no puede asociarse. # `readline-shared` no es capricho: `nmcli` sale con `NEEDED libreadline.so.8` y la `readline` # canónica del corpus es sólo `.a` ⇒ sin declarar la variante compartida, el CLI viaja en la imagen # y muere en el loader. Mismo trance que ya pagaron `cmus` y `bluez` esta misma jornada: la dep de # BUILD (`readline`) y la de RUNTIME (`readline-shared`) son artefactos distintos. runtime = ["wpa_supplicant", "readline-shared"] # El demonio. SDD 30: declararlo NO lo enciende — falta que el perfil lo habilite. [[service]] label = "NetworkManager" id = "01HQAR53D4M2NBV8KZTYXFQA2B" exec = "/usr/sbin/NetworkManager --no-daemon" scope = "system" restart = { initial_ms = 500, max_ms = 20000 }