From f32fa6c111dbd27284ae116a3538d1b11d024460 Mon Sep 17 00:00:00 2001 From: Mathieu Benoit Date: Wed, 12 Aug 2026 03:12:09 -0400 Subject: [PATCH] [FIX] qemu desktop: snap packages froze the build for 30 minutes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A graphical Ubuntu VM stopped making progress, with no error, on "Unable to contact the store, trying every minute for the next 30 minutes". Nothing in the log says why, and the install just looks stuck. The cause is ours. We disable snapd a few lines earlier, to stop its refreshes during the install. Then gnome-core recommends "firefox", which on Ubuntu is only a transitional package whose postinst runs "snap install" -- against a snapd we just stopped. It is a RECOMMENDS, with alternatives. So we exclude the snap packages and name epiphany-browser, a real .deb. Excluding firefox alone was not enough: apt fell back to chromium-browser, a transitional package too, and Cinnamon froze the same way on thunderbird. Measured on the VM: with this list, GNOME (844 packages) and Cinnamon (1167) pull none, without an apt error. --- FR --- Une VM Ubuntu graphique cessait d'avancer, sans erreur, sur « Unable to contact the store, trying every minute for the next 30 minutes ». Rien dans le log n'en dit la raison, et l'installation paraît simplement figée. La cause est nôtre. On coupe snapd quelques lignes plus haut, pour empêcher ses rafraîchissements pendant l'installation. Puis gnome-core recommande « firefox », qui n'est plus sur Ubuntu qu'un paquet de transition dont le postinst lance « snap install » — contre un snapd qu'on vient d'arrêter. C'est un RECOMMENDS, avec alternatives. On écarte donc les paquets snap et on nomme epiphany-browser, un vrai .deb. Écarter le seul firefox ne suffisait pas : apt retombait sur chromium-browser, paquet de transition lui aussi, et Cinnamon figeait pareillement sur thunderbird. Mesuré sur la VM : avec cette liste, GNOME (844 paquets) et Cinnamon (1167) n'en tirent aucun, sans erreur apt. Assisted-by: Claude Opus 5 --- script/todo/todo.py | 75 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 74 insertions(+), 1 deletion(-) diff --git a/script/todo/todo.py b/script/todo/todo.py index 5490ca9..9741d7a 100755 --- a/script/todo/todo.py +++ b/script/todo/todo.py @@ -4352,6 +4352,78 @@ class TODO: "service": "lightdm", }, } + # Ubuntu remplace trois applications par des paquets de TRANSITION dont le + # postinst lance « snap install ». Or snapd est coupé juste avant, pour + # empêcher ses rafraîchissements pendant l'installation : le postinst ne + # joint alors pas le store et RÉESSAIE UNE MINUTE DURANT TRENTE MINUTES. + # L'installation paraît figée et rien dans le log ne dit pourquoi. + # + # La famille est CLOSE et relevée dans l'index du dépôt, pas devinée : trois + # paquets sources portent une version « …snap1… », firefox, chromium-browser + # et thunderbird — avec toutes leurs déclinaisons (firefox-locale-*, + # chromium-codecs-*). Les corriger un à un a coûté deux VM figées : firefox + # sous GNOME, puis thunderbird sous Cinnamon. + # + # Les trois ne sont que RECOMMANDÉS, et avec des solutions de rechange : + # Recommends: firefox-esr | firefox | chromium | epiphany-browser | … + # Recommends: thunderbird | evolution | geary | mail-reader + # On les écarte donc, et on nomme deux vrais .deb pour satisfaire les + # recommandations. Les nommer rend le résultat déterministe : laissé à apt, + # le premier repli était « chromium-browser », un paquet de transition lui + # aussi. + # + # Un épinglage apt sur « Pin: version *snap1* » aurait été plus général — + # essayé en glob et en regex, il ne bloque rien. Mesuré sur une VM 26.04 : + # avec cette liste, GNOME (844 paquets) et Cinnamon (1167) n'en tirent + # AUCUN, sans erreur apt. + _QEMU_APT_NO_SNAP = ( + "epiphany-browser evolution" + " firefox- chromium- chromium-browser- thunderbird-" + ) + + # Magasin d'applications d'une VM graphique. Ubuntu livre snapd dans son + # image cloud (vérifié : 2.75.2 en 26.04) et gnome-core RECOMMANDE + # « firefox », qui n'y est plus qu'un paquet de transition lançant + # « snap install ». Trois réponses possibles, et il faut choisir : + # + # deb rien que des .deb. snapd coupé, paquets-snap écartés, + # epiphany-browser comme navigateur. Le plus léger, et rien à + # télécharger en plus pendant un déploiement déjà long. + # flatpak l'outillage Flatpak en plus, SANS dépôt Flathub ni + # installation : la machine est prête, l'administrateur ajoute + # les dépôts qu'il veut. + # snap le comportement d'Ubuntu, snapd laissé actif et Firefox en + # snap. Lent sous émulation, mais c'est le défaut de la distro. + # + # La question n'a de sens que pour une VM Ubuntu GRAPHIQUE : sur un + # serveur, rien ne tire de snap. + QEMU_APP_STORES = ( + ("deb", "deb only (epiphany-browser)"), + ("flatpak", "Flatpak tooling, no Flathub"), + ("snap", "snap (Ubuntu default, Firefox)"), + ) + QEMU_SNAP_DISTROS = ("ubuntu",) + + @classmethod + def _qemu_desktop_suffixes(cls): + """{clé de saveur: suffixe de nom}. La TUI le reçoit par son contexte + plutôt que de le redéfinir : un seul endroit décrit les saveurs.""" + return {k: v["suffix"] for k, v in cls._QEMU_DESKTOP.items()} + + @classmethod + def _qemu_apt_store_pkgs(cls, app_store): + """Paquets apt à ajouter au bureau selon le magasin retenu.""" + if app_store == "snap": + # On ne retire rien : Firefox arrivera en snap, comme sur une + # Ubuntu ordinaire, et snapd est resté actif pour le servir. + return "" + pkgs = cls._QEMU_APT_NO_SNAP + if app_store == "flatpak": + # Le greffon donne à GNOME Logiciels la gestion des Flatpak. + # Aucun « remote-add » ici : le dépôt reste un choix explicite. + pkgs += " flatpak gnome-software-plugin-flatpak" + return pkgs + # Accès distant, indépendant du bureau choisi. _QEMU_DESKTOP_REMOTE = { "apt": {"packages": "xrdp", "port": 3389, "client": "RDP"}, @@ -4546,7 +4618,8 @@ class TODO: "n=$((n+1)); [ $n -ge 30 ] && break; sleep 10; done; " "sudo DEBIAN_FRONTEND=noninteractive " "apt-get -o DPkg::Lock::Timeout=600 install -y " - f"{de['apt']} {rem['apt']['packages']}; " + f"{de['apt']} {rem['apt']['packages']} " + f"{self._QEMU_APT_NO_SNAP}; " "elif command -v dnf >/dev/null 2>&1; then " # Cascade d'environnements : le premier qui existe gagne. Un # environnement absent fait rendre 1 à dnf sans rien installer,