Temurin-build: Prototype "Reproducible Build" en utilisant le travail actuel disponible Adopter le cadre de travail et d'infra Jenkins et les "informations de construction"

Créé le 21 avr. 2021  ·  26Commentaires  ·  Source: adoptium/temurin-build

Ceci est un élément de travail pour EPIC https://github.com/AdoptOpenJDK/openjdk-build/issues/2522.
L'objectif étant de "prototyper" une première tentative de pouvoir "recréer" une version Adopt basée sur la spécification des "informations de construction" de base actuellement disponibles pour une "version" existante et en supposant la configuration "infra" actuellement disponible.

Concevoir:

Hypothèses pour le 1er prototype :

  1. Point d'accès uniquement
  2. pas d'installateur
  3. pas de signature

Spécification :
Étendez les travaux openjdk-pipeline & build actuels pour prendre comme entrées supplémentaires les "informations de construction" de base :

  • Openjdk "mirror" source git "commit SHA" ou "tag"
  • openjdk-build dépôt SHA
  • ci-jenkins-pipelines dépôt SHA
  • -
compatibility enhancement infra installer jenkins

Tous les 26 commentaires

Les tâches de build Jenkins sont actuellement "générées" chaque fois que des modifications de openjdk-build ou ci-jenkins-pipelines se produisent. Le contenu de ces travaux contient également une quantité étendue de configuration/paramètres JSON, les paramètres du travail et les paramètres JSON sont spécifiques à la configuration de la construction au moment de la publication/construction.
Il est donc logique de concevoir le prototype comme un processus en deux étapes :

  1. "Générer" le niveau requis d'openjdk-pipeline et construire des travaux en fonction des "informations de construction"
  2. Exécuter les travaux générés..

Il est donc assez facile d'utiliser les paramètres des scripts de construction USER du travail Adopt Build pour pointer vers un SHA d'un niveau des scripts openjdk-build que vous souhaitez utiliser (par exemple, la mise à jour du processeur du 19 janvier). Voici une version de janvier jdk-11.0.10 + 9 Hotspot Release: https://ci.adoptopenjdk.net/job/build-scripts/job/jobs/job/jdk11u/job/jdk11u-linux-x64-hotspot/ 960/paramètres/
Il s'agit donc d'une reconstruction utilisant les scripts de construction de janvier de la balise source de janvier, en utilisant l'infrastructure et les outils actuels.
Q : Est-ce "reproduit" ? R : Peut-être !
En réalité, tout cela a permis de reconstruire cette source SHA en utilisant l'infrastructure et les niveaux d'outillage actuels. Donc, en tant que tel, il utilise probablement différentes versions de nombreuses dépendances, en particulier pour les plates-formes de construction sans conteneur.
La construction ci-dessus était sur xLinux, donc le conteneur de construction qu'il utilisait provenait de l'image adoptopenjdk/centos6_build_image actuelle. Une amélioration pourrait être obtenue si nous mettions en cache à côté de chaque version que nous marquons comme reproductibles les images de construction de docker utilisées pour les construire, ce qui améliorerait la reproductibilité des plates-formes :

  • xLinux
  • pLinux
  • aarch64Linux
    mais pas avec :
  • Mac
  • les fenêtres
  • zLinux
  • AIX
    Des conteneurs de construction Docker pourraient être créés avec du travail pour Mac, Windows et zLinux, mais AIX serait un problème.

Docker a ses limites cependant, l'utilisation de dockerhub est une exposition potentielle à la sécurité, avec le recours au stockage/extraction d'images pour créer un JDK sécurisé sur Internet, ce qui n'est pas idéal.
De plus, Docker n'est pas disponible sur AIX.
Une approche alternative peut être une configuration de type "compilation croisée", dans laquelle l'ensemble de dépendances du système est fixé via un emplacement défini.

Reconstruction de Jan CPU Update avec la tâche Jenkins actuelle :

{
    "ARCHITECTURE": "x64",
    "TARGET_OS": "linux",
    "VARIANT": "hotspot",
    "JAVA_TO_BUILD": "jdk11u",
    "TEST_LIST": [
        "sanity.openjdk",
        "sanity.system",
        "extended.system",
        "sanity.perf",
        "sanity.external"
    ],
    "SCM_REF": "jdk-11.0.10+9_adopt",
    "BUILD_ARGS": "",
    "NODE_LABEL": "build&&linux&&x64",
    "ADDITIONAL_TEST_LABEL": "",
    "KEEP_TEST_REPORTDIR": false,
    "ACTIVE_NODE_TIMEOUT": "",
    "CODEBUILD": false,
    "DOCKER_IMAGE": "adoptopenjdk/centos6_build_image<strong i="10">@sha256</strong>:5655c9a66f4528210e307d033024bd65f5f736eac401fdeaed9dbc903b629a0c",
    "DOCKER_NODE": "",
    "DOCKER_REGISTRY": "",
    "DOCKER_CREDENTIAL": "",
    "PLATFORM_CONFIG_LOCATION": "AdoptOpenJDK/openjdk-build/master/build-farm/platform-specific-configurations",
    "CONFIGURE_ARGS": "--enable-dtrace=auto",
    "OVERRIDE_FILE_NAME_VERSION": "",
    "USE_ADOPT_SHELL_SCRIPTS": false,
    "RELEASE": true,
    "PUBLISH_NAME": "jdk-11.0.10+9",
    "ADOPT_BUILD_NUMBER": "",
    "ENABLE_TESTS": false,
    "ENABLE_INSTALLERS": true,
    "ENABLE_SIGNER": true,
    "CLEAN_WORKSPACE": true,
    "CLEAN_WORKSPACE_AFTER": true,
    "CLEAN_WORKSPACE_BUILD_OUTPUT_ONLY_AFTER": false
}

DEFAULTS_JSON :

  "defaultsUrl": "https://raw.githubusercontent.com/andrew-m-leonard/ci-jenkins-pipelines/myrepo/pipelines/defaults.json"

