Bagaimana cara benar-benar menginstal file tar.gz di Linux - bagaimana mengelola aplikasi yang diinstal secara manual (atau mandiri)?

12

Saya melihat semua tautan ini menjelaskan paket dan. Deb ... Saya tahu itu ... dan ada banyak kludges untuk membuat file tar.gz berfungsi (mis: pembaruan-alternatif untuk Java atau menjatuhkan file secara manual di / usr / local / bin (atau di tempat lain, yang saya simpulkan dari pencarian selama berjam-jam)). Jika paket sangat cerdas, bagaimana sedikitnya aplikasi Linux yang tersedia dalam paket atau .debs / rpms?

Saya berbicara sebagai pengguna baru; Saya tahu para ahli mungkin tahu lebih baik (saya pikir saya bisa mengunduh versi kompilasi Eclipse?). Seperti halnya netbeans dan chrome .sh, eclipse adalah direktori yang sederhana dan dapat diluncurkan, Java membutuhkan update-alternativesbisnis ini tetapi saya tidak berpikir itu mendaftar sendiri ke "daftar program" Ubuntu / Debian (hanya mendaftar sebagai perintah), dll. (Saya tahu ini adalah terkadang tersedia di repositori, tetapi saya hanya bingung mengapa halaman unduh tidak memiliki penjelasan yang tepat).

Singkat cerita: Jika mengunduh atau mengompilasi file tar.gz, bagaimana cara mendaftarkannya ke sistem? update-alternativestampaknya mendaftarkannya sebagai perintah, di Ubuntu, itu tidak muncul di bilah pencarian. Di Debian, saya bisa menambahkan pintasan secara manual ke peluncur GNOME 2. Tetapi apa yang harus saya lakukan?


Edit:

Jadi setelah bermain-main sedikit lebih banyak dengan solusi baru, saya dapat memperbaiki "masalah" saya:

Bagaimana saya mengelola program yang diinstal secara manual? Firefox dan Eclipse adalah satu-satunya contoh saya sejauh ini (saya tidak mengunduh banyak hal). Mereka berdua bisa kehabisan kotak, yang saya suka. Kecuali, di mana saya harus menginstalnya? Saya melihat Eclipse memiliki instruksi sendiri, tetapi saya lebih suka melakukan semua "paket manual" dengan cara yang sama.

  1. Setelah beberapa penelitian, saya memutuskan untuk memasukkan program-program ini /usr/local/bin .
  2. Dari cara menginstal gerhana , saya pikir untuk mendapatkan sesuatu untuk muncul di peluncur, saya harus meletakkanxxx.desktop file ~/.local/share/applications/. Apakah nama file .desktop ini penting?
  3. Barang-barang dengan autotool (Saya mencari configureatauunix/configure file) akan bekerja dengan baik. Beberapa poin penelitian yang harus saya gunakan CheckInstalluntuk melacak semua ini.
  4. Saya harus menggunakan update-alternativesuntuk mendaftarkan jalur. Dari utas java ini , sepertinya saya membuat tautan dari /usr/bin/javake /usr/lib/jvm/jdk.... Ketika saya menginstal aplikasi "mandiri" ini seperti Eclipse atau Firefox, haruskah saya selalu menautkannya /usr/bin/[app]? Dan jika pernyataan 1 itu benar, saya akan melakukan hal-hal sepertisudo update-alternatives --install "/usr/bin/[app]" "[app]" "/usr/local/bin/[app]" 1

Apakah petunjuk ini benar / cara yang baik untuk mengelola instalasi manual? Apakah ada langkah lain yang harus saya ikuti? Saran lain?

Raekye
sumber
1
Mengapa tidak mencari *.debpaket saja?
m0nhawk
@ m0nhawk Tidak dapat selalu menemukan file .deb? Seperti pada halaman unduh Eclipse, itu hanya tar.gz. Kecuali saya benar-benar melewatkannya
Raekye
1
Untuk Eclipse pasti ada paket untuk Debian ( untuk Ubuntu ). Dan saya berpikir bahwa cara terbaik untuk menangani *.tar.gzperangkat lunak adalah untuk membuat paket yang sesuai: *.rpm, *.debdll
m0nhawk
1
Anda memerlukan .desktopfile untuk menampilkan sesuatu di menu. update-alternativeshanya berfungsi untuk memprioritaskan PATH.
tripleee
1
Pertanyaan Anda masih tentang "apa yang harus saya lakukan untuk mendaftarkan perangkat lunak baru dengan ______" di mana _____ adalah lingkungan desktop tertentu, dan bukan "apa yang harus saya lakukan WRT linux" secara umum. Plus, mungkin, ketidaktahuan tersirat tentang variabel lingkungan $ PATH?
goldilocks

