バイナリをどこに配置して、常にパス内にあり、簡単に見つけられるようにする


10

自分で簡単にインストールしたいバイナリやスクリプトなどをいくつか作成しています(自分のrpmを使用)。誰でもアクセスできるようにしたいので、私の直感は、それらを/ usr / binに置くことです。

  • PATHを変更する必要はありません

しかしながら; 私の実行ファイルは他のすべてのプールから消えます。そこに置いたすべての実行可能ファイルを簡単な方法で見つけるにはどうすればよいですか。私は考えていました:

  • / usr / bin内のサブディレクトリ(これができないことはわかっています。自分の考えを説明するためだけです)
  • 別のディレクトリ(/ opt / myself / bin)と各実行可能ファイルを/ usr / binにリンク(多くの作業)
  • 別のディレクトリ(/ opt / myself / bin)と/ usr / binへのディレクトリのリンク(これは可能ですか?)

これを行うための「Linuxに最も準拠した最良の方法」は何でしょうか?

編集:私たちは会社でこれについて議論し、この次善のオプションを思いつきました:/ usr / bin / companyにバイナリを置き、/ usr / binからのシンボリックリンクを付けます。私はこのソリューションに興奮していません(ディスカッションが進行中)

回答:


7

バイナリを独自のRPMにバンドルする場合、それらが何であり、どこにインストールされているかのリストを取得することは簡単です。

$ 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

実行可能ファイルを/usr/binまたはに入れ/usr/local/bin、独自のRPMをローリングすることをお勧めします。これを行うのは非常に簡単です。RPMを使用してソフトウェアの展開を管理することで、バンドルにバージョン番号のラベルを付けることができ、展開時にソフトウェアの構成管理がさらに容易になります。

「自分の」RPMを特定する方法

ビルドを行う前に合意できる既知の情報を使用してRPMをビルドできます。私は自分のドメインが所有するシステムでパッケージをビルドすることが多いので、ホストX.mydom.comでビルドされたすべてのRPMを検索するだけでRPMを見つけるのは簡単です。

$ 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.

これはBuild HostRPM内の行になります。

/ usr / bin / companyの使用?

このような場所の使用はお勧めしません。これは主に、すべてのシステムに$PATH拡張機能を組み込んで標準にする必要があるためです。すべてのワナビーUnix管理者にとって、物事のカスタマイズは常に「通過権」でしたが、絶対に必要な場合を除いて、私は常にそれを勧めません。

このようなカスタマイズの最大の問題は、環境を維持することと、新しい人々に環境の使用方法を理解してもらうことの両方に負担がかかることです。

RPMからファイルのリストを取得できますか?

はい、これを達成できますが、RPMを2回呼び出す必要があります。最初は、ホストX.mydom.comでビルドされたパッケージのリストを作成します。このリストを取得したら、これらの各パッケージが所有するファイルのRPMクエリを再度呼び出す必要があります。これは、次の1つのライナーを使用して実現できます。

$ 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

そして、私がインストールしたすべてのrpmによってインストールされたすべてのバイナリのリストを取得するにはどうすればよいですか?幸いにも、rpm名に会社名を入れることに同意しました。したがって、「rpm -qa | grep company」のように、インストールされている私のrpmがリストされます
Chris Maes

@ChrisMaes-更新を参照してください。私はビルドホストを使用して、どのパッケージが「自分のもの」かを判断します。
slm

更新していただきありがとうございます; コマンドを追加して、私のrpmが所有するすべてのバイナリ(名前に "company"が含まれている)を検索できるとしたら、すばらしいでしょう
Chris Maes

@ChrisMaes-詳細なガイダンスが必要な場合は、更新、LMKを参照してください。
slm

非常に良い書面による回答。完全かつ適切にフォーマットされています。どうもありがとう!
Chris Maes 14

4

明白な提案は、バイナリまたはパッケージに特別な方法で名前を付けることです。したがって、たとえばcm-、この投稿に記載されているイニシャルごとに、プレフィックスとしてを付けることができます。rpmをインストールする場合は/usr/bin、FHSごとに(ユーザーレベルの実行可能ファイルの場合)実行する必要があります。彼らは/usr/local/bin、例えば入るべきではありません。これはローカルインストール専用です。

記録としては、バイナリを特別なディレクトリに配置してリンクするという考えはまったく魅力的ではありませんが、そのようなことは時々行われると思います。また、どのバイナリがどのパッケージに属しているかを調べる必要がある場合は、パッケージングシステムにクエリを実行するだけでよいことにも注意してください。


3

システムまたはディストリビューションの一部ではないバイナリは通常、

/usr/local/bin

$PATHバイナリが見つかるように、ディレクトリは通常標準にあります。


通常、/ usr / local / binは、そのマシン上で「ローカル」にのみ存在するバイナリ用です。バイナリではなく、rpmを使用して他のマシンに配布します...?
Chris Maes 14

2
Linuxでは、/usr/local/bin手動でインストールされた実行可能ファイル用です。パッケージマネージャーによって管理される実行可能ファイルはに移動し/usr/binます。
ジル 'SO-邪悪なことをやめる'

@ギレス、私の質問の最初の解釈は、バイナリをすべてのユーザーが利用できるように単一のマシンにインストールすることでした($ HOMEにはインストールしません)。今、私はそれが本当に私が理解したものではなかったことがわかります。
Matteo、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.