RPMを作成するときに/ binと/ sbinをどのように分離しますか?

RPMを作成するときに/ binと/ sbinをどのように分離しますか?

redis RPMを使用しようとしています。フッ素PM

次のコマンドを実行すると、すべてのバイナリが/tmp/installdir/usr/local/binにインストールされます。

cd /tmp/redis2-8
PREFIX=/tmp/installdir/usr/local/ make 
PREFIX=/tmp/installdir/usr/local/ make install 

redis-serverバイナリがインストールされ、/tmp/installdir/usr/local/sbin他のすべて(など)がインストールされるようにRedisをどのようにコンパイルしますか?redis-cli, redis-benchmark/tmp/installdir/usr/local/bin

答え1

fpm開発者言うことがあります。ディストリビューションガイドのトピック:

私は言葉のないパッケージを作る簡単な方法が欲しい。私のインフラストラクチャでは、DebianポリシーとRedHatパッケージングガイドラインには興味がありません。私はチーム固有のスタイル文化に興味があり、仕事を完了することに非常に興味があります。

(DebianまたはRedHatポリシーに準拠したパッケージを作成するためにFPMを使用できないという意味ではありません。必要に応じて可能でなければなりません。)

したがって、あなたが観察した基本的な動作(すべてが配置されている場所)は、/usr/local/binこのグループが好むようです。彼らは一人ではありません。 Fedoraなどではありません。無料デスクトップウェブサイトマージに同意し、/bin/sbin入力します/usr/bin。しかし、現在のドラフトFSHはまだsbindディレクトリを使用していますが、それに反対する動きがあるようです。

とにかくフェドラ人はとても良い主張これには以下がsbin含まれます(強調)。

a) sbin と bin を分離するには、
アップストリーム開発者の精神的な力が必要です。

簡単な事実は、これらのディレクトリ間でバイナリを移動するのは本当に難しいということです。したがって、理論的には、開発者はバイナリが最初に導入されたときにバイナリがあるかどうかを知る必要があります。一度許可されていないユーザーとして呼び出すのは合理的です(この場合、バイナリは/ sbinではなく/ binに属するため)。歴史によると、開発者は自分の内容を間違ったディレクトリに入れることがよくあります。 /sbin/arp、/sbin/ifconfig、/usr/sbin/httpd をご覧ください。パスを変更すると、ハードコードされたすべてのスクリプトが中断されることを意味するので、問題を解決するための合理的な方法はありません。実際には、パフォーマンス上の理由からスクリプトからパスをハードコーディングすることをお勧めします。最終的な結果は、多くのアップストリーム開発者がsbinを考慮せずに無条件に自分のものをbinに入れることで、sbinの目的を完全に崩すことですsystemdは個々のバイナリをsbinに貼り付けません。これは、そのツールのどれもroot以外のユーザーにとって役に立つとは思わないからです。 systemd は下位レベルであり、システムによって異なります。

b)/ sbinの元の定義は完全に古いです(つまり、sbinの「s」は元の「静的」バイナリを表します)。

c) /bin および /sbin はセキュリティとは関係がなく、まったく関係がありません。そうすることは
あいまいな状況では安全であるだけでなく、非常に愚かなことでもあります。

ディ)/ sbinから/ binを分離することは、純粋に$ PATHにのみ関連しています。これは、純粋にシェルユーザーがその中にあるツールに簡単にアクセスできるようにするためです。ここでハイライトは「快適さ」です。これは、ユーザーが特定のツールにアクセスするのをより困難にする方法ではありません。つまり、ユーザーが混乱しないように特定のツールを隠すことが目的であれば、これを行うためのより良い場所があります。ドキュメントでは、そのツールを別のセクションに文書化できます。私は、ユーザーがシェルでTABキーを押したときに表示される内容について、ゲームを介してユーザーを教育する努力に意味がないと思います。 [...]

これらの点は以前に言及されていますが、/sbin同じことが当てはまるようです/usr/local/sbin。したがって、@slmが実際に必要な作業を実行する方法であると確信する方法を提供しましたが、これを無視して必要に応じてsbin行うfpmことをお勧めします。

答え2

さまざまなファイルがインストールされる場所を制御するには、.specRPMファイルで手動でこれを行う必要があります。

はい

.spec以下は、数年前に作成したブログシリーズの一部として作成したJBOSS RPMファイルの一部です。この記事シリーズのタイトルは次のとおりです。CentOS RPMチュートリアルパート3 - 独自のJBoss RPMを構築

...
%prep
%setup -q

%build

%install
rm -fr $RPM_BUILD_ROOT
mkdir -m 0755 -p $RPM_BUILD_ROOT/opt/%{name}/%{name}-%{version}
cp -R * $RPM_BUILD_ROOT/opt/%{name}/%{name}-%{version}

%clean
rm -rf $RPM_BUILD_ROOT

%post
echo " "
echo "install of jboss complete!"

%files
%defattr(-,root,root)
/opt/%{name}/*
...

上記のセクションでは、ソフトウェアを「インストール」する場所を%install指定する必要があります。$RPM_BUILD_ROOTここでそれぞれとsbinディレクトリbinを作成できます。

%filesこのRPMで「インストールされた」ファイルを分類するときは、そのセクションにその場所を反映する必要があります。$HOME/.rpmmacros常に同じマクロを生成する場合は、ファイルに bulid マクロを生成して単純化できます。

%_topdirたとえば、次のようなものを作成するために使用するマクロがあります。

%_topdir %(echo $HOME)/rpmbuild

その後、これらのマクロをファイルで使用できます.spec

関連情報