wiki:VineBootstrap

Version 8 (modified by munepi, 15 years ago) (diff)

vbuilder の簡単な説明を追加。

vbootstrap - bootstrap a basic Vine Linux system

bootstrap

Vine Linux 上で Vine Linux のベースシステムを作成するためのスクリプト。

  • chroot 環境の構築や Xen の DomainU 構築など
  • まずは Vine Linux 上で作成できるように。 他のシステム上でも作成できるようにするのは将来。
  • 同様の仕組みをもつものとして plus に tiny-buildfarm があるが現状では 動作しない状態になっている。

開発の選択肢

選択肢としては以下のもの。

  1. tiny-buildfarm をメンテナンスする
  2. 独自スクリプト(vbootstrap?)を用意する
    1. ホストの apt を利用した簡便なシステムにする
    2. bootstrap 用の static な apt を用意してつかう
    3. apt に頼らないで bootstrapping できるようにする
  3.  rpmstrap を Vine Linux に対応させる
  4.  debootstrap ベースで改造する
  5.  rinse を調整

とりあえず、暫定的に 2.a. で vbootstrap-0.0.1 として用意する予定。

とりあえずのchroot環境作成手順

とりあえず、ホストと同じバージョンであれば、以下の手順で apt が使えるベースの chroot 環境はできる。 /dev などはほぼ空っぽなのでこのままではブートできるシステムにはならない。

INSTALLDIR=/path/to/root

# rpmdb の初期化
mkdir -p $INSTALLDIR/var/lib/rpm
rpm --initdb --root $INSTALLDIR

# apt データベースの更新
apt-get -o RPM::RootDir=$INSTALLDIR update

# 基本のパッケージをインストール
for i in setup glibc coreutils bash rpm apt rootfiles
do
  apt-get -y -o RPM::RootDir=$INSTALLDIR install $i
done

# vine-keyring を再インストール(上でいれた apt に再度読み込ませる)
apt-get -y -q --reinstall -o RPM::RootDir=$INSTALLDIR install vine-keyring

# resolv.conf をホストからコピー
cp -a /etc/resolv.conf $INSTALLDIR/etc/

違うバージョンの chroot を作る場合は、apt に別の sources.list を読み込ませる。

  • /tmp/sources.list.4.2
    rpm http://updates.vinelinux.org/apt 4.2/i386 main plus updates
    
  • apt-get の追加オプション
    -o Dir::Etc::sourcelist=/tmp/sources.list.4.2
    
  • 完了後に rpmdb を再構築
    rm -f $INSTALLDIR/var/lib/rpm/__db.00*
    chroot $INSTALLDIR rpm --rebuilddb
    

関連 bootstrap 機構

vbuilder

vbootstrap を利用して chroot 環境の構築をサポートするスクリプトです。

特に、src.rpm を投げて chroot 環境上で自動的に rpm をビルドし、さらにインストールまでできるのが特徴です。

主な用途としては、ある src.rpm が必要とする BuildRequires?: や Requires: の漏れを検証するために利用できます。例えば、self-build パッケージのような、ほとんどの環境でビルド可能なパッケージを作成するときに、BR: 検証を協力にサポートしてくれます。

簡単な実行例をヘルプで出すようにしていますが、 主な使い方は src.rpm を vbuilder へ投げて、ビルドできて、なおかつ、 インストールまでできるかをチェックすることです。

[vbootstrap-0.0.3 に同梱されている vbuilder]

$ /usr/sbin/vbuilder 
Usage:	vbuilder {--version [version]} {--arch [arch]} {--with-compat32} {--build-rpm [src.rpm]|--install-rpm [arch.rpm]|--remove-rpm [package]|--build|--clean}
	--version:		set [version] (default: VineSeed)
	--arch:			set [arch] (default: x86_64)
	--with-compat32:	build with compat32 on boostrap
	--build-rpm:		build [src.rpm] on boostrap
	--install-rpm:		install [arch.rpm] on boostrap
	--remove-rpm:		remove [package] on boostrap
	--build:		build boostrap of [version]
	--clean:		clean boostrap of [version]

For example, 
* make a clean/plain build environment on the current archtecture:
vbuilder --clean --build
* build source RPM:
vbuilder --build-rpm [src.rpm]
* make a plain build environment for Vine Linux 4.2:
vbuilder --version 4.2 --clean --build
* make a i386 chroot on x86_64:
vbuilder --arch i386 --clean --build
* build compat32:
vbuilder --arch i386 --with-compat32 --build-rpm [src.rpm]

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

$ sudo vbuilder --clean ← 必要であれば、あらかじめ chroot 環境を削除する。
$ sudo vbuilder --build
$ sudo vbuilder --build-rpm hoge.src.rpm

これらは一度に渡すこともできて、 以下のようにすれば、順次 --clean → --build → --build-rpm のように実行します。

$ sudo vbuilder --clean --build --build-rpm hoge.src.rpm

TODO

当面の TODO は以下のとおりです:

  • vbootstrap に例外処理とかエラー処理を入れる
  • vbuilder のオプションの制御
  • 別途 conf などの設定ファイルを作成
  • chroot 内で build user つくって、そいつに rpmbuild させる (done)