tempat meletakkan binari sehingga selalu berada di jalurnya dan dapat ditemukan dengan mudah

10

Saya membuat beberapa binari, skrip dll yang ingin saya instal dengan mudah (menggunakan rpms saya sendiri). Karena saya ingin mereka dapat diakses oleh semua orang, intuisi saya adalah memasukkannya ke / usr / bin;

  • tidak perlu mengubah PATH

namun; executable saya sekarang menghilang di kumpulan semua yang lain; bagaimana saya bisa menemukan kembali semua executables yang saya letakkan di sana dengan cara yang mudah. Saya sedang memikirkan:

  • subdirektori di / usr / bin (saya tahu saya tidak bisa melakukan ini; hanya untuk menggambarkan pemikiran saya)
  • direktori lain (/ opt / diriku / bin) dan menautkan setiap executable ke / usr / bin (banyak pekerjaan)
  • direktori lain (/ opt / diriku / bin) dan menautkan direktori ke / usr / bin (apakah ini mungkin?)

apa yang akan menjadi "cara terbaik, paling sesuai linux" untuk melakukan ini?

EDIT: kami berdiskusi tentang hal ini di perusahaan dan menemukan opsi yang kurang optimal ini: meletakkan binari di / usr / bin / company dengan tautan simbolis dari / usr / bin. Saya tidak senang dengan solusi ini (diskusi terus menerus)

Chris Maes
sumber

Jawaban:

7

Jika Anda menggabungkan binari Anda ke dalam RPM Anda sendiri, maka itu sepele untuk mendapatkan daftar apa itu dan di mana mereka diinstal.

Contoh

$ rpm -ql httpd| head -10
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf.modules.d
/etc/httpd/conf.modules.d/00-base.conf

Saya sarankan menempatkan executable Anda di salah satu /usr/binatau /usr/local/bindan memutar RPM Anda sendiri. Cukup sepele untuk melakukan ini dan dengan mengelola penyebaran perangkat lunak Anda menggunakan RPM Anda akan dapat memberi label bundel dengan nomor versi lebih lanjut memudahkan manajemen konfigurasi perangkat lunak Anda saat Anda menyebarkannya.

Menentukan RPM mana yang "milikku"?

Anda dapat membangun RPM Anda menggunakan beberapa informasi yang diketahui yang kemudian dapat disepakati sebelum melakukan pembangunan. Saya sering membuat paket pada sistem yang dimiliki oleh domain saya sehingga sepele untuk menemukan RPM hanya dengan mencari melalui semua RPM yang dibangun pada host X.mydom.com.

Contoh

$ rpm -qi httpd
Name        : httpd
Version     : 2.4.7
Release     : 1.fc19
Architecture: x86_64
Install Date: Mon 17 Feb 2014 01:53:15 AM EST
Group       : System Environment/Daemons
Size        : 3865725
License     : ASL 2.0
Signature   : RSA/SHA256, Mon 27 Jan 2014 11:00:08 AM EST, Key ID 07477e65fb4b18e6
Source RPM  : httpd-2.4.7-1.fc19.src.rpm
Build Date  : Mon 27 Jan 2014 08:39:13 AM EST
Build Host  : buildvm-20.phx2.fedoraproject.org
Relocations : (not relocatable)
Packager    : Fedora Project
Vendor      : Fedora Project
URL         : http://httpd.apache.org/
Summary     : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.

Ini akan menjadi Build Hostgaris dalam RPM.

Penggunaan / usr / bin / perusahaan?

Saya mungkin akan mencegah penggunaan lokasi seperti ini. Terutama karena ini membutuhkan semua sistem Anda untuk $PATHditambah mereka untuk memasukkannya dan tidak standar. Menyesuaikan berbagai hal selalu menjadi "hak lintas" untuk setiap admin Unann wannabee, tapi saya selalu mengecilkannya kecuali benar-benar diperlukan.

