cClaude.rocks ☕ Le blog

[Nouvelles technologies du libre, sciences et coups de gueule…]

Menu
😤 Ce billet a été édité le : 2024-09-11

Pour réinstaller son système, il est préférable de connaître les paquets préalablement installés.

Voici comment récupérer la liste des applications installées.



Apt : les paquets Debian et consorts.

Sur les dérivés de Debian, pour obtenir la liste des paquets on à deux solutions possibles :

En utilisant dpkg :

dpkg --get-selections

En utilisant apt :

apt list --installed

Pour ma part, j’utilise habituellement apt alors continuons sur cette base :

Concrètement pour sauvegarder cela, on peut écrire :

apt list --installed >my-apt-packages.txt

Ou pour garder un historique et être capable de différencier plusieurs machines :

cdate="$( date +'%Y-%m-%d_%H-%M-%S' )"
apt list --installed >"/chemmin/vers/partage/${cdate}.${HOSTNAME}.apt-packages.txt"

Cependant, avec la multiplication des gestionnaires de paquets, on ne peut pas s’arrêter là. Aujourd’hui cela se complique, il faudra également prendre en compte *Flatpak et Snap.



Les paquets Flatpak

Les paquets Flatpak peuvent s’installer à deux niveaux :

  • soit pour le système et accessible à tous les utilisateurs,
  • soit au niveau de l’utilisateur (et donc accessible seulement à l’utilisateur en question).

Au niveau du système

flatpak list --system

Concrètement on doit écrire quelque chose comme la :

cdate="$( date +'%Y-%m-%d_%H-%M-%S' )"
flatpak list --system >"/chemmin/vers/partage/${cdate}.${HOSTNAME}.flatpak-system-packages.txt"

Au niveau de chaque utilisateur

flatpak list --user

Comme cette configuration est dépendante de l’utilisateur, on doit exécuter ce code sur chaque compte et mémoriser le nom de l’utilisateur dans le nom de la sauvegarde :

cdate="$( date +'%Y-%m-%d_%H-%M-%S' )"
flatpak list --user >"/chemmin/vers/partage/${cdate}.${HOSTNAME}.${USER}.flatpak-user-packages.txt"


Les paquets Snap

Les paquets Snap s’installent au niveau du système, donc pas besoin de traiter chaque utilisateur.

snap list

Concrètement on doit écrire quelque chose comme la :

cdate="$( date +'%Y-%m-%d_%H-%M-%S' )"
snap list >"/chemmin/vers/partage/${cdate}.${HOSTNAME}.snap-packages.txt"


Automatisation

Pour obtenir une sauvegarde homogène, l’idéal est de tout faire dans une même opétation. Voici un exemple de fonction bash permettant de faire cela :

function backup_installed_packages {
  local -r dir="$1"
  shift
  local users=("$@")
  local cdate=
  cdate="$( date +'%Y-%m-%d_%H-%M-%S' )"

  pushd "${dir}" >/dev/null || return $?
  apt list --installed >"${cdate}.${HOSTNAME}.apt-packages.txt"

  if which snap >/dev/null ; then
    snap list >"${cdate}.${HOSTNAME}.snap-packages.txt"
  fi
  if which flatpak >/dev/null ; then
    flatpak list --system --verbose >"${cdate}.${HOSTNAME}.flatpak-system-packages.txt"

    if [ "${#users[@]}" -eq 0 ] ; then
      flatpak list --user --verbose >"${cdate}.${HOSTNAME}.${USER}.flatpak-user-packages.txt"
    else
      for user in "${users[@]}" ; do
        echo "Backup flatpak packages for ${user}"
        sudo su - "${user}" -c 'flatpak list --user --verbose' >"${cdate}.${HOSTNAME}.${user}.flatpak-user-packages.txt"
      done
    fi
  fi
  popd >/dev/null
}

Qui s’utilise comme suit :

  • Pour sauvegarder uniquement les packages pour l’utilisateur courant :
backup_installed_packages CHEMIN_DES_SAUVEGARDES
  • Pour effectuer la sauvegarde pour plusieurs utilisateurs :
backup_installed_packages CHEMIN_DES_SAUVEGARDES user1 user2 …

Pour être complet au niveau de votre sauvegarde, il est prudent d’également sauvegarder les ppa présents sur votre système, pour cela voir le billet : 📦 Sauvegarde des paquets installés sur votre Linux



Liens


Merci à Caseih 🐺 pour l’idée et la relecture de ce billet.

ᦿ🐺


ℹ 2006 - 2024 | 🏠 Accueil du domaine | 🏡 Accueil du blog