Saya menggunakan Ubuntu 12.04. Katakanlah saya telah menginstal package x
dari repositori (dengan semua dependensinya) di versi 1.7 tetapi saya memerlukan beberapa fungsionalitas yang hanya tersedia di versi 1.8, jadi saya mengunduh source tar dan mengompilasinya:
./configure
make
make install
- Apakah ini menimpa 1,7 binari yang ada?
- Jika binari yang ada ditimpa, apakah manajer paket mencerminkan versi baru (1.8) dan dapat
package x
diperbarui oleh manajer paket di masa depan? - Jika
package y
memiliki ketergantunganpackage x 1.8
- apakah akan dipenuhi?
Saya telah berusaha mencari sumber daring yang menjelaskan hal ini. Jika Anda memiliki rekomendasi, harap beri tahu saya.
ubuntu
package-management
compiling
software-installation
Philip D'Rozario
sumber
sumber
make install
. Saya pikir itu jelas dari jawaban bahwa pada dasarnya semua yang terjadi adalah bahwa file disalin ke direktori di dalam awalan instalasi (meskipun ternyata ini adalah dengan kemungkinan bahwa beberapa file konfigurasi dapat dimasukkan ke dalam/etc
dan beberapa data yang secara dinamis dapat diubah mewakili awal. keadaan sesuatu dapat dimasukkan ke dalam/var
). Namun, jika Anda merasa itu tidak jelas, saya akan senang mengedit jawaban saya untuk menjelaskan.Jawaban:
Sebagian besar
.deb
paket, apakah disediakan oleh repositori resmi, dipasang dengan awalan/usr
.Artinya adalah bahwa executable yang dimaksudkan untuk dijalankan oleh pengguna masuk
/usr/bin
atau/usr/sbin
(atau/usr/games
jika itu adalah permainan), pustaka bersama masuk/usr/lib
, data bersama platform-independen masuk/usr/share
, file header masuk/usr/include
, dan kode sumber yang dipasang secara otomatis masuk/usr/src
.Sebagian kecil dari paket digunakan
/
sebagai awalan. Sebagai contoh,bash
paket menempatkanbash
executable/bin
, bukan/usr/bin
. Ini adalah untuk paket-paket yang menyediakan esensi telanjang untuk dijalankan dalam mode pengguna tunggal (seperti mode pemulihan) dan untuk memulai mode multi-pengguna (tapi ingat, yang sering menyertakan fungsionalitas untuk me-mount beberapa jenis jaringan yang dibagikan ... kalau/usr
- kalau ada sistem file jarak jauh).Sebagian kecil dari
.deb
paket, kebanyakan dibuat dengan Quickly , membuat folder khusus paket di dalam/opt
dan meletakkan semua file mereka di sana. Selain itu, sebagian besar waktu/opt
adalah lokasi yang digunakan oleh perangkat lunak yang diinstal dari installer yang dapat dieksekusi yang tidak menggunakan manajer paket sistem tetapi tidak melibatkan kompilasi dari sumber. (Misalnya, jika Anda menginstal program berpemilik seperti MATLAB, kemungkinan Anda akan memasukkannya/opt
.)Berbeda dengan semua ini, ketika Anda mengunduh arsip sumber (atau mendapatkan kode sumber dari sistem kontrol revisi seperti Bazaar atau git), membangunnya, dan memasangnya, biasanya memasang ke awalan
/usr/local
(kecuali jika Anda menyuruhnya melakukan jika tidak). Ini berarti executable Anda pergi/usr/local/bin
,/usr/local/lib
atau/usr/local/games
, perpustakaan Anda di/usr/local/lib
, dan sebagainya.Ada beberapa pengecualian untuk ini - beberapa program, secara default, menginstal ke
/usr
awalan dan dengan demikian akan menimpa instalasi dari program yang sama dari.deb
paket. Biasanya Anda dapat mencegah ini dengan menjalankan./configure --prefix=/usr/local
alih-alih./configure
saat Anda membangunnya. Saya kembali menekankan bahwa biasanya ini tidak perlu.(Karena alasan inilah masuk akal bagi Anda untuk memasukkan kode sumber yang sedang Anda bangun dan akan dipasang untuk penggunaan di seluruh sistem
/usr/local/src
, yang ada untuk tujuan itu.)Dengan asumsi versi paket sudah diinstal
/usr
dan versi yang Anda instal dari sumber ada di/usr/local
:File dari paket yang diinstal tidak akan ditimpa.
Biasanya versi yang lebih baru akan berjalan ketika Anda menjalankan program secara manual dari command-line (dengan asumsi
/usr/local/bin
atau di mana pun executable diinstal berada dalamPATH
variabel lingkungan Anda dan muncul sebelum/usr
direktori -prefixed yang sesuai , seperti/usr/bin
).Tetapi mungkin ada beberapa masalah dengan peluncur apa yang dibuat dan dapat diakses melalui menu atau pencarian. Selain itu, jika Anda telah menginstal lebih dari satu versi perpustakaan di tempat yang berbeda, itu bisa menjadi sedikit lebih rumit untuk menentukan mana yang akan digunakan oleh perangkat lunak apa.
Jika Anda tidak benar - benar menggunakan kedua versi program atau pustaka, maka seringkali Anda harus menghapus versi yang tidak Anda gunakan, meskipun dalam situasi terbatas Anda mungkin ingin tetap menginstal paket untuk memenuhi dependensi.
Namun, jika karena alasan apa pun file ditimpa (misalnya, jika kode sumber dipasang
/usr
bukan/usr/local
):sudo make uninstall
di direktori), dan kemudian menghapus paket atau paket yang menyediakan file yang ditimpa (karena mereka tidak akan dikembalikan dengan menghapus instalasi versi yang diinstal dari sumber). Kemudian instal ulang versi apa pun yang Anda inginkan./usr/local/src/program-or-library-name
Adapun memenuhi dependensi:
Jika ada
.deb
paket yang tergantung pada perangkat lunak yang Anda instal dari sumber, dan membutuhkan versi yang Anda instal dari sumber (atau lebih tinggi), paket itu tidak akan berhasil diinstal. (Atau, lebih tepatnya, Anda mungkin dapat "menginstal" tetapi itu tidak akan pernah "dikonfigurasi" sehingga Anda tidak akan dapat menggunakannya.) Ketergantungan diselesaikan dengan versi paket apa yang diinstal, bukan oleh perangkat lunak apa yang sebenarnya Anda miliki.Demikian pula, perangkat lunak setidaknya akan mencoba untuk menginstal sepenuhnya bahkan jika Anda telah secara manual menghapus file yang disediakan oleh paket-paket tempat perangkat lunak yang diinstal tergantung. (Anda seharusnya tidak mencoba memanfaatkannya untuk tujuan apa pun. Manajer paket yang beroperasi berdasarkan informasi palsu hampir selalu merupakan hal yang buruk.)
Oleh karena itu, jika Anda tidak dapat menemukan paket yang menyediakan versi perangkat lunak yang Anda butuhkan, Anda mungkin perlu membuat
.deb
paket Anda sendiri dari perangkat lunak yang Anda kompilasi, dan instal dari paket itu. Kemudian manajer paket akan tahu apa yang sedang terjadi. Membuat paket untuk Anda gunakan sendiri, yang tidak perlu Anda lakukan dengan baik di komputer orang lain, sebenarnya tidak terlalu sulit. (Tapi saya merasa itu mungkin berada di luar ruang lingkup pertanyaan Anda, seperti yang saat ini dinyatakan.)sumber
Apa yang Anda instal dari pusat perangkat lunak atau dengan perintah APT (
apt-get
,aptitude
) atau dengandpkg
dikenal dengan sistem manajemen paket.dpkg
adalah alat manipulasi paket tingkat rendah, APT dan teman-teman adalah alat tingkat tinggi yang memintadpkg
untuk melakukan instalasi aktual dan juga menangani dependensi dan unduhan paket.Jika Anda mengkompilasi program dari sumber, itu tidak akan diketahui oleh manajer paket. Konvensi di Linux, yang harus Anda ikuti pada kesulitan memiliki kesulitan melacak hal-hal dan instalasi Anda ditimpa, adalah:
/bin
,/lib
,/sbin
,/usr
Dicadangkan untuk manajer paket;/usr/local
untuk administrator sistem - hormati hierarki direktori di sana, tetapi Anda sendiri yang mengelola file.Lihat Cara terbaik untuk memutakhirkan vim / gvim ke 7.3 di Ubuntu 10.04? untuk daftar cara untuk mendapatkan versi perangkat lunak yang lebih baru. Cara termudah adalah mendapatkan PPA , jika ada. Jika Anda mendapatkan paket biner atau kompilasi dari sumber, saya sarankan menggunakan stow untuk mengelola perangkat lunak yang Anda instal secara manual. Atau, buat
.deb
paket Anda sendiri - ini lebih berfungsi, tetapi terbayar jika Anda sering memutakhirkan (biasanya mengulang paket untuk versi minor berikutnya sangat cepat) atau jika Anda menggunakan banyak mesin yang menjalankan distribusi yang sama.Dengan sebagian besar program, jika Anda menjalankan
./configure && make && sudo make install
, program diinstal di bawah/usr/local
. Periksa dokumentasi yang disediakan dengan sumber (biasanya dalam file bernamaREADME
atauINSTALL
) atau jalankan./configure --help
untuk memeriksa apakah ini masalahnya. Jika program diinstal di bawah/usr/local
, itu tidak akan mengganggu versi yang disediakan oleh manajer paket./usr/local/bin
lebih dulu di sistemPATH
. Perhatikan bahwa Anda harus menjalankanmake install
sebagai administrator (root); jangan dikompilasi sebagai root. Seperti disebutkan di atas, saya sarankan menggunakan stow daripada menginstal langsung ke/usr/local
.sumber
Ini tergantung pada paket dan banyak hal lainnya
Singkat cerita:
Tidak ada jawaban umum. Ini sangat tergantung paket. Anda harus menggunakan +1 PPA resmi jika mungkin dan bukan mengkompilasi dari sumber.
sumber
/opt
./usr/local
adalah awalan standar, dan bahkan/usr
merupakan awalan standar yang lebih umum daripada/opt
./opt
paling umum digunakan untuk perangkat lunak yang menginstal di dalam direktori khusus yang dinamai untuk aplikasi tertentu (jadi, misalnya, aplikasi bernama Foo mungkin diinstal dengan semua file di dalamnya/opt/foo
).