diff --git a/script/qemu/deploy_qemu.py b/script/qemu/deploy_qemu.py index d5dd84f..182c9f7 100755 --- a/script/qemu/deploy_qemu.py +++ b/script/qemu/deploy_qemu.py @@ -803,18 +803,19 @@ def build_cloud_config( lines.append(f"package_update: {'true' if do_update else 'false'}") lines.append(f"package_upgrade: {'true' if do_upgrade else 'false'}") - # Serveur SSH : garantit sa présence sur toutes les distros (les images - # Debian genericcloud notamment ne l'activent pas toujours). Le nom du - # paquet diffère : « openssh » sur Arch, « openssh-server » ailleurs — - # sans quoi cloud-init échoue (paquet introuvable -> status: error). - ssh_pkg = "openssh" if args.distro == "arch" else "openssh-server" - packages = ["qemu-guest-agent", ssh_pkg, *args.package] - lines.append("packages:") - lines += [ - f" - {p}" for p in dict.fromkeys(packages) - ] # dédoublonne, ordre gardé + # On n'installe AUCUN paquet via cloud-init : cela exige le réseau au 1er + # boot et peut bloquer longtemps (dnf/apt/pacman lents sur réseau lent) — + # cloud-init reste alors « running » et tout ce qui suit attend. sshd est + # DÉJÀ présent dans toutes les images cloud (Ubuntu/Debian/Fedora/Arch) ; + # on l'active seulement (runcmd). Les outils nécessaires (curl/git/make…) + # sont installés — avec dépôts optimisés — par le bootstrap d'installation. + packages = list(dict.fromkeys(args.package)) # seulement --package + if packages: + lines.append("packages:") + lines += [f" - {p}" for p in packages] # Active et démarre SSH quel que soit le nom du service (ssh sur - # Debian/Ubuntu, sshd sur Fedora) — sans quoi la VM peut booter sans SSH. + # Debian/Ubuntu, sshd sur Fedora/Arch) — sans quoi la VM peut booter + # sans SSH accessible. lines += [ "runcmd:", " - systemctl enable --now ssh 2>/dev/null" diff --git a/script/todo/todo.py b/script/todo/todo.py index d746a28..a837873 100755 --- a/script/todo/todo.py +++ b/script/todo/todo.py @@ -1643,6 +1643,9 @@ class TODO: # Cible d'installation Odoo exécutée dans la VM (défaut ERPLibre 1.6.0). ERPLIBRE_ODOO_TARGET = "install_odoo_18" + # Go ajoutés au disque quand on installe ERPLibre (le minimum d'image ne + # laisse que ~97 Mo libres après l'installation). + ERPLIBRE_EXTRA_DISK_GB = 5 @staticmethod def _qemu_wait_ssh(ip, user="erplibre", timeout=180): @@ -1942,7 +1945,7 @@ class TODO: script_path = self._qemu_script_path() deployed = [] jobs = [] # (name, parts) des VM à créer - for d, v, _ram, _disk in selected: + for d, v, _ram, disk in selected: name = self._qemu_infra_name(d, v) if self._qemu_domain_exists(name): print(f"⏭ {name}: {t('already exists, skipped.')}") @@ -1966,7 +1969,13 @@ class TODO: if ssh_key: parts += ["--ssh-key", ssh_key] if install_branch: - parts += ["--package", "git"] + # ERPLibre dépasse le minimum : +5 Go de disque (sinon il ne + # reste que ~97 Mo après l'installation). git/make sont posés + # par le bootstrap (pas via cloud-init, trop lent au boot). + bigger = ( + self._parse_disk_gb(disk) + self.ERPLIBRE_EXTRA_DISK_GB + ) + parts += ["--disk-size", f"{bigger}G"] parts.append("-y") jobs.append((name, parts))