Bagaimana cara saya menginstal satu paket dari pengujian Debian atau tidak stabil di stabil?

41

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 updatediikuti 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 -itidak. 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 .

sebuah CVn
sumber
4
Cara biasa untuk menangani ini adalah dengan backporting - membangun kembali paket dari sumber Debian di Wheezy. Paket yang Anda gunakan tampaknya perl (atau setidaknya tergantung pada itu), jadi mungkin tidak sulit untuk backport. Jika Anda ingin detail lebih lanjut, silakan katakan demikian. Saya mungkin bisa memberikan panduan jika Anda benar-benar membutuhkannya.
Faheem Mitha

Jawaban:

15

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.listdan /etc/apt/preferencesfile berikut :

Package: *
Pin: release o=Debian,a=testing
Pin-Priority: 900

Package: *
Pin: release o=Debian,a=experimental
Pin-Priority: 130

Nilai 500 adalah default untuk tidak stabil. Jadi, mari kita coba periksa iceweasel:

# apt-cache policy iceweasel
iceweasel:
  Installed: (none)
  Candidate: 17.0.10esr-1~deb7u1
  Version table:
     26.0-1 0
        130 http://ftp.pl.debian.org/debian/ experimental/main amd64 Packages
     24.2.0esr-1 0
        500 http://ftp.pl.debian.org/debian/ sid/main amd64 Packages
     17.0.10esr-1~deb7u1 0
        900 http://ftp.pl.debian.org/debian/ testing/main amd64 Packages

Jadi, jika saya mencoba menginstal iceweasel, itu akan diunduh dari cabang pengujian karena memiliki prioritas tertinggi.

Cobalah untuk mengubah prioritas menjadi:

Package: *
Pin: release a=wheezy
Pin-Priority: 900

Package: kpcli
Pin: release a=jessie
Pin-Priority: 910
Mikhail Morfikov
sumber
sudo apt-get -u install kpcli/jessiemasih memberi saya 316 upgraded, 137 newly installed, 251 to remove and 1688 not upgraded.dengan prioritas yang Anda sarankan. Jika saya melakukannya apt-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 ...
CVn
Oke, saya punya sesuatu. Sepertinya triknya adalah menggunakan Package: kpcli*(bukan Package: kpcli) dan kemudian Package: * Pin: release o=Debian Pin-Priority: -10pada 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!
CVn
25

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:

deb http://ftp.debian.org/debian stretch main

Kemudian, untuk mengatur rilis default, buat file seperti /etc/apt/apt.conf.d/default-releasemengandung:

APT::Default-Release "jessie";

(Dalam Wheezy, saya pikir apt.conf.dtidak ada dan Anda harus memasukkan potongan itu /etc/apt/apt.conf).

Kemudian, menginstal paket dari pengujian adalah hal yang sederhana aptitude -t stretch install kpclitanpa Anda tidak perlu khawatir tentang menyematkan prioritas.

Catatan: @amc menunjukkan dalam komentar bahwa jika Anda menggunakan aptalih-alih aptitude, Anda harus menggunakan "stable"sebagai Default-Releaseganti "jessie". Terima kasih! (Tentu saja, Anda dapat menggunakan aptitudepengaturan itu juga.)

Florian Jacob
sumber
… Ini terlihat seperti cara yang sangat licin untuk melakukan ini. Mengapa ini tidak diterima secara resmi ??
JamesTheAwesomeDude
1
Saya dapatkanThe value 'stretch' is invalid for APT::Default-Release as such a release is not available in the sources
Steven Penny
1
Anda perlu menggunakan "stable" / "testing" / etc. bukannya "jessie" / "stretch" untuk rilis default dan saat menggunakan apt
amc
6

Pin: release a=wheezyseharusnya Pin: release n=wheezy, mungkin.

Dari halaman manual :

Catatan berikut memberikan prioritas tinggi untuk semua versi paket milik distribusi apa pun yang Codename-nya adalah "jessie".

           Package: *
           Pin: release n=jessie
           Pin-Priority: 900

Jadi itu benar!

pengguna65646
sumber
3
bukankah ini akan menginstal SEMUA paket dari jessy?
rubo77