erplibre/script/todo
Mathieu Benoit f6cc0bfc53 [FIX] qemu install : attendre le verrou apt d'apt-daily et de l'agent
A desktop install repeated « Could not get lock » for minutes, then could run
on an index never refreshed. Disabling the apt-daily timer does not interrupt
the apt-get it already started, so its service is stopped too. The guest agent
is laid by a detached unit that runs its own apt-get update: « cloud-init
status --wait » says done while that lock is still held, so the wait covers
that unit. Retries come back every two seconds, DPkg::Lock::Timeout not
covering the list lock, and an update that never succeeds says so at once.

--- FR ---

Une installation de bureau répétait « Impossible d'obtenir le verrou » pendant
des minutes, puis pouvait tourner sur un index jamais rafraîchi. Désactiver le
minuteur apt-daily n'interrompt pas l'apt-get qu'il a lancé : son service est
donc arrêté aussi. L'agent invité est posé par une unité détachée qui fait son
propre apt-get update : « cloud-init status --wait » dit « done » pendant que
ce verrou est tenu, et l'attente couvre donc cette unité. La reprise repasse
toutes les deux secondes, DPkg::Lock::Timeout ne couvrant pas le verrou des
listes, et un update qui n'aboutit pas le dit sur-le-champ.

Assisted-by: Claude Opus 5
2026-09-14 16:32:42 -04:00
..
assistant [FIX] execute : caviarder les clés d'API et les jetons Bearer 2026-09-09 07:35:15 -04:00
mail [ADD] mail: read and send email from the TODO CLI 2026-08-16 03:56:34 -04:00
assistant_menu.py [FIX] todo : une invite n'écrit plus son deux-points deux fois 2026-09-09 07:35:15 -04:00
auto_ask.py [UPD] invites : 15 secondes pour décider, et le fichier nomme la base 2026-08-29 02:11:04 -04:00
database_manager.py [ADD] database: dupliquer une base, et la neutraliser pour de bon 2026-08-29 02:11:04 -04:00
deploy_form_extras.py [IMP] qemu deploy : pré-configurer la VM, et dire ce qui s'y installe 2026-09-04 02:03:52 -04:00
deploy_form_lib.py [IMP] qemu deploy : pré-configurer la VM, et dire ce qui s'y installe 2026-09-04 02:03:52 -04:00
deploy_form_plan.py [IMP] qemu deploy : pré-configurer la VM, et dire ce qui s'y installe 2026-09-04 02:03:52 -04:00
dev_tools.py [FIX] script todo : starship, URL corrigée, curl qui refuse le HTML 2026-09-04 00:38:29 -04:00
kdbx_manager.py [ADD] vpn openconnect : groupe d'URL, SSO délégué, mot de passe borné 2026-09-04 06:26:34 -04:00
logo_ascii.txt [IMP] bot assistant TODO 2025-04-27 02:40:20 -04:00
longtest_menu.py [ADD] long_test : partir d'un hôte existant, et le menu des deux piles 2026-08-29 01:53:03 -04:00
migration_form.py [ADD] migration: offer « go back to a step » on the resume screen 2026-08-22 07:23:59 -04:00
migration_stats.py [ADD] migration: see and repair the website COW views 2026-08-10 03:10:50 -04:00
migration_status.py [FIX] verdicts de migration : distinguer trouvaille et échec d'outil 2026-08-29 02:11:04 -04:00
migration_status_tui.py [FIX] migration state: open the quality screen in its own process 2026-08-22 07:23:59 -04:00
proxmox_deploy_form.py [IMP] qemu deploy : pré-configurer la VM, et dire ce qui s'y installe 2026-09-04 02:03:52 -04:00
proxmox_menu.py [ADD] LongTest : jusqu'à quel étage un Proxmox imbriqué tient-il 2026-08-29 01:53:03 -04:00
qemu_access.py [FIX] qemu menu : passer par le groupe libvirt plutôt que par sudo 2026-09-03 05:00:55 -04:00
qemu_deploy.py [IMP] qemu deploy : constater le motif du sudo, le dire avant l'invite 2026-09-04 02:27:51 -04:00
qemu_deploy_form.py [IMP] qemu deploy : pré-configurer la VM, et dire ce qui s'y installe 2026-09-04 02:03:52 -04:00
qemu_hardware.py [FIX] qemu 3D : voir l'ABI figée qui annule l'accélération demandée 2026-09-03 05:00:55 -04:00
qemu_install.py [FIX] qemu install : attendre le verrou apt d'apt-daily et de l'agent 2026-09-14 16:32:42 -04:00
qemu_install_monitor.py [FIX] qemu menu : nommer l'URI libvirt, sinon la liste des VM est vide 2026-09-03 05:00:55 -04:00
qemu_manage.py [FIX] ssh config : une seule décision sur ce qu'est un nom de machine 2026-09-09 07:35:15 -04:00
qemu_menu.py [ADD] qemu réseau : voir et recréer le sous-réseau des VM 2026-09-04 03:31:22 -04:00
qemu_network.py [ADD] qemu réseau : voir et recréer le sous-réseau des VM 2026-09-04 03:31:22 -04:00
qemu_privilege.py [ADD] qemu diagnostic : un relevé à transmettre, Gérer scindé en trois 2026-09-03 05:00:55 -04:00
qemu_recover.py [ADD] qemu diagnostic : un relevé à transmettre, Gérer scindé en trois 2026-09-03 05:00:55 -04:00
README.base.md [ADD] proxmox : un écran pour déployer sur un hôte distant 2026-08-25 03:17:13 -04:00
README.fr.md [ADD] proxmox : un écran pour déployer sur un hôte distant 2026-08-25 03:17:13 -04:00
README.md [ADD] proxmox : un écran pour déployer sur un hôte distant 2026-08-25 03:17:13 -04:00
source_todo.sh [ADD] install: mise as Python provider, pyenv as fallback 2026-08-16 23:33:49 -04:00
ssh_config.py [FIX] ssh config : une seule décision sur ce qu'est un nom de machine 2026-09-09 07:35:15 -04:00
textual_setup.py [ADD] todo: install Textual on demand 2026-08-07 03:22:26 -04:00
todo.json [ADD] menu vpn : créer un profil, déposer les secrets, monter le tunnel 2026-09-04 03:43:02 +00:00
todo.py [FIX] script todo : lire « default » là où le fichier l'écrit ainsi 2026-09-14 16:31:01 -04:00
todo_example.json [ADD] menu vpn : créer un profil, déposer les secrets, monter le tunnel 2026-09-04 03:43:02 +00:00
todo_file_browser.py [FIX] todo: test menu, file browser and KeePass refusals 2026-08-16 03:56:34 -04:00
todo_i18n.py [FIX] qemu install : attendre le verrou apt d'apt-daily et de l'agent 2026-09-14 16:32:42 -04:00
todo_install.py [ADD] script todo : installer les outils manquants, les quatre familles 2026-08-31 07:18:13 -04:00
todo_prefs.py [ADD] assistant : serveur LLM reconnu, catalogue gpt, sessions locales 2026-09-09 07:35:15 -04:00
todo_telemetry.py [ADD] script todo : installer les outils manquants, les quatre familles 2026-08-31 07:18:13 -04:00
todo_upgrade.py [ADD] commentaires : un relevé non bloquant, sa règle, le code nettoyé 2026-08-30 06:08:30 -04:00
transform_form.py [ADD] transform data : anonymiser un fichier externe ou une base Odoo 2026-09-11 00:06:39 -04:00
transform_menu.py [ADD] transform data : anonymiser un fichier externe ou une base Odoo 2026-09-11 00:06:39 -04:00
transform_setup.py [ADD] transform data : anonymiser un fichier externe ou une base Odoo 2026-09-11 00:06:39 -04:00
version_manager.py [IMP] script: update copyright year to 2026 2026-03-11 23:16:05 -04:00
vpn_menu.py [FIX] vpn : ne plus demander la route par défaut à qui ne la pose pas 2026-09-08 09:41:17 -04:00

