Saya mencoba mengatur lingkungan pementasan dalam VM, untuk menguji pembaruan sebelum menerapkannya ke sistem utama saya.
Untuk melakukannya, saya telah melakukan instalasi dasar Debian Wheezy (sama seperti pada sistem utama) di VM, kemudian jalankan sebagai root dari dalam VM:
# dpkg --clear-selections
# dpkg --add-architecture i386
# apt-get update
# ssh me@main-system 'dpkg --get-selections | grep -v deinstall' | \
dpkg --set-selections
Arsitektur i386 sayangnya dibutuhkan dalam kasus saya; sistem ini asli amd64.
Masalahnya adalah dengan dpkg --set-selections
menjalankan di VM. Saya memang memiliki beberapa paket yang memerlukan penanganan khusus (itu sebenarnya alasan utama mengapa saya ingin lingkungan pementasan di tempat pertama) tetapi ketika saya menjalankan perintah terakhir di atas, saya mendapatkan sekitar trilyun garis output seperti:
dpkg: warning: package not in database at line NNN: package-name
untuk paket yang benar-benar harus tersedia di sistem dasar. Contohnya termasuk xterm
, yelp
dan zip
.
Sekarang untuk pertanyaan saya:
Apa proses khusus untuk mentransfer daftar pemilihan paket dari satu sistem Debian ke sistem lain (dengan asumsi tingkat rilis Debian yang sama, di Wheezy) dan kemudian menerapkan perubahan itu? Tujuannya adalah bahwa keduanya memiliki daftar paket yang sama yang diinstal, idealnya sehingga melakukan diff
antara output dpkg --get-selections
atau dpkg --list
keduanya kembali tidak menunjukkan perbedaan.
Bagian grep -v deinstall
ini dipinjam dari paket Prevent agar tidak dihapus setelahdpkg --set-selections
selesai di Ask Ubuntu.
Saya telah mengubah sumber di VM menjadi sama seperti pada sistem utama, juga menginstal apt-transport-https
:
deb https://ftp-stud.hs-esslingen.de/debian/ wheezy main non-free
deb-src https://ftp-stud.hs-esslingen.de/debian/ wheezy main non-free
deb https://ftp-stud.hs-esslingen.de/debian/ wheezy-updates main non-free
deb-src https://ftp-stud.hs-esslingen.de/debian/ wheezy-updates main non-free
deb [arch=amd64] http://archive.zfsonlinux.org/debian wheezy main
Melihat output --set-selection, saya melihat:
dpkg: warning: package not in database at line 1: a2ps
dpkg: warning: package not in database at line 1: abiword
dpkg: warning: package not in database at line 1: abiword-common
dpkg: warning: package not in database at line 1: abiword-plugin-grammar
dpkg: warning: package not in database at line 1: abiword-plugin-mathview
dpkg: warning: package not in database at line 1: accountsservice
dpkg: warning: package not in database at line 1: acl
dpkg: warning: package not in database at line 4: aglfn
dpkg: warning: package not in database at line 4: aisleriot
dpkg: warning: package not in database at line 4: alacarte
dpkg: warning: package not in database at line 4: alien
...
Nomor baris tampak aneh, dan bagian yang sesuai dari output --get-selection adalah:
a2ps install
abiword install
abiword-common install
abiword-plugin-grammar install
abiword-plugin-mathview install
accountsservice install
acl install
acpi-support-base install
acpid install
adduser install
aglfn install
aisleriot install
alacarte install
alien install
Perhatikan bahwa di antara acl
dan aglfn
sedang acpi-support-base
, acpid
dan adduser
yang tidak ada kesalahan dilaporkan . Tampaknya paket yang melaporkan kesalahannya un
sesuai dengan dpkg -l
, atau sama dpkg -l
sekali tidak tahu tentangnya ( dpkg-query: no packages found matching ...
). Saya tahu ada beberapa paket yang diinstal secara lokal, tetapi tidak banyak. i386
tidak menemukan sampai gcc-4.7-base:i386 install
lebih jauh ke bawah daftar (baris 342 dalam output --get-pilihan).
sumber
dpkg --get-selections … | … dpkg --set-selections
adalah cara untuk mereplikasi pilihan paket. Jika gagal untuk Anda, Anda perlu memberikan lebih banyak informasi tentang alasannya. Posting sumber lengkap Anda pada kedua sistem, output daridpkg --get-selections
, dan transkrip penuh daridpkg --get-selections
(mungkin kita bisa melihat pola dengan melihat apa yang berhasil dan yang tidak). Jika sistem utama amd64 atau i386? Apakah itu berfungsi jika Anda tidak menambahkan arsitektur i386?dpkg --get-selections
(dan saya menganggap Anda maksuddpkg --set-selections
transkrip?)? Bahkan yang pertama adalah lebih dari 3.600 baris dan benar sekitar 100 KB./var/lib/dpkg/Packages
(yang bahkan lebih lama) dapat berguna juga - ini bisa menjadi gejala dari file Paket yang rusak.Jawaban:
Untuk mengkloning instalasi Debian, gunakan
apt-clone
utilitas. Ini tersedia (sebagai paket terpisah, bukan bagian dari instalasi default) di Debian sejak mengi dan di Ubuntu sejak 12.04. Di mesin yang ada, jalankanIni menciptakan file
foo.apt-clone.tar.gz
. Salin ke mesin tujuan, dan jalankanJika Anda bekerja dengan sistem lama di mana
apt-clone
tidak tersedia, atau jika Anda hanya ingin meniru daftar paket yang diinstal tetapi tidak ada file konfigurasi, berikut adalah langkah-langkah manual.Di mesin sumber:
Pada mesin target:
Saya percaya bahwa Anda terpengaruh oleh perubahan tidak kompatibel dalam dpkg yang membuatnya menjadi mengi. Lihat bug # 703092 untuk latar belakang.
Ceritanya adalah bahwa
dpkg --set-selections
sekarang hanya menerima nama paket yang ada dalam file/var/lib/dpkg/status
atau/var/lib/dpkg/available
. Jika Anda hanya menggunakan APT untuk mengelola paket, seperti kebanyakan orang, maka/var/lib/dpkg/available
tidak diperbarui.Setelah menjalankan
apt-get update
dan sebelum menjalankandpkg --set-selections
danapt-get -u dselect-upgrade
, jalankan perintah berikut:Dari jessie dan seterusnya, Anda dapat menyederhanakan ini menjadi
Atau, jalankan
atau bahkan lebih sederhana
Metode sederhana lain yang tidak perlu menginstal paket tambahan tetapi akan mengunduh daftar paket lagi adalah
Lihat FAQ dpkg untuk informasi lebih lanjut. (Ini disebutkan di halaman manual dpkg, tetapi lebih dengan cara yang akan mengingatkan Anda tentang masalah ini jika Anda sudah sadar, bukan dengan cara yang menjelaskan bagaimana menyelesaikan masalah!)
Perhatikan bahwa mengkloning instalasi paket dengan
dpkg --set-selections
tidak mengembalikan tanda otomatis / manual di APT. Lihat Mengembalikan semua data dan dependensi dari dpkg --set-selection '*' untuk detail lebih lanjut. Anda dapat menyimpan tanda pada sistem sumber dengandan mengembalikannya pada sistem target dengan
sumber
dpkg --set-selections
sejak pra-mengi!--set-selections
. Sekarang bagaimana cara menerapkan perubahan? Bahkanapt-get -u dist-upgrade
hanya menyebutkan segelintir paket (semua yang berhubungan dengan ZFS) di mana seharusnya ada ratusan bahkan ribuan paket yang terpengaruh.apt-get -u dselect-upgrade
Bagaimana saya melakukannya
Pada sumber host:
peduli
/etc/apt/sources.list.d
jika digunakan ...Kemudian salin
source.sel
file ke host tujuan.Di host tujuan :
adaptasikan sources.list bahkan dengan mirror yang berbeda, tetapi daftar komponen yang sama .
Dan sekarang, host tujuan saya sedang menginstal banyak hal, maka saya dapat mengambil waktu untuk memposting ini.
sumber