Recette de reconstruction Buster amd64, Linux 6.12.115 StackX

Cette recette rassemble les entrées des quatre paquets du lot Debian 10 :
image, headers avec kbuild, métapaquet 6.12.115-1 et toolchain GCC 12.4.0-1.
La release attendue est 6.12.115-stackx-buster-1. Le GCC privé utilise les
binutils natifs de Buster 2.31.1 et la glibc 2.28, sans les remplacer.
Les modules sont compressés en XZ ; l'image du noyau utilise gzip. L'initramfs
est généré par Debian à l'installation des paquets, pas par cette recette.

Périmètre et provenance
----------------------
Les scripts, configurations, patchs et modèles sont copiés des entrées du lot
Buster qualifié, sauf deux différences documentées dans DERIVATION.txt :
le driver de bootstrap GCC Buster réellement exécuté est retenu, et la
bibliothèque common.sh est adaptée aux chemins explicites et à la cible
Buster. La recette dérivée n'a pas fait l'objet d'une reconstruction complète.
Une reconstruction future doit recevoir ses propres contrôles et essais.
Les résultats ne sont pas annoncés reproductibles octet par octet : dates
et environnement complet ne sont pas normalisés.

Le répertoire recipe/ contient les scripts et les preuves publiques de source.
Les cinq archives amont intactes, le patch perf et la configuration finale
sont fournis séparément. sources-manifest.tsv fixe leurs tailles et SHA256.
Ce ne sont pas des paquets sources Debian : aucun .dsc, index Sources ou accès
deb-src n'est livré. Les licences originales restent dans les archives et les
notices utiles sont rappelées dans LICENCES.txt.

La recette vise Buster amd64 uniquement. Les branches conditionnelles
Bullseye/Stretch des scripts historiques ne sont pas des cibles de ce lot.
Aucun reçu runtime privé ni contrôleur de VM ne figure dans l'arbre. Les
sources des paquets Debian natifs ne sont pas incorporées ; leurs versions
enregistrées figurent dans dependencies/native-packages.tsv.

Entrées et environnement
-----------------------
Préparer séparément une copie arrêtée d'un rootfs Debian 10 amd64, contenant
les outils décrits dans DEPENDENCIES.txt. Il ne doit pas s'agir de / ni d'une
racine vivante. Aucun script ne télécharge ou installe silencieusement une
dépendance. Préparer aussi un répertoire de travail isolé. L'extraction Linux
doit être neuve, intacte et séparée du rootfs et du travail.

Choisir des chemins absolus RECIPE_ROOT, SOURCES_DIR, SOURCE_ROOT,
EXTERNAL_ROOT et TARGET_ROOTFS. SOURCES_DIR contient à sa racine les sept
fichiers de sources-manifest.tsv. SOURCE_ROOT désigne la source Linux extraite,
EXTERNAL_ROOT une racine de travail déjà créée et TARGET_ROOTFS la copie
Buster. MAX_JOBS doit être adapté au budget CPU et mémoire disponible. Les
valeurs par défaut de réserve et coût par job sont 4096 et 2048 Mio ; elles
restent contrôlées par les scripts.

Vérifier les fichiers avant emploi :

  (cd "$RECIPE_ROOT" && sha256sum --strict -c SHA256SUMS)
  (cd "$SOURCES_DIR" && sha256sum --strict -c "$RECIPE_ROOT/SOURCES.sha256")

Extraire Linux dans un répertoire neuf avec un utilisateur non privilégié,
sans changer les textes des liens symboliques de l'archive :

  test ! -e "$SOURCE_ROOT" && test ! -L "$SOURCE_ROOT" && \
  mkdir -- "$SOURCE_ROOT" && \
  tar --extract --xz --no-same-owner --no-same-permissions \
    --strip-components=1 --file "$SOURCES_DIR/linux-6.12.115.tar.xz" \
    --directory "$SOURCE_ROOT"

Les métadonnées dans evidence/upstream-6.12.115/ sont des exports de faits
antérieurs, pas une nouvelle authentification. Une vérification indépendante
de la signature amont reste possible avec l'archive officielle. Aucune
connexion réseau n'est requise pendant la reconstruction.

Définir les chemins et les paramètres avant toute étape :

  : "${RECIPE_ROOT:?chemin absolu de la recette}"
  : "${SOURCES_DIR:?répertoire des sept entrées}"
  : "${SOURCE_ROOT:?extraction Linux intacte}"
  : "${EXTERNAL_ROOT:?racine de travail isolée}"
  : "${TARGET_ROOTFS:?rootfs Buster préparé}"
  : "${MAX_JOBS:?allocation CPU positive}"
  export SOURCE_ROOT EXTERNAL_ROOT TARGET_ROOTFS MAX_JOBS
  export TARGET_DIST=buster ABI_REV=1 KERNEL_VERSION=6.12.115
  export TYPE_HOTE=local LC_ALL=C
  export STACKX_ALLOW_TOOLCHAIN_FALLBACK=1
  export TOOLCHAIN_DIR="$SOURCES_DIR"
  export TOOLCHAIN_SHA256="$RECIPE_ROOT/evidence/toolchain-fallback/SHA256SUMS"
  export HISTORICAL_CONFIG_DIR="$RECIPE_ROOT/evidence/reference/configs"
  export CONFIG_ACCEPT_INCONNUS="$RECIPE_ROOT/review/accepted-unknown.txt"
  export CONFIG_ACCEPT_LISTNEW="$RECIPE_ROOT/review/accepted-listnew-buster.txt"
  export CONFIG_ACCEPT_ECARTS="$RECIPE_ROOT/review/accepted-ecarts-buster.txt"

