Wiem, jak wyświetlić listę wszystkich pakietów zainstalowanych w moim systemie.
Ale w jaki sposób mogę uzyskać listę wszystkich repozytoriów i umów PPA w skrypcie, który mogę uruchomić na nowej maszynie w celu zreplikowania konfiguracji repozytorium, w tym kluczy?
Wiem, że mogę zajrzeć /etc/apt/sources.list
i /etc/apt/sources.list.d
, ale szukam sposobu na wygenerowanie skryptu, który wykona wszystkie apt-add-repository
polecenia w nowym systemie (który załatwi uzyskanie wszystkich kluczy).
Jakieś pomysły?
command-line
scripts
ppa
repository
add-apt-repository
stwissel
źródło
źródło
egrep -v '^#|^ *$' /etc/apt/sources.list /etc/apt/sources.list.d/*
na usunięcie linii skomentowanych i pustych linii?^
pogrep
wgrep ^ /etc/apt/sources.list /etc/apt/sources.list.d/*
?cat /etc/apt/sources.list /etc/apt/sources.list.d/*
Dzięki za wskazówki. Przy odrobinie oczyszczenia dostałem skrypt, który wyświetla listy PPA, ale nie ma żadnego innego repozytorium:
Po wywołaniu go
listppa > installppa.sh
otrzymasz skrypt, który możesz skopiować na nowy komputer, aby ponownie zainstalować wszystkie PPA.Następny przystanek: zrób to dla innych repozytoriów:
To powinno załatwić sprawę. Potrzebowałem pytania na temat superużytkownika, aby znaleźć poprawne wyrażenie regularne.
źródło
grep -o
przykładzie,\`
w[a-z0-9\-]
nie robi, czego oczekujesz. W rzeczywistości pasuje do dosłownego odwrotnego ukośnika . Nie trzeba uciekać-
kiedy jest na początku lub na końcu[]
listy; właściwie nie możesz tego uniknąć ! W tym przypadku\`
(prawdopodobnie) nie spowoduje problemu, ponieważ (miejmy nadzieję) nie napotkasz odwrotnego ukośnika wedeb
wpisie.http://ppa.launchpad.net/[a-z0-9-]\+/[a-z0-9.-]\+
[[:graph:]]
zamiast[a-z...blah.anything]
dlatego, że będzie pasować do żadnych znaków alfanumerycznych + interpunkcyjne - to właśnie nazwy składają się z PPA.deb
słowo na początku każdej linii repozytorium, jeśli nie jest podane wppa:$USER/$PPA
formie.grep -Po "(?<=^deb\s).*?(?=#|$)" /etc/apt/{sources.list,sources.list.d/*.list} | while read ENTRY ; do echo $ENTRY; done
Zauważ, że jak napisano, pokazuje nazwę pliku, z którego pochodzi każdy wpis, więc musisz zrobić przycięcie od początku wyniku do pierwszego dwukropka, ale nie jest to zbyt trudne z cięciem. Możesz także przekazać go,uniq
jeśli nie chcesz wielu wpisów dla tego samego źródła (np. Jeśli masz zainstalowaną Google Chrome Stable / Beta / Dev).Dziwi mnie, że nie opublikowano jeszcze najprostszego, ale najefektywniejszego sposobu uzyskania wszystkich włączonych źródeł oprogramowania binarnego wraz z plikiem, w którym zostały określone:
Ze wszystkich przetworzonych plików, to wypisze każdą linię, zaczynając od
deb
. Wyklucza to wiersze z komentarzem orazdeb-src
wiersze umożliwiające repozytoria kodu źródłowego.Przeszukuje tak naprawdę tylko wszystkie
*.list
pliki, które zostaną przeanalizowaneapt
, ale np. Nie*.list.save
używa plików do tworzenia kopii zapasowych ani innych o nielegalnych nazwach.Jeśli chcesz mieć krótszy, ale być może tylko w 99,9% wszystkich przypadków, poprawny wynik, który może przeszukiwać zbyt wiele plików (obejmuje wszystkie
/etc/apt/sources.list*
pliki i katalogi, nie tylko/etc/apt/sources.list
i `/etc/apt/sources.list.d/*), możesz również Użyj tego:Jeśli nie ma plików, których nie powinno tam być, dane wyjściowe będą takie same.
Przykładowy wynik na moim komputerze to:
Jeśli chcesz ładniejszego wyjścia, przeprowadźmy przez
sed
:I zobaczymy to:
źródło
ppa:<user>/<project>
formularzu.Uruchom następujące polecenie:
Źródło
źródło
apt-cache policy
pokaże repo dopiero po uruchomieniuapt-get update
. Jeśli właśnie dodałeś repozytoriumadd-apt-repository
, nie pojawi się on,apt-cache policy
dopóki nie ucieknieszapt-get update
sudo apt update > /dev/null 2>&1 && sudo apt-cache policy | grep http | awk '{print $2 $3}' | sort -u
działa dobrze. gist.github.com/bmatthewshea/229da822f1f02157bff192a2e4a8ffd1Korzystam z tego polecenia, aby wyświetlić listę wszystkich skonfigurowanych źródeł oprogramowania (repozytoriów), w tym obecnie wyłączonych :
Używam tego przede wszystkim do rozwiązywania problemów; można to z pewnością włączyć do skryptów, ale możesz zawęzić listę,
/etc/apt/sources.list.d/*
aby/etc/apt/sources.list.d/*.list
uzyskać tylko aktualnie włączone źródła oprogramowania.źródło
Więc, robiąc kopanie, mamy
AptPkg::Class
.Używając
perl
możemy zrobić coś tak prostego ...To daje nam listę wszystkich
AptPkg::Class::PkgFile
pakietów. Prawdopodobnie możesz wygenerowaćapt-add-repository
komendy za pomocą tego.źródło
https://repogen.simplylinux.ch/ da ci listę wszystkich umów PPA dla twojej wersji Ubuntu. Oto wygenerowana lista bez plików źródłowych i bez ppa drukarki Samsung:
źródło
Oto mój skrypt „
list-apt-repositories
”, który wyświetla listę wszystkich repozytoriów w „/etc/sources.list"
i”/etc/sources.list.d/*.list
„. Możesz dodać,--ppa-only
aby wyświetlać tylko pliki PPA. Pliki PPA są automatycznie przekształcane doppa:USER/REPO
formatu.Odpowiednimi częściami są 5 wierszy
list_sources
ilist_ppa
funkcje, reszta to tylko podstawa do owinięcia go poręcznym skryptem powłoki.list-apt-repositories
:Aby utworzyć skrypt instalacyjny, potokuj do innego skryptu „
make-apt-repository-install-script
”. Wygenerowany skrypt obsługuje argument-y
/--yes
do użytku nieinteraktywnego (patrzadd-apt-repository(1)
).make-apt-repository-install-script
:Ponownie, ważną częścią jest
xargs
polecenie w ostatnim wierszu, reszta to płyta kotłowa.źródło
Aby to dodać, dodaj linie ppa.launchpad.net jako ppa: $ USER / $ PPA. Dodaj inne repozytoria z pełną linią z plików * .list. Brak linii dupe.
źródło
Dzięki, BobDodds!
Jeśli ktoś byłby zainteresowany, zaktualizowałem trochę twój kod (mam nadzieję, że nie masz nic przeciwko).
Ten skrypt wypisze tylko PPA dodane przez użytkownika (/etc/apt/sources.list.d).
źródło
Nie generuje to jednak poleceń umożliwiających ewentualne repozytoria źródłowe (deb-src).
źródło
zainstalować
ppa-purge
Następnie pobierz listę ppa po zakończeniu zakładki ...
ppa-purge -o
(naciśnij Tabklawisz dwa razy)źródło
ppa-purge
nie ma-o
flagi zgodnie ze stroną podręcznika . -1