Git corrompu lors de la reconstruction du lanceur

Après la mise à niveau de docker_manager via l’API (qui a semblé bien se dérouler), le tableau de bord Admin a simplement affiché une page vide, même si le reste du forum semblait fonctionner.

Pour résoudre ce problème, j’ai dû exécuter :

./launcher rebuild app

Cependant, pendant ce processus, il a rencontré des erreurs :

I, [2025-07-14T08:54:06.062789 #1]  INFO -- : cd /var/www/discourse && sudo -H -E -u discourse bash -c '
  set -o errexit
  if [ $(git rev-parse --is-shallow-repository) == "true" ]; then
      git remote set-branches --add origin main
      git remote set-branches origin tests-passed
      git fetch --depth 1 origin tests-passed
  else
      git fetch --tags --prune-tags --prune --force origin
  fi
'
erreur : le fichier de paquet .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack ne correspond pas à l'index
erreur : le fichier de paquet .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack ne correspond pas à l'index
erreur : le fichier de paquet .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack ne correspond pas à l'index
erreur : le fichier de paquet .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack ne correspond pas à l'index

… et l’erreur : packfile continue d’être spammée jusqu’à interruption.

D’après ce que je vois, le dépôt git est corrompu. Mais quel dépôt git ?
Je n’ai même pas de dossier /var/www/discourse, donc je suppose que cela se trouve à l’intérieur d’un volume de conteneur ?

Je suis un peu perplexe. Merci pour votre aide !

Qu’entendez-vous par là ?

Normalement, vous mettriez à jour docker_manager via l’interface utilisateur.

Ah ! Mon erreur. Je voulais dire UI, pas API. Je vais corriger ça tout de suite.

1 « J'aime »

J’ai essayé de le résoudre en démarrant et en entrant dans le conteneur de l’application :

./launcher start app
./launcher enter app

Ensuite, j’ai vérifié que l’erreur se produisait lors de l’appel de la commande git en tant qu’utilisateur discourse :

cd /var/www/discourse
sudo -H -E -u discourse bash -c 'git fetch --tags --prune-tags --prune --force origin'

Ce qui a donné :

error: packfile .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack does not match index
error: packfile .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack does not match index
error: packfile .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack does not match index
etc..

J’ai essayé de le résoudre en renommant discourse et en en clonant un nouveau :

cd /var/www
mv discourse discourse-old
git clone https://github.com/discourse/discourse.git
chown -R discourse:discourse discourse

Une fois cloné, j’ai essayé de relancer git fetch sans aucune erreur !

cd /var/www/discourse
sudo -H -E -u discourse bash -c 'git fetch --tags --prune-tags --prune --force origin'

Mais lorsque j’ai quitté le shell du conteneur et que j’ai essayé de reconstruire à nouveau avec ./launcher rebuild app, j’ai obtenu la même erreur.

Est-ce que ./launcher rebuild app utilise un conteneur différent de celui dans lequel ./launcher enter app entre ?

1 « J'aime »

oui, il y a deux niveaux de git, un à l’extérieur.

votre erreur semble bien se produire à l’intérieur du conteneur… très étrange !

Enfin, j’ai réussi à le faire fonctionner !
Je pense que c’était un mélange entre un git corrompu et le résultat d’une précédente mise à niveau de docker. Je l’ai résolu en élaguant tous les conteneurs et images docker :

cd /opt/discourse
./launcher stop app
docker container prune
docker image prune -a
./launcher rebuild app

Cela a donné/s’est terminé par :

Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade.
Once you start the new server, consider running:
    /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages

Running this script will delete the old cluster's data files:
    ./delete_old_cluster.sh
-------------------------------------------------------------------------------------
UPGRADE OF POSTGRES COMPLETE

Old 13 database is stored at /shared/postgres_data_old

To complete the upgrade, rebuild again using:

./launcher rebuild app
-------------------------------------------------------------------------------------

En relançant la reconstruction, tout a recommencé à fonctionner :

./launcher rebuild app
1 « J'aime »