TODO is an assistant robot to use ERPLibre Execute it with ./script/todo/todo.py or make todo.

For a new project, copy todo_example.json to private/todo/todo_override.json | private/todo/todo_override_private.json and edit it.

The mail/ package is the mail client reachable from Assistant > Mail: several IMAP/SMTP accounts, a local cache, and a Textual TUI. See ../../doc/EMAIL.md.

Where the code lives

todo.py carries the menus and the general helpers. Everything around a single subject sits in its own file, and the whole thing is assembled by mixins on the TODO class — one file, one subject, its header states its boundary.

File What it owns
todo.py the menus, the configuration, the general helpers
qemu_menu.py the QEMU/KVM menu, the image catalogue, the statistics
qemu_deploy.py deciding then running a deployment
qemu_install.py the recipes run inside a VM
qemu_manage.py lifecycle, disks, hardware, cleanup, addresses
qemu_access.py SSH, tunnels, consoles, Android emulator
proxmox_menu.py the same, on a REMOTE Proxmox VE host

The two deployment forms — libvirt here, Proxmox over there — ask the same questions, so they share a foundation rather than each holding a copy:

File What it owns
deploy_form_lib.py pure logic (sizes, plan, totals, spec), the shared CSS, the resource-row factory, the progress view
deploy_form_plan.py the plan's gestures: overrides, locks, copies, renaming, free values
qemu_deploy_form.py what QEMU/KVM adds: desktops, tools, branches, install profiles
proxmox_deploy_form.py what Proxmox adds: host, storage, bridge, VMID, address

A form inherits PlanMixin and provides three hooks: which presets each resource offers, the name a VM would fall back to, and what a lock freezes. test_todo_deploy_form_lib.py fails if a form redefines a gesture the foundation already carries — that is what keeps the architecture from drifting back into two copies.