Saya ingin menginstal satu paket (dan dependensinya, tetapi hanya sejauh yang tidak memuaskan di Wheezy) dari Debian Jessie ke sistem Wheezy saya, tanpa memutakhirkan "segalanya dan wastafel dapur" ke versi Jessie. Secara khusus, saya ingin menginstal kpcli , yang tersedia dikemas dalam Jessie tetapi tidak di Wheezy.
Semua yang saya temukan menunjukkan bahwa saya harus menambahkan repositori Jessie ke daftar sumber saya, mengatur pinning untuk menjaga semuanya tetap tenang dan hanya mengambil satu paket dari jessie, dan itu akan cukup banyak jatuh ke tempatnya. Namun, itu tidak cocok untuk saya. Jika saya membuat /etc/apt.d/sources.list.d/jessie.list dengan konten berikut:
deb ftp://ftp.debian.org/debian/ jessie main
deb-src ftp://ftp.debian.org/debian/ jessie main
dan kemudian buat /etc/apt/preferences.d/jessie dengan:
Package: *
Pin: release a=wheezy
Pin-Priority: 1001
Package: kpcli
Pin: release a=jessie
Pin-Priority: 450
dan jalankan apt-get -u update
diikuti oleh apt-get -u install kpcli/jessie
, maka saya berharap apt-get untuk menarik kpcli dan mungkin beberapa paket lain dari Jessie, dan meninggalkan sisa dari sistem yang diinstal saya tidak tersentuh. (Sistem saya adalah instalasi Wheezy yang sepenuhnya terbaru.) Atau, jika saya mendapatkan prioritas pin terlalu rendah, saya berharap itu tidak melakukan apa-apa. Sebaliknya, di sistem saya, apt-get ingin memperbarui beberapa ratus paket.
Apa, tepatnya, yang diperlukan untuk menginstal hanya satu paket tunggal versi Jessie ini sementara membiarkan sisa sistem Wheezy saya tidak tersentuh?
Perhatikan bahwa dalam kasus khusus ini, perangkat lunak sebenarnya ditulis dalam Perl sehingga tidak ada kompilasi untuk biner atau yang seperti itu; Namun, ada beberapa dependensi modul Perl. Oleh karena itu, salah satu alternatif yang mungkin adalah menginstal. Deb (diunduh secara manual) menggunakan sesuatu yang hanya (1) memungkinkan menentukan arsip .deb tunggal lokal yang akan diinstal, seperti dpkg -i
, dan (2) menangani dependensi dengan cara yang cerdas , Yang dataran dpkg -i
tidak. Namun, untuk semua pencarian yang telah saya lakukan pada beberapa kesempatan dan gagal menghasilkan panduan yang mudah diikuti untuk bagaimana melakukan ini, solusi umum (yang berfungsi untuk paket biner, paket yang dikompilasi juga) akan sangat bagus .
Jawaban:
Untuk setiap entri (stabil, pengujian, tidak stabil) Anda memiliki prioritas pin 500. Anda tidak boleh menggunakan pin> 1000. Saya menggunakan 1001 hanya ketika saya ingin menurunkan versi sesuatu. Saya telah menguji + sid + entri eksperimental yang ditentukan dalam
/etc/apt/sources.list
dan/etc/apt/preferences
file berikut :Nilai 500 adalah default untuk tidak stabil. Jadi, mari kita coba periksa iceweasel:
Jadi, jika saya mencoba menginstal iceweasel, itu akan diunduh dari cabang pengujian karena memiliki prioritas tertinggi.
Cobalah untuk mengubah prioritas menjadi:
sumber
sudo apt-get -u install kpcli/jessie
masih memberi saya316 upgraded, 137 newly installed, 251 to remove and 1688 not upgraded.
dengan prioritas yang Anda sarankan. Jika saya melakukannyaapt-cache policy perl
(salah satu paket yang ingin ditingkatkan) itu menunjukkan 5.18.1-5 sebagai kandidat pada prioritas 500, dan menginstal 5.14.2-21 + deb7u1 juga pada prioritas 500. Hampir terlihat seperti, untuk alasan apa pun, apt tidak mengambil prioritas ...Package: kpcli*
(bukanPackage: kpcli
) dan kemudianPackage: *
Pin: release o=Debian
Pin-Priority: -10
pada akhirnya. Maka tentu saja ada dependensi keras yang mengarah ke versi Perl hanya tersedia di Jessie, yang pada gilirannya membutuhkan libc6 yang lebih baru! Jujur saja, aku tidak akan menempuh rute itu, tapi setidaknya ini memberiku hasil yang kucari. Terima kasih!Sebenarnya ada cara untuk melakukannya tanpa menggunakan pinning / priority sama sekali. Sebagai gantinya, Anda dapat menentukan dari mana rilis default Anda akan menginstal paket, yang kemudian akan digunakan kecuali ditentukan lain dengan menggunakan parameter rilis target. Ini bekerja dengan cara yang sama jika Anda hanya ingin menginstal paket yang dipilih dari mis. Backports.
Saya akan menunjukkan ini untuk menginstal paket dari Stretch ke Jessie, karena itu adalah stabil / pengujian saat ini, tetapi berfungsi dengan cara yang sama untuk menginstal paket Jessie di Wheezy seperti yang awalnya ditanyakan.
Pertama, tambahkan regangan sebagai repositori, misalnya di
/etc/apt/sources.list.d/stretch.list
:Kemudian, untuk mengatur rilis default, buat file seperti
/etc/apt/apt.conf.d/default-release
mengandung:(Dalam Wheezy, saya pikir
apt.conf.d
tidak ada dan Anda harus memasukkan potongan itu/etc/apt/apt.conf
).Kemudian, menginstal paket dari pengujian adalah hal yang sederhana
aptitude -t stretch install kpcli
tanpa Anda tidak perlu khawatir tentang menyematkan prioritas.Catatan: @amc menunjukkan dalam komentar bahwa jika Anda menggunakan
apt
alih-alihaptitude
, Anda harus menggunakan"stable"
sebagaiDefault-Release
ganti"jessie"
. Terima kasih! (Tentu saja, Anda dapat menggunakanaptitude
pengaturan itu juga.)sumber
The value 'stretch' is invalid for APT::Default-Release as such a release is not available in the sources
Pin: release a=wheezy
seharusnyaPin: release n=wheezy
, mungkin.Dari halaman manual :
Jadi itu benar!
sumber