Jawaban:

14

Mengapa banyak aplikasi tidak tersedia dalam paket repo?

Mungkin ada banyak alasan:

Tidak ada satu alasan pun. Jika Anda ingin melihat aplikasi favorit Anda di manajer paket distro Anda, Anda harus memperlakukan setiap kasing secara terpisah. Cobalah untuk menghubungi para devs (di saluran IRC atau milis misalnya) dan tanyakan bagaimana Anda bisa membantu mengemas.

Bagaimana cara menginstal tarball?

Tarball (paket .tar.gz) dapat berisi apa saja. Sampai Anda benar-benar membukanya, Anda tidak memiliki cara untuk berasumsi bagaimana cara menginstalnya. Sekali lagi, setiap paket harus didekati secara berbeda.

Cari dokumentasi! Paket apa pun (semi-) yang layak akan memberikan instruksi tentang cara menginstal aplikasi. Refleks pertama Anda harus selalu mencari file teks yang disebut README, INSTALL atau sesuatu seperti ini. Memeriksa situs web penerbit mungkin juga membantu.

Karena setiap paket berbeda, tidak ada cara universal untuk memproses setiap tarball di dunia. Itu seperti meminta resep yang bisa digunakan untuk semua bahan di dunia. Tidak terjadi.

Pengetahuan yang baik tentang sistem Anda, distro Anda dan lingkungan desktop Anda akan membantu, jadi, jika ini meyakinkan, hal-hal akan terlihat lebih dan lebih dapat diprediksi saat Anda menghabiskan waktu di dunia linux.

Kasus khusus: Autotools

Ketika proyek tumbuh lebih besar, mereka perlu menyediakan cara mudah untuk berpindah dari kode sumber ke biner ke instalasi penuh pada sistem. Inilah sebabnya mengapa mereka mengirim dengan sistem build tertanam, kumpulan skrip untuk melakukan yang diperlukan.

Di dunia Linux / Open Source / Perangkat Lunak Bebas, sistem one build mendapat adopsi yang lebih luas: GNU Autotools . Jika Anda pernah berurusan dengan paket sumber (n terbuka), ada kemungkinan besar bahwa Anda akan menggunakan Autotools.

Dalam kasus paling sederhana, inilah cara memasang aplikasi yang dikemas dengan autotool:

  • ./configure: Sebuah skrip yang akan menghasilkan Makefiles yang sesuai dengan sistem Anda (juga sering memeriksa ketersediaan dependensi).
  • make: Mengkompilasi kode sumber sesuai dengan Makefiles yang dihasilkan sebelumnya.
  • make install: Menyalin binari ke lokasi yang sesuai, membuat symlink, dan langkah lain apa pun yang ditentukan oleh pengembang.

Catatan

  • configureskrip biasanya memiliki banyak opsi, seperti kompiler yang akan digunakan atau cara mendefinisikan direktori target. Jika Anda membutuhkan fleksibilitas, ada baiknya melihat ./configure --help.
  • Bahkan jika Anda yakin itu Autotool dan Anda tahu betul, selalu mulai dengan membaca dokumen (README, INSTALL, ...)

Jawab pembaruan dalam pertanyaan

Apa yang Anda minta tidak memiliki jawaban yang pasti. Semua orang di sini mungkin memiliki pendapat tentang apa yang merupakan "praktik yang baik", tetapi pada akhirnya, hanya Anda yang dapat menemukan apa yang cocok untuk Anda . Jika ada jawaban yang mudah, Anda tidak akan mengajukan pertanyaan. Distro Anda akan menjawabnya untuk Anda.

