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
- Are Snaps installed system wide, or per user?
- Flatpak: User vs system install
- 📦 Sauvegarde des paquets installés sur votre Linux
Merci à Caseih 🐺 pour l’idée et la relecture de ce billet.
ᦿ🐺