試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

一般ユーザでrpmbuildを行うための準備とエイリアスメモ

  1. 一般ユーザでRPMパッケージを作成するための設定
  2. rpmbuildコマンドのオプション指定をエイリアスで分かりやすく

一般ユーザでRPMパッケージを作成するための設定

通常、RPMパッケージをビルドする際には、

[/usr/src/rpm] -+- [SPECS]   .specファイル
                +- [SOURCES] ソースやパッチ
                +- [BUILD]   作業ディレクトリ
                +- [SRPMS]   ソースRPM
                +- [RPMS]    パッケージRPM

というディレクトリツリーを使用するのだが、これらのディレクトリはいずれも(手動でアクセス権を変更しない限り)管理者権限がないと書き込めない。しかし、RPMパッケージのビルド自体にはその権限は必要ないため、一般ユーザの権限でビルドを行い、これらのディレクトリに相当する別の場所に書き込めるようになっていると便利。
調べたところ、[ホームディレクトリ]/.rpmmacrosというファイルを作成し、幾つかのマクロを指定することで、これらのディレクトリの場所を変更できることが分かった。
下は、ディレクト[ホームディレクトリ]/rpm/以下を使用する場合の例。
ファイル名: ~/.rpmmacros

%_topdir	/home/[ユーザ名]/rpm
%_specdir	%{_topdir}/SPECS
%_sourcedir	%{_topdir}/SOURCES
%_builddir	%{_topdir}/BUILD
%_srcrpmdir	%{_topdir}/SRPMS
%_rpmdir	%{_topdir}/RPMS

「%_topdir」に「${HOME}」を書くとうまく展開されなかったため、ホームディレクトリの場所は絶対パスで記述した。

rpmbuildコマンドのオプション指定をエイリアスで分かりやすく

RPMパッケージの作成や管理のコマンドのオプションは理解しにくく、好きではない。*1そこでCLIシェルのエイリアスに頼ることにする。オプションを覚えるのはナンセンス。
ここではrpmbuildに関するエイリアス定義を貼り付ける。
ファイル名: ~/.bashrc, ${ZDOTDIR}/.zshrc

alias rpmbuild-spec2rpmsrpm='rpmbuild -ba --clean'
alias rpmbuild-spec2rpm='rpmbuild -bb --clean'
alias rpmbuild-srcunpack='rpmbuild -bp'
alias rpmbuild-srccompile='rpmbuild -bc'
alias rpmbuild-srcinstall='rpmbuild -bi'
alias rpmbuild-list_check='rpmbuild -bl'
alias rpmbuild-spec2srpm='rpmbuild -bs'
alias rpmbuild-srpm2rpm='rpmbuild --rebuild'
alias rpmbuild-rmsrc='rpmbuild --rmsource'
alias rpmbuild-rmspec='rpmbuild --rmspec'

「rpmbuild-srpm2rpm」は.src.rpmファイルを、他は.specファイルを引数にとる。
好みに応じて--rmsource*2--rmspec*3--sign*4などを後ろに付ける。これらを後ろに付けたエイリアス(例:rpmbuild-spec2rpmsrpm-rmsrcrmspec-gpg)を同じ要領で作るのもよい。
「rpmbuild-src*」の3つはGentooの処理名に合わせている。「ebuildの作成メモ(後半)」を参照。
「rpmbuild-srcunpack」と「rpmbuild-srccompile」を実行すると[ホームディレクトリ]/rpm/BUILD/の下に、「rpmbuild-srcinstall」を実行すると.specファイル内の「BuildRoot」のディレクトリに、それぞれの途中の状態が得られる。
(2009/1/6)rpmbuild-spec2rpmsrpm-586は-Dオプションが利かない?が、代わりに--define=オプションで定義したものは有効になっている。
(2009/1/6)関連する以下のエイリアス(一部関数)を追加。多くはMandriva用で、x86_64でのみ意味があるものも含まれる。

if [[ -f /etc/mandriva-release ]]; then
  alias rpm-install='urpmi'
  alias rpm-installsrc='/usr/sbin/urpmi --install-src'
  alias rpm-uninstall='urpme'
  alias rpm-search='urpmq'
  alias rpm-qlist='rpm -ql'
  alias rpm-qfile='urpmf'
  alias rpm-qdepend='rpm -qR'

  alias rpmbuild-spec2rpmsrpm-586='linux32 rpmbuild --target i586 -ba --clean'
  alias rpmbuild-spec2rpm-586='linux32 rpmbuild --target i586 -bb --clean'
  alias rpmbuild-srpm2rpm-586='linux32 rpmbuild --target i586 --rebuild'
else
  alias rpm-install='rpm -Uvh'
  alias rpm-installsrc='rpm -Uvh'
  alias rpm-uninstall='rpm -ev'
  alias rpm-qlist='rpm -ql'
  alias rpm-qfile='rpm -qf'
  alias rpm-qdepend='rpm -qR'
fi
rpmbuild-rmsrcrm()
{
  rpmbuild-rmsrc ${1}
  rm ${1} -f
}

*1:いちいちマニュアルでオプションを確認しても、似たような形が多くて頭に入りにくい

*2:ビルド後にソースファイル(群)を削除

*3:ビルド後に.specファイルを削除

*4:GPG署名を入れる