À l'emplacement "defaultsUrl":

    "repository"             : {
        "build_url"          : "https://github.com/AdoptOpenJDK/openjdk-build.git",
        "build_branch"       : "ea53ac3d1623de5ecefdcd9aee3379a776be84b2",

build_branch SHA est le commit des scripts openjdk-build utilisé pour construire la mise à jour Jan CPU.

Remarque, DOCKER_IMAGE utilise @sha256 : 56... Résumé SHA de l'image Docker utilisée pour la construction. N'avait pas le résumé SHA exact, mais cela pourrait être utilisé si nous le stockions.

diffoscope de la version originale jdk.tar.gz et de la version reproduite, montre de nombreuses différences, ce qui n'est pas vraiment surprenant, car des choses comme les horodatages sont différentes partout, également toutes les listes de fichiers ou contenus zip (par exemple.jmods) ont des fichiers dans des ordres différents.
Cependant, en regardant de haut niveau les dossiers et les bibliothèques, cela semble identique, par exemple :
"Lib" d'origine :

-rw-r--r--  1 andrewleonard  staff      38933 20 Jan 12:17 classlist
-rw-r--r--  1 andrewleonard  staff    4496469 20 Jan 12:17 ct.sym
-rwxr-xr-x  1 andrewleonard  staff      13040 20 Jan 12:17 jexec
drwxr-xr-x  4 andrewleonard  staff        128 20 Jan 12:17 jfr
drwxr-xr-x  3 andrewleonard  staff         96 20 Jan 12:17 jli
-rw-r--r--  1 andrewleonard  staff     106676 20 Jan 12:17 jrt-fs.jar
-rwxr-xr-x  1 andrewleonard  staff      18408 20 Jan 12:17 jspawnhelper
-rw-r--r--  1 andrewleonard  staff         29 20 Jan 12:17 jvm.cfg
-rw-r--r--  1 andrewleonard  staff      13344 20 Jan 12:17 libattach.so
-rw-r--r--  1 andrewleonard  staff     752736 20 Jan 12:17 libawt.so
-rw-r--r--  1 andrewleonard  staff      44728 20 Jan 12:17 libawt_headless.so
-rw-r--r--  1 andrewleonard  staff     484632 20 Jan 12:17 libawt_xawt.so
-rw-r--r--  1 andrewleonard  staff      28216 20 Jan 12:17 libdt_socket.so
-rw-r--r--  1 andrewleonard  staff      12992 20 Jan 12:17 libextnet.so
-rw-r--r--  1 andrewleonard  staff      67984 20 Jan 12:17 libfontmanager.so
-rw-r--r--  1 andrewleonard  staff    1888936 20 Jan 12:17 libharfbuzz.so
-rw-r--r--  1 andrewleonard  staff      51512 20 Jan 12:17 libinstrument.so
-rw-r--r--  1 andrewleonard  staff      47496 20 Jan 12:17 libj2gss.so
-rw-r--r--  1 andrewleonard  staff      18024 20 Jan 12:17 libj2pcsc.so
-rw-r--r--  1 andrewleonard  staff      88992 20 Jan 12:17 libj2pkcs11.so
-rw-r--r--  1 andrewleonard  staff       8064 20 Jan 12:17 libjaas.so
-rw-r--r--  1 andrewleonard  staff     214128 20 Jan 12:17 libjava.so
-rw-r--r--  1 andrewleonard  staff     262728 20 Jan 12:17 libjavajpeg.so
-rw-r--r--  1 andrewleonard  staff       7984 20 Jan 12:17 libjawt.so
-rw-r--r--  1 andrewleonard  staff     282752 20 Jan 12:17 libjdwp.so
-rw-r--r--  1 andrewleonard  staff     596448 20 Jan 12:17 libjimage.so
-rw-r--r--  1 andrewleonard  staff      13248 20 Jan 12:17 libjsig.so
-rw-r--r--  1 andrewleonard  staff      82936 20 Jan 12:17 libjsound.so
-rw-r--r--  1 andrewleonard  staff     576856 20 Jan 12:17 liblcms.so
-rw-r--r--  1 andrewleonard  staff      26128 20 Jan 12:17 libmanagement.so
-rw-r--r--  1 andrewleonard  staff       8040 20 Jan 12:17 libmanagement_agent.so
-rw-r--r--  1 andrewleonard  staff      33744 20 Jan 12:17 libmanagement_ext.so
-rw-r--r--  1 andrewleonard  staff     585064 20 Jan 12:17 libmlib_image.so
-rw-r--r--  1 andrewleonard  staff     111792 20 Jan 12:17 libnet.so
-rw-r--r--  1 andrewleonard  staff      88120 20 Jan 12:17 libnio.so
-rw-r--r--  1 andrewleonard  staff       8224 20 Jan 12:17 libprefs.so
-rw-r--r--  1 andrewleonard  staff       7744 20 Jan 12:17 librmi.so
-rw-r--r--  1 andrewleonard  staff      55664 20 Jan 12:17 libsaproc.so
-rw-r--r--  1 andrewleonard  staff      28960 20 Jan 12:17 libsctp.so
-rw-r--r--  1 andrewleonard  staff     373816 20 Jan 12:17 libsplashscreen.so
-rw-r--r--  1 andrewleonard  staff     776960 20 Jan 12:17 libsunec.so
-rw-r--r--  1 andrewleonard  staff     672416 20 Jan 12:17 libunpack.so
-rw-r--r--  1 andrewleonard  staff      81432 20 Jan 12:17 libverify.so
-rw-r--r--  1 andrewleonard  staff      37616 20 Jan 12:17 libzip.so
-rw-r--r--  1 andrewleonard  staff  142006963 20 Jan 12:17 modules
-rw-r--r--  1 andrewleonard  staff       3793 20 Jan 12:17 psfont.properties.ja
-rw-r--r--  1 andrewleonard  staff      11390 20 Jan 12:17 psfontj2d.properties
drwxr-xr-x  6 andrewleonard  staff        192 20 Jan 12:17 security
drwxr-xr-x  5 andrewleonard  staff        160 20 Jan 12:17 server
-rw-r--r--  1 andrewleonard  staff   58148661 20 Jan 12:17 src.zip
-rw-r--r--  1 andrewleonard  staff     107853 20 Jan 12:17 tzdb.dat

"lib" reproduit :

-rw-r--r--  1 andrewleonard  staff      38933 30 Apr 11:07 classlist
-rw-r--r--  1 andrewleonard  staff    4496469 30 Apr 11:07 ct.sym
-rwxr-xr-x  1 andrewleonard  staff      13040 30 Apr 11:07 jexec
drwxr-xr-x  4 andrewleonard  staff        128 30 Apr 11:07 jfr
drwxr-xr-x  3 andrewleonard  staff         96 30 Apr 11:07 jli
-rw-r--r--  1 andrewleonard  staff     106676 30 Apr 11:07 jrt-fs.jar
-rwxr-xr-x  1 andrewleonard  staff      18408 30 Apr 11:07 jspawnhelper
-rw-r--r--  1 andrewleonard  staff         29 30 Apr 11:07 jvm.cfg
-rw-r--r--  1 andrewleonard  staff      13344 30 Apr 11:07 libattach.so
-rw-r--r--  1 andrewleonard  staff     752736 30 Apr 11:07 libawt.so
-rw-r--r--  1 andrewleonard  staff      44728 30 Apr 11:07 libawt_headless.so
-rw-r--r--  1 andrewleonard  staff     484632 30 Apr 11:07 libawt_xawt.so
-rw-r--r--  1 andrewleonard  staff      28216 30 Apr 11:07 libdt_socket.so
-rw-r--r--  1 andrewleonard  staff      12992 30 Apr 11:07 libextnet.so
-rw-r--r--  1 andrewleonard  staff      67984 30 Apr 11:07 libfontmanager.so
-rw-r--r--  1 andrewleonard  staff    1888936 30 Apr 11:07 libharfbuzz.so
-rw-r--r--  1 andrewleonard  staff      51512 30 Apr 11:07 libinstrument.so
-rw-r--r--  1 andrewleonard  staff      47496 30 Apr 11:07 libj2gss.so
-rw-r--r--  1 andrewleonard  staff      18024 30 Apr 11:07 libj2pcsc.so
-rw-r--r--  1 andrewleonard  staff      88992 30 Apr 11:07 libj2pkcs11.so
-rw-r--r--  1 andrewleonard  staff       8064 30 Apr 11:07 libjaas.so
-rw-r--r--  1 andrewleonard  staff     214128 30 Apr 11:07 libjava.so
-rw-r--r--  1 andrewleonard  staff     262728 30 Apr 11:07 libjavajpeg.so
-rw-r--r--  1 andrewleonard  staff       7984 30 Apr 11:07 libjawt.so
-rw-r--r--  1 andrewleonard  staff     282752 30 Apr 11:07 libjdwp.so
-rw-r--r--  1 andrewleonard  staff     596448 30 Apr 11:07 libjimage.so
-rw-r--r--  1 andrewleonard  staff      13248 30 Apr 11:07 libjsig.so
-rw-r--r--  1 andrewleonard  staff      82936 30 Apr 11:07 libjsound.so
-rw-r--r--  1 andrewleonard  staff     576856 30 Apr 11:07 liblcms.so
-rw-r--r--  1 andrewleonard  staff      26128 30 Apr 11:07 libmanagement.so
-rw-r--r--  1 andrewleonard  staff       8040 30 Apr 11:07 libmanagement_agent.so
-rw-r--r--  1 andrewleonard  staff      33744 30 Apr 11:07 libmanagement_ext.so
-rw-r--r--  1 andrewleonard  staff     585064 30 Apr 11:07 libmlib_image.so
-rw-r--r--  1 andrewleonard  staff     111792 30 Apr 11:07 libnet.so
-rw-r--r--  1 andrewleonard  staff      88120 30 Apr 11:07 libnio.so
-rw-r--r--  1 andrewleonard  staff       8224 30 Apr 11:07 libprefs.so
-rw-r--r--  1 andrewleonard  staff       7744 30 Apr 11:07 librmi.so
-rw-r--r--  1 andrewleonard  staff      55664 30 Apr 11:07 libsaproc.so
-rw-r--r--  1 andrewleonard  staff      28960 30 Apr 11:07 libsctp.so
-rw-r--r--  1 andrewleonard  staff     373816 30 Apr 11:07 libsplashscreen.so
-rw-r--r--  1 andrewleonard  staff     776960 30 Apr 11:07 libsunec.so
-rw-r--r--  1 andrewleonard  staff     672416 30 Apr 11:07 libunpack.so
-rw-r--r--  1 andrewleonard  staff      81432 30 Apr 11:07 libverify.so
-rw-r--r--  1 andrewleonard  staff      37616 30 Apr 11:07 libzip.so
-rw-r--r--  1 andrewleonard  staff  142006992 30 Apr 11:07 modules
-rw-r--r--  1 andrewleonard  staff       3793 30 Apr 11:07 psfont.properties.ja
-rw-r--r--  1 andrewleonard  staff      11390 30 Apr 11:07 psfontj2d.properties
drwxr-xr-x  6 andrewleonard  staff        192 30 Apr 11:07 security
drwxr-xr-x  5 andrewleonard  staff        160 30 Apr 11:07 server
-rw-r--r--  1 andrewleonard  staff   58148665 30 Apr 11:07 src.zip
-rw-r--r--  1 andrewleonard  staff     107853 30 Apr 11:07 tzdb.dat

Les deux seuls fichiers dont la taille diffère sont "modules" et "src.zip":

-rw-r--r--  1 andrewleonard  staff  142006963 20 Jan 12:17 modules
-rw-r--r--  1 andrewleonard  staff   58148661 20 Jan 12:17 src.zip
-rw-r--r--  1 andrewleonard  staff  142006992 30 Apr 11:07 modules
-rw-r--r--  1 andrewleonard  staff   58148665 30 Apr 11:07 src.zip

Certains jmods libèrent vs reproduisent :

-rw-r--r--  1 andrewleonard  staff  21632332 20 Jan 12:17 java.base.jmod
-rw-r--r--  1 andrewleonard  staff    119087 20 Jan 12:17 java.compiler.jmod
-rw-r--r--  1 andrewleonard  staff     58585 20 Jan 12:17 java.datatransfer.jmod
-rw-r--r--  1 andrewleonard  staff  13577286 20 Jan 12:17 java.desktop.jmod
-rw-r--r--  1 andrewleonard  staff    416817 20 Jan 12:17 jdk.internal.vm.ci.jmod
-rw-r--r--  1 andrewleonard  staff   6178633 20 Jan 12:17 jdk.internal.vm.compiler.jmod
-rw-r--r--  1 andrewleonard  staff     20467 20 Jan 12:17 jdk.internal.vm.compiler.management.jmod
-rw-r--r--  1 andrewleonard  staff  21632178 30 Apr 11:07 java.base.jmod
-rw-r--r--  1 andrewleonard  staff    119087 30 Apr 11:07 java.compiler.jmod
-rw-r--r--  1 andrewleonard  staff     58585 30 Apr 11:07 java.datatransfer.jmod
-rw-r--r--  1 andrewleonard  staff  13577286 30 Apr 11:07 java.desktop.jmod
-rw-r--r--  1 andrewleonard  staff    416817 30 Apr 11:07 jdk.internal.vm.ci.jmod
-rw-r--r--  1 andrewleonard  staff   6178634 30 Apr 11:07 jdk.internal.vm.compiler.jmod
-rw-r--r--  1 andrewleonard  staff     20467 30 Apr 11:07 jdk.internal.vm.compiler.management.jmod

Petites différences de taille.

Il existe plusieurs aspects importants de la "reproductibilité" qui fonctionnent tous ensemble :

  • Être capable de "reconstruire" une version, en reproduisant la "même sortie"
  • Connaître exactement toutes les "dépendances" et "infra" pour construire une version donnée, et savoir que chacune d'entre elles est "sécurisée" et "non vulnérable"
  • Sécurité (accès/authentification) de "l'infra" et de tous les serveurs utilisés pour stocker les "dépendances"
  • "Gestion du changement" auditable sur tous les "infra", "tooling" et "serveurs de dépendance"

Partant des "aspects d'importation" , nous devons clarifier à nouveau les "Exigences" en gardant ces aspects à l'esprit, ainsi que reproducible-builds.org "Comment ?" :

1. "Reconstruire" une version, en reproduisant la "même sortie"

  • " le système de construction doit être rendu entièrement déterministe " & " l'environnement de construction doit être enregistré ou prédéfini " :

    • Connaître exactement tous les "outils", "dépendances" et "infra" pour construire une version donnée

    • Connaître exactement la version des "scripts de builds" utilisés pour construire une version donnée

  • " valider que la sortie correspond à la construction d'origine " :

    • Une "méthode" est nécessaire pour valider qu'une version reproduite est en fait la même que la version d'origine

      2. Sécurité (accès/authentification) de "l'infra" et de tous les serveurs utilisés pour stocker les "dépendances"

  • La source des "scripts de construction", des "outils" et des "dépendances" doit être "approuvée" et "vérifiée"

  • L'accès à "infra" doit être sous "contrôle d'accès", et "audité"

    3. "Gestion du changement" auditable sur tous les "infra", "tooling" et "serveurs de dépendance"

  • Toutes les modifications apportées aux serveurs "build-scripts", "tooling" et "dependency" doivent être "modifiées"

  • Toutes les modifications apportées à la construction "infra" doivent être "contrôlées par les modifications", pas de modifications ad hoc de l'infra de production

Prototype de configuration d'un nouvel environnement de construction de point d'accès ubuntu 20.04 jdk17 dans un conteneur docker :

  1. Créer un conteneur de base
docker pull ubuntu:20.04
  1. Conteneur de démarrage :
docker run -i -t <container ID> /bin/bash
  1. Installez les dépendances :
  2. git
root<strong i="17">@06acd4f5d2a9</strong>:/# apt install git
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  ca-certificates git-man krb5-locales less libasn1-8-heimdal libbrotli1 libbsd0 libcbor0.6 libcurl3-gnutls libedit2 liberror-perl libexpat1
  libfido2-1 libgdbm-compat4 libgdbm6 libgssapi-krb5-2 libgssapi3-heimdal libhcrypto4-heimdal libheimbase1-heimdal libheimntlm0-heimdal
  libhx509-5-heimdal libk5crypto3 libkeyutils1 libkrb5-26-heimdal libkrb5-3 libkrb5support0 libldap-2.4-2 libldap-common libnghttp2-14 libperl5.30
  libpsl5 libroken18-heimdal librtmp1 libsasl2-2 libsasl2-modules libsasl2-modules-db libsqlite3-0 libssh-4 libssl1.1 libwind0-heimdal libx11-6
  libx11-data libxau6 libxcb1 libxdmcp6 libxext6 libxmuu1 netbase openssh-client openssl patch perl perl-modules-5.30 publicsuffix xauth
Suggested packages:
  gettext-base git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-cvs git-mediawiki git-svn gdbm-l10n krb5-doc
  krb5-user libsasl2-modules-gssapi-mit | libsasl2-modules-gssapi-heimdal libsasl2-modules-ldap libsasl2-modules-otp libsasl2-modules-sql keychain
  libpam-ssh monkeysphere ssh-askpass ed diffutils-doc perl-doc libterm-readline-gnu-perl | libterm-readline-perl-perl make libb-debug-perl
  liblocale-codes-perl
The following NEW packages will be installed:
  ca-certificates git git-man krb5-locales less libasn1-8-heimdal libbrotli1 libbsd0 libcbor0.6 libcurl3-gnutls libedit2 liberror-perl libexpat1
  libfido2-1 libgdbm-compat4 libgdbm6 libgssapi-krb5-2 libgssapi3-heimdal libhcrypto4-heimdal libheimbase1-heimdal libheimntlm0-heimdal
  libhx509-5-heimdal libk5crypto3 libkeyutils1 libkrb5-26-heimdal libkrb5-3 libkrb5support0 libldap-2.4-2 libldap-common libnghttp2-14 libperl5.30
  libpsl5 libroken18-heimdal librtmp1 libsasl2-2 libsasl2-modules libsasl2-modules-db libsqlite3-0 libssh-4 libssl1.1 libwind0-heimdal libx11-6
  libx11-data libxau6 libxcb1 libxdmcp6 libxext6 libxmuu1 netbase openssh-client openssl patch perl perl-modules-5.30 publicsuffix xauth
0 upgraded, 56 newly installed, 0 to remove and 0 not upgraded.

Comme vous pouvez le voir, installer "git" seul installe 56 nouveaux paquets, avons-nous besoin de tous les enregistrer ?

Analyse des dépendances ?

Nous pourrions installer toutes les dépendances requises, puis simplement "scanner"/"lister" TOUS les pkgs et "enregistrer" ceux-ci comme "informations de construction" ? Qu'est-ce que cela donne? Pas sûr que ce soit reproductible, car pas facile à reconstruire avec cet ensemble exact de 100 versions spécifiques.

Un excellent projet travaillant et discutant de diverses approches et problèmes avec des builds reproductibles : https://wiki.yoctoproject.org/wiki/Reproducible_Builds

D'après les preuves, je pense que la difficulté d'atteindre une "reproductibilité binaire exacte" et de la maintenir là n'apporte en fait pas suffisamment d'avantages pour le coût, l'effort continu pour réparer en amont et d'autres produits d'outillage qui pourraient introduire un seul horodatage là où vous ne le faites pas ' ne pas le vouloir n'est tout simplement pas une utilisation utile de l'effort. Nous devons nous concentrer sur les avantages que les "constructions reproductibles" visent à atteindre, par exemple une chaîne d'approvisionnement fiable.

Comme vous pouvez le voir, installer "git" seul installe 56 nouveaux paquets, avons-nous besoin de tous les enregistrer ?

Étant donné que git n'est pas directement utilisé dans le cadre de la construction elle-même (une autre version de git extraira généralement la même source, une version différente des outils de construction ne produira pas nécessairement la même sortie), je dirais provisoirement non (au moins comme un premier pass) bien que l'enregistrement de toutes les versions utilisées pour une construction soit probablement utile.

openjdk16 au minimum est requis pour les applications Java "reproductibles", car avant cela, des choses comme jmods/jars avaient des "hachages" aléatoires

strace -ff -e trace=openat cat /etc/vdpau_wrapper.cfg
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/etc/vdpau_wrapper.cfg", O_RDONLY) = 3
enable_flash_uv_swap=1
disable_flash_pq_bg_color=1
+++ sortie avec 0 +++

stap -e 'probe syscall.open { printf ("UID %d : %s(%d) open (%s)\n", uid(), execname(), pid(), argstr) }'

Outillage :

  • git
  • essentiel à la construction :
The following NEW packages will be installed:
  binutils binutils-common binutils-x86-64-linux-gnu build-essential cpp cpp-9 dpkg-dev g++ g++-9 gcc gcc-9 gcc-9-base libasan5
  libatomic1 libbinutils libc-dev-bin libc6-dev libcc1-0 libcrypt-dev libctf-nobfd0 libctf0 libdpkg-perl libgcc-9-dev libgomp1
  libisl22 libitm1 liblsan0 libmpc3 libmpfr6 libquadmath0 libstdc++-9-dev libtsan0 libubsan1 linux-libc-dev make xz-utils

apt liste -a:

binutils-common/focal-updates,focal-security,now 2.34-6ubuntu1.1 amd64 [installed,automatic]
binutils-common/focal 2.34-6ubuntu1 amd64

binutils-x86-64-linux-gnu/focal-updates,focal-security,now 2.34-6ubuntu1.1 amd64 [installed,automatic]
binutils-x86-64-linux-gnu/focal 2.34-6ubuntu1 amd64

binutils/focal-updates,focal-security,now 2.34-6ubuntu1.1 amd64 [installed,automatic]
binutils/focal 2.34-6ubuntu1 amd64

build-essential/focal-updates,now 12.8ubuntu1.1 amd64 [installed]
build-essential/focal 12.8ubuntu1 amd64

cpp-9/focal-updates,focal-security,now 9.3.0-17ubuntu1~20.04 amd64 [installed,automatic]
cpp-9/focal 9.3.0-10ubuntu2 amd64

cpp/focal,now 4:9.3.0-1ubuntu2 amd64 [installed,automatic]

dpkg-dev/focal,now 1.19.7ubuntu3 all [installed,automatic]

g++-9/focal-updates,focal-security,now 9.3.0-17ubuntu1~20.04 amd64 [installed,automatic]
g++-9/focal 9.3.0-10ubuntu2 amd64

g++/focal,now 4:9.3.0-1ubuntu2 amd64 [installed,automatic]

gcc-9-base/focal-updates,focal-security,now 9.3.0-17ubuntu1~20.04 amd64 [installed,automatic]
gcc-9-base/focal 9.3.0-10ubuntu2 amd64

gcc-9/focal-updates,focal-security,now 9.3.0-17ubuntu1~20.04 amd64 [installed,automatic]
gcc-9/focal 9.3.0-10ubuntu2 amd64

gcc/focal,now 4:9.3.0-1ubuntu2 amd64 [installed,automatic]

libasan5/focal-updates,focal-security,now 9.3.0-17ubuntu1~20.04 amd64 [installed,automatic]
libasan5/focal 9.3.0-10ubuntu2 amd64

libatomic1/focal-updates,focal-security,now 10.2.0-5ubuntu1~20.04 amd64 [installed,automatic]
libatomic1/focal 10-20200411-0ubuntu1 amd64

libbinutils/focal-updates,focal-security,now 2.34-6ubuntu1.1 amd64 [installed,automatic]
libbinutils/focal 2.34-6ubuntu1 amd64

libc-dev-bin/focal-updates,now 2.31-0ubuntu9.2 amd64 [installed,automatic]
libc-dev-bin/focal 2.31-0ubuntu9 amd64

libc6-dev/focal-updates,now 2.31-0ubuntu9.2 amd64 [installed,automatic]
libc6-dev/focal 2.31-0ubuntu9 amd64

libcc1-0/focal-updates,focal-security,now 10.2.0-5ubuntu1~20.04 amd64 [installed,automatic]
libcc1-0/focal 10-20200411-0ubuntu1 amd64

libcrypt-dev/focal,now 1:4.4.10-10ubuntu4 amd64 [installed,automatic]

libctf-nobfd0/focal-updates,focal-security,now 2.34-6ubuntu1.1 amd64 [installed,automatic]
libctf-nobfd0/focal 2.34-6ubuntu1 amd64

libctf0/focal-updates,focal-security,now 2.34-6ubuntu1.1 amd64 [installed,automatic]
libctf0/focal 2.34-6ubuntu1 amd64

libdpkg-perl/focal,now 1.19.7ubuntu3 all [installed,automatic]

libgcc-9-dev/focal-updates,focal-security,now 9.3.0-17ubuntu1~20.04 amd64 [installed,automatic]
libgcc-9-dev/focal 9.3.0-10ubuntu2 amd64

libgomp1/focal-updates,focal-security,now 10.2.0-5ubuntu1~20.04 amd64 [installed,automatic]
libgomp1/focal 10-20200411-0ubuntu1 amd64

libisl22/focal,now 0.22.1-1 amd64 [installed,automatic]

libitm1/focal-updates,focal-security,now 10.2.0-5ubuntu1~20.04 amd64 [installed,automatic]
libitm1/focal 10-20200411-0ubuntu1 amd64

liblsan0/focal-updates,focal-security,now 10.2.0-5ubuntu1~20.04 amd64 [installed,automatic]
liblsan0/focal 10-20200411-0ubuntu1 amd64

libmpc3/focal,now 1.1.0-1 amd64 [installed,automatic]

libmpfr6/focal,now 4.0.2-1 amd64 [installed,automatic]

libquadmath0/focal-updates,focal-security,now 10.2.0-5ubuntu1~20.04 amd64 [installed,automatic]
libquadmath0/focal 10-20200411-0ubuntu1 amd64

libstdc++-9-dev/focal-updates,focal-security,now 9.3.0-17ubuntu1~20.04 amd64 [installed,automatic]
libstdc++-9-dev/focal 9.3.0-10ubuntu2 amd64

libtsan0/focal-updates,focal-security,now 10.2.0-5ubuntu1~20.04 amd64 [installed,automatic]
libtsan0/focal 10-20200411-0ubuntu1 amd64

libubsan1/focal-updates,focal-security,now 10.2.0-5ubuntu1~20.04 amd64 [installed,automatic]
libubsan1/focal 10-20200411-0ubuntu1 amd64

linux-libc-dev/focal-updates,focal-security,now 5.4.0-73.82 amd64 [installed,automatic]
linux-libc-dev/focal 5.4.0-26.30 amd64

make/focal,now 4.2.1-1.2 amd64 [installed,automatic]

xz-utils/focal-updates,now 5.2.4-1ubuntu1 amd64 [installed,automatic]
xz-utils/focal 5.2.4-1 amd64
  • boucle:
The following NEW packages will be installed:
  curl libcurl4

apt liste -a

curl/focal-updates,focal-security,now 7.68.0-1ubuntu2.5 amd64 [installed]
curl/focal 7.68.0-1ubuntu2 amd64

libcurl4/focal-updates,focal-security,now 7.68.0-1ubuntu2.5 amd64 [installed,automatic]
libcurl4/focal 7.68.0-1ubuntu2 amd64
  • BootJDK à partir d'un emplacement de confiance : AdoptOpenJDK jdk-16.0.1+9
  • gunzip (Système)
  • goudron (Système)
  • autoconf
The following NEW packages will be installed:
  autoconf libsigsegv2 m4

apt liste -a

autoconf/focal,now 2.69-11.1 all [installed]

libsigsegv2/focal,now 2.12-2 amd64 [installed,automatic]

m4/focal,now 1.4.18-4 amd64 [installed,automatic]
  • fichier
The following NEW packages will be installed:
  file libmagic-mgc libmagic1

apt liste -a

file/focal,now 1:5.38-4 amd64 [installed]

libmagic-mgc/focal,now 1:5.38-4 amd64 [installed,automatic]

libmagic1/focal,now 1:5.38-4 amd64 [installed,automatic]
  • décompresser
The following NEW packages will be installed:
  unzip

apt liste -a

unzip/focal,now 6.0-25ubuntu1 amd64 [installed]
  • Zip *: français
The following NEW packages will be installed:
  zip

apt liste -a

zip/focal,now 3.0-11build1 amd64 [installed]
  • apt-get install libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev
The following NEW packages will be installed:
  libice-dev libice6 libpthread-stubs0-dev libsm-dev libsm6 libxau-dev libxcb1-dev libxdmcp-dev libxfixes-dev libxfixes3
  lib xi-dev libxi6 libxrandr2 libxrender1 libxt6 libxtst6 x11-common x11proto-core-dev x11proto-dev x11proto-input-dev
  x11proto-randr-dev x11proto-record-dev x11proto-xext-dev xorg-sgml-doctools xtrans-dev

apt liste -a

libice-dev/focal,now 2:1.0.10-0ubuntu1 amd64 [installed,automatic]

libice6/focal,now 2:1.0.10-0ubuntu1 amd64 [installed,automatic]

libpthread-stubs0-dev/focal,now 0.4-1 amd64 [installed,automatic]

libsm-dev/focal,now 2:1.2.3-1 amd64 [installed,automatic]

libsm6/focal,now 2:1.2.3-1 amd64 [installed,automatic]

libxau-dev/focal,now 1:1.0.9-0ubuntu1 amd64 [installed,automatic]

libxcb1-dev/focal,now 1.14-2 amd64 [installed,automatic]

libxdmcp-dev/focal,now 1:1.1.3-0ubuntu1 amd64 [installed,automatic]

libxfixes-dev/focal,now 1:5.0.3-2 amd64 [installed,automatic]

libxfixes3/focal,now 1:5.0.3-2 amd64 [installed,automatic]

libxi-dev/focal,now 2:1.7.10-0ubuntu1 amd64 [installed,automatic]

libxi6/focal,now 2:1.7.10-0ubuntu1 amd64 [installed,automatic]

libxrandr2/focal,now 2:1.5.2-0ubuntu1 amd64 [installed,automatic]

libxrender1/focal,now 1:0.9.10-1 amd64 [installed,automatic]

libxt6/focal,now 1:1.1.5-1 amd64 [installed,automatic]

libxtst6/focal,now 2:1.2.3-1 amd64 [installed,automatic]

x11-common/focal,now 1:7.7+19ubuntu14 all [installed,automatic]

x11proto-core-dev/focal,now 2019.2-1ubuntu1 all [installed,automatic]

x11proto-dev/focal,now 2019.2-1ubuntu1 all [installed,automatic]

x11proto-input-dev/focal,now 2019.2-1ubuntu1 all [installed,automatic]

x11proto-randr-dev/focal,now 2019.2-1ubuntu1 all [installed,automatic]

x11proto-record-dev/focal,now 2019.2-1ubuntu1 all [installed,automatic]

x11proto-xext-dev/focal,now 2019.2-1ubuntu1 all [installed,automatic]

xorg-sgml-doctools/focal,now 1:1.11-1 all [installed,automatic]

xtrans-dev/focal,now 1.4.0-1 all [installed,automatic]
  • tasses
The following NEW packages will be installed:
  libavahi-client3 libavahi-common-data libavahi-common3 libcups2 libcups2-dev libcupsimage2 libcupsimage2-dev libdbus-1-3
  libjbig-dev libjbig0 libjpeg-dev libjpeg-turbo8 libjpeg-turbo8-dev libjpeg8 libjpeg8-dev liblzma-dev libpng-dev libpng16-16
  libtiff-dev libtiff5 libtiffxx5 libwebp6 zlib1g-dev

apt liste -a

libavahi-client3/focal,now 0.7-4ubuntu7 amd64 [installed,automatic]

libavahi-common-data/focal,now 0.7-4ubuntu7 amd64 [installed,automatic]

libavahi-common3/focal,now 0.7-4ubuntu7 amd64 [installed,automatic]

libcups2-dev/focal-updates,focal-security,now 2.3.1-9ubuntu1.1 amd64 [installed]
libcups2-dev/focal 2.3.1-9ubuntu1 amd64

libcups2/focal-updates,focal-security,now 2.3.1-9ubuntu1.1 amd64 [installed,automatic]
libcups2/focal 2.3.1-9ubuntu1 amd64

libcupsimage2-dev/focal-updates,focal-security,now 2.3.1-9ubuntu1.1 amd64 [installed,automatic]
libcupsimage2-dev/focal 2.3.1-9ubuntu1 amd64

libcupsimage2/focal-updates,focal-security,now 2.3.1-9ubuntu1.1 amd64 [installed,automatic]
libcupsimage2/focal 2.3.1-9ubuntu1 amd64

libdbus-1-3/focal-updates,focal-security,now 1.12.16-2ubuntu2.1 amd64 [installed,automatic]
libdbus-1-3/focal 1.12.16-2ubuntu2 amd64

libjbig-dev/focal,now 2.1-3.1build1 amd64 [installed,automatic]

libjbig0/focal,now 2.1-3.1build1 amd64 [installed,automatic]

libjpeg-dev/focal,now 8c-2ubuntu8 amd64 [installed,automatic]

libjpeg-turbo8-dev/focal-updates,focal-security,now 2.0.3-0ubuntu1.20.04.1 amd64 [installed,automatic]
libjpeg-turbo8-dev/focal 2.0.3-0ubuntu1 amd64

libjpeg-turbo8/focal-updates,focal-security,now 2.0.3-0ubuntu1.20.04.1 amd64 [installed,automatic]
libjpeg-turbo8/focal 2.0.3-0ubuntu1 amd64

libjpeg8-dev/focal,now 8c-2ubuntu8 amd64 [installed,automatic]

libjpeg8/focal,now 8c-2ubuntu8 amd64 [installed,automatic]

liblzma-dev/focal-updates,now 5.2.4-1ubuntu1 amd64 [installed,automatic]
liblzma-dev/focal 5.2.4-1 amd64

libpng-dev/focal,now 1.6.37-2 amd64 [installed,automatic]

libpng16-16/focal,now 1.6.37-2 amd64 [installed,automatic]

libtiff-dev/focal-updates,focal-security,now 4.1.0+git191117-2ubuntu0.20.04.1 amd64 [installed,automatic]
libtiff-dev/focal 4.1.0+git191117-2build1 amd64

libtiff5/focal-updates,focal-security,now 4.1.0+git191117-2ubuntu0.20.04.1 amd64 [installed,automatic]
libtiff5/focal 4.1.0+git191117-2build1 amd64

libtiffxx5/focal-updates,focal-security,now 4.1.0+git191117-2ubuntu0.20.04.1 amd64 [installed,automatic]
libtiffxx5/focal 4.1.0+git191117-2build1 amd64

libwebp6/focal,now 0.6.1-2 amd64 [installed,automatic]

zlib1g-dev/focal-updates,now 1:1.2.11.dfsg-2ubuntu1.2 amd64 [installed,automatic]
zlib1g-dev/focal 1:1.2.11.dfsg-2ubuntu1 amd64
  • fontconfig
The following NEW packages will be installed:
  fontconfig fontconfig-config fonts-dejavu-core libfontconfig1 libfreetype6 ucf

apt liste -a

fontconfig-config/focal,now 2.13.1-2ubuntu3 all [installed,automatic]

fontconfig/focal,now 2.13.1-2ubuntu3 amd64 [installed]

fonts-dejavu-core/focal,now 2.37-1 all [installed,automatic]

libfontconfig1/focal,now 2.13.1-2ubuntu3 amd64 [installed,automatic]

libfreetype6/focal-updates,focal-security,now 2.10.1-2ubuntu0.1 amd64 [installed,automatic]
libfreetype6/focal 2.10.1-2 amd64

ucf/focal,now 3.0038+nmu1 all [installed,automatic]
  • libfontconfig1-dev
The following additional packages will be installed:
  libexpat1-dev libfreetype-dev libfreetype6-dev libglib2.0-0 pkg-config uuid-dev

apt liste -a

libexpat1-dev/focal,now 2.2.9-1build1 amd64 [installed,automatic]

libfreetype-dev/focal-updates,focal-security,now 2.10.1-2ubuntu0.1 amd64 [installed,automatic]
libfreetype-dev/focal 2.10.1-2 amd64

libfreetype6-dev/focal-updates,focal-security,now 2.10.1-2ubuntu0.1 amd64 [installed,automatic]
libfreetype6-dev/focal 2.10.1-2 amd64

libglib2.0-0/focal-updates,focal-security,now 2.64.6-1~ubuntu20.04.3 amd64 [installed,automatic]
libglib2.0-0/focal 2.64.2-1~fakesync1 amd64

pkg-config/focal,now 0.29.1-0ubuntu4 amd64 [installed,automatic]

uuid-dev/focal-updates,now 2.34-0.1ubuntu9.1 amd64 [installed,automatic]
uuid-dev/focal 2.34-0.1ubuntu9 amd64
  • alsa
The following additional packages will be installed:
  alsa-topology-conf alsa-ucm-conf libasound2 libasound2-data

apt liste -a

alsa-topology-conf/focal,now 1.2.2-1 all [installed,automatic]

alsa-ucm-conf/focal-updates,now 1.2.2-1ubuntu0.7 all [installed,automatic]
alsa-ucm-conf/focal 1.2.2-1 all

libasound2-data/focal-updates,now 1.2.2-2.1ubuntu2.4 all [installed,automatic]
libasound2-data/focal 1.2.2-2.1 all

libasound2/focal-updates,now 1.2.2-2.1ubuntu2.4 amd64 [installed,automatic]
libasound2/focal 1.2.2-2.1 amd64

J'ai essayé d'installer et d'exécuter SystemTap, sans succès, des problèmes avec l'environnement et sa compilation, il semble qu'une image de débogage du système soit requise. Cela semble un peu trop bas pour quelque chose que nous utiliserions dans le cadre d'une construction.

strace est beaucoup plus facile et utilisable, mais la sortie de l'exécution d'une construction jdk est énorme, car un fichier de trace est créé par processus et des milliers de processus sont créés pour effectuer une construction JDK. Voici une petite section de la sortie "grep'ing" pour "include" dans une reconstruction "delta" d'un JDK lors de la modification d'un seul fichier .c :

strace.out.4873:openat(AT_FDCWD, "/jdk/src/hotspot/share/include/bits/sigaction.h", O_RDONLY|O_NOCTTY) = -1 ENOENT (No such file or directory)
strace.out.4873:openat(AT_FDCWD, "/jdk/src/hotspot/os/posix/include/bits/sigaction.h", O_RDONLY|O_NOCTTY) = -1 ENOENT (No such file or directory)
strace.out.4873:openat(AT_FDCWD, "/usr/lib/gcc/x86_64-linux-gnu/9/include/bits/sigaction.h", O_RDONLY|O_NOCTTY) = -1 ENOENT (No such file or directory)
strace.out.4873:openat(AT_FDCWD, "/usr/local/include/bits/sigaction.h", O_RDONLY|O_NOCTTY) = -1 ENOENT (No such file or directory)
strace.out.4873:openat(AT_FDCWD, "/usr/include/x86_64-linux-gnu/bits/sigaction.h", O_RDONLY|O_NOCTTY) = 6
strace.out.4873:openat(AT_FDCWD, "/jdk/build/linux-x86_64-server-release/support/modules_include/java.base/bits/sigcontext.h", O_RDONLY|O_NOCTTY) = -1 ENOENT (No such file or directory)
strace.out.4873:openat(AT_FDCWD, "/jdk/build/linux-x86_64-server-release/support/modules_include/java.base/linux/bits/sigcontext.h", O_RDONLY|O_NOCTTY) = -1 ENOENT (No such file or directory)
strace.out.4873:openat(AT_FDCWD, "/jdk/src/hotspot/share/include/bits/sigcontext.h", O_RDONLY|O_NOCTTY) = -1 ENOENT (No such file or directory)
strace.out.4873:openat(AT_FDCWD, "/jdk/src/hotspot/os/posix/include/bits/sigcontext.h", O_RDONLY|O_NOCTTY) = -1 ENOENT (No such file or directory)
strace.out.4873:openat(AT_FDCWD, "/usr/lib/gcc/x86_64-linux-gnu/9/include/bits/sigcontext.h", O_RDONLY|O_NOCTTY) = -1 ENOENT (No such file or directory)
strace.out.4873:openat(AT_FDCWD, "/usr/local/include/bits/sigcontext.h", O_RDONLY|O_NOCTTY) = -1 ENOENT (No such file or directory)
strace.out.4873:openat(AT_FDCWD, "/usr/include/x86_64-linux-gnu/bits/sigcontext.h", O_RDONLY|O_NOCTTY) = 6
strace.out.4873:openat(AT_FDCWD, "/usr/lib/gcc/x86_64-linux-gnu/9/include/stddef.h", O_RDONLY|O_NOCTTY) = 6
strace.out.4873:openat(AT_FDCWD, "/jdk/build/linux-x86_64-server-release/support/modules_include/java.base/bits/types/stack_t.h", O_RDONLY|O_NOCTTY) = -1 ENOENT (No such file or directory)
strace.out.4873:openat(AT_FDCWD, "/jdk/build/linux-x86_64-server-release/support/modules_include/java.base/linux/bits/types/stack_t.h", O_RDONLY|O_NOCTTY) = -1 ENOENT (No such file or directory)
strace.out.4873:openat(AT_FDCWD, "/jdk/src/hotspot/share/include/bits/types/stack_t.h", O_RDONLY|O_NOCTTY) = -1 ENOENT (No such file or directory)
strace.out.4873:openat(AT_FDCWD, "/jdk/src/hotspot/os/posix/include/bits/types/stack_t.h", O_RDONLY|O_NOCTTY) = -1 ENOENT (No such file or directory)
strace.out.4873:openat(AT_FDCWD, "/usr/lib/gcc/x86_64-linux-gnu/9/include/bits/types/stack_t.h", O_RDONLY|O_NOCTTY) = -1 ENOENT (No such file or directory)
strace.out.4873:openat(AT_FDCWD, "/usr/local/include/bits/types/stack_t.h", O_RDONLY|O_NOCTTY) = -1 ENOENT (No such file or directory)

Il illustre les différents en-têtes système extraits d'endroits tels que /usr/include, /usr/lib, /usr/local/include, ...

Le test strace illustre le problème de savoir exactement avec quels fichiers système on compile. Il n'est pas pratique d'enregistrer, de vérifier et de déterminer la version de chaque fichier .h ouvert par exemple.

Ainsi, ce qui précède a illustré la journalisation exacte de ce que vous avez construit avec au Nième degré, c'est-à-dire les versions exactes de includes, libs, .. est très difficile. Par exemple, il est très difficile de savoir de quelle version ou d'où vient le fichier /usr/include/bits/sigaction.h ?
Peut-être que la meilleure réponse est d'utiliser Docker (en ignorant AIX pour le moment), tant que les "images" sont créées dans un environnement très sécurisé. Enregistrez ensuite le résumé SHA de l'image exacte utilisée pour une génération. Vous savez alors exactement avec quoi une construction est construite.
Cette approche "déplace" ensuite le problème jusqu'à la création d'image Docker, au moins du point de vue de la "définition" et de la "sécurité".

Prototype:

Étendez les scripts openjdk-build pour enregistrer les "informations de construction" exactes pour un jdk-17 Hotspot xLinux intégré à Docker

  • [ ] temurin-build SHA
  • [ ] Tâche "Construire la configuration"
  • [ ] paramètres makejdk-any-platform.sh
  • [ ] BUILD_CONFIG
  • [ ] Image Docker et son résumé SHA
  • [ ] Toutes les URL de dépendance téléchargées, SHA : Alsa, Freetype
  • [ ] Tous les référentiels "source" et SHA construits avec. PAS les valeurs transmises en tant que paramètres, mais la sortie du journal juste avant la construction
  • [ ] Arguments de configuration d'OpenJDK
  • [ ] OpenJDK "créer des cibles"

Toutes les informations consignées dans le fichier de métadonnées de publication

Non inclus dans ce prototype :

  1. dépôt ci-jenkins-pipelines utilisé
  2. dépôts secondaires utilisés, par exemple, installateur, signature, ...

Ainsi, ce qui précède a illustré la journalisation exacte de ce que vous avez construit avec au Nième degré, c'est-à-dire les versions exactes de includes, libs, .. est très difficile. Par exemple, il est très difficile de savoir de quelle version ou d'où vient le fichier /usr/include/bits/sigaction.h ?

OK ... En supposant qu'il n'a pas été modifié depuis l'installation du paquet (ce qui est une autre chose qui pourrait probablement être vérifiée), la réponse viendrait de rpm -qf /usr/include/bits/sigaction.h (basé sur RPM) ou dpkg -S /usr/include/bits/sigaction.h ( basé sur Debian). Les E_NOENT peuvent être ignorés car c'est juste le compilateur qui recherche où se trouve le fichier dans le chemin d'inclusion. Une fois que vous avez la liste des fichiers qui ont été ouverts avec succès, dédupliquez-les, exécutez cette commande sur chacun d'eux, puis dédupliquez cette sortie. Puisque vous avez la sortie ci-dessus, peut-être que quelque chose comme ça fonctionnera probablement (non testé car je n'ai pas votre fichier mais je suis sûr que vous pouvez voir ce qu'il essaie de faire :

grep -v ENOENT strace.out.4873 | cut -d'"' -f2 | while read F; do dpkg -S "$F" >> packagelist.txt 2>> filesnotinpackage.txt; done
sort packagelist.txt | uniq
sort filesnotinpackage.txt | uniq

_NOTE : Sur les machines réelles, il y aura plus de filesnotinpackage.txt que sur votre système puisque, par exemple, gcc et tous ses bits sont dans /usr/local/gcc* et non du système d'exploitation -paquet fourni selon ce rôle ansible _

BUILD_CONFIG

Quelle est la différence entre ceci et Job "Build Config" - Je suppose que l'un est un sur-ensemble de l'autre. Je suggérerais également que ce n'est pas aussi important que les autres éléments, car les éléments pertinents pour la construction sont capturés par les paramètres du script et tout le reste concerne principalement d'autres parties des pipelines, telles que les tests/installateurs, etc. a le potentiel de semer la confusion, mais pas de mal à l'inclure dans ce premier passage :-)

dépôts secondaires utilisés, par exemple, installateur, signature, ...

Gardez également à l'esprit que pour OpenJ9 les dépôts "secondaires" incluraient probablement les dépôts eclipse/openj9 et eclipse/omr qui sont extraits.

@sxa Job "build Config" est :

{
    "ARCHITECTURE": "x64",
    "TARGET_OS": "linux",
    "VARIANT": "hotspot",
    "JAVA_TO_BUILD": "jdk",
    "TEST_LIST": [
        "sanity.openjdk",
        "sanity.system",
        "extended.system",
        "sanity.perf",
        "sanity.functional",
        "extended.functional"
    ],
    "SCM_REF": "",
    "BUILD_ARGS": "",
    "NODE_LABEL": "build&&linux&&x64",
    "ADDITIONAL_TEST_LABEL": "",
    "KEEP_TEST_REPORTDIR": false,
    "ACTIVE_NODE_TIMEOUT": "0",
    "CODEBUILD": false,
    "DOCKER_IMAGE": "adoptopenjdk/centos6_build_image",
    "DOCKER_NODE": "",
    "DOCKER_REGISTRY": "",
    "DOCKER_CREDENTIAL": "",
    "PLATFORM_CONFIG_LOCATION": "AdoptOpenJDK/openjdk-build/master/build-farm/platform-specific-configurations",
    "CONFIGURE_ARGS": "--enable-dtrace",
    "OVERRIDE_FILE_NAME_VERSION": "",
    "USE_ADOPT_SHELL_SCRIPTS": true,
    "RELEASE": false,
    "PUBLISH_NAME": "",
    "ADOPT_BUILD_NUMBER": "",
    "ENABLE_TESTS": true,
    "ENABLE_INSTALLERS": true,
    "ENABLE_SIGNER": true,
    "CLEAN_WORKSPACE": false,
    "CLEAN_WORKSPACE_AFTER": false,
    "CLEAN_WORKSPACE_BUILD_OUTPUT_ONLY_AFTER": true
}

BUILD_CONFIG :

00:39:19  # ============================
00:39:19  # OPENJDK BUILD CONFIGURATION:
00:39:19  # ============================
00:39:19  BUILD_CONFIG[ADOPT_PATCHES]="true"
00:39:19  BUILD_CONFIG[ASSEMBLE_EXPLODED_IMAGE]="false"
00:39:19  BUILD_CONFIG[BRANCH]="dev"
00:39:19  BUILD_CONFIG[BUILD_FULL_NAME]="linux-x86_64-server-release"
00:39:19  BUILD_CONFIG[BUILD_VARIANT]="hotspot"
00:39:19  BUILD_CONFIG[CLEAN_DOCKER_BUILD]="false"
00:39:19  BUILD_CONFIG[CLEAN_GIT_REPO]="true"
00:39:19  BUILD_CONFIG[CLEAN_LIBS]="false"
00:39:19  BUILD_CONFIG[CONTAINER_NAME]="openjdk_container"
00:39:19  BUILD_CONFIG[COPY_MACOSX_FREE_FONT_LIB_FOR_JDK_FLAG]="false"
00:39:19  BUILD_CONFIG[COPY_MACOSX_FREE_FONT_LIB_F......

Prototype pour Hotspot, donc ignorant openj9 pour le moment

Construction complète avec strace, plus de 56 000 fichiers de trace !?!
0,6 Go de trace
et a pris plus de 3 heures à courir !

Construction complète avec strace, plus de 56 000 fichiers de trace !?!

Cela inclut-il tous les points de trace ENOENT ?

Cette page vous a été utile?
0 / 5 - 0 notes