Bagaimana cara menginstal executable

13

Saya kadang-kadang mengalami perangkat lunak yang tidak ditawarkan dalam .debatau .rpmtetapi hanya sebagai executable.
Misalnya Kode Visual Studio , WebStorm atau Program Ruang Kerbal .

Untuk pertanyaan ini, saya akan menggunakan Visual Studio Code sebagai titik referensi.

Perangkat lunak ini ditawarkan sebagai paket zip.
Saat membuka ritsleting, saya ditinggalkan dengan folder bernama VSCode-linux-x64yang berisi nama yang dapat dieksekusi Code.
Saya dapat mengklik dua kali Codeatau menunjuk ke sana dengan terminal saya ingin /home/user/Downloads/VSCode-linux-x64/Codemenjalankannya.
Namun, saya ingin tahu apakah ada cara yang tepat untuk menginstal aplikasi ini.

Yang ingin saya capai adalah:

  • satu tempat di mana saya bisa meletakkan semua aplikasi / perangkat lunak yang ditawarkan dengan cara ini (executables)
  • dukungan terminal (artinya misalnya: Saya dapat menulis vscodedari folder mana saja di terminal saya dan secara otomatis akan menjalankan Visual Studio Code.

Informasi tambahan:

  • Lingkungan Desktop: Gnome3
  • OS: Debian

EDIT:
Saya memutuskan untuk memberikan @kba jawaban karena pendekatannya berfungsi lebih baik dengan solusi cadangan saya dan selain itu. Memiliki skrip yang mengeksekusi binari memberi Anda kemungkinan untuk menambahkan argumen.
Tetapi agar adil, pendekatan @John WH Smith sama baiknya dengan @ kba.

Harrys Kavan
sumber

Jawaban:

12

Untuk memanggil program dengan namanya, shell mencari direktori di $PATHvariabel environment. Dalam Debian, default $PATHuntuk pengguna Anda harus mencakup /home/YOUR-USER-NAME/bin(yaitu ~/bin).

Pertama pastikan direktori itu ~/binada atau buat jika tidak:

mkdir -p ~/bin

Anda dapat menyinkronkan binari ke direktori itu agar tersedia untuk shell:

mkdir -p ~/bin
ln -s /home/user/Downloads/VSCode-linux-x64/Code ~/bin/vscode

Itu akan memungkinkan Anda untuk menjalankan vscodedi baris perintah atau dari peluncur perintah.

Catatan: Anda juga dapat menyalin binari ke $PATHdirektori tetapi itu dapat menyebabkan masalah jika mereka bergantung pada jalur relatif.

Namun, secara umum, selalu lebih baik menginstal perangkat lunak dengan benar menggunakan sarana yang disediakan oleh OS (paket apt-get, deb) atau alat bantu pembuatan proyek perangkat lunak. Ini akan memastikan bahwa jalur bergantung (seperti skrip mulai, halaman manual, konfigurasi dll.) Diatur dengan benar.

Pembaruan: Juga mencerminkan komentar Thomas Dickey dan jawaban Faheem Mitha apa yang biasanya saya lakukan untuk perangkat lunak yang muncul sebagai tarball dengan biner tingkat atas dan diharapkan dapat dijalankan dari sana:

Letakkan di lokasi yang waras (dalam rangka kepatuhan standar /opt, /usr/localatau folder di direktori home Anda, misalnya ~/build) dan buat pembungkus skrip yang dapat dieksekusi di $PATHlokasi (mis. /usr/local/binAtau ~/bin) yang mengubah lokasi itu dan menjalankan biner:

#/bin/sh
cd "$HOME/build/directory"
exec ./top-level-binary "$@"

Karena ini mengemulasi perubahan ke direktori itu dan mengeksekusi biner secara manual, itu membuatnya lebih mudah untuk men-debug masalah seperti jalur relatif yang tidak ada.

kba berdiri dengan Monica
sumber
1
Saya suka pendekatan ini. Secara pribadi saya hanya akan membuang alias ke profil bash, meskipun akan cepat berantakan jika Anda memiliki banyak program dengan ini.
WorBlux
1
Maka itu hanya bisa digunakan dari shell. Pada titik tertentu Anda mungkin ingin menginstal .desktopentri untuk memulai dari menu atau Anda menambahkan konfigurasi, menemukan bendera baris perintah dll. Sebuah alias sangat tidak fleksibel.
Kba berdiri dengan Monica
8

Menurut TLDP , /optmungkin tempat yang bagus untuk perangkat lunak semacam ini. Saya telah menggunakannya sendiri untuk menyimpan beberapa alat yang berhubungan dengan printer, dan versi "dinamis" Skype (seperti yang dikatakan kba, "dukungan terminal" kemudian dapat dicapai dengan mengatur PATHvariabel yang sesuai).

Secara umum, saya cenderung menggunakan /optuntuk "menginstal" perangkat lunak berpemilik yang dikemas sebagai executable, tapi itu mungkin hanya saya. Selain itu, saya cenderung menghindari perangkat lunak semacam ini, karena saya biasanya tidak memiliki kepastian tentang apa yang akan dilakukan setelah saya menjalankannya.

Alasan lain mengapa saya memilih /optadalah karena biasanya dimaksudkan untuk pihak ketiga, kode independen, yang tidak bergantung pada file apa pun di luar /opt/'package'direktori (dan optdirektori lain seperti /etc/opt).

Dalam keadaan apa pun, file paket lain tidak ada di luar hierarki / opt, / var / opt, dan / etc / opt kecuali untuk file paket yang harus berada di lokasi tertentu di dalam pohon sistem file agar berfungsi dengan baik. [...] Secara umum, semua data yang diperlukan untuk mendukung suatu paket pada suatu sistem harus ada di / opt / 'package', termasuk file yang dimaksudkan untuk disalin ke / etc / opt / 'package' dan / var / opt / ' package 'serta direktori yang dipesan di / opt.

Salah satu keuntungan dari merilis kode sumber adalah orang dapat mengonfigurasi proses kompilasi, menyediakan jalur pustaka / header kustom berdasarkan spesifikasi sistem mereka. Ketika seorang pengembang memutuskan untuk merilis kode sebagai yang dapat dieksekusi, keuntungan itu hilang. IMHO, pada titik ini, pengembang tidak lagi diperbolehkan untuk menganggap bahwa / itu dependensi programnya akan tersedia (itulah sebabnya semuanya harus dikemas bersama executable).

Setiap paket yang akan diinstal di sini harus mencari file statis (mis. Font tambahan, clipart, file database) di pohon direktori terpisah / opt / 'paket' atau / opt / 'penyedia' (mirip dengan cara di mana Windows akan menginstal perangkat lunak baru ke pohon direktori sendiri C: \ Windows \ File Progam \ "Nama Program"), di mana 'paket' adalah nama yang menggambarkan paket perangkat lunak dan 'penyedia' adalah nama terdaftar penyedia LANANA.

Untuk informasi lebih lanjut, saya juga menyarankan untuk membaca pertanyaan U&L lainnya , yang membahas perbedaan antara /optdan /usr/local. Saya pribadi akan menghindari /usr/localdalam hal ini, terutama jika saya bukan orang yang membangun program yang saya instal.

John WH Smith
sumber
6

Sangat mungkin, dan sebenarnya cukup mudah, untuk membuat paket distribusi biner dari arsip zip biner atau tarball, seperti dalam contoh Anda dari Visual Studio Code.

Ya, paket biner distribusi Linux seperti debdan rpmbiasanya dibuat dari sumber, tetapi tidak harus begitu. Dan seringkali (walaupun tidak selalu) memungkinkan untuk mengatur hal-hal yang paket biner distribusi yang dihasilkan menginstal hal-hal di tempat-tempat "tepat" agar sesuai dengan kebijakan distribusi.

Dalam kasus tarball eksklusif berpemilik, jika ada cara untuk menginstal perangkat lunak dengan benar, misalnya target instal dalam makefile, maka itu dapat digunakan dengan mesin pengemasan distribusi. Kalau tidak, ini mungkin melibatkan "secara manual" memetakan file ke tempat "benar", yang mungkin banyak pekerjaan. Walaupun membuat paket semacam itu mungkin tampak aneh untuk dilakukan, itu masih memiliki salah satu manfaat utama dari manajemen paket, yaitu instalasi yang bersih dan pencopotan pemasangan. Dan tentu saja paket seperti itu tidak akan pernah diterima ke dalam distribusi Linux sepadan dengan namanya, tetapi itu bukan pertanyaan Anda.

Faheem Mitha
sumber
Itu benar dan masih: Ketika Anda hanya ingin beberapa perangkat lunak non-paket, non-standar-dibangun untuk berjalan andal pada sistem lokal Anda, membuat paket Debian dapat menyebabkan beberapa IMHO mencukur yak serius.
Kba berdiri dengan Monica
Deklarasi: tidak ada yak dicukur selama penulisan pertanyaan ini.
Faheem Mitha
@FaheemMitha - Anda bisa mencukur yak tanpa rasa sakit dengan fpm.
Pemburu Rusa
@ Patrick Hunter Saya pernah mendengar yang itu. Sudahkah Anda menggunakannya?
Faheem Mitha
1
@DeerHunter Poin bagus memang, saya telah menggunakan fpm untuk membangun paket biner lintas-platform untuk sebuah proyek beberapa tahun yang lalu dan itu benar-benar mudah.
Kba berdiri dengan Monica
3

Saya jarang melihat perangkat lunak yang dikirimkan hanya sebagai biner yang dapat dieksekusi dan tidak ada yang lain, dan saya terus terang akan sedikit curiga terhadapnya. Jika tidak ada yang lain setidaknya saya harapkan README(dengan instruksi untuk menginstalnya) dan LICENSEuntuk menemaninya. Yang telah dibilang...

Tempat biasa di mana binari yang diinstal secara lokal tidak dikelola oleh manajer paket distro disimpan adalah /usr/local/bin. Anda dapat meletakkannya di sana, dan karena direktori itu (atau seharusnya) sudah ada di Anda, $PATHAnda dapat menjalankan perangkat lunak dengan mengetikkan namanya di baris perintah.

Biasanya perangkat lunak juga harus memiliki halaman manual (perangkat lunak tidak berdokumen buruk, bukan?) Yang masuk /usr/local/mandan mungkin memiliki beberapa file dukungan seperti terjemahan ke bahasa lain dan plugin yang mungkin masuk /usr/local/shareatau /usr/local/lib, dan seterusnya. Untuk alasan ini, perangkat lunak yang tidak dikirim sebagai paket seperti .debatau .rpmbiasanya disertai dengan penginstal yang meletakkan semuanya di tempat yang tepat. Ketika Anda menginstal dari sumber, itu biasanya make install.

Celada
sumber
Dalam kasus Visual Studio Code , ia memiliki 77 file LISENSI yang tersebar melalui pohon direktori. Level atas Codehanyalah titik awal. Ini mungkin menampilkan lisensi ketika menjalankan (64-bit executable tidak berjalan pada mesin yang ada, tetapi seseorang harus memverifikasi hal semacam itu untuk memberikan jawaban yang baik untuk menjawab pertanyaan aktual OP.
Thomas Dickey
Terima kasih @ThomasDickey untuk klarifikasi. Saya yakin saya salah memahami situasi persisnya OP. Saya pikir satu - satunya yang mereka terima adalah satu eksekusi ELF (dibungkus tarbal)
Celada
Tidak - Saya melihat sekilas (bukan pada daftar tugas saya ...), dan ia punya ~ 1500 file. Hanya melihat-lihat dengan OSX, yang berjalan, dan mulai dalam tutorial di browser web. Jawaban @ kba sebagian bermanfaat, meskipun sebagai aturan, saya akan mencoba membuka ritsletingnya di bawah /usr/localdirektori home saya. (Tidak semua program akan berfungsi - Eclipsemisalnya).
Thomas Dickey