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…

⎇ main scripts/alpine-import.sh Shell · 42 lines · 2.0 KB History raw

takana etapa 5c: comentarios de scripts, MOTD, y un BUG que introdujo la etapa 4 476168bb0 · Sergio ·

1#!/bin/sh
2# alpine-import.sh <pkg> [main|community] — Etapa G, fuente #2: baja el APKBUILD de Alpine aports
3# (y SUS PARCHES de musl), y emite la receta takana vía `takana import-alpine`. Alpine es la mejor
4# semilla cuando importar de nix falla en musl: su receta YA incluye el trabajo de portabilidad.
5#
6# Ej:  scripts/alpine-import.sh coreutils main > recipes/coreutils-alpine.toml
7#      (los .patch se bajan a $OUTDIR, default el dir actual)
8# Env: ALPINE_BRANCH (default master), OUTDIR (default .), HAMMER (cmd del cli)
9set -eu
10
11PKG="${1:?uso: alpine-import.sh <pkg> [main|community]}"
12REPO="${2:-main}"
13BRANCH="${ALPINE_BRANCH:-master}"
14OUTDIR="${OUTDIR:-.}"
15HAMMER="${TAKANA:-${HAMMER:-cargo run -q -p takana-cli --}}"
16BASE="https://gitlab.alpinelinux.org/alpine/aports/-/raw/${BRANCH}/${REPO}/${PKG}"
17
18apk=$(curl -fsSL "${BASE}/APKBUILD") || { echo "no encontré ${REPO}/${PKG} en aports@${BRANCH}" >&2; exit 1; }
19toml=$(printf '%s' "$apk" | $HAMMER import-alpine -)
20
21# sha256 automático: Alpine publica sha512, pero takana pide sha256. Bajamos el tarball UNA vez y
22# lo calculamos, reemplazando el FIXME ⇒ receta lista para `pack --build` sin tocar el hash a mano.
23url=$(printf '%s\n' "$toml" | sed -n 's/^tarball = "\(.*\)"$/\1/p' | head -1)
24if [ -n "$url" ]; then
25  sha=$(curl -fsSL "$url" 2>/dev/null | sha256sum | cut -d' ' -f1)
26  if [ -n "$sha" ] && [ "$sha" != "$(printf '' | sha256sum | cut -d' ' -f1)" ]; then
27    toml=$(printf '%s\n' "$toml" | sed "s|FIXME-sha256|$sha|")
28    echo "  sha256 calculado: $sha" >&2
29  else
30    echo "  ⚠ no pude bajar el tarball para sha256 (queda FIXME): $url" >&2
31  fi
32fi
33printf '%s\n' "$toml"
34
35# Bajar los .patch referenciados (los parches de musl que hacen al paquete compilar).
36printf '%s\n' "$toml" | grep -oE '"[^"]+\.(patch|diff)"' | tr -d '"' | while read -r p; do
37  if curl -fsSL "${BASE}/${p}" -o "${OUTDIR}/${p}" 2>/dev/null; then
38    echo "  ✓ parche bajado: ${OUTDIR}/${p}" >&2
39  else
40    echo "  ✗ no pude bajar ${p} (¿está en otra ruta del aport?)" >&2
41  fi
42done