gioser

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 188Rust 55Shell 30Markdown 281211 Sutichaykuna

⎇ ff78b3d54fb9786c53bf223dde4d428469948289 recipes/networkmanager.toml TOML · 106 siq'ikuna · 6.8 KB Ñawpa willay ch'uya

networkmanager al corpus CON WiFi y con nmcli — y los perfiles que no tenían gestor de red 4b38af8f3 · Sergio ·

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