Wie kann ich Liste die minimale Menge von Debian-Paketen benötigt, um eine Reihe von installierten Paketen neu zu erstellen?

StackOverflow https://stackoverflow.com/questions/2273836

  •  20-09-2019
  •  | 
  •  

Frage

Gibt es einen Weg, um dpkg, apt-get oder aptitude eine Liste der Pakete zu erzeugen, die auf einer zweiten Maschine installiert werden müssen, um die Pakete auf einem ersten installiert zu duplizieren?

d. Wenn ich einen einfachen Ubuntu-Server installiert haben, die sshd Option gewählt haben Zeit, installieren, dann installiert build-essential Ich würde die Ausgabe zu sehen etwas wie erwarten:

#ubuntu 9.10 server
openssh-sshd
build-essential

Soweit ich sehen kann, alle verfügbaren Paketierungsprogramme werden eine ausführliche Liste der Pakete auf einem Feld erzeugen. Ich bin nicht in openssh Libs interessiert, ld, gcc, und alle anderen Pakete zog in der von sshd und build-essential, wie sie installiert werden, wenn ich installieren sshd und build-essential.

Ich möchte nur die Liste der Verpackung sehen, die ich installieren muß meinen aktuellen Satz von Paketen auf einer anderen Maschine neu zu erstellen.

Ist das möglich?

War es hilfreich?

Lösung

deborphan, irgendwie. Es erstellt eine Liste jedes Paket in Ihrem System findet heraus, was auf, was, und druckt die Pakete ab, die keine Abhängigkeiten haben. Standardmäßig druckt es nur Bibliotheken (um es einfach Bibliotheken zu finden, die von anderen Paketen und nicht mehr benötigt werden, daher der Name installiert wurden). Es hat Optionen für das, was Sie wollen, meistens. Ich laufe es wie:

deborphan -anp required --no-show-section

-a gibt alle Pakete (nicht nur Bibliotheken)
-n ignoriert „Schlägt vor“ oder „empfiehlt“ Abhängigkeitsprüfung (das heißt nur „depends“)
-p required listet alle Pakete trotz Priorität
--no-show-section nicht angegeben, welcher Teil von Debian ist es in, nur eine nette Formatierung Funktion, die Sie für den Aufbau einer Liste nützlich finden könnten.

Nun wird es Pakete verpassen, da einige Pakete zirkuläre Abhängigkeiten haben. Aber diejenigen, neigen dazu, ziemlich selten sein, so sollte es Ihnen nahe genug bekommen.

Andere Tipps

Der Code, der dannysauer geschrieben ist ein Anfang. Sobald Sie eine Liste von Paketen, die Abhängigkeiten enthält, können Sie apt-rdepends die finden Abhängigkeiten für ein bestimmtes Paket ( diese Seite zum Beispiel Nutzung und Ausgabe).

Vorgehen Umriss

  1. Iterate durch die Liste der Pakete von dannysauer Code zurückgegeben
  2. Anruf apt-rdepends auf jedem
  3. Löschen Sie alle Pakete aus der Liste, die in der Ausgabe von apt-rdepends zeigen

Du willst also die Liste der Pakete, die explizit installiert wurden (wie, sagen wir, ubuntu-desktop und openssh), und nicht die Auto-Abhängigkeiten? Ich bin nicht positiv, aber ich denke, das ist, was dpkg --get-selections tut. So können Sie tun

dpkg --get-selections > file

Und dann, auf dem anderen Computer, verwenden die gleiche "Datei" und run

dpkg --set-selections  < file
apt-get dselect-upgrade

Ich bin nicht absolut positiv , dass diese Befehle nicht nur Pakete manuell ausgewählt, obwohl, und ich bin zur Zeit weg von allen Debian-basierten Systemen auf, um zu überprüfen. :)

Was folgt aus:

#!/bin/bash

packages=$(dpkg --get-selections | grep '[[:space:]]install$' | awk '{print $1}')

for pkg in $packages
do
    nr_lines=$(apt-cache -i rdepends $pkg | wc -l )
    if [ "$nr_lines" = "2" ]
    then
        echo $pkg
    fi
done

funktioniert es gut? Kann es irgendwie verbessert werden?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top