Etapa G: git diferido con diagnóstico — compila, muro en static-link de helpers

git compila entero (REG_STARTEND/regex y -pie resueltos) pero el link -static de
git-http-backend/daemon/git-% falla 'ld: failed to set dynamic section sizes'
(no es curl ni regex; hipótesis CET/.note.gnu.property + PIC mixto de las libs).
El más duro de la cola C, como gmp en las libs. Próximo: V=1 + -fcf-protection.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-26 00:30:18 -04:00
co-authored by Claude Opus 4.8
parent 19fd683ccf
commit 9e344c2c6c
2 changed files with 38 additions and 54 deletions
+38
View File
@@ -0,0 +1,38 @@
# git 2.54.0 — VCS (C, Makefile con knobs, NO autotools). LEAN estático: core sin gui/docs/perl/i18n.
# Libs del corpus: zlib + curl (https) + openssl (crypto) + expat (http-push) + pcre2 (grep -P).
# De-Alpinizada: gcc, -static -no-pie (zlib non-PIC). NO_PERL/PYTHON/TCLTK/GETTEXT = lean.
name = "git"
version = "2.54.0"
[source]
tarball = "https://www.kernel.org/pub/software/scm/git/git-2.54.0.tar.xz"
sha256 = "f689162364c10de79ef89aa8dbf48731eb057e34edbbd20aca510ce0154681a3"
[build]
compiler = "gcc"
target = "x86_64-linux-musl"
link = "static"
flags = []
[build.phases]
compile = '''
sed -i '/^PROGRAM_OBJS += daemon.o/d' Makefile
make -j"$(nproc)" prefix=/usr CC=gcc \
NO_GETTEXT=1 NO_TCLTK=1 NO_PYTHON=1 NO_PERL=1 NO_GITWEB=1 NO_SYS_POLL_H=1 NO_REGEX=NeedsStartEnd NO_CURL=1 NO_EXPAT=1 \
USE_LIBPCRE2=1 \
CFLAGS="-O2 -fno-pie" \
LDFLAGS="-static -no-pie -L/usr/lib" \
all
'''
install = '''
make prefix=/usr DESTDIR=/out NO_GETTEXT=1 NO_TCLTK=1 NO_PYTHON=1 NO_PERL=1 NO_GITWEB=1 \
NO_CURL=1 NO_REGEX=NeedsStartEnd NO_INSTALL_HARDLINKS=1 install
'''
[deps]
build = ["zlib", "openssl", "pcre2"]
# DEFERIDO (2026-06-26): git COMPILA entero (resueltos: REG_STARTEND via ./configure del lab que el
# campo configure NO debe pisar; -fno-pie; libs zlib/openssl/pcre2). MURO: el link totalmente
# estático de los binarios helper (git-http-backend, git-daemon, git-%) falla con
# `ld: failed to set dynamic section sizes: bad value`. NO es curl (NO_CURL=1 no lo arregla) ni regex.
# Hipótesis: gcc15/musl emite .note.gnu.property (CET) y/o las libs estáticas tienen consistencia
# PIC mixta ⇒ ld rompe al armar el ejecutable -static. Próximo intento: build con V=1 para ver el
# comando de link exacto de git-http-backend; probar -fcf-protection=none / -Wl,-z,... / rebuildar
# las libs con -fPIC consistente. El core `git` linkea antes del fallo (binario existe).
-54
View File
@@ -1,54 +0,0 @@
# Importada de Alpine aports por `hammer import-alpine` (Etapa G). PUNTO DE PARTIDA — pero
# YA trae los parches de musl de Alpine (lo que un import de nix pierde). Pendiente: el
# sha256 del tarball (el wrapper lo calcula), y adaptar build/install del shell de abuild.
name = "git"
version = "2.54.0"
[source]
tarball = "https://www.kernel.org/pub/software/scm/git/git-2.54.0.tar.xz"
# FIXME sha256: el wrapper lo calcula (Alpine publica sha512). sha512 de Alpine:
# sha512 = "cb363917124edc245c9f6745e6e0c4093990275b4d57f9d2213c655b304ac81b05ece8d88546122727495ebc48a5ae19ab166a3ee43b6b8c68da488ac0270064"
sha256 = "f689162364c10de79ef89aa8dbf48731eb057e34edbbd20aca510ce0154681a3"
patches = ["fix-t4219-with-sticky-bit.patch"]
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "static"
flags = []
[build.phases]
# de build() de Alpine (traducido; el lab provee $CBUILD/$CHOST — Etapa G Fase 3; revisá --shared para estático):
compile = '''
_abuild_phase() {
make prefix=/usr \
DESTDIR="/out" \
perllibdir="$(_perl_config vendorlib)" \
all
make -C contrib/subtree prefix=/usr DESTDIR="/out"
make -C contrib/diff-highlight prefix=/usr DESTDIR="/out"
if [ -n "$_full_build" ]; then
# generate manpages outside of package()
make prefix=/usr man
make prefix=/usr -C contrib/credential/libsecret
fi
}
_abuild_phase
'''
# de package() de Alpine (traducido $pkgdir→/out):
install = '''
_abuild_phase() {
make -C t prefix=/usr DESTDIR="/out" \
perlibdir="$(_perl_config vendorlib)" \
all
}
_abuild_phase
'''
# depends de runtime de Alpine (NO build-deps): perl
[deps]
build = ["asciidoc", "python3", "tcl", "tk", "libsecret", "glib"]