web-dev-qa-db-ja.com

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

fpm を使用してredisRPMを作成しようとしています

次のコマンドを実行すると、すべてのバイナリが/ 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-cli, redis-benchmark ect ..)が/tmp/installdir/usr/local/binにインストールされるように、redisをコンパイルするにはどうすればよいですか?

4
spuder

fpm dev これは言うまでもありません ディストリビューション固有のガイドラインについて:

私はすべてのでたらめなしでパッケージを作成する簡単な方法が欲しいです。私自身のインフラストラクチャでは、DebianポリシーとRedHatパッケージングガイドラインには関心がありません。グループ独自のスタイル文化に関心があり、仕事を成し遂げることに非常に強い関心があります。

(これは、DebianまたはRedHatポリシーに従うFPMを使用してパッケージを作成できないということではありません。それが必要な場合は、作成でき、作成する必要があります)

したがって、すべてが/usr/local/binに配置される、観察しているデフォルトの動作は、グループの好みのようです。そして、彼らは一人ではありません。 Fedora&coだけでなく freedesktop.org/bin/sbin/usr/binにマージすることに同意します。 FSHの 現在のドラフト はまだsbindディレクトリを使用していますが、それらに対して構築されている動きがあるようです。

いずれにせよ、Fedoraの人々はいくつかの 非常に良い議論sbinに対して(私の強調)を含みます:

a)sbinとbinの間の分割には、からの超能力が必要です。
上流の開発者:

単純な事実は、これらのdir間でバイナリを移動するのは非常に難しいため、理論的には、開発者は最初にバイナリを導入するときに、everが意味をなすかどうかを知る必要があります。非特権ユーザーとして呼び出す(その場合、バイナリは/ sbinではなく/ binに属するため)。 歴史は、開発者が自分のものを間違ったディレクトリに配置することが多いことを示しています。/sbin/arp、/sbin/ifconfig、/usr/sbin/httpdを参照してください。そうすると、修正するスマートな方法がありません。パスを変更すると、ハードコードされたすべてのスクリプトが壊れることになるためです。また、スクリプト内のパスのハードコーディングは、パフォーマンス上の理由から実際に推奨するものです。正味の効果は、多くのアップストリーム開発者が無条件に自分のものをbinに配置し、sbinの目的を完全に損なうsbinをまったく考慮しないことです(つまり、systemdではsbinに単一のバイナリを貼り付けないそのツールのいずれについても、root以外のユーザーには決して役に立たないという確信はありません。systemdは低レベルでシステム固有です)。

b)/ sbinの元の定義は完全に廃止されました(つまり、sbinの「s」は元々「静的」バイナリを表していました)

c)/ binと/ sbinはセキュリティに関するものではなく、これまでにないものです。これを行う
隠すことによるセキュリティであり、かなり愚かでもあります。

d)/ bin off/sbinの分割は、純粋に$ PATHにのみ関連し、$ PATHは純粋に、シェルユーザーがその中のツールに簡単にアクセスできるようにするためのものにすぎません。ここでは「使いやすさ」に重点を置いています。ユーザーが一部のツールにアクセスしにくくする方法ではありません。つまり、ユーザーを混乱させないために特定のツールをユーザーから非表示にすることが目的の場合は、そのためのより良い場所があります。 :ドキュメントはそれらを別のセクションかそこらにドキュメント化することができます。シェルでTABを押したときに見えるものでゲームをプレイしてユーザーを教育しようとしても、まったく意味がないと思います。 [...]

これらの点は/sbinについて述べられていますが、/usr/local/sbinにも同様に当てはまるようです。したがって、@ slmは、実際に求めていることを実行する方法であると私が確信していることを提供しますが、sbinを無視して、fpmに実行させる方がよい場合があります。

3
terdon

さまざまなファイルがインストールされる場所を制御したい場合は、RPM .specファイル内で直接手動でこれを行う責任を負う必要があります。

これは、数年前に書いたブログシリーズで作成したJBOSS RPM .specファイルの抜粋です。このシリーズの記事のタイトルは次のとおりです。 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ディレクトリを作成できます。

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

たとえば、次のように、ものを構築するときに使用する%_topdirマクロがあります。

%_topdir %(echo $HOME)/rpmbuild

これらのマクロは、.specファイルで利用できます。

3
slm