(Jika Anda memiliki pertanyaan / komentar tentang jawaban ini, silakan tambahkan komentar. Atau, jika Anda memiliki perwakilan yang cukup, Anda dapat melakukan ping saya di chat.)
Menginstal paket biner secara langsung dari versi Debian yang lebih baru - bukan jawabannya.
Misalkan Anda menjalankan beberapa versi distribusi berbasis Debian. Anda ingin versi yang lebih baru dari sebuah paket daripada yang tersedia untuk Anda. Hal pertama yang setiap pemula coba lakukan adalah menginstal paket biner langsung pada versi Debian Anda. Ini mungkin atau tidak berfungsi, tergantung pada versi apa yang Anda jalankan, dan berapa banyak paket yang lebih baru. Secara umum, prosedur ini tidak akan bekerja dengan baik.
Sebagai contoh, perhatikan kasus di mana seseorang mencoba menginstal paket biner dari pengujian / tidak stabil langsung pada stable. Ini kemungkinan besar tidak akan berjalan dengan baik, kecuali pengujian / tidak stabil terjadi sangat dekat dengan stabil pada saat itu. Alasannya berkaitan dengan sifat distribusi biner berbasis Linux seperti Debian. Sistem operasi seperti itu sangat bergantung pada pustaka bersama, dan dependensi ini seringkali sangat bergantung pada versi; seringkali jauh lebih dari yang diperlukan. Debian saat ini tidak memiliki cara yang baik untuk membuat dependensi versi "ketat" - cara singkat untuk mengatakan bahwa dependensi versi sama ketatnya dengan yang diperlukan.
Apa artinya ini bagi pengguna? Misalkan misalnya Anda mencoba untuk menginstal katakanlah slrn
dari Debian tidak stabil ke stabil Debian. Akan seperti apa ini?
# apt-get install slrn/unstable
Reading package lists... Done
Building dependency tree
Reading state information... Done
Selected version '1.0.1-10' (Debian:testing [amd64]) for 'slrn'
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
slrn : Depends: libc6 (>= 2.15) but 2.13-38+deb7u1 is to be installed
E: Unable to correct problems, you have held broken packages.
Terlepas dari kesalahan yang dihasilkan oleh apt
, tidak ada paket rusak di sini. Jadi, apa yang salah? Masalahnya adalah bahwa versi libc6
yang tidak stabil slrn
dikompilasi berbeda dari (dan memiliki nomor versi lebih tinggi) daripada yang tersedia di stabil Debian. ( libc6
adalah pustaka GNU C. Pustaka C adalah pusat dari sistem operasi mirip Unix, dan pustaka GNU C adalah versi yang umumnya digunakan sistem operasi berbasis Linux.)
Oleh karena itu yang tidak stabil slrn
memerlukan versi nomor yang lebih tinggi libc6
daripada yang tersedia untuk stabil. Perhatikan bahwa karena suatu paket telah dikompilasi dengan versi perpustakaan yang lebih tinggi tidak selalu memerlukan versi yang lebih tinggi dari perpustakaan itu, tetapi sering terjadi.
Sintaksnya
apt-get install slrn/unstable
berarti: gunakan yang tidak stabil slrn
tetapi untuk semua paket lain hanya gunakan versi dari stable. Untuk lebih tepatnya, ini menggunakan nomor prioritas. Lihat man apt_preferences
detailnya.
Kita juga bisa melakukannya
apt-get install -t unstable slrn
Ini lebih mungkin berhasil, tetapi Anda biasanya tidak mau melakukannya. Mengapa?
Ini berarti: memperlakukan sementara semua paket tidak stabil dengan pijakan yang sama dengan paket-paket di stabil. Oleh karena itu ini akan menarik slrn
dependensi tidak stabil dari tidak stabil jika nomor versi yang lebih tinggi, dan umumnya akan. Ini umumnya akan mencakup perpustakaan GNU C karena alasan yang sudah dijelaskan. Sekarang, pendekatan ini umumnya akan "berhasil", di mana dependensi akan dipenuhi oleh definisi (unstable's slrn
memiliki dependensi yang puas di tidak stabil), tetapi Anda berakhir dengan campuran paket yang tiba-tiba terpaksa dijalankan dengan versi perpustakaan berbeda dari apa mereka dibangun untuk. Ini mungkin tidak akan berakhir dengan baik.
Jawabannya adalah ... BACKPORTS!
Jadi, apa cara yang benar untuk melakukan ini? Ini untuk membangun kembali sumber-sumber Debian dari versi yang lebih baru pada sistem Anda, yang dikenal sebagai "backporting". Pertimbangkan kasus-kasus berikut:
Ada sumber semi-resmi / resmi dari paket tambahan yang tersedia untuk versi Debian itu.
Tempat pertama untuk melihat adalah Debian Backports , yang merupakan situs resmi untuk backports Debian.
Sebagai contoh nyata:
Tambahkan baris backports yang sesuai untuk rilis Anda dan perbarui untuk menemukan paket-paket baru kemudian instal sesuatu dari backports secara eksplisit (karena backports dinonaktifkan secara default).
echo "deb http://ftp.debian.org/debian stretch-backports main" | sudo tee /etc/apt/sources.list.d/stretch-backports.list
sudo apt-get update
sudo apt-get install -t stretch-backports git
Ini akan mendapatkan versi git stable terbaru yang memiliki fitur-fitur baru yang berguna daripada yang stabil yang disertakan dengan stretch (misalnya 'include' yang memungkinkan Anda untuk menggabungkan beberapa file konfigurasi atau mengubah nama pengguna Anda untuk ~ / work / proyek / vs ~ / personal / proyek /).
Tempat lain untuk melihat adalah berbagai PPA oleh pengelola Ubuntu. Anda dapat melakukan pencarian untuk "packagename PPA".
Tidak ada lagi versi terbaru dari paket yang tersedia untuk versi OS tersebut, tetapi ada versi terbaru yang tersedia untuk versi / rilis OS yang lebih baru. Ini adalah kasus standar untuk backporting.
Backporting berarti Anda membangun kembali sumber Debian dari versi Debian yang lebih baru pada versi yang Anda jalankan. Prosedur ini mungkin mudah atau melibatkan dan sulit tergantung pada paket. Berikut adalah garis besar cara melakukan ini.
Tutorial Backporting Singkat untuk Pemula
Untuk konkretnya, saya akan menganggap Anda menjalankan stabil Debian saat ini, saat ini mengi. Saya akan menggunakan paket slrn
sebagai contoh.
Pertama, perhatikan bahwa semua file pengemasan Debian tinggal di debian/
subdirektori dari direktori sumber.
Langkah pertama adalah memeriksa apakah versi yang lebih baru tersedia. Anda dapat melakukan ini menggunakan apt-cache policy
.
apt-cache policy slrn
slrn:
Installed: 1.0.0~pre18-1.3
Candidate: 1.0.0~pre18-1.3
Version table:
1.0.1-10 0
50 http://debian.lcs.mit.edu/debian/ testing/main amd64 Packages
50 http://debian.lcs.mit.edu/debian/ unstable/main amd64 Packages
*** 1.0.0~pre18-1.3 0
500 http://debian.lcs.mit.edu/debian/ wheezy/main amd64 Packages
100 /var/lib/dpkg/status
1.0.0~pre18-1.1 0
500 http://debian.lcs.mit.edu/debian/ squeeze/main amd64 Packages
Kami ingin mendukung 1.0.1-10
.
LANGKAH 1:
NB: Pastikan deb-src
baris untuk versi sumber yang ingin Anda unduh muncul di Anda /etc/apt/sources.list
. Misalnya, jika Anda ingin mengunduh versi tidak stabil slrn
, Anda memerlukan deb-src
baris untuk tidak stabil, atau tidak akan berfungsi. Perhatikan bahwa Anda tidak memerlukan deb
baris yang sesuai untuk mengunduh sumber, meskipun apt-cache policy
menggunakan informasi itu, jadi jika Anda tidak memiliki deb
baris yang sesuai , maka apt-cache policy
tidak akan menunjukkan versi yang relevan kepada Anda. Jika Anda memiliki deb
garis, jangan lupa menyematkan versi yang lebih baru menggunakan entri /etc/apt/preferences
atau sejenisnya. Entri /etc/apt/preferences
seperti ini (untuk tidak stabil) akan berfungsi, misalnya.
Package: *
Pin: release a=unstable
Pin-Priority: 50
Jika Anda menambahkan baris /etc/apt/sources.list
, jangan lupa jalankan apt-get update
sesudahnya.
Unduh sumber untuk slrn
. Tempat yang bagus adalah /usr/local/src/slrn
.
apt-get source slrn=1.0.1-10
LANGKAH 2:
Ubah nomor versi sedikit, untuk membedakan backport Anda dari versi hulu. Jalankan dch -i
, yang secara otomatis akan menambahkan entri ke debian/changelog
file. Kemudian ubah entri menjadi terlihat seperti ini, misalnya.
slrn (1.0.1-10.username) UNRELEASED; urgency=low
* Backport to wheezy.
-- User <user@domain> Sun, 02 Feb 2014 23:54:13 +0530
LANGKAH 3:
Mencoba membangun sumber. Jika paket yang diperlukan untuk pembangunan tidak tersedia, maka upaya tersebut akan gagal. Ubah direktori menjadi direktori sumber. Gunakan debuild
dari devtools
paket.
cd slrn-1.0.1/
debuild -uc -us
Jika dependensi build dipenuhi, maka sumber akan membangun dan menghasilkan beberapa hutang pada tingkat di atas direktori sumber; dalam hal ini /usr/local/src/slrn
.
LANGKAH 4:
Misalkan dependensi build tidak puas. Maka Anda perlu mencoba menginstal dependensi build. Ini mungkin atau mungkin tidak berfungsi, karena dependensi mungkin tidak tersedia untuk versi Anda, atau jika tersedia, mungkin tidak tersedia dalam versi yang tepat.
NB: Sayangnya paket Debian tidak jarang membutuhkan versi dependensi build yang lebih tinggi dari yang diperlukan. Tidak ada cara otomatis di Debian untuk memeriksa ini, dan seringkali pengelola paket tidak peduli asalkan itu bekerja pada versi / rilis yang sesuai. Karena itu, ambil sikap skeptis terhadap versi ketergantungan, dan gunakan akal sehat. Sebagai contoh, paket yang digunakan secara luas seperti Python dan alat GNU tidak akan bergantung pada versi yang sangat spesifik dari dependensinya, terlepas dari apa yang tercantum dalam daftar paket Debian.
Bagaimanapun, Anda dapat mencoba menginstalnya
apt-get build-dep slrn=1.0.1-10
Jika ini berhasil, maka cobalah membangun paket lagi (LANGKAH 2). Jika gagal, maka pekerjaan lebih lanjut diperlukan. Catatan yang debuild
terlihat pada Dependensi Build dalam debian/control
file, dan Anda dapat mengubahnya jika perlu. Jadi mari kita bicarakan itu sekarang. Berikut adalah Dependensi Build untuk slrn.
Build-Depends: debhelper (>=9), libslang2-dev, libuu-dev,
exim4 | mail-transport-agent, libgnutls-openssl-dev, po-debconf, autoconf,
libcanlock2-dev, autotools-dev, dpkg-dev (>= 1.16.0), chrpath, dh-autoreconf, inn2-inews
Alternatif untuk menggunakan apt-get build-dep
adalah menginstal ini secara manual, dengan melakukan
apt-get install debhelper libslang2-dev ...
Jika Anda mulai mengubah nilai-nilai ini di file kontrol, maka Anda harus beralih ke instalasi manual, karena itu apt-get build-dep
tidak akan lagi melakukan hal yang benar.
Tidak ada versi paket dari versi perangkat lunak terbaru yang tersedia. Opsi yang tersedia adalah mengemas versi yang lebih baru.
Dalam banyak kasus, seseorang dapat menggunakan kembali kemasan dari versi perangkat lunak sebelumnya bersama dengan sumber yang lebih baru. Pendekatan ini dapat mengalami masalah, terutama tambalan yang diterapkan pada versi perangkat lunak sebelumnya mungkin tidak berlaku di sini, jadi orang mungkin perlu menyinkronkannya kembali dengan sumbernya. Format sumber 3.0 (quilt) yang sekarang menjadi standar menggunakan quilt, dan tambalan terletak di debian/patches
direktori.
Namun, diskusi terperinci tentang masalah-masalah ini di luar jangkauan untuk posting ini.