Last Update: "2014/10/01 23:58:24 makoto"
- Distributed chrooted pkgsrc bulk builds (by J. Perkin, Jul 24, 2013)
-
http://www.perkin.org.uk/posts/distributed-chrooted-pkgsrc-bulk-builds.html
- 実際に chroot で試した時の記録 (2012/03/13 の日記)
-
http://www.ki.nu/~makoto/diary/2012/03/13/
- 初めての pbulk
-
http://www.ki.nu/~makoto/diary/2011/10/03/1.html
- pbulk HOWTO (in English)
-
/usr/pkgsrc/doc/HOWTO-pbulk
pbulk
bulk build を使うと、ある arch 向けに全ての package を make package します。
pbulk はその bulk build に代わる新しい道具です。いくつもの機械を
並列的に動かして make package してくれるので、時間を短縮出来ます (一台だけでも実行可能です)。
bulk build にせよ、pbulk にせよ、ちょっとは覚悟が必要です。
それは /usr/pkg を全て消すことが必要 (消してしまう)からです。
つまり、おそらく専用の機械が必要になるはずです。
或いは、
chroot 環境を作る
のも良いかと思います
(と言いますか、それが普通でしょう)。
- 開始
構想を練る (理解する) → 配置を決める
- 準備
-
pkgsrc の枠 (例 /usr/pkgsrc) を用意する
- /usr/pkg_bulk
(/usr/pkg は bulkbuild を実行する時に、消されてしまうので)
bootstrap を使って、実行環境を別に (/usr/pkg_bulk に) 用意する。
- pbulk
(新しい環境 = pkg_bulk 側に) pbulk を make package する。
(もしあれば) pbulk 実行時に必要な道具も同様に用意する (一例 sendmail)
-
/usr/pkg_bulk/etc/mk.conf | (pbulk 実行用)
| /etc/mk.conf | (目的側設定)
| pbulk.conf |
|
を設定する
- 実行
/usr/pkg_bulk/bin/bulkbuild を実行する
上記 URL の HOWTO
を読むと、いきなり配置の話から始まるのでびっくりしますが、
事実それは大切 (複雑)です。もっとも、一台で試す時には、
あまり真剣に考えなくても大丈夫とも言えるかと思います。
1. 配置
pbulk に必要な資源には、NFS を用いて共有するもの (shared)、
各機械毎に写しが必要なもの(per node) 、
親となる機械
での設定の三通りがあります。
ITEM (VARNAME) | PATH (example) | | |
shared |
meta data and log | /bulklog | R/W | メタ情報・記録
| (source) | /usr/pkgsrc | | make 基盤
| PACKAGES | /packages | R/W | 完成品(目的物) = バイナリパッケージ
| DISTDIR | /distfiles | R/W | 原配布
| per node |
WRKOBJDIR | /scratch | R/W | make 作業域
| | /usr/pkg | | 一時設置先。依存 binary など
(実行の毎に消される)
| | /var/db/pkg | | 一時設置資料。何を作ったかなどの情報
(同上)
| ここから下は実行用の道具 |
LOCAL_BASE | /usr/pkg_bulk | copy |
| PKG_DBDIR | /usr/pkg_bulk/.pkgdb | |
|
2. 準備
bootstrap
準備その一に挙げた
bootstrap は「何もないところで pkgsrc」です。今回は、全く新規に環境を用意する形
をとるので、
(/usr/pkgsrc を準備しておいてから)
(例えば)
/usr/pkg_bulk と /usr/pkg_bulk/.pkgdb に pkgsrc 用の実行環境を(もう一度)用意します。上の表の最後の方の部分です。
cd /usr/pkgsrc/bootstrap ;
./bootstrap --prefix=/usr/pkg_bulk --pkgdbdir=/usr/pkg_bulk/.pkgdb
上記 --prefix や --pkgdbdir は変更したくなるのですが、自由度は高くないので、
このままで試した方が良いと思います。
pbulk install
試しにどのようなものか見たいということであれば、次のようにすると一応設置は可能です
(これは powerpc の例です)。
To look inside:
ftp://ftp.ki.nu/packages/4.0/powerpc/All/pbulk-0.17.tgz
typ0:makoto@pismo 13:01:04/080427(~)> sudo pkg_add \
ftp://ftp.ki.nu/packages/4.0/powerpc/All/pbulk-0.17.tgz
tar: ustar vol 1, 35 files, 194560 bytes read, 0 bytes written in 1 secs (194560 bytes/sec)
tar: ustar vol 1, 18 files, 368640 bytes read, 0 bytes written in 1 secs (368640 bytes/sec)
pbulk-0.17: copying /usr/pkg/share/examples/pbulk/pbulk.conf to /usr/pkg/etc/pbulk.conf
ttyp0:makoto@pismo 13:01:40/080427(~)>
実際に準備する場合には、先ほど bootstrap で用意した環境を使って make package をしますが、
もし以前に同様に bootstrap をしたことがあるなら、それは全て消しておきます。
rm -rf /usr/pkg_bulk
bootstrap で用意した環境を使って pbulk を make package-install します。
cd /usr/pkgsrc/pkgtools/pbulk ;
env PATH=/usr/pkg_bulk/bin:/usr/pkg_bulk/sbin:${PATH} bmake package-install
その後で
m09# env PATH=/usr/pkg_bulk/bin:/usr/pkg_bulk/sbin:${PATH} pkg_info
して見ると次のようなものが入っています。(zsh/m4/sendmail は別途追加しています)。
bootstrap-mk-files-20090807nb2 *.mk files for the bootstrap bmake utility
bmake-20110606 Portable (autoconf) version of NetBSD 'make' utility
pkg_install-20110805 Package management and administration tools for pkgsrc
digest-20080510 Message digest wrapper utility
zsh-4.3.12 The Z shell
m4-1.4.16 GNU version of UNIX m4 macro language processor
sendmail-8.14.5 The well known Mail Transport Agent
perl-5.14.1 Practical Extraction and Report Language
rsync-3.0.8 Network file distribution/synchronisation utility
pbulk-base-0.43 Core components of the modular bulk build framework
pbulk-0.48 Modular bulk build framework
この結果
/usr/pkg_bulk/etc/mk.conf
も作られます。
これには
LOCALBASE と PKG_DBDIR が正しく設定されているはずです。
/usr/pkg_bulk/etc/pbulk.conf
も用意されます。この時点で、次の二つは全く同じものなので、後者
は気兼ねなく編集可能です。
/usr/pkg_bulk/share/examples/pbulk/pbulk.conf
/usr/pkg_bulk/etc/pbulk.conf
3. configure
/etc/mk.conf
pbulk.conf
/usr/pkg_bulk/etc/pbulk.conf
4. running
実行するには
/usr/pkg_bulk/bin/bulkbuild
と入力します。時間が何日とかかるはずなので screen の内側
で実行することをおすすめします。
もし中断したような時には
/usr/pkg_bulk/bin/bulkbuild-restart が使えます。
> /usr/pkg_bulk/bin/bulkbuild
Warning: All log files of the previous pbulk run will be
removed in 5 seconds. If you want to abort, press Ctrl-C.
/usr/pkg_bulk/libexec/pbulk/pre-build: /usr/pkg/bin/bmake: not found
m09#
m09@root 07:43:18/111004(..pkgtools/pbulk)% /usr/pkg_bulk/bin/bulkbuild
Warning: All log files of the previous pbulk run will be
removed in 5 seconds. If you want to abort, press Ctrl-C.
Scanning...
/usr/pkg_bulk/libexec/pbulk/scan: /usr/pkg_bulk/bin/pbulk-scan: not found
m09@root 07:43:40/111004(..pkgtools/pbulk)%
これは pkgtools/pbulk-base が正しく make package-install されていないのが理由。
pkg_xxx は通常のものでなくて、次のように /usr/pkg_bulk/{s,}bin に入っているもの
を使う。
m09@root 09:01:16/111004(..pkgtools/pbulk-base)% \
env PATH=/usr/pkg_bulk/bin:/usr/pkg_bulk/sbin:${PATH} pkg_info
bootstrap-mk-files-20090807nb2 *.mk files for the bootstrap bmake utility
bmake-20110606 Portable (autoconf) version of NetBSD 'make' utility
pkg_install-20110805 Package management and administration tools for pkgsrc
digest-20080510 Message digest wrapper utility
rsync-3.0.8 Network file distribution/synchronisation utility
pbulk-base-0.43 Core components of the modular bulk build framework
pbulk-0.48 Modular bulk build framework
Building SHA512...
xargs: /usr/pkg/bin/digest: No such file or directory
Build reports...
Sending report mail...
-s: not found
僕の場合、メールには
pkgsrc の sendmail
を使っているが、
これだと消されてしまうので問題がある。それで、m4 と sendmail も、次のように
して pkg_bulk 側に入れておく。
(cd /usr/pkgsrc/devel/m4; \
env PATH=/usr/pkg_bulk/bin:/usr/pkg_bulk/sbin:${PATH} bmake package-install );
(cd /usr/pkgsrc/mail/sendmail; \
env PATH=/usr/pkg_bulk/bin:/usr/pkg_bulk/sbin:${PATH} bmake package-install );
この時に、次のようにしておくことも重要
cp /usr/pkg_bulk/share/examples/sendmail/mailer.conf /etc/mailer.conf
xargs: /usr/pkg/bin/digest: No such file or directory
Build reports...
これは次の部分が問題
/usr/pkg_bulk/etc/pbulk.conf:digest=/usr/pkg/bin/digest
|