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:
- Ada sumber semi resmi / resmi dari paket tambahan yang tersedia untuk versi OS tersebut. Misalnya backports.org untuk Debian atau PPA untuk Ubuntu.
- 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.
- 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.
Jawaban:
(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?Terlepas dari kesalahan yang dihasilkan oleh
apt
, tidak ada paket rusak di sini. Jadi, apa yang salah? Masalahnya adalah bahwa versilibc6
yang tidak stabilslrn
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 tinggilibc6
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
berarti: gunakan yang tidak stabil
slrn
tetapi untuk semua paket lain hanya gunakan versi dari stable. Untuk lebih tepatnya, ini menggunakan nomor prioritas. Lihatman apt_preferences
detailnya.Kita juga bisa melakukannya
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'sslrn
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:
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).
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".
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
.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 stabilslrn
, Anda memerlukandeb-src
baris untuk tidak stabil, atau tidak akan berfungsi. Perhatikan bahwa Anda tidak memerlukandeb
baris yang sesuai untuk mengunduh sumber, meskipunapt-cache policy
menggunakan informasi itu, jadi jika Anda tidak memilikideb
baris yang sesuai , makaapt-cache policy
tidak akan menunjukkan versi yang relevan kepada Anda. Jika Anda memilikideb
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.Jika Anda menambahkan baris
/etc/apt/sources.list
, jangan lupa jalankanapt-get update
sesudahnya.Unduh sumber untuk
slrn
. Tempat yang bagus adalah/usr/local/src/slrn
.LANGKAH 2:
Ubah nomor versi sedikit, untuk membedakan backport Anda dari versi hulu. Jalankan
dch -i
, yang secara otomatis akan menambahkan entri kedebian/changelog
file. Kemudian ubah entri menjadi terlihat seperti ini, misalnya.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
daridevtools
paket.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
Jika ini berhasil, maka cobalah membangun paket lagi (LANGKAH 2). Jika gagal, maka pekerjaan lebih lanjut diperlukan. Catatan yang
debuild
terlihat pada Dependensi Build dalamdebian/control
file, dan Anda dapat mengubahnya jika perlu. Jadi mari kita bicarakan itu sekarang. Berikut adalah Dependensi Build untuk slrn.Alternatif untuk menggunakan
apt-get build-dep
adalah menginstal ini secara manual, dengan melakukanJika 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.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.
sumber
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/local
menggunakanstow
, 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:Unduh
.tar
file dll ke/usr/local/src/
.Buat file
/usr/local/packages/some_software
yang 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).Buka paket
.tar
file ke dalam/usr/local/tmp/some_software
.Atau, jika mengkompilasi dari repositori, periksa repositori di subdirektori yang sesuai (misalnya
/usr/local/git/some_software
), dan kompilasi di sana,cd
ke dalam direktori ini, lihatREADME
,INSTALL
dll.Dalam kebanyakan kasus, ada skrip autotools ke
configure
paket. Panggil dengan./configure --prefix /usr/local/stow/some_software-version
begitu file dipasang di subdirektori ini. Jika tidak, bacaMakefile
dan cari tahu cara mengatur jalur untuk file yang diinstal.Kompilasi dengan
make
.Instal dengan
make install
.cd /usr/local/stow
, kemudianstow some_software-version
Tes apakah berhasil.
Seringkali kompilasi tidak berfungsi pada upaya pertama: Paket mungkin perlu pustaka dan file-file yang disertakan, jadi seseorang harus menginstal
...-dev
paket yang benar dari Debian. Ataugcc
mungkin mengeluh tentang hal-hal yang versi yang berbeda darigcc
pembuat paket yang digunakan tidak mengeluh. Jadi kadang-kadang kita harus membaca kode, dan memperbaikinya, tetapi itu tidak terlalu sering terjadi.sumber
stow
membuat paket Debian? Dari halaman manual, itu tidak terlihat seperti itu./usr/local
jauh lebih sederhana, danstow
membantu mengelola file yang disimpan di sana. Atau dengan kata lain: Perangkat lunak tidak harus dalam paket Debian untuk menggunakannya di Debian.