Masalah terbesar dengan penyesuaian seperti ini adalah bahwa mereka menjadi beban dalam menjaga lingkungan Anda dan dalam membawa orang baru untuk mempercepat cara menggunakan lingkungan Anda.

Bisakah saya mendapatkan daftar file dari RPM?

Ya, Anda dapat mencapai ini tetapi akan membutuhkan 2 panggilan ke RPM. Yang pertama akan membangun daftar paket yang dibangun di host X.mydom.com. Setelah mendapatkan daftar ini, Anda harus memanggil kembali permintaan RPM untuk file yang dimiliki oleh masing-masing paket ini. Anda dapat mencapai ini menggunakan liner satu ini:

$ rpm -ql $(rpm -qa --queryformat "%-30{NAME}%{BUILDHOST}\n" | \
    grep X.mydom.com | awk '{print $1}') | head -10
/etc/pam.d/run_init
/etc/sestatus.conf
/usr/bin/secon
/usr/bin/semodule_deps
/usr/bin/semodule_expand
/usr/bin/semodule_link
/usr/bin/semodule_package
/usr/bin/semodule_unpackage
/usr/sbin/fixfiles
/usr/sbin/genhomedircon
slm
sumber
dan bagaimana cara mendapatkan daftar semua binari yang diinstal oleh semua rpms yang saya instal? Untungnya kami sepakat untuk memasukkan nama perusahaan kami di nama rpm; jadi sesuatu seperti "rpm -qa | grep company" daftar rpms saya diinstal
Chris Maes
@ChrisMaes - lihat pembaruan. Saya menggunakan build host untuk menentukan pkg mana yang "milikku".
slm
terima kasih atas pembaruannya; jika Anda bisa menambahkan perintah untuk menemukan semua binari yang dimiliki oleh rpms saya (yang memiliki "perusahaan" dalam nama mereka) yang akan fantastis
Chris Maes
@ChrisMaes - lihat pembaruan, LMK jika Anda memerlukan panduan lebih lanjut.
slm
jawaban tertulis yang sangat bagus; lengkap dan diformat dengan baik. Terima kasih banyak!
Chris Maes
4

Saran yang jelas adalah memberi nama binari atau paket Anda dengan cara khusus. Jadi misalnya Anda bisa awalan dengan cm-, sesuai inisial Anda seperti yang diberikan dalam posting ini. Jika Anda menginstal rpms, mereka harus masuk /usr/bin(jika itu adalah executable tingkat pengguna), sesuai FHS. Mereka seharusnya tidak masuk ke /usr/local/binmisalnya. Itu hanya untuk pemasangan lokal.

Sebagai catatan, saya tidak menemukan ide menempatkan binari di direktori khusus dan menghubungkannya dengan yang menarik, meskipun saya kira hal-hal seperti itu kadang-kadang dilakukan. Ingat juga bahwa jika Anda perlu mencari tahu binari mana yang termasuk dalam paket mana, Anda bisa menanyakan sistem pengemasannya.

Faheem Mitha
sumber
3

Binari bukan bagian dari sistem atau distribusi biasanya masuk

/usr/local/bin

direktori biasanya dalam standar $PATHsehingga binari Anda akan ditemukan.

Matteo
sumber
biasanya / usr / local / bin adalah untuk binari yang hanya ada "secara lokal" pada mesin itu; bukan untuk binari yang akan saya distribusikan pada mesin lain menggunakan rpm ...?
Chris Maes
2
Di Linux, /usr/local/binuntuk executable yang diinstal secara manual. Dapat dieksekusi dikelola oleh manajer paket masuk ke /usr/bin.
Gilles 'SO- berhenti menjadi jahat'
@Gilles, interpretasi pertama saya atas pertanyaan ini adalah menginstal pada satu mesin yang membuat biner tersedia untuk setiap pengguna (tidak menginstal dalam $ HOME). Sekarang saya melihat bahwa itu bukan apa yang saya mengerti.
Matteo