(Cette question est très similaire à 10458. Il a été suggéré que Fedora et Ubuntu / Debian sont suffisamment différents pour justifier des réponses différentes.)
En utilisant n'importe quelle configuration Ubuntu, j'installe progressivement un certain nombre de paquets en plus de l'installation de base. Si je réinstalle ou si je dois installer une nouvelle machine, je souhaite généralement réinstaller ces packages spécifiques , et je veux le faire rapidement pour retourner au travail avec un minimum de tracas. Pour autant que je sache, tous les gestionnaires de paquets ( apt-get
, aptitude
et synaptic
) peuvent me dire quels paquets sont installés, et ils ont tous des journaux (bien que différents pour chaque outil, ce qui est fastidieux). Mais aucun d’eux ne peut me dire quels paquets j’aiinstallés, par opposition à leurs dépendances ou mises à jour du système. Même les journaux sont délicats en ce que je ne suis pas tout à fait sûr de ce que je devrais en extraire ou de la façon de les intégrer (dans le cas des divers outils de la famille apt). Cela signifie que chaque fois que je réinstalle, ou même que je sauvegarde, je ne sais pas comment recréer cette liste.
Je ne m'attends pas nécessairement à ce que les outils me permettent de le faire, mais sinon, je cherche des solutions de contournement. Même des motifs à rechercher, de bonnes règles empiriques, ou une idée claire de ce qui est en train d’être écrit, seraient utiles. Il n’ya peut-être pas de «meilleure réponse» ici, mais de bonnes réponses seraient très utiles.
La plupart des réponses ci-dessous donnent une idée de ce que je recherche et sont utiles dans une certaine mesure. Le choix est celui qui se rapproche le plus d'une méthode raisonnablement automatique pour réinstaller mes outils sur un nouveau système, même avec toutes ses mises en garde.
Réponses:
Sur tout ordinateur basé sur Debian, il s'agit d'un moyen courant de dupliquer un ensemble de paquets. Sur l'ancienne machine:
Copiez le fichier
my_favorite_packages
sur la nouvelle machine (une clé USB est une bonne option, maisscp
fonctionne également très bien). Puis exécutez cette séquence (avec les privilèges root):Cela ne vous donne pas que les paquets que vous avez installés. Il obtient également leurs dépendances, etc. De plus, si les référentiels entre les deux machines sont différents, tous les paris sont ouverts.
En ce qui concerne les journaux,
apt-get
conserve un journal à/var/log/apt/history.log
(merci à Tshepang pour l’avoir mis à jour dans un commentaire);dpkg
fait (à/var/log/dpkg.log
), mais il est réputé difficile à analyser et ne peut être lu qu'avec les privilèges root;aptitude
en a un/var/log/aptitude
et vous pouvez le parcourir avec les privilèges d’utilisateur habituels.Autant que je sache, vous avez raison de dire qu'aucun de ces journaux ne suit spécifiquement ce que vous avez installé, contrairement aux dépendances installées automatiquement. Vous pouvez cependant obtenir cette information à partir d'une
aptitude
recherche. Recherchez tous les packages installés qui ont également été installés automatiquement:Si vous ne voulez que ceux que vous avez installés (pas les dépendances automatiques), annulez les valeurs suivantes
~M
:Si vous voulez que le formatage soit tel que vous n’ayez que les noms des paquets et le mot "install", vous
aptitude
pouvez le faire aussi. Cela vous donne une liste prête à alimenter àdpkg --get-selections
:(Je n'ai rien sur les systèmes RedHat ou à base de RedHat. Excusez - moi. Il n'y a vraiment pas de réponse pour Linux en tant que telle depuis la gestion des paquets est une grande partie de ce qui fait différentes distributions différentes .)
la source
apt-get
,synaptic
etaptitude
(pour autant que je l' ai vu). C’est depuis le début de l’année 2010.dpkg.log
déclarations ne semblent pas être vraies dans Ubuntu 14.04, car tous les utilisateurs sur lesquels je peux obtenir mes sélections sont faciles, pas anodins, mais pas trop difficiles.awk '$3 != "install" { next } ; { gsub(/:.+/, "", $4) ; print $4 }' /var/log/dpkg.log | sort | uniq
awk '$3 !~ /install|remove|purge/ { next } { gsub(/remove|purge/, "uninstall", $3) ; gsub(/:.+/, "", $4) ; a[$4]=$3 } END { for (p in a) { if (a[p] == "install") { print p } } }' /var/log/dpkg.log | sort -u
fait.Utilisez-le
dpkg -l '*' > jaunty.original
pour enregistrer tous les packages installés sur un système fraîchement installé.Après avoir installé tous vos paquets supplémentaires, faites-le
dpkg -l '*' > mysystem.2009017
.Les forfaits supplémentaires font la différence:
diff jaunty.original mysystem.2009017
la source
L'aptitude est en fait assez bonne à cela. Aptitude sait quand quelque chose a été installé manuellement ou par dépendance et vous pouvez lui dire de supprimer les choses qui ne sont plus nécessaires et qui n'ont été installées que parce que quelque chose d'autre en dépendait, il fallait toujours garder votre système aussi petit que possible.
Il y a une poignée de paquets qui constituent une installation Ubuntu, ubuntu-minimal, ubuntu-desktop, ubuntu-server, etc. Si vous dites à Aptitude de marquer ceux-ci comme installés manuellement et de supprimer tout le reste, vous vous retrouvez avec le minimum de paquets possible.
J'explique comment faire tout cela dans deux messages de mon blog: Nettoyer une Debian GNU / Linux et Nettoyer une Debian GNU / Linux (ou Ubuntu), reprise . En bref, la réponse que vous recherchez est:
La dernière fois que j'ai travaillé avec ça, si vous utilisiez apt-get, cela ne fonctionnerait pas. C'est pourquoi je recommande toujours aptitude et, autant que je sache, Debian déconseille apt-get en faveur d'aptitude.
Je ne sais pas comment le faire sur Fedora et vous devriez probablement séparer que dans une question différente. Fedora et Ubuntu sont des systèmes d’exploitation différents et doivent être traités comme tels (même s’ils partagent leur noyau et d’autres éléments).
la source
grep
:aptitude search '~i !~M'
devrait faire l'affaire.apt-get
n'est pas obsolète. Debian recommandeaptitude
de gérer les paquets en ligne de commande, mais c'est loin d'être décevantapt-get
.Sur debian, apt-show-versions affiche les versions des packages installés.
la source
Sur les systèmes apt, consultez le fichier /var/log/apt/term.log. Pour moi, il y a une ligne assez claire pour tracer où l'installation s'est terminée et où mes installations ont commencé.
la source
De
man aptitude-create-state-bundle
:Cela conservera les mêmes informations que
aptitude
sur les paquets qui ont été installés manuellement.Il est destiné à être utilisé avec
aptitude-run-state-bundle
:la source
En utilisant simplement,
dpkg
vous ne savez pas si le paquet a été installé manuellement par l'utilisateur ou automatiquement (en tant que dépendance ou lors de l'installation initiale du système d'exploitation). Si vous souhaitez conserver ces informations, vous devez obtenir une liste des seuls packages réellement installés manuellement.Pour cela, vous pouvez utiliser l'une ou l'autre de ces deux lignes. Les deux donnent exactement le même résultat sur ma machine et sont plus précis que toutes les solutions proposées jusqu'à présent dans cette question. Ils sont une combinaison des deux réponses (1) et (2) . Notez que j'ai initialement posté cette réponse ici .
Utilisant
apt-mark
:Utilisant
aptitude
:Très peu de paquets restent encore entre les mailles du filet, bien que je soupçonne que ceux - ci sont réellement installés par l'utilisateur, soit juste après l'installation via la configuration de la localisation de la langue ou, par exemple, via l'installateur de codecs Totem. En outre, les versions de linux-header semblent également s'accumuler, même si je n'ai installé que le métapaquet non spécifique à la version. Exemples:
Comment ça marche
sed
bandes supplémentaires éliminent les espaces blancs restants à la fin de la ligne.Les autres possibilités ne fonctionnent pas aussi bien:
ubuntu-14.04-desktop-amd64.manifest
fichier ( ici pour Ubuntu 14.04) au lieu de/var/log/installer/initial-status.gz
. Plus de paquets sont montrés comme installés manuellement même s'ils ne le sont pas.apt-mark showauto
au lieu de/var/log/installer/initial-status.gz
.apt-mark
par exemple, n'inclut pas le paquet xserver-xorg, contrairement à l'autre fichier.Les deux listes plus de paquets que la solution ci-dessus.
la source
Je suis partial et la solution que je présente n'est pas toujours possible, mais j'en ai eu marre de cette situation. Le résultat est que je n’installe plus rien avec les outils de gestion des mises à jour / packages.
J'ai pris un itinéraire assez difficile cependant (j'avais des exigences strictes pour les versions). J'ai créé un énorme fichier makefile qui télécharge, compile et installe dans mon répertoire personnel tous les paquets (programme, bibliothèque, etc.) dont j'ai besoin. Je l'ai développé par étapes, pièce par pièce. Le makefile télécharge et compile tout, même les compilateurs.
Lorsque je passe à un nouveau système ou que je réinstalle, je copie simplement le fichier makefile (ainsi que des éléments de support), puis lance make et je reviens le lendemain.
Pour certains programmes que je développe (pour que je puisse les contrôler), j'utilise un outil que j'ai programmé, le gestionnaire de paquets Châtaignier . Un peu comme les dossiers .app sur MacOSX. Tout est dans le paquet, donc je sais ce qui est installé à tout moment, et je sais que c'est autonome et autosuffisant (sauf pour les bibliothèques système)
la source