60以上のバイナリとスクリプトを含むパッケージを作成しました。実行ファイルはどこにインストールする必要がありますか?

60以上のバイナリとスクリプトを含むパッケージを作成しました。実行ファイルはどこにインストールする必要がありますか?

私は何十ものバイナリとスクリプトを構築するバイオインフォマティクスツールキット用のパッケージを作成しています。現在、パッケージマネージャが使用するプレフィックスは何でも "bin"ディレクトリにインストールされます。パッケージリポジトリをメンテナンスする人にこのプログラムを実行させたところ、他のパッケージとファイル名が衝突する可能性がたくさんあり、眉をひくようにしました。

ほとんどのユーザーは約9個の実行可能ファイルのみを使用します。残りはファイル形式コンバータなどのユーティリティです。パッケージリポジトリ管理者は、libexecの下のサブディレクトリに別の実行可能ファイルをインストールすることをお勧めします。これは簡単ですが、libexecの標準に準拠していないことが少し心配です。ファイルシステム階層標準、実行ファイルがあるためはいエンドユーザーが直接実行するように設計されています。

頻繁に使用されない数十の実行可能ファイルをインストールするためのより良いパッケージターゲットはありますか?

答え1

libexecたとえば、RedHatのpostfix MTAは良いです/usr/libexec/postfixmailmanRedHatにパッケージ化されたもう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)。gitbit

#!/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-6gcc-7

関連情報