Vine Linux Magazine
vbuilder で RPM パッケージングをはじめよう

筆者: munepi
発行日: 2010,08,14

vbuilder は公開してからかれこれ 1 年になりました。 vbuilder は RPM パッケージングツールとして、 もはや欠かせないツールの 1 つとなりつつあります。
これまで vbuilder をご利用下さった開発者の皆様から たくさんのフィードバックを得ました。 vbuilder への要望やコメントがあるごとに、 どんどん機能を追加したり、修正、改良をしているうちに、 vbuilder は公開当初から比べると、ずいぶんと多機能になりました。
これまで vbuilder を使ったことのない方でも、 vbuilder を使いこなして頂けるように、 基本的な使い方をまとめたいと思います。

vbuilder とは?

vbuilder は、(chroot という)子環境に Vine Linux の最小環境から構築し、 RPM パッケージの依存関係などの解決をしてからパッケージのビルドするツールです。

vbuilder に関する詳細は、以下の URL に記載されています。
http://trac.vinelinux.org/wiki/VineBootstrap

vbuilder は vbootstrap パッケージに格納されています。

$ sudo apt -get install vbootstrap

vbuilder の基本操作

基本的な流れは以下の通りです。

$ sudo vbuilder clean  (過去に構築した子環境を削除)
$ sudo vbuilder build  (子環境に最小環境を構築)
$ sudo vbuilder build-rpm hoge-1.0-1vl5.src.rpm

vbuilder にこれらのアクションを一度に渡すこともできます。 以下のようにすれば、順次 clean → build → build-rpm のように実行します。

$ sudo vbuilder clean build build-rpm hoge-1.0-1vl5.src.rpm
この場合、build を省略できます。
$ sudo vbuilder clean build-rpm hoge-1.0-1vl5.src.rpm

子環境で生成された hoge-1.0-1vl5.{i386,src}.rpm は、 vbuilder を実行したユーザの $HOME/rpm/vbuilder 以下の場所に、 hoge-1.0-1vl5.src.rpm と同じ所有者、同じグループとしてコピーされます。

/home/foo/rpm/vbuilder/5.1/
/home/foo/rpm/vbuilder/5.1/RPMS
/home/foo/rpm/vbuilder/5.1/RPMS/i386/hoge-1.0-1vl5.i386.rpm
/home/foo/rpm/vbuilder/5.1/RPMS/ppc
/home/foo/rpm/vbuilder/5.1/RPMS/noarch
/home/foo/rpm/vbuilder/5.1/RPMS/x86_64
/home/foo/rpm/vbuilder/5.1/SRPMS/hoge-1.0-1vl5.src.rpm

なお、$ sudo vbuilder --version 5.1 clean build を実行すると、 約 600MB 程度の容量を消費します。 vbuilder を実行する際には、ハードディスクの容量にご注意下さい。

vbuilder の引数補完

vbuilder にはたくさんのオプションとアクションがあります。 入力する手間を軽減するために、シェル補完を利用します。

bash

${HOME}/.bashrc などに、以下の行を追加します。

. /etc/bash_completion.d/vbuilder

zsh

zsh-completion-vine パッケージをインストールします。

--unionfs オプションの利用

いくつもの RPM パッケージを vbuilder に投げてビルドするときに、 $ sudo vbuilder build により毎回ベース環境を構築するのが面倒になります。 unionfs と利用することで、一度構築した最小のベース環境に変更を加えずに、 その上に変更のみを被せることができます。

まず、最小のベース環境を構築します。

$ sudo vbuilder clean build

以後、unionfs でベース環境をカバーし、hoge-1.0-1vl5.src.rpm のビルドを行います。

$ sudo vbuilder --unionfs build-rpm hoge-1.0-1vl5.src.rpm

--unionfs を保ったまま clean を実行すると、最小のベース環境は消えません。

$ sudo vbuilder --unionfs clean

引き続き、foo-1.0-1vl5.src.rpm をすぐさまビルドできます。 $ sudo vbuilder --unionfs build-rpm foo-1.0-1vl5.src.rpm

--show-info オプションの活用

--show-info オプションは、 ターゲットにしている vbuilder で構築した環境に対して、 実行した詳細な手順、設定を出力します。

$ sudo vbuilder --show-info
======================================================================
VBUILDER REPORT
DATE:		Thu Aug 12 16:30:42 JST 2010
HOSTNAME:	seed64.local
OS:		Vine Linux 6.0 (+VineSeed) (Haut Brion)
%_arch:		x86_64

--version: VineSeed
--arch: x86_64
--category: main,plus,nonfree



--bootstrap-dir: /dev/shm/vbootstrap
--cache-dir: /var/local/vbootstrap/cache
--built-rpms-dir: /home/munepi/rpm/vbuilder
======================================================================

[/etc/vbootstrap/vbuilder.conf]
## 
## vbuilder configuration file
## 
## This configuration is read at the begin of vbuilder. 

## Default version for chroot
## default: DEFAULT_VERSION=VineSeed
DEFAULT_VERSION=VineSeed

## Default categories for chroot
## default: CATEGORIES=main,plus,nonfree
CATEGORIES=main,plus,nonfree

## The top dirctory for vbootstrap
## default: VBOOTSTRAP_DIR=/var/local/vbootstrap
VBOOTSTRAP_DIR=/dev/shm/vbootstrap

## Default directory to cache rpms of /var/cache/apt/archives in chroot
## default: CACHE_DIR=/var/local/vbootstrap/cache
CACHE_DIR=/var/local/vbootstrap/cache

## Default directory to store built rpms
## default: BUILT_RPMS_DIR=${HOME}/rpm/vbuilder
BUILT_RPMS_DIR=${HOME}/rpm/vbuilder

## end of file

[History]
build
build-rpm /home/munepi/rpm/SRPM/hoge-1.0-1vl5.src.rpm

その他のオプション

vbuilder のその他のオプションをいくつか紹介します。

--version
子環境の Vine Linux のバージョンを指定します。 デフォルトは親環境と同じバージョンです。 例えば、VineSeed 上で、5.1 子環境を構築したいときに、 --version 5.1 と指定します。
--arch
子環境のアーキテクチャを指定します。 デフォルトは親環境と同一アーキテクチャです。 例えば、x86_64 上で子環境のアーキテクチャを i386 にしたいときに、 --arch i386 と指定します。
--category
ベース環境内の apt リポジトリのカテゴリを指定します。 デフォルトは、main,plus,nonfree です。 例えば、main カテゴリのみのビルド依存であるかどうかをチェックしたいときに、 --category main と指定します。
--target
子環境内でビルドする rpmbuild --target のターゲットを指定します。
--rpmbuild-with
子環境内でビルドするときの rpmbuild --with を指定します。 例えば、spec ファイルに記述した %bcond_with などを vbuilder から扱えます。
--sign
$ sudo vbuilder build-rpm ... でビルドした rpm を SUDO_USER により鍵署名をします。
--no-install
build-rpm によりビルドした rpm は、通常 chroot 内に install もします。 このオプションを指定すると、ビルドされた rpm を chroot 内に install しません。 例えば、あるパッケージをマイナーバージョンアップさせたときに、 以前のバージョンとの ldd などの差分を取るときに便利なオプションです。