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
さまざまなファイルがインストールされる場所を制御するには、.spec
RPMファイルで手動でこれを行う必要があります。
はい
.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
。