一般ユーザで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 }