🚀 Docker Build and Push / build-and-push (15) (push) Successful in 5m29s
🚀 Docker Build and Push / build-and-push (16) (push) Successful in 6m10s
🚀 Docker Build and Push / build-and-push (17) (push) Successful in 5m20s
🚀 Docker Build and Push / build-and-push (18) (push) Successful in 5m21s
Image - Étape `base` commune : tous les paquets sont mis à niveau (PostgreSQL à la dernière mineure, pgvector, Debian). L'image de base de VectorChord restait figée à la version de sa publication. - En-têtes du serveur épinglés sur la version du serveur installé. PG18 avait été retiré parce que TimescaleDB, compilé avec des en-têtes 18.6, était chargé par un serveur 18.3 (`undefined symbol: palloc0_mul`). - Sonde de santé avec l'utilisateur et la base du conteneur : en `postgres`, elle écrivait une erreur FATAL au journal dès que POSTGRES_USER était défini. - Label `base.name` corrigé : il reprenait la version du paquet au lieu de la version majeure. CI - PG18 ajouté à la matrice. - Exécution nocturne : apt est interrogé dans l'image publiée ; elle n'est reconstruite et republiée que s'il lui reste des mises à jour, sinon elle est seulement testée. Lancement manuel possible. - `docker-build.yml` supprimé : l'ancien workflow à actions externes tournait encore à chaque push, en double de `docker.yml`. - `paths-ignore` : un push de documentation seule ne lance pas la CI. - Labels `version`, `url` et `fr.killinger.apt-refresh`. Tests - `tests.sh`, la même commande en local et en CI : utilisateur et base autres que `postgres`, version majeure du serveur, présence des cinq extensions, redémarrage, et reprise d'une base créée par l'image publiée. Documentation - README en vitrine, CLAUDE.md, docs/architecture.md, docs/exploitation/publication.md, six décisions, docs/a-faire.md.
39 lines
1.9 KiB
Markdown
39 lines
1.9 KiB
Markdown
# 0002 — Paquets mis à niveau à la construction, en-têtes épinglés sur le serveur
|
|
|
|
## Contexte
|
|
|
|
L'image de base n'est republiée qu'à chaque version de VectorChord. Entre deux, son
|
|
PostgreSQL prend du retard sur les versions mineures et les correctifs de sécurité : une
|
|
image de base contenait PostgreSQL 18.3 quand le dépôt PGDG en était à 18.6, avec une
|
|
trentaine d'autres paquets en retard.
|
|
|
|
La compilation de TimescaleDB installe les en-têtes du serveur par apt, donc dans la
|
|
dernière version. Compilé avec des en-têtes 18.6 puis chargé par un serveur 18.3,
|
|
TimescaleDB échouait à la création de l'extension (`undefined symbol: palloc0_mul`), sans
|
|
erreur à la compilation. PostgreSQL 18 avait été retiré de la CI pour cette raison.
|
|
|
|
## Décision
|
|
|
|
- Une étape `base`, commune à la compilation et à l'image finale, met tous les paquets à
|
|
niveau (`apt-get upgrade --with-new-pkgs`). Le serveur publié est donc à la dernière
|
|
version mineure.
|
|
- L'étape de compilation installe les en-têtes dans la version exacte du serveur installé,
|
|
lue par `dpkg-query`, et non dans la dernière disponible.
|
|
- La couche de mise à niveau porte une clé de cache, l'argument `APT_REFRESH`.
|
|
|
|
## Conséquences
|
|
|
|
- PostgreSQL 18 est de nouveau construit et publié.
|
|
- Serveur et en-têtes ne peuvent plus diverger : si la version voulue des en-têtes n'est
|
|
plus dans le dépôt, la construction échoue au lieu de produire une image qui ne charge
|
|
pas TimescaleDB.
|
|
- La variable d'environnement `PG_VERSION` héritée de l'image de base n'est plus la version
|
|
du serveur.
|
|
- Sans changement de `APT_REFRESH`, le cache garde la mise à niveau telle qu'elle a été
|
|
faite : c'est la CI qui décide quand la rejouer
|
|
([0005](0005-mises-a-jour-nocturnes-pilotees-par-apt.md)).
|
|
|
|
## Attestée par
|
|
|
|
`Dockerfile` (étapes `base` et `builder`) ; commit `dcf4169`, qui avait retiré PostgreSQL 18.
|