rpmbuildでモジュールサイズが小さく原因

スポンサーリンク

RPMを作成するときspecファイルに定義を書いて、rpmbuildでRPMを生成すると思いますが、生成したRPMをいざインストールしてみると、モジュールのサイズが変わってしまっていることがあります。

昔からspecファイルに次のおまじないコマンドを定義することで、回避していました。

%define __spec_install_post /usr/lib/rpm/brp-compress || :

ただこれが何を示しているのかがわからなかったので、調べてみました。

__spec_install_postの意味は?

__spec_install_postは、rpmコマンドの環境変数です。/usr/lib/rpm/macrosに定義があります。

%__spec_install_post\
%{?__debug_package:%{__debug_install_post}}\
%{__arch_install_post}\
%{__os_install_post}\
%{nil}

実際に何が入っているかというと、

$ rpm --eval %__spec_install_post
    /usr/lib/rpm/brp-compress
    /usr/lib/rpm/brp-strip /usr/bin/strip
    /usr/lib/rpm/brp-strip-static-archive /usr/bin/strip
    /usr/lib/rpm/brp-strip-comment-note /usr/bin/strip /usr/bin/objdumpCode language: JavaScript (javascript)

となっていて、strip系のコマンドが呼ばれるようになっています。環境変数名からもわかるように、SPECファイルのinstall処理後に実行される処理と思われます。

なので、冒頭のおまじないコマンドは、strip系のコマンドを実行せずに、brp-compressの圧縮処理だけを実行するという意味だったのです。

|| : の意味は?

これはbashの演算子です。|| は、前の処理の成功/失敗に限らず、後ろの処理を実行するという演算子です。

では :(コロン)は何なのか。

コロンは何もしないという命令になります。例えば下記コマンドを実行すると空ファイルができます。

$ : > tmp.log

そして、この命令は絶対に成功します。

つまりおまじないの意味は?

おまじないの意味は、

rpmbuild標準のinstall処理後の処理を圧縮処理だけに書き換え、その後コロンを実行することで必ず成功するようにしている。

ということでした。(圧縮が成功するなら||:はなくてもよいということですかね。)

圧縮自体が必要ないならば、以下のように設定しているサイトもありました。(動作確認はしてませんので、あしからず)

%define __spec_install_post %{nil}

参考リンク

とほほのBash入門 - とほほのWWW入門
rpmbuildでバイナリファイルが書き換えられてしまうのを防ぐ - Qiita
rpmbuildでバイナリファイルを埋め込むとstripされて元ファイルと異なる。 元ファイルのままで埋め込みたいときはspecファイルに以下の一行を 入れておけば良い。 %define __spec_install_post /u...
Tclkit and RPM
Tclers wiki
Samhain: samhain.spec | Fossies

コメント

タイトルとURLをコピーしました