気ままにインフラエンジニア

渋谷で働くインフラエンジニアの備忘録。 TwitterID: @nakashii_

RPMビルド時のデフォルトファイル名を変更する

自前でrpmをビルドした場合、出来上がるrpmのファイル名はspecファイルによって決まる。
specに指定がない場合、rpmbuildのデフォルトのパラメータが利用され、大体の場合
xxxxx-1.0.1-1.x86_64.rpm
のようなファイルが出来上がる。いくつかのOSが混在している環境でrpmをビルドすると、ファイル名が重複してしまいややこしい。
specを編集したりする方法もあるが、specファイル入のアーカイブからspecだけ取り出して編集するのは面倒であるし、できたファイルをいちいちrenameもしたくないので、rpmbuildの設定ファイルを変更する。

/usr/lib/rpm/macrosを編集し、

%_build_name_fmt        %%{ARCH}/%%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm

から

%_build_name_fmt        %%{ARCH}/%%{NAME}-%%{VERSION}-%%{RELEASE}%{dist}.%%{ARCH}.rpm

にするだけ。


以下仕組み。

rpmbuildの設定は以下のコマンドで参照する。

rpmbuild --showrc |less

rpmbuildの参照する設定ファイルは大体の場合以下のファイル。

/usr/lib/rpm/macros
/usr/lib/rpm/redhat/macros
/etc/rpm/macros.*
~/.rpmmacros

ファイル名に関連するのは_rpmfilenameで、さらに_build_name_fmtを参照しているようだ。
とりあえずCentOSの6と5を使い分けられればよいので…と思っていたら、いいパラメータがあったので使わせてもらう。

-14: dist       .el6

el6.x86_64とかよく見る。
今回はビルドサーバーで作業する全員に反映したいので、~/.rpmmacrosでなく/usr/lib/rpm/macrosに設定した。これで、
xxxxx-1.0.1-1.el6.x86_64.rpm
というファイル名で出来上がってくることになる。

CentOS6.xでは、/etc/rpm/macros.distに上記のdistが定義されていたが、CentOS5.xではshowrcを見た感じ同じようなファイルはなかったので作成した。

cat <<'EOF' >/etc/rpm/macros.dist
# dist macros.
%rhel 5
%centos 5
%centos_ver 5
%dist .el5
%el5 1
EOF

rpmbuild --showrc |grep dist
-14: dist       .el5

反映されている。あとは、CentOS6と同じように%distを%_build_name_fmtに入れ込めばOK。


参考
Rpmbuild - setting name of created .rpm - Stack Overflow