La valeur TYPE_HOTE=local concerne le poste de construction isolé ; elle ne
désigne pas un serveur de production. Les cinq chemins restent obligatoires
et leurs relations sont vérifiées. Utiliser bash pour les scripts même s'ils
sont distribués en mode 0644. Aucun script de cette recette ne lance de VM ou
de connexion SSH.

Étapes séparées
---------------
Exécuter chaque étape, lire son rapport avant la suivante et conserver un
échec. Ne pas fabriquer ni modifier un marqueur .ok pour passer un contrôle.

  bash "$RECIPE_ROOT/draft/common/scripts/prepare-source.sh"
  bash "$RECIPE_ROOT/draft/common/scripts/check-rootfs.sh"
  bash "$RECIPE_ROOT/draft/common/scripts/qualify-tools.sh"

Sur l'environnement Buster enregistré, les capacités du GCC natif ne
suffisent pas au profil retenu ; qualify-tools autorise le repli avec le code
5 et decision=repli-possible. Seul ce constat précis autorise le bootstrap
privé. Un autre échec impose de corriger l'environnement, sans contournement.

  bash "$RECIPE_ROOT/draft/common/scripts/build-toolchain.sh"
  bash "$RECIPE_ROOT/draft/common/scripts/prepare-config.sh"

Le bootstrap GCC 12.4.0 intègre GMP/MPFR/MPC, compare les stages 2 et 3 et
installe sous /opt/stackx-toolchain dans une copie du rootfs. Les binutils
restent natifs. Le driver livré est celui effectivement exécuté sur Buster ;
sa différence avec la copie du snapshot de paquetage est documentée.

prepare-config applique le patch perf aux fichiers attendus puis migre la
configuration Buster historique avec common.fragment et buster.fragment. Les
trois listes de revue sont figées et spécifiques à cette migration. Si une
liste ne correspond plus au rapport courant, examiner l'écart avant de
continuer ; ne pas recopier une nouvelle sortie par automatisme.

Comparer la configuration obtenue à la référence exacte avant compilation :

  cmp -- "$EXTERNAL_ROOT/work/buster/6.12.115-1/obj/.config" \
    "$SOURCES_DIR/config-6.12.115-stackx-buster-1"

SHA256 attendu :
2c59da6182ca20bc089605ebd531d2003a03886d01ae368cbbbb8c1b42e3e592

  bash "$RECIPE_ROOT/draft/common/scripts/build-kernel.sh"
  env -u TMPDIR -u TMP -u TEMP \
    bash "$RECIPE_ROOT/draft/common/scripts/package-debs.sh"

Les quatre DEB sortent dans EXTERNAL_ROOT/packages/buster/6.12.115-1. Le
paquetage exporte les headers/kbuild, compare la .config, vérifie XZ, les
index des modules, les dépendances natives et les ELF vis-à-vis de glibc
2.28. Les modes et propriétaires des archives sont normalisés. Le gcc global,
ses alternatives, linux-libc-dev et /usr/include restent inchangés.
L'environnement du paquetage retire TMPDIR, TMP et TEMP avant d'entrer dans
le rootfs Buster : conserver cette disposition du lot effectivement qualifié.

Limites
-------
Une recette ou une compilation ne prouvent pas le démarrage des nouveaux
paquets. Tester séparément toute reconstruction dans une VM isolée, avec
installation, ancien noyau, noyau candidat, réseau, stockage, filtrage,
modules externes, DKMS et retour à l'ancien noyau. Le pilote du lot d'origine
ne valide pas automatiquement un nouveau lot. La publication, les signatures
APT et les essais physiques sont des étapes distinctes. Secure Boot et les
autres matériels ne sont pas qualifiés par cette recette.

La migration de configuration conserve le support compilé NFSv2/ACL ainsi
que la capacité d'import de certificats UEFI par le trousseau platform.
Elle ne prouve ni l'usage de NFSv2 chez un client, ni la confiance effective
d'une clé en exécution, ni Secure Boot. Des pilotes audio Intel, PMIC de
portables et contrôleurs dépréciés du noyau Buster historique ne disposent
pas d'une couverture identique en 6.12. Certaines anciennes interfaces et
variantes cryptographiques AF_ALG liées à l'API obsolète restent absentes
par décision explicite ; l'option globale d'activation de cette API n'a pas
été ouverte pour les rétablir. Aucun équivalent général avec le noyau 4.19
historique n'est revendiqué.

La bibliothèque conserve deux constantes historiques faisant référence à
binutils 2.42 ; le chemin GCC de cette recette ne les lit pas. Aucun
binutils 2.42 n'est construit ni fourni. La toolchain livrée porte la version
12.4.0-1 et dépend des binutils natifs Buster 2.31.1.
