Mengembalikan semua data dan dependensi dari dpkg --set-selection '*'

44

Jadi saya bisa berjalan di satu mesin:

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

Di komputer lain:

dpkg --set-selections < selection.txt

... diikuti oleh salah satu dari yang berikut:

aptitude install
apt-get -u dselect-upgrade

... untuk menginstal paket itu.

Namun, tampaknya beberapa informasi hilang dalam proses, seperti apakah suatu paket (katakanlah xyz) diinstal secara otomatis sebagai ketergantungan dari paket lain ( abc). Anda dapat melihatnya kapan pun Anda melakukan sesuatu seperti apt-get --purge remove abc. Pada mesin asli Anda akan diberitahu bahwa paket xyzdiinstal sebagai ketergantungan abcdan yang dapat Anda gunakan apt-get autoremoveuntuk membuangnya.

Sekarang saya sadar deborphandan debfoster, tapi mereka sulit digunakan mengingat tugas (sederhana) yang ada.

Tampaknya menyimpan dan mengembalikan pilihan seperti yang ditunjukkan di atas tidak cukup untuk mengembalikan dependensi halus dari paket yang diinstal.

Apakah ada cara untuk mencadangkan set lengkap metadata untuk manajemen paket dan mengembalikannya kemudian secara keseluruhan?

0xC0000022L
sumber
Saya sering bertanya-tanya hal yang sama saya menghasilkan skrip shell besar dengan 'sudo apt-get install' dengan semua paket saya (minus libs). Tentu saja, saya mengalami masalah yang sama dengan yang Anda alami.
Chuck R
Saya kira tempat terbaik untuk mulai mencari adalah memeriksa apakah dpkg sebenarnya bertanggung jawab atas informasi itu. Jika tidak maka mungkin itu pekerjaan apt.
Huckle
3
Jika Anda menggunakan cara manual, Anda mungkin tertarik apt-markuntuk menyimpan / mengembalikan informasi tentang paket otomatis vs yang diinstal secara manual
Lekensteyn
Itu tidak ada dalam paket repo 10,04, bukan? Apakah ini bagian dari repo kanonik atau pihak ketiga?
0xC0000022L
2
Tidak, itu hanya komentar "untuk informasi Anda". Saya akan menggunakan apt-mark (ini bagian dari apt, jadi harus sudah diinstal) untuk mendapatkan dan mengatur tanda untuk paket-paket (lihat manualnya untuk detail).
htorque

Jawaban:

39

Cadangkan:

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

Mengembalikan:

sudo apt-mark auto $(cat pkgs_auto.lst)
sudo apt-mark manual $(cat pkgs_manual.lst)
htorque
sumber
Terima kasih, akan meminta Anda atau Lekensteyn menuliskannya sebagai jawaban.
0xC0000022L
Apakah perintah ini memungkinkan Anda menginstal ulang program dari daftar itu?
Svetlana Belkin
dapatkah ini menghapus paket yang diinstal ekstra, pada saat restorasi?
n611x007
1
Bisakah Anda menjelaskan perbedaan antara autodan manual? Terima kasih.
Anto
Saya tidak sengaja ditandai sebagai manual banyak paket lain ... apakah ada cara untuk mengembalikan? Terima kasih
dentex
2

Jawaban yang dipilih untuk pertanyaan ini tidak lengkap dan tidak (atau tidak lagi) berfungsi. Perbaikan yang menyakitkan adalah dengan menggunakan bash for-loop untuk mengurai output * .lst file dan memberi mereka makan apt install. Pilihan yang buruk, jadi tidak akan diilustrasikan di sini.

Pilihan yang lebih baik adalah menggunakan apt-clone, seperti yang terlihat dalam jawaban ini di Unix & Linux Stackexchange. Ini membuat file kecil (sekitar 100K atau kurang untuk sistem saya). Diduga, itu akan mengkloning paket dengan sedikit usaha atau rasa sakit.

Jadi, singkatnya, pada mesin asli:

apt-clone clone `uname -n`

Kemudian, pada mesin untuk mengkloning, salin file klon dan jalankan:

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

Saya menyertakan jawaban ini di sini karena halaman ini muncul dalam pencarian web awal, tetapi jawaban lainnya tidak. Metode ini terlihat lebih mudah.

casualcoder
sumber