[FIX] cache qemu : ne désigner un faisceau que s'il existe
Les variables du cache — PIP_CERT et ses voisines — recevaient le chemin canonique de la famille de paquets, sans que rien ne vérifie qu'il soit là. Une image peut ne pas le porter : sur une Fedora récente, « /etc/pki/tls/certs/ca-bundle.crt » manque alors que le faisceau extrait existe. pip refuse alors TOUT téléchargement, y compris ce qui n'a rien à voir avec le cache, et l'installation s'arrête sur des paquets publics. Le faisceau de la famille est essayé d'abord, les autres connus ensuite ; aucun trouvé n'écrit aucune variable, et pip garde son propre jeu de certificats. Vérifié : la commande produite parcourt les quatre chemins avant de renoncer. --- EN --- The cache variables — PIP_CERT and its neighbours — received the canonical path of the package family, with nothing checking it was there. An image may not carry it: on a recent Fedora, "/etc/pki/tls/certs/ca-bundle.crt" is missing while the extracted bundle exists. pip then refuses EVERY download, including what has nothing to do with the cache, and the install stops on public packages. The family bundle is tried first, the other known ones next; none found writes no variable, and pip keeps its own certificate set. Checked: the produced command walks the four paths before giving up. Assisted-by: Claude Opus 5
This commit is contained in:
parent
44bc1b093c
commit
1342117e25
1 changed files with 19 additions and 2 deletions
|
|
@ -3284,6 +3284,18 @@ CACHE_TRUST = {
|
|||
# disparaît alors que la VM garde sa variable.
|
||||
CACHE_ENV_VARS = ("PIP_CERT", "REQUESTS_CA_BUNDLE", "NODE_EXTRA_CA_CERTS")
|
||||
|
||||
# Les faisceaux connus, essayés dans cet ordre quand celui de la famille
|
||||
# manque. Une image ne porte pas toujours le chemin canonique de sa
|
||||
# distribution : sur une Fedora récente, « /etc/pki/tls/certs/ca-bundle.crt »
|
||||
# peut ne pas exister alors que le faisceau extrait, lui, est là. Or une
|
||||
# variable qui vise un fichier ABSENT fait échouer pip sur « Could not find a
|
||||
# suitable TLS CA certificate bundle » — tout casse, au lieu de rien.
|
||||
CA_BUNDLE_CANDIDATS = (
|
||||
"/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem",
|
||||
"/etc/ssl/certs/ca-certificates.crt",
|
||||
"/etc/ssl/ca-bundle.pem",
|
||||
)
|
||||
|
||||
# Ce qu'une VM déployée l'amont du cache coupé reçoit en plus. L'audit de npm
|
||||
# interroge un service distant qu'aucun cache ne peut rejouer : hors ligne il
|
||||
# échoue à chaque installation sans rien vérifier. La variable reste dans la
|
||||
|
|
@ -3641,10 +3653,15 @@ def cache_commands(args: argparse.Namespace) -> list[str]:
|
|||
return nix_trust_commands()
|
||||
_, commande, faisceau = CACHE_TRUST[famille]
|
||||
commandes = [f"{commande} || true"]
|
||||
# Le faisceau de la famille d'abord, les autres connus ensuite : aucun
|
||||
# trouvé, aucune variable écrite, et pip garde alors son propre jeu de
|
||||
# certificats plutôt que de refuser tout téléchargement.
|
||||
candidats = " ".join(dict.fromkeys((faisceau,) + CA_BUNDLE_CANDIDATS))
|
||||
for var in CACHE_ENV_VARS:
|
||||
commandes.append(
|
||||
f"sh -c 'grep -q ^{var}= /etc/environment"
|
||||
f" || echo {var}={faisceau} >> /etc/environment'"
|
||||
f'sh -c \'for f in {candidats}; do [ -r "$f" ] || continue;'
|
||||
f" grep -q ^{var}= /etc/environment"
|
||||
f" || echo {var}=$f >> /etc/environment; break; done'"
|
||||
)
|
||||
gardees = list(CACHE_ENV_VARS)
|
||||
if getattr(args, "offline", False):
|
||||
|
|
|
|||
Loading…
Reference in a new issue