Bagaimana saya bisa menginstal versi perangkat lunak yang lebih baru daripada yang disediakan Debian?

26

Andaikata saya menginginkan versi perangkat lunak yang lebih baru daripada yang tersedia untuk versi sistem operasi saya saat ini, apa yang dapat saya lakukan?

Kasus yang perlu dipertimbangkan:

  1. Ada sumber semi resmi / resmi dari paket tambahan yang tersedia untuk versi OS tersebut. Misalnya backports.org untuk Debian atau PPA untuk Ubuntu.
  2. Tidak ada versi terbaru dari paket yang tersedia untuk versi OS tersebut, tetapi ada versi terbaru yang tersedia untuk versi OS yang lebih baru. Ini adalah kasus standar untuk backporting.
  3. Tidak ada versi paket dari versi perangkat lunak terbaru yang tersedia. Opsi yang tersedia adalah mengemas versi yang lebih baru.

Per Mari mengkompilasi daftar Tanya Jawab kanonik Karena ini dimaksudkan sebagai tempat untuk meletakkan jawaban kanonik sebagai berikut. Jawaban mungkin harus dibuat komunitas wiki.

Faheem Mitha
sumber
Ini sangat spesifik untuk distribusi. Lebih baik membuatnya menjadi satu pertanyaan per distribusi.
Gilles 'SO- berhenti menjadi jahat'
2
@Gilles. Pertanyaannya bukan khusus distribusi. Saya pikir akan lebih baik untuk memiliki satu pertanyaan, dengan jawaban untuk distribusi yang berbeda.
Faheem Mitha
Salah satu contoh apa yang berhasil dan tidak berhasil: Untuk Debian 8 saya ingin MySQL 5.6. (Tetapi biasanya MySQL 5.5 hanya dapat diinstal untuk Debian 8. Saya membutuhkan 5.6 untuk dapat dibandingkan dengan hal-hal lain yang saya lakukan.) Saya mencoba menginstal backport 5.6 tetapi rusak. Semacam file duplikat sedang dimuat pesan kesalahan. Saya melaporkannya tetapi kemudian apa yang harus dilakukan? Solusinya: Saya menemukan bahwa Anda dapat mengunduh MySQL 5.6 khusus untuk Debian 8 langsung dari situs MySQL. Itu berhasil, TAPI ... pastikan untuk membaca komentar WORKAROUND
Tampilan elips

Jawaban:

33

