
私は何十ものバイナリとスクリプトを構築するバイオインフォマティクスツールキット用のパッケージを作成しています。現在、パッケージマネージャが使用するプレフィックスは何でも "bin"ディレクトリにインストールされます。パッケージリポジトリをメンテナンスする人にこのプログラムを実行させたところ、他のパッケージとファイル名が衝突する可能性がたくさんあり、眉をひくようにしました。
ほとんどのユーザーは約9個の実行可能ファイルのみを使用します。残りはファイル形式コンバータなどのユーティリティです。パッケージリポジトリ管理者は、libexecの下のサブディレクトリに別の実行可能ファイルをインストールすることをお勧めします。これは簡単ですが、libexecの標準に準拠していないことが少し心配です。ファイルシステム階層標準、実行ファイルがあるためはいエンドユーザーが直接実行するように設計されています。
頻繁に使用されない数十の実行可能ファイルをインストールするためのより良いパッケージターゲットはありますか?
答え1
libexec
たとえば、RedHatのpostfix MTAは良いです/usr/libexec/postfix
。mailman
RedHatにパッケージ化されたもう1つのオプション/usr/lib/mailman/bin
は、コマンドラインユーティリティ(newlist
などlist_lists
)です。
ただし、ユーティリティを含める必要がある場合は、そのPATH
ユーティリティを含めるようにシェル設定を調整する必要があります(すべてをディレクトリにダンプして使用するbin
か、ディレクトリにないユーティリティについて)。問題について電話する必要がある場合は、PATH
完全に資格を与えます...)PATH
答え2
libexec
お使いのシステムでは/usr/libexec/yourpackage
大丈夫です。説明した渡すトリガー。/usr/lib/yourpackage
どこでも働きます。
これはアクセスの問題を解決しません。競合の問題が再度発生するため、パスに新しいディレクトリを追加することは適切ではない可能性があります。 1つの考えられる解決策は、すべてのサブコマンド/usr/bin
と同じスタイルでランチャースクリプトを使用することです(Bioinformatics Toolkit)。git
bit
#!/bin/sh
prefix=/usr/lib/yourpackage/bin
if [ ! -x "${prefix}/$1" ]; then
echo Unknown bit subcommand "$1"
exit 1
fi
shift
exec "${prefix}/$1" "$@"
ユーザーが指を再訓練すると、パッケージツールに合理的にアクセスできます。
答え3
/usr/libexec/
(またはその中の一部のサブディレクトリや他の場所、たとえば下)は、/usr/lib
ユーザーディレクトリにある必要があるという意味ではなく、すべきではありません。$PATH
、と同じくらい短いかもしれません/bin:/usr/bin
。実行可能ファイルはユーザーが直接実行しないでください。他の(ユーザーが起動した)プログラム(シェルではない)によってのみ実行する必要があります。たとえば、g++
起動/usr/lib/gcc/x86_64-linux-gnu/7/cc1plus
(ユーザーはcc1plus
プログラムを直接実行しないでください)です。
パッケージに複数の実行可能ファイルをインストールさせることができます/usr/bin/
(場所:$PATH
)、ディレクトリがかなり大きいと予想されます。そこには4400以上のファイルがあり、1つのcoreutils
パッケージで100以上の実行可能ファイルがインストールされています。
パッケージユーザーは、常に次のような単一のドライバを使用することを決定できます。子。
パッケージ実行可能ファイルの共通プレフィックスを共有できます。たとえば、すべてのXFCE関連バイナリはで始まり、xfce
すべてのLXDEバイナリはlx
。実際、同様の規則に従うことをお勧めします。
あるいは、特定の実行可能ファイルをインストールしないことが妥当な場合は、パッケージを複数のパッケージに分割することもできます。
複数のバージョンのスイートが共存できるようにパッケージを設計することもできます(例:I haveやgcc-6
)gcc-7
。