GNU/Linux >> Belajar Linux >  >> Debian

Debian – Bagaimana Cara Mereplikasi Pilihan Paket yang Terinstal Dari Satu Sistem Debian Ke Yang Lain? (debian Mengi)?

Saya mencoba menyiapkan lingkungan staging di 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 dijalankan sebagai root dari dalam VM:

# dpkg --clear-selections
# dpkg --add-architecture i386
# apt-get update
# ssh [email protected] 'dpkg --get-selections | grep -v deinstall' | 
  dpkg --set-selections

Sayangnya, arsitektur i386 diperlukan dalam kasus saya; sistem ini asli amd64.

Masalahnya ada pada dpkg --set-selections dijalankan di VM. Saya memiliki beberapa paket yang memerlukan penanganan khusus (itulah sebenarnya alasan utama mengapa saya menginginkan lingkungan pementasan di tempat pertama) tetapi ketika saya menjalankan perintah terakhir di atas, saya mendapatkan sekitar trilyun baris 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 spesifik untuk mentransfer daftar pilihan paket dari satu sistem Debian ke sistem lainnya (dengan asumsi tingkat rilis Debian yang sama, dalam Wheezy) lalu menerapkan perubahan tersebut? Tujuannya adalah keduanya memiliki daftar paket terinstal yang sama, idealnya sedemikian rupa sehingga melakukan diff antara keluaran dpkg --get-selections atau dpkg --list pada keduanya kembali tidak menunjukkan perbedaan.

grep -v deinstall bagian dipinjam dari Mencegah paket dihapus setelah melakukan dpkg --set-selections 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-selections, 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 ganjil, dan bagian yang sesuai dari output –get-selections 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 adalah acpi-support-base , acpid dan adduser yang tidak ada kesalahan yang dilaporkan . Tampaknya paket yang kesalahannya dilaporkan adalah un sesuai dengan dpkg -l , atau dpkg -l tidak tahu sama sekali tentang mereka (dpkg-query: no packages found matching ... ). Saya tahu ada beberapa paket yang diinstal secara lokal, tetapi tidak banyak. i386 tidak muncul sampai gcc-4.7-base:i386 install banyak lebih jauh ke bawah daftar (baris 342 di output –get-selections).

Terkait:Apa perbedaan mendasar antara shell *NIX mainstream??

Jawaban yang Diterima:

Untuk mengkloning instalasi Debian, gunakan apt-clone kegunaan. Ini tersedia (sebagai paket terpisah, bukan bagian dari instalasi default) di Debian sejak wheezy dan di Ubuntu sejak 12.04. Pada mesin yang ada, jalankan

apt-clone clone foo

Ini membuat file foo.apt-clone.tar.gz . Salin ke mesin tujuan, dan jalankan

apt-get install apt-clone
apt-clone restore foo.apt-clone.tar.gz

Jika Anda bekerja dengan sistem lama di mana apt-clone tidak tersedia, atau jika Anda hanya ingin mereplikasi daftar paket yang diinstal tetapi bukan file konfigurasi apa pun, berikut adalah langkah-langkah manualnya.

  • Di mesin sumber:

    cat /etc/apt/sources.list /etc/apt/sources.list.d >sources.list
    dpkg --get-selections >selections.list
    apt-mark showauto >auto.list
    
  • Di mesin target:

    cp sources.list /etc/apt/
    apt-get update
    /usr/lib/dpkg/methods/apt/update /var/lib/dpkg/
    dpkg --set-selections <selections.list
    apt-get dselect-upgrade
    xargs apt-mark auto <auto.list
    

Saya yakin Anda terpengaruh oleh perubahan dpkg yang tidak kompatibel yang pertama kali membuatnya menjadi mengi. Lihat bug #703092 untuk latar belakang.

Singkat cerita adalah dpkg --set-selections sekarang hanya menerima nama paket yang ada di 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 selalu up-to-date.

Setelah menjalankan apt-get update dan sebelum menjalankan dpkg --set-selections dan apt-get -u dselect-upgrade , jalankan perintah berikut:

apt-cache dumpavail >/tmp/apt.avail
dpkg --merge-avail /tmp/apt.avail

Dari jessie dan seterusnya, Anda dapat menyederhanakan ini menjadi

apt-cache dumpavail | dpkg --merge-avail

Atau, jalankan

/usr/lib/dpkg/methods/apt/update /var/lib/dpkg/

atau bahkan lebih sederhana

apt-get install dctrl-tools
sync-available

Metode sederhana lainnya yang tidak memerlukan instalasi paket tambahan tetapi akan mengunduh daftar paket lagi adalah

dselect update

Lihat FAQ dpkg untuk informasi lebih lanjut. (Hal ini disebutkan di halaman manual dpkg, tetapi lebih dengan cara yang akan mengingatkan Anda tentang masalah tersebut jika Anda sudah mengetahuinya, bukan dengan cara yang menjelaskan cara menyelesaikan masalah!)

Perhatikan bahwa mengkloning instalasi paket dengan dpkg --set-selections tidak mengembalikan tanda otomatis/manual di APT. Lihat Memulihkan semua data dan dependensi dari dpkg –set-selections ‘*’ untuk detail selengkapnya. Anda dapat menyimpan tanda pada sistem sumber dengan

apt-mark showauto >auto.list

dan pulihkan pada sistem target dengan

xargs apt-mark auto <auto.list

Debian
  1. Cara meningkatkan sistem Linux Debian dari Wheezy ke rilis stabil Jessie

  2. Cara Menginstal Gradle di Debian 10

  3. Cara Menginstal AnyDesk di Debian 10

  1. Debian – Bagaimana Cara Menginstal Satu Paket Dari Pengujian Debian Atau Tidak Stabil Pada Stabil?

  2. Fedora – Bagaimana Cara Mereplikasi Pilihan Paket yang Terinstal Dari Satu Instance Fedora Ke Yang Lain?

  3. Cara mengkompilasi dari sumber dan menginstal Nginx di VPS Debian 7 (Wheezy)

  1. Cara Memasang Benang di Debian 9

  2. Cara Memasang Benang di Debian 10

  3. Cara menginstal Server Minimal Debian 7 (Wheezy)