Skenario: Dalam konfigurasi sistem yang dikontrol versi yang didasarkan pada Puppet, Chef, dll., Diperlukan untuk mereproduksi status sistem tertentu. Ini dilakukan dengan menentukan versi paket sistem secara eksplisit.
Baru-baru ini kami mengalami masalah di mana versi paket tertentu tidak ada di repositori Debian. Satu contoh: Paket "patch" diperlukan dalam versi 2.7.5-1 + deb9u1, tetapi hanya 2.7.5-1 + deb9u2 yang tersedia. Contoh lain yang lebih parah: "linux-headers-4.9.0-9-common" diperlukan (karena kernel yang terkait sedang diinstal) dan hanya "linux-headers-4.9.0-11-common" yang tersedia.
Ini membuat tidak mungkin mereproduksi kondisi sistem tertentu.
Paket-paket di atas hanyalah contoh (yang sebenarnya saya temui). Saya tertarik untuk memahami dan memecahkan masalah umum.
Apa ide di balik pembaruan ini, paket 'lenyap' dan versi paket?
Di mana saya bisa mendapatkan versi sebelumnya (bukan versi lama, tetapi versi yang berumur beberapa minggu) dari paket Debian? Seharusnya dimungkinkan untuk mengotomatiskan proses instalasi secara umum.
stable
tetap konsisten, setidaknya sampai rilis poin berikutnya. pembaruan stabil, pengujian, dan tidak stabil hanya berisi versi terbaru dari setiap paket yang diberikan. Untuk hal lain, Anda harus melihat di archive.debian.org (atau snapshot.debian.org sebagaimana disebutkan dalam jawaban SK)linux
pkg baru adalah pengecualian: secara umum, paket stabil Debian menggunakan nama paket yang sama dan hanya mengubah nomor versi.linux-image-amd64
tidak pernah berganti nama dan selalu tergantung pada yang terbarulinux-image-4.9.0-*
. Namalinux-image-4.9.0-*
pkg baru menandai perubahan ABI kernel yang tidak kompatibel yang diperlukan untuk mendukung beberapa perbaikan bug dan memungkinkan untuk berurusan dengan kompilasi yang diperlukan dari modul yang dibuat khusus (dkms, dll). Demikian pula untuklinux-headers-*
.apt-get changelog packagename
Jawaban:
Mampu mereproduksi pengaturan tertentu, ke versi yang tepat, adalah kebutuhan Anda , bukan milik Debian.
Debian hanya mendukung versi tunggal dari setiap paket biner dalam setiap rilis yang diberikan; lawan dari itu adalah bahwa kehati-hatian diambil untuk memastikan bahwa paket pembaruan dalam setiap rilis yang diberikan tidak memperkenalkan regresi, dan ketika kehati-hatian seperti itu tidak mungkin, untuk mendokumentasikan fakta itu. Menyimpan beberapa versi dari paket yang diberikan hanya akan menambah beban dukungan dan persyaratan pengujian: misalnya, pengelola paket harus menguji paket yang diperbarui terhadap semua versi perpustakaan yang tersedia yang mereka gunakan, alih-alih hanya versi yang saat ini didukung ... Paket hanya diperbarui dalam rilis stabil ketika benar-benar diperlukan, yaituuntuk memperbaiki bug serius (termasuk masalah keamanan). Dalam kasus kernel, ini kadang-kadang berarti bahwa ABI kernel berubah, dan nama paket berubah sebagai akibatnya (untuk memaksa membangun kembali paket-paket dependen); ada meta-paket yang dapat Anda menarik bukan hard-coding ABI (
linux-image-amd64
,linux-headers-amd64
, dll).Namun ada solusi untuk situasi Anda: setiap sumber yang diterbitkan dan paket biner diarsipkan di snapshot.debian.org . Saat Anda membuat pengaturan berversi, Anda dapat memilih snapshot yang sesuai (misalnya, salah satu snapshot September 2019 ) dan menggunakannya sebagai URL repositori Anda:
Jika Anda akhirnya mengandalkan ini, silakan gunakan cermin caching dari beberapa jenis, misalnya Apt-Cacher NG . Ini tidak hanya akan mengurangi beban pada server snapshot, itu akan memastikan bahwa Anda memiliki salinan lokal dari semua paket yang Anda butuhkan.
(Situasi berkaitan dengan paket sumber sedikit lebih kompleks, dan arsip memang membawa beberapa versi dari beberapa paket sumber dalam rilis yang diberikan, karena ketergantungan lisensi. Tapi itu tidak relevan di sini. Sebenarnya, Debian memang menyediakan beberapa versi beberapa binari dalam rilis yang didukung: versi saat ini dalam rilis titik saat ini, bersama dengan setiap pembaruan dalam repositori keamanan dan memperbarui repositori; yang terakhir dilipat pada rilis poin berikutnya. Jadi mempertahankan konfigurasi sistem yang dapat direproduksi dan dikontrol versi dapat dilakukan tanpa beralih ke snapshot, selama Anda memperbaruinya setiap kali rilis poin dilakukan.)
sumber
apt-cache madison packagename
akan menampilkan semua versi yangapt
dapat melihat melalui repositori yang dikonfigurasi.Jangan mengandalkan server yang tidak berada di bawah kendali Anda untuk mereproduksi status sistem tertentu. Bahkan mengira server Debian cukup dapat diandalkan, Anda tidak pernah tahu apa yang bisa terjadi di masa depan. Ini sangat relevan dengan repositori lain, yang mungkin Anda gunakan.
Anda harus memelihara mirror Anda sendiri untuk mendapatkan status sistem yang dapat diperbanyak. Dengan cara ini Anda bahkan dapat memiliki status produksi untuk sistem normal Anda dan beberapa negara pengujian untuk konfigurasi baru.
Alat manajemen repositori dengan tepat mampu membuat mirror dari repositori. Anda dapat memilih paket untuk di-mirror, membuat snapshot dari konten repositori pada titik waktu tertentu dan menggabungkan beberapa mirror atau snapshots ke dalam satu repositori. Dengan cara ini Anda dapat memiliki status sistem yang sepenuhnya dapat direproduksi.
sumber
Sementara jawaban Stephen Kitt tentu saja merupakan salah satu solusi yang mungkin, saya pikir akan lebih aman bagi Anda untuk menyimpan salinan paket-paket yang diperlukan.
Saat merekam pengaturan sistem, pastikan untuk menyimpan salinan
.deb
file -f dari/var/cache/apt/archives/
. Anda juga bisa menggunakanapt-get download
.Saat memulihkan pengaturan sistem, Anda harus sangat ketat
apt
untuk menghindari memicu tindakan otomatis yang berpotensi berbahaya.Mungkin akan lebih mudah digunakan
dpkg
secara langsung untuk menginstal apa yang Anda inginkan.sumber
/var/cache/apt
.pkgs-20190501
, lalu publikasikan snapshot dir sebagai repo. Saat membangun, masukkan url repo versi (mis.http://debmirror/pkgs-20190501/...
) Di sources.list, lalu jalankan apt-get update, apt-get install $ pkgs, dll.