(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 slrndari 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 libc6yang tidak stabil slrndikompilasi berbeda dari (dan memiliki nomor versi lebih tinggi) daripada yang tersedia di stabil Debian. ( libc6adalah 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 slrnmemerlukan versi nomor yang lebih tinggi libc6daripada 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 slrntetapi untuk semua paket lain hanya gunakan versi dari stable. Untuk lebih tepatnya, ini menggunakan nomor prioritas. Lihat man apt_preferencesdetailnya.

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 slrndependensi 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 slrnmemiliki 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 slrnsebagai 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-srcbaris 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-srcbaris untuk tidak stabil, atau tidak akan berfungsi. Perhatikan bahwa Anda tidak memerlukan debbaris yang sesuai untuk mengunduh sumber, meskipun apt-cache policymenggunakan informasi itu, jadi jika Anda tidak memiliki debbaris yang sesuai , maka apt-cache policytidak akan menunjukkan versi yang relevan kepada Anda. Jika Anda memiliki debgaris, jangan lupa menyematkan versi yang lebih baru menggunakan entri /etc/apt/preferencesatau sejenisnya. Entri /etc/apt/preferencesseperti 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 updatesesudahnya.

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/changelogfile. 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 debuilddari devtoolspaket.

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 debuildterlihat pada Dependensi Build dalam debian/controlfile, 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-depadalah 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-deptidak 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/patchesdirektori.

Namun, diskusi terperinci tentang masalah-masalah ini di luar jangkauan untuk posting ini.

Faheem Mitha
sumber
Ini benar-benar generik distribusi (hanya bahwa repositori kode untuk hal-hal yang lebih baru dapat dipanggil secara berbeda, atau Anda harus mendapatkan barang dari tempat-tempat khusus). Periksa panduan distribusi Anda.
vonbrand
2

Salah satu cara yang selalu berhasil, tidak hanya di Debian, adalah menyusun sendiri perangkat lunak yang diperlukan. (Saya sudah melakukan ini selama bertahun-tahun sekarang di Debian, baik ketika saya membutuhkan versi yang lebih baru yang tersedia, dan ketika perangkat lunak tidak disediakan sama sekali).

Saya menyimpan paket yang dikompilasi secara lokal dalam /use/localmenggunakan stow, yang memungkinkan saya untuk menyimpan semua file yang terkait dengan paket di pohon subdirektori, dan kemudian membuat symlink ke pohon itu. Itu membuat mengelola paket yang dikompilasi menjadi mudah: File yang diinstal tidak bertabrakan dengan file yang disediakan Debian, dan saya dapat menghapus paket dengan satu perintah.

Langkah-langkah untuk mengkompilasi dan menginstal paket, katakanlah some_software, biasanya merupakan varian dari yang berikut:

  1. Unduh .tarfile dll ke /usr/local/src/.

  2. Buat file /usr/local/packages/some_softwareyang menjelaskan di mana saya mengunduh perangkat lunak, apa fungsinya, versi apa itu, dan yang berisi catatan apa yang harus saya lakukan untuk membuatnya dikompilasi (lihat di bawah).

  3. Buka paket .tarfile ke dalam /usr/local/tmp/some_software.

  4. Atau, jika mengkompilasi dari repositori, periksa repositori di subdirektori yang sesuai (misalnya /usr/local/git/some_software), dan kompilasi di sana,

  5. cdke dalam direktori ini, lihat README, INSTALLdll.

  6. Dalam kebanyakan kasus, ada skrip autotools ke configurepaket. Panggil dengan ./configure --prefix /usr/local/stow/some_software-versionbegitu file dipasang di subdirektori ini. Jika tidak, baca Makefiledan cari tahu cara mengatur jalur untuk file yang diinstal.

  7. Kompilasi dengan make.

  8. Instal dengan make install.

  9. cd /usr/local/stow, kemudian stow some_software-version

  10. Tes apakah berhasil.

Seringkali kompilasi tidak berfungsi pada upaya pertama: Paket mungkin perlu pustaka dan file-file yang disertakan, jadi seseorang harus menginstal ...-devpaket yang benar dari Debian. Atau gccmungkin mengeluh tentang hal-hal yang versi yang berbeda dari gccpembuat paket yang digunakan tidak mengeluh. Jadi kadang-kadang kita harus membaca kode, dan memperbaikinya, tetapi itu tidak terlalu sering terjadi.

dirkt
sumber
Maksud pertanyaan ini, meskipun mungkin ini tidak jelas, adalah untuk menjelaskan cara menginstal paket perangkat lunak untuk Debian. Mungkin saya harus membuat pertanyaan lebih jelas. Apakah stowmembuat paket Debian? Dari halaman manual, itu tidak terlihat seperti itu.
Faheem Mitha
@FaheemMitha Stow tidak tahu tentang paket Debian. Ini hanya mengelola tautan simbolis dari satu set direktori instalasi terpisah ke satu direktori.
Kusalananda
@FaheemMitha: Jika Anda ingin mengubah perangkat lunak yang dikompilasi sendiri menjadi paket Debian , maka Anda harus mengemasnya sendiri, seperti halnya pengelola paket Debian. Tapi itu terlalu banyak masalah jika Anda akan menjadi satu-satunya pengguna, menginstalnya /usr/localjauh lebih sederhana, dan stowmembantu mengelola file yang disimpan di sana. Atau dengan kata lain: Perangkat lunak tidak harus dalam paket Debian untuk menggunakannya di Debian.
dirkt
Ada satu keuntungan besar untuk mengemas perangkat lunak sebagai paket Debian, bahkan hanya untuk penggunaan lokal: jika Anda menggambarkan dependensi dengan benar, menginstal paket akan memastikan dependensi tetap diinstal ...
Stephen Kitt
@StephenKitt: Jika perangkat lunak kemasan dengan benar sebagai paket Debian adalah solusi terbaik. Kelemahannya adalah bahwa harus menginvestasikan waktu untuk mengemasnya dengan benar ...
dirkt