Evolution #5127
Revoir la gestion des paquets par pyeole/pkg.py
Description
Maintenant que eole-common:source:scripts/gen_conteneurs.py fonctionne il faut revoir la gestion des paquets par source:pyeole/pkg.py.
L’un des problème est la gestion des dépendances à installer pour les conteneurs.
Une option serait d’utiliser un cache Apt
sur le maître et laisser les conteneurs gérer les dépendances :
Demandes liées
Révisions associées
Rename "uninstall()" to "remove()" to match apt command
- pyeole/pkg.py (EolePkgApt.remove): New name of "uninstall()".
(EolePkg.remove): Ditoo.
- tests/test_pkg.py: Rename "test_uninstall()" to "test_remove()" and
update API.
Ref: #5127 @2m
EolePkg.update() returns method instead of call result
- pyeole/pkg.py (EolePkg.update): Add missing parentheses.
Ref: #5127 @2m
Load EOLE APT configuration file
Now eole-common-pkg provides an apt configuration file.
- pyeole/pkg.py (EolePkgApt.__init__): Initialize configuration.
(EolePkgApt.configure): Load apt configuration file.
Ref: #5127 @20m
Let the client of EoleAptPkg handling the update of package database
- pyeole/pkg.py (EoleAptPkg.upgrade): do not update apt cache.
Ref: #5127 @2m
pkg: let "apt.Cache()" calculate upgradable list for us
- pyeole/pkg.py (EolePkgApt.get_upgradable_list): Use the
"apt.Cache.get_changes()" method to get list of packages to upgrade.
Take care to no commit thoses changes.
Ref: #5127 @5m
Do not install/remove packages one-by-one
- pyeole/pkg.py (EoleAptPkg._apply_to_package): factorize action to
perform on a package or list of packages.
(EoleAptPkg.install): Use new API.
(EoleAptPkg.remove): Use new API.
Ref: #5127 @10m
Permettre de rendre les appels APT silencieux
Par défaut, les appels APT affiche la progression sur la sortie standard.
- pyeole/pkg.py (EolePkgApt.__init__): Définition des différents systèmes
de progression.
(EolePkgApt.commit): Ajout du paramètre « silent » afin de rendre les
appels APT silencieux.
- pyeole/pkg.py (EolePkgApt._apply_to_package): Idem.
Passer le paramètre aux appels de méthode.
- pyeole/pkg.py (EolePkgApt.install): Idem.
- pyeole/pkg.py (EolePkgApt.remove): Idem.
- pyeole/pkg.py (EolePkgApt.update): Idem.
- pyeole/pkg.py (EolePkgApt.upgrade): Idem.
- pyeole/pkg.py (EolePkgApt.download): Idem.
- pyeole/pkg.py (EolePkgApt.get_upgradable_list): L’appel à update doit
être silencieux.
- pyeole/pkg.py (EolePkg.install): Ajout du paramètre « silent » afin de rendre les
appels APT silencieux.
Passer le paramètre aux appels de méthode.
- pyeole/pkg.py (EolePkg.remove): Idem.
- pyeole/pkg.py (EolePkg.update): Idem.
- pyeole/pkg.py (EolePkg.upgrade): Idem.
- pyeole/pkg.py (EolePkg.download): Idem.
Ref: #5127 @10m
Ajout des utilitaires de ligne de commandes pour APT
- pyeole/pkg.py (parse_apt_cmdline): Gestion des options de la ligne de
commande.
(run_apt): Exécute une action en fonction des paramètres d’appel.
(apt_cli): Exécute une action en fonction des options de la ligne de
commande.
Ref: #5127 @15m
La fonction « run_apt » ne vérifie pas ses arguments
- pyeole/pkg.py (run_apt): Définition des valeurs par défaut des paramètres.
Appliquer la vérification comme lors de la gestion des options de la
ligne de commande.
Ref: #5127 @5m
Utilisation de la nouvelle API de « pyeole.pkg »
La fonction « pyeole.pkg.run_apt() » prend en charge l’exécution de la
commande « apt-eole » dans les conteneurs.
- creole/reconfigure.py (remove_packages): Utilisation de « run_apt() ».
(install_packages): Utilisation de « run_apt() ».
Installe les paquets par groupe de conteneurs.
(packages): Ne plus utiliser « pyeole.pkg.EolePkg ».
(dist_upgrade): Suppression de la fonction inutilisée.
(update_server): Utilisation de la nouvelle API.
Ref: #5127 @20m
La commande « apt-eole » sera fournie par « eole-common-pkg »
Suppression de la commande « apt-eole » et du script de complètement bash correspondant.
- setup.py: Suppression des références à « apt-eole ».
Ref: #5127 @2m
Ajout de l’utilitaire apt-eole
L’utilitaire « apt-eole » est à installer dans tous les conteneurs
- apt-eole: Utilisation du code de « pyeole.pkg ».
Ref: #5127 @20m
La configuration APT et l’outil « apt-eole » sont fournis par « eole-common-pkg »
- debian/eole-server.install: Ne pas inclure « /etc/apt/ ».
- debian/control: « eole-common-pkg » fourni « apt-eole » qui était
auparavant fourni par « creole ».
(Depends): « eole-server » requiert une version récente de « creole ».
Ref: #5127 @5m
Mise à niveau du complètement bash de la commande « apt-eole »
- bash-completion/apt-eole: Mise à niveau avec la nouvelle version de la
commande.
- eole-common.mk (bash-completion_DATA_DIR): Installation du complètement.
Ref: #5127 @2m
Lance « apt-get » dans les conteneurs
La configuration APT étant installée dans les conteneurs, nous demandons
à « apt-get » de l’utiliser.
- pyeole/pkg.py (run_apt): Lance « apt-get » dans les conteneurs avec la
configuration EOLE.
Ref: #5127 @2m
Les commandes apt dans les conteneurs sont trop silencieuses
- pyeole/pkg.py: Passage de « pyeole.process.system_out »
à « pyeole.process.system_code ».
Ref: #5127 @2m
Les commandes apt-eole ne sont pas répercutées dans les conteneurs
- pyeole/pkg.py: Import « CreoleClient ».
Factorisation de la liste des actions avec et sans arguments.
(parse_apt_cmdline): Ajout de l’action « dist-upgrade ».
(run_apt): On lance « run_apt » pour chaque conteneur s’il est activé.
(EolePkgApt.dist_upgrade): Nouvelle méthode pour mettre à jour la
distribution.
(EolePkg.dist_upgrade): Idem.
Ref: #5127 @20m
Le logger racine ne doit être créé que pour la ligne de commande
- pyeole/pkg.py (parse_apt_cmdline): Passage du logger en mode « info »
par défaut.
(run_apt): Ne gère plus le logger.
(apt_cli): Création du logger racine pour la ligne de commande.
Ref: #5127 @5m
La commande « apt-eole » supporte « dist-upgrade »
- bash-completion/apt-eole: Ajout de « dist-upgrade » au complètement.
Ref: #5127
Changement d’API de « pyeole.pkg.run_apt() »
- creole/reconfigure.py (remove_packages): « pyeole.pkg.run_apt() » ne
gère plus le « log_level ».
(install_packages): Idem.
Ref: #5127
reconfigure: la liste des paquets à supprimer peut être vide
- creole/reconfigure.py (remove_packages): Ne supprimer les paquets que
si la liste n’est pas vide.
Ref: #5127
Permettre d’installer/supprimer des paquets pour tous les conteneurs
À l’heure actuelle, seul les commandes de mise à jour fonctionne sur tous
les conteneurs, et ce par défaut.
L’utilisation du nom de conteneur « all » permet d’exécuter une action
sur le maître et tous les conteneurs, principalement utile pour
« install » et « remove ».
- pyeole/pkg.py (run_apt): Le conteneur « all » déclanche l’action sur
tous les conteneurs après le maître.
Ref: #5127 @2m
La commande « apt-eole » supporte le conteneur « all »
Cela exécute la commande sur le maître puis dans tous les conteneurs
disponibles si le mode est activé.
- bash-completion/apt-eole (_apt_eole): Ajout du conteneur « all » par
défaut.
Ref: #5127
Correction du complètement de la commande « apt-eole »
- bash-completion/apt-eole: Ne proposer la liste des paquets que pour
« install » et « remove ».
Forcer « ls » à ne pas utiliser de couleur.
Ajout du mot courant à la commande « compgen » pour le complètement des
noms de conteneurs. Sans cette option, la liste est affichée mais non
complété.
Ref: #5127 @5m
Make dpkg/debconf noninteractive
This works on LXC controller and in LXC guests.
- pyeole/pkg.py (run_apt): Pass "DEBIAN_FRONTEND" to "apt-get" process in
containers.
(NonInteractiveInstallProgress): New install progress to set
"DEBIAN_FRONTEND" environment variable.
(EolePkgApt.__init__): Define two install progress, one for normal
output and one for no output (silent mode).
(EolePkgApt.commit): Use new silent progress.
(EolePkgApt.install): Pass "silent" parameter.
(EolePkgApt.update): Use silent acquire
Ref: #5127 @25m
Découpage de « list-upgrade » et factorisation de la sortie JSON
Cela permettra à Maj-Auto/Query-Auto de compter le nombre de paquet avant
de les afficher
- pyeole/pkg.py (parse_apt_cmdline): La fonction de « list-upgrade » est
« list_upgrade ».
- pyeole/pkg.py (EolePkg.__init__): Gère l’état de sortie JSON avec
l’attribut « _return_json ».
- pyeole/pkg.py (EolePkg._make_containers_return_json): Configure l’objet
courant et les arguments pour que les appels dans les conteneurs
retourne du JSON. Gère le cas où l’appel se passe dans un conteneur.
- pyeole/pkg.py (EolePkg._run): Factorisation de la sortie JSON.
- pyeole/pkg.py (EolePkg.get_upgradable_list): Configure la sortie JSON
pour les conteneurs et lance le dispatcher « _run() ».
- pyeole/pkg.py (EolePkg.list_upgrade): Utilise la liste des paquets à
mettre à jour en paramètre ou appel « EolePkg.get_upgradable_list() ».
Ref: #5127 @20m
Affichage d’un log de l’action pour le maître
- pyeole/pkg.py (EolePkgApt._run): Prend le nom du conteneur en paramètre
afin de n’afficher un message de log pour le conteneur « root ».
(EolePkg._run): Passe le nom du conteneur à la méthode « _run() » du
gestionnaire de paquet.
Ref: #5127 @5m
Historique
#1 Mis à jour par Daniel Dehennin il y a plus de 10 ans
- Echéance mis à 26/07/2013
- Statut changé de Nouveau à Résolu
- Assigné à mis à Daniel Dehennin
- Version cible mis à Eole 2.4-dev-3
- Début mis à 23/07/2013
- % réalisé changé de 0 à 100
Appliqué par commit 234468cf2042507df0e491519727f6763483e9f9
Appliqué par commit a7f2c5ffef2e4ece9dd10ffce18b9c41da2bc578
#2 Mis à jour par Joël Cuissinat il y a plus de 10 ans
- Statut changé de Résolu à Fermé