Etapa metal: stack de red WiFi — libnl + wpa_supplicant (pieza 3)
- recipes/libnl.toml: netlink lib (libnl-3 + libnl-genl-3), estática, deps flex/bison/m4 (regenera parsers). Base nl80211 del kernel metal. - recipes/wpa_supplicant.toml: supplicant WPA2 2.11, driver nl80211 sobre libnl, CONFIG_TLS=internal (sin dep openssl; suficiente WPA2-PSK). Compila a la 1ra con zig-cc/musl ⇒ wpa_supplicant/wpa_cli/wpa_passphrase ESTÁTICOS x86-64. udhcpc de busybox da el DHCP. (iw omitido: wpa_cli scanea.) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Semántico sayk'uy
Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.
2 qillqakuna · +75 −0
- recipes/libnl.toml +31 −0
- recipes/wpa_supplicant.toml +44 −0
diff --git a/recipes/libnl.toml b/recipes/libnl.toml
new file mode 100644
index 00000000..36299adf
--- /dev/null
+++ b/recipes/libnl.toml
@@ -0,0 +1,31 @@
+# libnl 3.11.0 — librería netlink (base del stack WiFi del kernel metal).
+#
+# wpa_supplicant habla con el kernel (cfg80211/nl80211) vía netlink genérico; el driver `nl80211` de
+# wpa_supplicant enlaza libnl-3 + libnl-genl-3 (pkg-config libnl-3.0/libnl-genl-3.0). Es la única forma
+# de manejar iwlwifi (el viejo wext está muerto en kernels modernos). Sólo se usa para el WiFi del medio
+# live en hardware real — no toca el camino del selfhost/QEMU.
+#
+# Autotools con parsers pre-generados en el tarball (no necesita flex/bison). Estático (.a) como openssl:
+# evita el lío de nombres .so musl y deja que wpa_supplicant enlace en duro. $CBUILD/$CHOST los exporta
+# el lab (Etapa G Fase 3).
+
+name = "libnl"
+version = "3.11.0"
+
+[source]
+tarball = "https://github.com/thom311/libnl/releases/download/libnl3_11_0/libnl-3.11.0.tar.gz"
+sha256 = "2a56e1edefa3e68a7c00879496736fdbf62fc94ed3232c0baba127ecfa76874d"
+
+[build]
+compiler = "zig-cc"
+target = "x86_64-linux-musl"
+link = "static"
+
+[deps]
+# libnl 3.11 regenera sus parsers netlink ⇒ flex (lexer) + bison (parser) + m4 (bison lo invoca).
+build = ["flex", "bison", "m4"]
+
+[build.phases]
+configure = "./configure --build=$CBUILD --host=$CHOST --prefix=/usr --libdir=/usr/lib --disable-shared --enable-static --disable-cli"
+compile = "make -j\"$(nproc)\""
+install = "make DESTDIR=/out install"
diff --git a/recipes/wpa_supplicant.toml b/recipes/wpa_supplicant.toml
new file mode 100644
index 00000000..447dfdf2
--- /dev/null
+++ b/recipes/wpa_supplicant.toml
@@ -0,0 +1,44 @@
+# wpa_supplicant 2.11 — supplicant WPA2 para asociar el WiFi del medio live al AP (kernel metal).
+#
+# El handshake WPA2 de 4 vías lo hace un supplicant en userspace; busybox NO lo trae. Habla con iwlwifi
+# vía el driver nl80211 (netlink), que enlaza libnl-3/libnl-genl-3 (recipes/libnl.toml). DHCP lo da
+# udhcpc de busybox (ya en el producto) una vez asociada la interfaz.
+#
+# Crypto: CONFIG_TLS=internal ⇒ NO depende de openssl (suficiente para WPA2-PSK, el WiFi de casa). Para
+# WPA-Enterprise/EAP-TLS habría que pasar a CONFIG_TLS=openssl + dep openssl. Sólo medio live en metal.
+#
+# wpa_supplicant usa un build propio: un `.config` con CONFIG_* en el subdir wpa_supplicant/, luego make.
+# Los binarios (wpa_supplicant/wpa_cli/wpa_passphrase) se copian a /usr/sbin (no `make install`).
+
+name = "wpa_supplicant"
+version = "2.11"
+
+[source]
+tarball = "https://w1.fi/releases/wpa_supplicant-2.11.tar.gz"
+sha256 = "912ea06f74e30a8e36fbb68064d6cdff218d8d591db0fc5d75dee6c81ac7fc0a"
+
+[build]
+compiler = "zig-cc"
+target = "x86_64-linux-musl"
+link = "static"
+
+[deps]
+build = ["libnl"]
+
+[build.phases]
+configure = '''
+cat > wpa_supplicant/.config <<'EOF'
+CONFIG_DRIVER_NL80211=y
+CONFIG_LIBNL32=y
+CONFIG_CTRL_IFACE=y
+CONFIG_CTRL_IFACE_UNIX=y
+CONFIG_BACKEND=file
+CONFIG_TLS=internal
+CONFIG_INTERNAL_LIBTOMMATH=y
+CONFIG_INTERNAL_LIBTOMMATH_FAST=y
+CONFIG_IEEE8021X_EAPOL=y
+CONFIG_PEERKEY=y
+EOF
+'''
+compile = "cd wpa_supplicant && make -j\"$(nproc)\" wpa_supplicant wpa_cli wpa_passphrase"
+install = "mkdir -p /out/usr/sbin && cd wpa_supplicant && cp wpa_supplicant wpa_cli wpa_passphrase /out/usr/sbin/"