tawasuyu

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…

⎇ main recipes/naabu.toml TOML · 50 lines · 2.7 KB History raw

takana etapa 5a: los comentarios de las 741 recetas e852f4849 · Sergio ·

1# Importada de nixpkgs por `takana import-nix` (Etapa G). PUNTO DE PARTIDA, no final:
2# - el build usa el lab de takana (zig-cc / musl estático), NO el stdenv de nix ⇒ revisá
3#   compiler/link/phases y adaptá hasta que compile.
4# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
5name    = "naabu"
6version = "2.6.1"
7license = "MIT"
8
9[source]
10repo   = "https://github.com/projectdiscovery/naabu"
11commit = "5a0ca8bde91b5bb16213e9e8b5c6871eac954bd8"
12
13[build]
14compiler = "zig-cc"
15target   = "x86_64-linux-musl"
16# DINÁMICO A PROPÓSITO (no es deuda: es la única opción correcta). Auditado 2026-07-17.
17#
18# naabu depende (vía github.com/Mzack9999/gopacket) de github.com/ebitengine/purego, una FFI
19# SIN cgo que hace `dlopen("libpcap.so.1")` EN RUNTIME. Dos consecuencias encadenadas:
20#
21# 1. `link = "static"` es INALCANZABLE: un binario estático no puede dlopen(). Declararlo
22#    static no lo vuelve estático — sólo silencia el escaneo SYN (su feature principal) en
23#    runtime. Preferimos la verdad declarada al veredicto cómodo.
24#
25# 2. El NEEDED se ve ANÓMALO (libc.so.6 / libpthread.so.0 / libdl.so.2 = nombres GLIBC en una
26#    distro musl) pero NO hay glibc de por medio. La inversión es contraintuitiva: es
27#    CGO_ENABLED=0 el que los CAUSA. purego/internal/fakecgo/zsymbols_linux.go está guardado
28#    con `//go:build !cgo` y hardcodea los sonames:
29#        //go:cgo_import_dynamic purego_malloc malloc "libc.so.6"
30#        //go:cgo_import_dynamic purego_pthread_create pthread_create "libpthread.so.0"
31#        //go:cgo_import_dynamic purego_dlopen dlopen "libdl.so.2"
32#    El linker interno de Go honra esos pragmas ⇒ emite el binario dinámico con esos DT_NEEDED
33#    literales. El INTERP sí es musl (/lib/ld-musl-x86_64.so.1): se construyó en el sandbox.
34#    En runtime musl los absorbe: su ldso (dynlink.c, "reserved names") bloquea recargar la
35#    implementación de libc y resuelve los tres a SÍ MISMO. Verificado en el rootfs Alpine,
36#    que no tiene ningún libc.so.6:
37#        libdl.so.2 => /lib/ld-musl-x86_64.so.1
38#        libc.so.6  => /lib/ld-musl-x86_64.so.1
39#    ⇒ son strings vestigiales, no una dependencia glibc real. El binario corre en musl puro.
40#
41# `cgo = true` NO es el arreglo: excluiría los pragmas (files !cgo), pero el lab lo liga con
42# `-extldflags=-static` ⇒ vuelve al problema (1), estático sin dlopen.
43link     = "dynamic"
44flags    = ["./cmd/naabu"]  # varios mains en el repo; fijo el CLI real
45
46# buildInputs de nix: go, libpcap. libpcap NO va en deps: no se linkea, se dlopenea en runtime
47# (ver arriba) y no hay receta libpcap en el corpus todavía. El escaneo SYN queda inerte hasta
48# que exista; el escaneo connect (`-s c`, Go puro) funciona sin ella.
49[deps]
50build = ["go"]