Ich kann alle auf meinem System installierten Pakete auflisten.
Aber wie kann ich eine Liste aller Repositorys und PPAs in ein Skript einbinden, das ich auf einem neuen Computer ausführen kann, um das Repository-Setup einschließlich der Schlüssel zu replizieren?
Ich weiß, dass ich mich mit /etc/apt/sources.list
und befassen kann /etc/apt/sources.list.d
, aber ich suche nach einer Möglichkeit, ein Skript zu generieren , das alle apt-add-repository
Befehle auf einem neuen System ausführt (um alle Schlüssel zu erhalten).
Irgendwelche Ideen?
command-line
scripts
ppa
repository
add-apt-repository
stwissel
quelle
quelle
egrep -v '^#|^ *$' /etc/apt/sources.list /etc/apt/sources.list.d/*
dem Entfernen von auskommentierten Zeilen und Leerzeilen?^
aftergrep
in erläuterngrep ^ /etc/apt/sources.list /etc/apt/sources.list.d/*
?cat /etc/apt/sources.list /etc/apt/sources.list.d/*
Danke für die Hinweise. Mit ein wenig Aufräumen bekam ich ein Skript, das die PPAs auflistet, aber kein anderes Repository:
Wenn Sie es mit
listppa > installppa.sh
einem Skript aufrufen, können Sie es auf einen neuen Computer kopieren, um alle PPA neu zu installieren.Nächster Stopp: Tun Sie das für die anderen Repositories:
Dies sollte den Trick machen. Ich brauchte eine Frage zum Superuser , um den richtigen regulären Ausdruck herauszufinden.
quelle
grep -o
Beispiel, das\`
in[a-z0-9\-]
nicht zu tun , was Sie erwarten. Es entspricht tatsächlich einem wörtlichen Backslash . Sie brauchen nicht zu entkommen das ,-
wenn es am Anfang oder Ende der ist[]
Liste; Eigentlich können Sie sich dem nicht entziehen ! .. In diesem Fall verursacht das\`
(wahrscheinlich) kein Problem, da Sie (hoffentlich) keinen Backslash imdeb
Eintrag finden.http://ppa.launchpad.net/[a-z0-9-]\+/[a-z0-9.-]\+
[[:graph:]]
statt ,[a-z...blah.anything]
weil das wird jede alphanumerischen + Interpunktionszeichen übereinstimmen - das ist , was die PPA Namen bestehen.deb
am Anfang jeder Repository-Zeile ein Wort einfügen, wenn dies nicht in derppa:$USER/$PPA
Form angegeben ist.grep -Po "(?<=^deb\s).*?(?=#|$)" /etc/apt/{sources.list,sources.list.d/*.list} | while read ENTRY ; do echo $ENTRY; done
Beachten Sie, dass dies, wie geschrieben, den Dateinamen anzeigt, von dem jeder Eintrag stammt, sodass Sie vom Anfang des Ergebnisses bis zum ersten Doppelpunkt einen Zuschnitt vornehmen müssen. Sie können es auch durchgehen,uniq
wenn Sie nicht mehrere Einträge für dieselbe Quelle möchten (z. B. wenn Sie Google Chrome Stable / Beta / Dev installiert haben).Ich bin überrascht, dass der einfachste, aber effektivste Weg, alle aktivierten binären Softwarequellen zusammen mit der Datei, in der sie angegeben sind, zu erhalten, noch nicht veröffentlicht wurde:
Aus allen verarbeiteten Dateien wird jede Zeile gedruckt, die mit beginnt
deb
. Dies schließt kommentierte Zeilen sowiedeb-src
Zeilen zum Aktivieren von Quellcode-Repositorys aus.Es werden wirklich nur alle
*.list
Dateien durchsucht , die analysiert werdenapt
, aber zB keine*.list.save
Dateien, die für die Sicherung verwendet werden, oder andere mit unzulässigen Namen.Wenn Sie eine kürzere, aber möglicherweise nur in 99,9% aller Fälle korrekte Ausgabe wünschen, die möglicherweise zu viele Dateien durchsucht (einschließlich aller
/etc/apt/sources.list*
Dateien und Verzeichnisse, nicht nur/etc/apt/sources.list
und `/etc/apt/sources.list.d/*), können Sie dies auch tun benutze das:Sofern keine Dateien vorhanden sind, die nicht vorhanden sein sollten, ist die Ausgabe dieselbe.
Eine Beispielausgabe auf meinem Computer wäre:
Wenn Sie eine schönere Ausgabe wünschen, lass es uns durchgehen
sed
:Und wir werden das sehen:
quelle
ppa:<user>/<project>
Formular angezeigt werden.Führen Sie den folgenden Befehl aus:
Quelle
quelle
apt-cache policy
Zeigt die Repos erst an, nachdem Sie sie ausgeführt habenapt-get update
. Wenn Sie gerade ein Repo mit hinzugefügt habenadd-apt-repository
, wird esapt-cache policy
erstapt-get update
sudo apt update > /dev/null 2>&1 && sudo apt-cache policy | grep http | awk '{print $2 $3}' | sort -u
funktioniert gut. gist.github.com/bmatthewshea/229da822f1f02157bff192a2e4a8ffd1Ich benutze diesen Befehl, um alle konfigurierten Softwarequellen (Repositorys) aufzulisten, einschließlich der derzeit deaktivierten :
Ich benutze dies hauptsächlich zur Fehlerbehebung; Dies kann sicherlich in Skripte integriert werden, aber Sie möchten sich möglicherweise darauf beschränken
/etc/apt/sources.list.d/*
,/etc/apt/sources.list.d/*.list
dass Sie nur aktuell aktivierte Softwarequellen erhalten.quelle
Also haben wir ein bisschen gegraben
AptPkg::Class
.So können
perl
wir mit etwas einfachem wie diesem vorgehen.Dadurch erhalten wir eine Liste aller
AptPkg::Class::PkgFile
Pakete. Damit könnten Sie wahrscheinlich dieapt-add-repository
Befehle generieren .quelle
Unter https://repogen.simplylinux.ch/ erhalten Sie eine Liste aller PPAs für Ihre Ubuntu-Version. Hier ist eine generierte Liste ohne Quelldateien und ohne Samsung-Drucker ppa:
quelle
Hier ist mein Skript "
list-apt-repositories
", das alle Repositorys in "/etc/sources.list"
und"/etc/sources.list.d/*.list
" auflistet . Sie können hinzufügen--ppa-only
, dass nur die PPAs angezeigt werden. PPAs werden automatisch in dasppa:USER/REPO
Format umgewandelt.Die relevanten Teile sind die 5 Zeilen in
list_sources
undlist_ppa
Funktionen, der Rest ist nur Boilerplate, um es in einem handlichen Shell-Skript zu verpacken.list-apt-repositories
:Und um ein Installationsskript zu erstellen, "
make-apt-repository-install-script
" leiten Sie es in ein anderes Skript . Das generierte Skript unterstützt das Argument-y
/--yes
für die nicht interaktive Verwendung (sieheadd-apt-repository(1)
).make-apt-repository-install-script
:Auch hier ist der wichtigste Teil der
xargs
Befehl in der letzten Zeile, der Rest ist Boilerplate.quelle
Fügen Sie dazu ppa.launchpad.net-Zeilen als ppa hinzu: $ USER / $ PPA. Fügen Sie andere Repositorys mit ihrer vollständigen Zeile aus * .list-Dateien hinzu. Keine falschen Zeilen.
quelle
Vielen Dank, BobDodds!
Wenn sich jemand dafür interessiert, habe ich Ihren Code ein wenig aktualisiert (ich hoffe, es macht Ihnen nichts aus).
Dieses Skript gibt nur vom Benutzer hinzugefügte PPAs aus (/etc/apt/sources.list.d).
quelle
Dabei werden jedoch keine Befehle zum Aktivieren möglicher Quell-Repositorys (deb-src) generiert.
quelle
Installieren
ppa-purge
Dann holen Sie sich die PPA-Liste per Tab-Vervollständigung ...
ppa-purge -o
( Tabzweimal drücken)quelle
ppa-purge
auch kein-o
Flag entsprechend seiner Manualpage . -1