Ini dikatakan, inilah beberapa komentar pribadi.

  • Di sistem saya, saya memesan /usr/local/binpaket yang diinstal oleh manajer paket saya. Semua yang saya kompilasi / instal dengan tangan masuk /opt. Ini adalah detail tetapi membantu menghindari sakit kepala besar ketika berhadapan dengan beberapa versi dari program yang sama.

  • xxx.desktop, dan masalah GUI secara umum, khusus untuk lingkungan desktop yang Anda gunakan. Jika berhasil untuk sistem Anda, bagus. Tapi itu tidak bisa digeneralisasi ke semua lingkungan yang tersedia di Unix.

  • /usr/local/binmemiliki keuntungan karena sudah berada di PATH Anda . Jika Anda ingin menggunakan direktori lain (seperti yang /optsaya sarankan), pastikan untuk memasukkannya dalam PATH Anda. Jika Anda tidak tahu cara melakukannya, buka terminal dan laksanakan yang berikut di terminal (bukan cara tercantik untuk melakukannya, tetapi tanpa mengetahui apa pun tentang sistem Anda, saya tidak dapat menyarankan hal lain):echo 'export PATH=$PATH:/opt' >> ~/.bashrc

rahmu
sumber
Terima kasih atas respon yang mendetail. Saya melihat ke dalam readmes, tetapi saya memutuskan untuk tidak melakukan sesuatu yang berbeda setiap kali. Jadi setelah banyak penelitian, upaya, dan frustrasi, saya datang dengan pertanyaan / spesifikasi yang lebih konkret - lihat posting terbaru.
Raekye
Sama-sama, saya harap ini membantu :) Saya mengedit jawaban saya untuk mengatasi pembaruan Anda. Perlu diingat bahwa tidak ada "One True Way" untuk melakukan sesuatu (kecuali jika Anda adalah emacspengguna). Anda harus melalui percobaan dan kesalahan untuk belajar, dengan waktu, manfaat dan kelemahan dari masing-masing pendekatan yang berbeda.
rahmu
Terima kasih atas pembaruannya! Tentu saja. Saya kira xxx.desktopumumnya berfungsi untuk GNome. Apa yang Anda ketahui tentang menggunakan update-alternativesuntuk mengatur jalur?
Raekye
Sejauh yang saya tahu, ini adalah cara khusus Debian untuk berurusan dengan perangkat lunak generik, seperti memiliki banyak peramban atau editor. (Ubuntu dan Mint didasarkan pada Debian dan telah mewarisi ini). Berikut ini lebih banyak jika Anda tertarik
rahmu
Jawaban yang bagus Satu hal yang sering diperlukan (atau paling tidak disukai) adalah melakukan sudo make install sebagai langkah terakhir (dengan paket yang Anda percayai). Itu memberi proses izin yang diperlukan untuk meletakkan hal-hal di direktori sistem yang tidak dimiliki oleh pengguna Anda (seperti / usr / bin).
Joe
8

Saya pikir Anda harus mengklarifikasi dengan diri sendiri apa yang Anda inginkan untuk "mendaftar" itu dengan .

Untuk menjelaskan - dan saya tidak mencoba untuk menjadi pintar - alecky - "linux" tentu saja adalah kernel, dan kernel tidak tahu tentang atau tidak memiliki minat pada perangkat lunak userspace pada sistem Anda di luar init. Jadi apa yang kita bicarakan di sini?

Anda menyebutkan sejumlah distro yang berbeda. Saya kadang-kadang membangun perangkat lunak dari sumber meskipun itu tersedia di repositori karena saya ingin beberapa set opsi konfigurasi yang tidak diatur dalam biner distro. Satu-satunya masalah yang saya miliki dengan ini adalah bahwa jika paket merupakan prasyarat untuk hal lain, saya memang harus mendaftarkan ini ke sistem pengemasan untuk menghindari menginstal paket distro secara tidak sengaja di atas paket yang saya buat. Pada sistem berbasis fedora / rpm, ini dilakukan dengan rpm -i --justdb <package>. Saya tidak melakukan ini pada sistem berbasis debian / apt; alih-alih saya hanya memaksakan instal sesuai kebutuhan, yang mungkin malas - sepertinya ada cara yang lebih baik untuk melakukannya, dengan membuat paket boneka yang berpura-pura memenuhi prereq apa pun. Itu semacam semacam saran dari m0nhawk untuk benar-benar membuat paket dari sumber .tar.gz - kecuali sedikit lebih sederhana (saya akan jujur ​​dan mengatakan bahwa saya sama sekali tidak menyukai saran m0nhawk).

