Jak mogę filtrować „dpkg --get-selections” tylko do pakietów dostępnych w repozytoriach?

9

Chciałbym uzyskać listę pakietów zainstalowanych w jednym systemie i zainstalować je wszystkie w innym systemie.

Wiem, że dpkg --get-selectionsmoże mi to dać listę wszystkich zainstalowanych pakietów, które mogę wpakować do dpkg --set-selectionssystemu docelowego. Jednak niektóre z zainstalowanych pakietów to te, które sam zbudowałem lokalnie (używając np. Checkinstall) i nie są dostępne z repozytoriów. dpkg --set-selectionsProces nie powiedzie się, gdy nie jest w stanie znaleźć te pakiety w repozytoriach.

Czy jest więc sposób na filtrowanie wygenerowanej listy, dpkg --get-selectionsaby zawierała ona tylko pakiety, których aktualnie zainstalowana wersja jest dostępna w moich bieżących repozytoriach?

Ryan C. Thompson
źródło

Odpowiedzi:

9

Wierzę, że Software Center ma obecnie funkcję synchronizacji między komputerami. Jeśli poprawnie obsługuje brakujące pakiety, może rozwiązać problem.

Problem polega na tym, że dpkgnie znają repozytoriów, tylko zainstalowane pakiety. Możesz dowiedzieć się, czy pakiet jest dostępny w repozytorium, uruchamiając apt-cache policy $package. Jeśli widzisz repozytorium w Version Table, jest ono tam dostępne.

A co powiesz na to ?. Jest wolny, ale powinien działać:

dpkg --get-selections '*' \
  | while read line; do
    apt-cache policy $(echo "$line" | cut -f1 ) \
      | grep -q 'http://' \
      && echo "$line"
done
tumbleweed
źródło
Spowoduje to wyświetlenie postępu i zapisanie do pliku:total=$(dpkg --get-selections '*'|wc -l); i=0; dpkg --get-selections '*' | while read line; do i=$(($i+1)); apt-cache policy $(echo "$line" | cut -f1 ) | grep -q 'http://' && echo "$i/$total $line"; echo $line>>/var/tmp/dpkg-selection.list; done
rubo77
-4

Użyj następującego polecenia

dpkg --get-selections > installed-software

utworzy plik o nazwie zainstalowane oprogramowanie w twoim katalogu domowym

w nowym systemie

dpkg --set-selections < installed-software

to przeczyta wybór i zainstaluje

sarveshlad
źródło
3
Nie sądzę, żebyś przeczytał pytanie.
Ryan C. Thompson