Menginstal dari sumber. Cara mengatasi dependensi tanpa merusak pengelola paket

19

Mengompilasi dan menginstal perangkat lunak adalah masalah dan masalah yang tidak dapat saya atasi. Saya hanya ingin lari melalui pemahaman saya tentang proses ini dengan seseorang yang lebih berpengetahuan untuk menjernihkan pikiran saya untuk naik ke tingkat berikutnya.

Banyak perangkat lunak ilmiah yang saya butuhkan tidak didistribusikan sebagai paket. Saya mengerti "./configure" mengatur variabel kompilasi dan memeriksa dependensi "make" melakukan kompilasi "sudo make install" menempatkan semua pustaka dan nampan di tempat mereka. Namun itu tidak pernah berhasil. Saya jarang keluar dari panggung a) "./configure" tanpa memasuki neraka ketergantungan, dan jika saya melakukannya, b) "sudo make install" mungkin akan mem-bun kotak saya.

a) Neraka ketergantungan sangat membuat frustrasi. Terkadang saya memiliki perpustakaan, tetapi tidak menyukainya. Atau perpustakaan tidak ingin menginstal. Atau "konfigurasikan" tidak dapat menemukannya. Atau distro saya meletakkannya di tempat yang seharusnya tidak. Atau ada dua versi di sistem saya. Masalahnya adalah, saya tidak bisa mengerti cara mendiagnosis dan karenanya memperbaiki masalah ini. Apa saja referensi bagus untuk dipelajari bagi seseorang yang tidak perlu menjadi seorang programmer?

b) Pemahaman saya adalah "make install" akan menggantikan beberapa perpustakaan dan mengubah pengaturan tanpa manajer paket saya menyadarinya. Oleh karena itu, beberapa program tidak akan berjalan, yang lain tidak dapat diperbarui. Jadi, jika saya tidak menggunakan "make install", dan simpan saja biner yang dikompilasi di direktori pengguna saya dengan tautan simbolik yang ditambahkan ke PATH, apakah saya akan jelas?

Kotak saya adalah pengguna tunggal, memiliki banyak HD gratis, jadi saya tidak terlalu peduli memiliki banyak (lusinan) salinan perpustakaan jika itu akan menyelesaikan masalah saya. Ruang murah.

Lenz
sumber
3
Anda tidak mengatakan distribusi mana yang Anda gunakan, itu akan menjadi informasi yang menarik. Jika Anda menjalankan turunan Debian, Anda dapat menggunakan apt-get build-dep <package>untuk secara otomatis menginstal dependensi yang diperlukan.
Marco
Saya menggunakan CentOS 6 (untuk menggunakan apa yang super-guru gunakan di lab kami), tetapi saya dulu menggunakan Ubuntu.
Lenz
Selamat datang di kehidupan seorang pengemas distribusi. Melakukan semua pelacakan ketergantungan ini tidak terlalu sulit, tapi itu membosankan.
Gilles 'SANGAT berhenti menjadi jahat'
Lihat Manajer Paket Non-Root dan mungkin pertanyaan lain yang ditandai bukan-root-user yang terkait dengan instalasi perangkat lunak dan manajemen paket.
Gilles 'SANGAT berhenti menjadi jahat'

Jawaban:

16

Sebagian besar paket akan memiliki <package>-dev(untuk berbasis Debian) atau <package>-devel(untuk berbasis Red Hat) yang akan menjadi pustaka yang diperlukan untuk membuat tautan.

Jadi, misalnya jika sumber mengatakan itu diperlukan libxml, dalam sistem berbasis Debian Anda akan menemukan libxml2dan libxml2-dev(gunakan apt-cache search <dependancy>untuk menemukannya).

Anda membutuhkannya libxml2-devuntuk membangunnya, dan libxml2menjalankannya.

The ./configureLangkah biasanya mendukung bendera suka --with-libxml=/usr/lib/untuk menunjuk pada perpustakaan yang benar ( ./configure --helpharus daftar semua pilihan). Ini juga biasanya mendukung perubahan lokasi pemasangan --prefix=$HOME/sw. Menggunakan awalan di luar apa yang manajer paket Anda kontrol adalah cara terbaik untuk menghindari konflik dengan software yang diinstal manajer paket.

Pada Debian & derivatif menggunakan --prefixdari /usr/local/atau /opt/local/harus aman.

Jika pustaka (atau versi) yang Anda butuhkan tidak tersedia dari manajer paket, cukup unduh sumbernya dan kompilasi dengan menggunakan opsi yang serupa. Yang paling penting gunakan di --prefixluar manajer paket Anda dan ketika menyusun perangkat lunak yang benar - benar ingin Anda gunakan --with-<library>=/<path/to/installed/library>.

bahamat
sumber
5

Ada alat auto-aptyang bisa digunakan untuk ini.

Dari man auto-apt :

auto-apt adalah program yang memeriksa akses file dari program yang berjalan dalam lingkungan auto-apt. Jika suatu program akan mengakses file dari paket yang tidak terhenti, auto-apt akan menginstal paket yang berisi file tersebut, dengan menggunakan apt-get.

Ini digunakan sebagai berikut:

auto-apt run ./configure

Cara lain adalah dengan menggunakan apt-get build-dep <package>distribusi berbasis Debian.

Marco
sumber
apt-get build-dep <package>bekerja untukku. Itu frustasi berjalan ./configureberulang-ulang untuk mempelajari satu paket lagi yang diperlukan!
HeatfanJohn
2

Untuk distribusi berbasis RPM, Anda bisa mencoba tangan Anda di membuat paket yang tepat (tidak bahwa sulit ...).

Manfaat dari paket yang tepat adalah bahwa manajer paket Anda melacak perangkat lunak, dan Anda dapat dengan mudah meniru pengaturan Anda di tempat lain / di mesin berikutnya. Dengan porting paket sumber yang tepat ke depan (versi hulu baru, perbaikan bug bug, pustaka yang mendasarinya diperbarui) lebih mudah daripada harus mencari tahu semuanya dari awal nanti.

vonbrand
sumber