Restauration de toutes les données et dépendances à partir de dpkg --set-selections '*'

44

Je peux donc utiliser une seule machine:

dpkg --get-selections '*' > selection.txt

Sur une autre machine:

dpkg --set-selections < selection.txt

... suivi de l'un des éléments suivants:

aptitude install
apt-get -u dselect-upgrade

... pour installer les paquets qui.

Cependant, il semble que certaines informations soient perdues au cours du processus, par exemple si un paquet (par exemple xyz) s’est installé automatiquement en tant que dépendance d’un autre paquet ( abc). Vous pouvez voir cela chaque fois que vous faites quelque chose comme apt-get --purge remove abc. Sur la machine d'origine, vous serez averti que le paquet a xyzété installé en tant que dépendance abcet que vous pouvez l'utiliser apt-get autoremovepour vous en débarrasser.

Maintenant, je suis au courant de deborphanet debfoster, mais ils sont difficiles à utiliser étant donné la tâche (simple) à accomplir.

Il semble que l'enregistrement et la restauration des sélections comme indiqué ci-dessus ne suffisent pas pour restaurer les dépendances subtiles des packages installés.

Existe-t-il un moyen de sauvegarder l'ensemble complet de métadonnées pour la gestion des packages et de le restaurer ensuite dans son intégralité?

0xC0000022L
la source
Je me suis souvent demandé si je produisais un gros script shell avec un 'sudo apt-get install' avec tous mes paquets (moins de libs). Bien sûr, je rencontre le même problème que vous.
Chuck R
Je suppose que le meilleur endroit pour commencer à chercher serait de vérifier si dpkg est réellement responsable de cette information. Si ce n'est pas le cas, c'est peut-être le travail d'apt.
Huckle
3
Si vous utilisez la méthode manuelle, vous voudrez peut-être apt-marksauvegarder / restaurer les informations concernant les paquets installés automatiquement ou manuellement
Lekensteyn le
Ce n'est pas dans le dépôt du paquet 10.04, n'est-ce pas? Est-ce que cela fait partie du dépôt Canonical ou d'une tierce partie?
0xC0000022L
2
Non, c'est juste un commentaire "pour votre information". J'utiliserais apt-mark (il fait partie d'apt, il devrait donc déjà être installé) pour obtenir et définir les marques pour les paquets (voir sa page de manuel pour plus de détails).
Htorque

Réponses:

39

Sauvegarde:

apt-mark showauto > pkgs_auto.lst
apt-mark showmanual > pkgs_manual.lst

Restaurer:

sudo apt-mark auto $(cat pkgs_auto.lst)
sudo apt-mark manual $(cat pkgs_manual.lst)
htorque
la source
Merci, était sur le point de demander à vous ou à Lekensteyn d’écrire cela en guise de réponse.
0xC0000022L
Ces commandes vous permettent-elles de réinstaller les programmes de cette liste?
Svetlana Belkin
cela peut-il enlever les paquets qui sont installés en plus, lors de la restauration?
n611x007
1
Pouvez-vous expliquer la différence entre autoet manual? Merci.
Anto
J'ai accidentellement marqué comme manuel un tas d'autres paquets ... y a-t-il un moyen de revenir en arrière? Merci
dentex
2

La réponse sélectionnée à cette question est incomplète et ne fonctionne pas (ou plus). La solution douloureuse consiste à utiliser une bash for-loop pour analyser les fichiers * .lst de sortie et les alimenter apt install. Mauvais choix, cependant, ne sera donc pas illustré ici.

Un meilleur choix est d'utiliser apt-clone, comme indiqué dans cette réponse sur le Stackexchange Unix et Linux. Cela crée un petit fichier (environ 100 Ko ou moins pour mon système). Il est allégué que les paquets seront clonés avec peu d’effort ou de douleur.

Donc, en bref, sur la machine d'origine:

apt-clone clone `uname -n`

Ensuite, sur la machine à copier, copiez le fichier de clonage et exécutez:

apt-clone restore original-machine-name.apt-clone.tar.gz

J'inclus cette réponse ici car cette page est apparue dans les recherches initiales sur le Web, mais pas l'autre réponse. Cette méthode semble beaucoup plus facile.

codeur occasionnel
la source