Tampaknya Anda memiliki beberapa masalah lain selain masalah dengan sistem pengemasan. Tidak jelas bagi saya apa itu, meskipun Anda menyebutkan lingkungan desktop (misalnya, Gnome). Ini heterogen, jadi tidak ada jawaban untuk pertanyaan, "bagaimana saya melakukan ini di linux" - bahkan bukan pertanyaan "bagaimana saya melakukan ini di ubuntu" atau "bagaimana saya melakukan ini pada gentoo "- ini pertanyaan" bagaimana saya melakukan ini untuk desktop gnome "atau" bagaimana melakukan ini pada desktop XFCE ", dll. Menurut saya, satu-satunya masalah ada masalah peluncur yang Anda sebutkan, yang saya ingin percaya bahwa setiap DE menyediakan cara sederhana untuk melakukan ini (tetapi tidak akan persis sama, karena mereka berbeda).

Lalu ada layanan, yang dikelola oleh sistem init (misalnya, systemd atau pemula). Jadi pertanyaan ini sebenarnya adalah serangkaian pertanyaan terkait yang berpotensi:

  • sistem pengemasan, mis. apt atau yum
  • sistem init, misalnya, systemd atau pemula
  • lingkungan desktop, mis. kde atau unity
  • filebrower, misalnya, nautilus atau konqueror
  • ?????

Sebagian alasan mengapa tidak ada satu solusi terpadu yang sederhana (walaupun standar XDG dapat menyediakan beberapa bagian seperti itu) adalah bahwa "linux" bukan satu sistem operasi terpadu yang sederhana dan saya membayangkan sebagian besar penggunanya lebih suka dengan cara itu. Saya sering tidak menggunakan DE sama sekali, dan saya tidak pernah menggunakan file browser yang mereka gunakan, dll.

