Przywracanie wszystkich danych i zależności z dpkg --set-selections '*'

44

Więc mogę uruchomić na jednej maszynie:

dpkg --get-selections '*' > selection.txt

Na innym komputerze:

dpkg --set-selections < selection.txt

... a następnie jedno z poniższych:

aptitude install
apt-get -u dselect-upgrade

... aby zainstalować pakiety, które.

Wydaje się jednak, że niektóre informacje zostają utracone w procesie, np. Czy pakiet (powiedzmy xyz) został zainstalowany automatycznie jako zależność od innego pakietu ( abc). Możesz to zobaczyć za każdym razem, gdy robisz coś takiego apt-get --purge remove abc. Na oryginalnej maszynie zostaniesz powiadomiony, że pakiet xyzzostał zainstalowany jako zależność abci że możesz go użyć, apt-get autoremoveaby się go pozbyć.

Teraz jestem świadomy deborphani debfoster, ale korzystanie z nich jest kłopotliwe, biorąc pod uwagę (proste) zadanie.

Wydaje się, że zapisywanie i przywracanie wybranych opcji nie jest wystarczające, aby przywrócić subtelne zależności zainstalowanych pakietów.

Czy istnieje sposób na wykonanie kopii zapasowej pełnego zestawu metadanych do zarządzania pakietami i przywrócenie go w całości?

0xC0000022L
źródło
Często zastanawiałem się nad tym samym, co generuję duży skrypt powłoki z „sudo apt-get install” ze wszystkimi moimi pakietami (minus libs). Oczywiście napotkałem ten sam problem, który masz.
Chuck R
Sądzę, że najlepszym miejscem do rozpoczęcia byłoby sprawdzenie, czy dpkg jest w rzeczywistości odpowiedzialny za te informacje. Jeśli nie, to może to jest praca apt.
Huckle,
3
Jeśli korzystasz z metody ręcznej, możesz być zainteresowany apt-markzapisywaniem / przywracaniem informacji o pakietach zainstalowanych automatycznie lub ręcznie
Lekensteyn
Nie ma go w repozytorium pakietów 10.04, prawda? Czy jest to część repozytoriów Canonical czy firm zewnętrznych?
0xC0000022L
2
Nie, to tylko komentarz „dla twojej informacji”. Użyłbym apt-mark (jest to część apt, więc powinien już być zainstalowany), aby uzyskać i ustawić znaczniki dla pakietów (szczegóły na jego stronie podręcznika ).
htorque

Odpowiedzi:

39

Utworzyć kopię zapasową:

apt-mark showauto > pkgs_auto.lst
apt-mark showmanual > pkgs_manual.lst

Przywracać:

sudo apt-mark auto $(cat pkgs_auto.lst)
sudo apt-mark manual $(cat pkgs_manual.lst)
htorque
źródło
Dzięki, właśnie miałem prosić, żebyś ty lub Lekensteyn napisali to jako odpowiedź.
0xC0000022L
Czy te polecenia pozwalają ponownie zainstalować programy z tej listy?
Svetlana Belkin
czy może to usunąć pakiety, które są instalowane podczas przywracania?
n611x007
1
Czy potrafisz wyjaśnić różnicę między autoi manual? Dzięki.
Anto
Przypadkowo oznaczyłem jako ręczny kilka innych paczek ... czy istnieje sposób na przywrócenie? Dzięki
dentex,
2

Wybrana odpowiedź na to pytanie jest niekompletna i nie działa (lub już nie działa). Bolesną poprawką jest użycie pętli bash for-pars do przetworzenia plików wyjściowych * .lst i przesłania ich do apt install. Jednak zły wybór, więc nie zostanie to zilustrowane.

Lepszym wyborem jest użycie apt-clone, jak widać w tej odpowiedzi na Stackexchange dla systemów Unix i Linux. To tworzy mały plik (około 100 KB lub mniej dla mojego systemu). Podobno sklonuje paczki przy niewielkim wysiłku lub bólu.

Krótko mówiąc, na oryginalnej maszynie:

apt-clone clone `uname -n`

Następnie na komputerze do klonowania skopiuj plik klonowania i uruchom:

apt-clone restore original-machine-name.apt-clone.tar.gz

Podaję tę odpowiedź tutaj, ponieważ ta strona pojawiła się podczas początkowego wyszukiwania w sieci, ale druga odpowiedź nie. Ta metoda wygląda o wiele łatwiej.

casualcoder
źródło