Sekali lagi, saya benar-benar berusaha membantu dengan ini dan bukan hanya kepausan: jika ada masalah yang ingin Anda selesaikan di sini, Anda harus mempertimbangkan lebih tepat apa masalah itu dan perangkat lunak apa yang sebenarnya terlibat dengan mereka (lebih dari sekadar "linux" ") jika Anda ingin menyelesaikannya.

goldilocks
sumber
"in the distro binary" <- / saya menggumamkan sesuatu tentang distro berbasis sumber
njsg
Juga, masalah dengan standar XDG mungkin karena beberapa upstreams sama sekali tidak peduli dan pengembang distro adalah yang menyediakan .desktopfile mereka , untuk tugas-tugas semacam ini diperlukan.
njsg
Saya tidak tahu apakah pengembang hulu harus peduli dengan itu. Saya baru saja menyebutkan XDG karena tersedia untuk pengguna akhir jika Anda ingin menggunakannya. Harga heterogenitas adalah bahwa hal itu mau tidak mau menempatkan beban tanggung jawab pada pengguna yang tidak akan mereka miliki, misalnya, OSX. Beberapa distro linux bertujuan untuk meminimalkan ini lebih dari yang lain, dan Anda bebas memilih, tetapi pada akhirnya saya pikir orang-orang yang benar-benar tidak nyaman dengan model itu seharusnya hanya tidak menggunakan linux sama sekali - saya tidak yakin mengapa mereka ingin masuk tempat pertama, sebenarnya.
goldilocks
Saya agak merumuskan pertanyaan yang lebih baik - bagaimana saya mengelola aplikasi yang diinstal secara manual? Seperti Eclipse dan Firefox, yang umumnya berjalan tanpa dependensi yang kompleks (jadi saya bisa mengaturnya sendiri dan mengunduh paketnya). Mereka berfungsi mandiri, seperti yang Anda atau orang lain sebutkan, tetapi saya harus tetap melacak aplikasi ini, alih-alih meninggalkannya di sekitar sistem file saya? (Lihat pertanyaan terbaru)
Raekye
Raekye: Tidak ada bedanya dengan poin saya, yaitu bahwa Anda tidak perlu melakukan apa pun untuk mengelola atau "melacak" hal-hal yang Anda instal dari sumber di / usr / lokal, kecuali sejauh yang Anda inginkan untuk apa pun tujuan Anda . Selain mengkompilasi dan menginstal dalam $ PATH, tidak ada registry linux universal karena tidak ada tujuan untuk pendekatan universal. Saya berasumsi Anda hanya khawatir Anda melewatkan sesuatu - Anda tidak. Anda membatalkan tar, Anda configure, Anda make install. Itu dia, sudah selesai. Apa pun setelah itu adalah masalah preferensi pribadi.
goldilocks
4

Saya pikir alasan dasar untuk masalah keseluruhan Anda adalah bahwa sistem Linux itu sendiri tidak mengandung "registri" seperti itu. File yang dapat dieksekusi adalah yang Anda perlukan untuk menjalankan sesuatu. Jika Anda tidak ingin menentukan path lengkap ke executable maka kebanyakan shell akan mencarinya di direktori yang tercantum di lingkungan Anda $ variabel PATH. Ini bisa menjadi sedikit lebih kompleks dengan pustaka yang ditautkan dan sebagainya, tetapi biasanya Anda tidak perlu mempelajari sejauh itu.

Distribusi Linux yang berbeda telah distandarisasi pada berbagai tata letak sistem file dan sistem manajemen paket, di situlah masalahnya. Redhats menggunakan rpm , Debians / Ubuntu menggunakan paket deb. Arch pergi dengan caranya sendiri juga. Dari perspektif proyek perangkat lunak, kecuali jika Anda ingin dimasukkan dalam distribusi, basis pengguna Anda sepenuhnya dalam satu distro, atau produk komersial yang bertujuan untuk kemudahan instalasi untuk semua orang, mereka mungkin satu-satunya poin yang Anda mulai cari untuk membangun berbagai paket.

Pada kenyataannya, source tar.gz yang dibangun dengan gccmungkin adalah definisi terbaik dari "paket Linux" yang umum. Kernel Linux dengan beberapa utilitas GNU dan GCC hanya tentang penyebut umum antara semua rasa berbeda dari sistem operasi berbasis Linux yang bisa Anda dapatkan.

Saya tidak akan mengatakan "begitu sedikit" barang tersedia sebagai paket karena sesuatu yang spesifik yang Anda cari tidak. (atau mungkin distributor telah memilih untuk tidak repot dengan semua paket ini ribut? Seperti Chrome dan ini proses pembaruan sendiri). Ada begitu banyak paket di sekitar untuk begitu banyak sistem paket yang berbeda untuk begitu banyak arsitektur untuk perangkat lunak bebas begitu tidak lucu .

Jika Anda telah membangun sesuatu yang tidak disediakan sebagai paket untuk distribusi linux Anda, atau mendukung opsi untuk membangun sebagai paket, cara terbaik untuk "mendaftar" sebagai paket nyata adalah dengan membangun paket untuk itu, menentukan di mana semua file-file tersebut harus berdasarkan pada sistem paket yang Anda pilih dan menginstalnya seperti itu. Jadilah jiwa dan sumbangkan pekerjaan pengemasan Anda kembali ke proyek sehingga orang lain dapat memperoleh manfaat darinya.

Ada berbagai panduan web tentang membangun paket . Debian menjadi salah satunya .

Jika semua yang ingin Anda lakukan adalah menjalankan paket yang dikompilasi, mungkin menambahkan path biner ke Anda $PATH?

Jika Anda melakukan sesuatu yang lain, apa itu?

Mat
sumber
"Jika semua yang ingin Anda lakukan adalah menjalankan paket yang dikompilasi, mungkin menambahkan path biner ke $ PATH Anda?" <- Saya kira setiap prosedur instalasi yang waras (katakanlah, make installatau sejenisnya) paling tidak akan menginstal symlink di bawah /usr/bin/, jika tidak menginstal semuanya di bawah/ )
njsg
Sebagian besar, saya kira itu karena saya melakukan banyak hal --prefix=/elsewhere untuk menjaga kebiasaan membangun jauh dari pohon normal.
Matt
Secara umum, tarbal menggunakan make installakan menginstal ke/usr/local/bin
Shadur
0

Saya ingin menambahkan bahwa Anda juga dapat symlink untuk ~/bin/bukan /usr/bin. *.desktopfile dapat ditempatkan di ~/.local/share/applications/atau /usr/share/applications/. Hanya saya menggunakan komputer saya, dan saya ingin menghindari menyentuh file sistem (apa pun di luar direktori rumah saya) sebanyak mungkin.

Tentu saja, ketika Anda meletakkan barang di rekan "direktori rumah", mereka tidak akan muncul untuk pengguna lain.

Inilah yang termasuk dalam default ~/.profileuntuk debian wheezy:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi
Raekye
sumber