hns - 日記自動生成システム - Version 2.19.9

先月 2012年03月 来月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Namazu for hns による簡易全文検索
詳しくは 詳細指定/ヘルプを参照して下さい
検索式:

2012年03月13日(火) 旧暦 [n年日記] [更新:"2020/07/24 02:15:11"]

#1 [pkgsrc] chroot 環境で pkgsrc (pbulk)

自分で作っている説明画面 や、 それを見て書いた日記 (2011/10/03) などが、 が結局分り難いというか、まとまりがないので、 また例題として書いて見るのです。

pbulk は、本来は、 いくつかの(同じ環境な)機械を使って、並行して処理させて、 bulk build、つまり NetBSD package を全部作るという作業を早く終らせる、という目的のものなのですが、僕は、 それよりも、次のような意義を見出して、利用しています。
以下に書いてある環境を用意すると、次のようなことが出来ます。

  • 依存関係を(何もないところから)すっきりと確認出来る
  • 依存するものは、それまでに用意した binary package を使って設置してくれる(ので早い)
  • 必要なら、作られた binary package を通常環境の方に pkg_add すれば良い

chroot 環境で pkgsrc (pbulk) する時に必要なもの:

  1. OS (NetBSD 等)
  2. chroot directory
    設置一揃が /usr/INSTALL に揃っていれば、それを展開する
    ここから以下は chroot 環境下に用意します
  3. /usr/pkgsrc
    anoncvs 等から持って来る (chroot 前なら /export/CHROOT/usr/pkgsrc に用意します)
  4. /usr/pkg_bulk
    bulk build 時には /usr/pkg は消されてしまうので、消されないように 脇に 最少限の道具を用意します
    ./bootstrap で (脇に) 作る
  5. pbulk
    pkgtools/pbulk で /usr/pkg_bulk側に make package-install する
以下では CHROOT 環境を用意する位置を /export/CHROOT と していますが、この位置は任意で、何でも構いません。
  • OS を入れる
  • (例えば)
    /export/CHROOT/usr/pkgsrc
    
    を用意する
  • /export/CHROOT/ に chroot 環境を用意する
    r4-2@makoto 00:03:10/120314(/export/CHROOT)% foreach i  (/usr/INSTALL/*)
    (cd /export/CHROOT/; sudo pax -pe -r -z -f $i)
    end
    
    実は最初 -pe を付けていなくて 'su: pam_start failed' とか言われていたのだけれど、twitter でつぶやいたら @morrpl が教えてくれた。
    cd dev; sudo ./MAKEDEV all
    
    cp /etc/resolv.conf /export/CHROOT/etc
    
    % chroot /export/CHROOT
    # rm /etc/localtime
    # ln -s /usr/share/zoneinfo/Japan /etc/localtime
    

bootstrap:

ここから (chroot の中で) bootstrap-pkgsrc します。
m08@makoto 10:00:44/120411(/export/CHROOT)% sudo chroot /export/CHROOT
# cd /usr/pkgsrc/bootstrap ;
    ./bootstrap --prefix=/usr/pkg_bulk --pkgdbdir=/usr/pkg_bulk/.pkgdb 
ここで指定した PATH は /usr/pkg_bulk/etc/mk.conf に記録され、 後から参照されます。

pkg_info:

bootstrap は、「何もないところで pkgsrc」の意味で、 何も用意されていなくてもこれさえ用意すれば、 後はいつもの pkgsrc 環境になります。
に用意した最少限の道具です
r4-2@root 14:26:17/120313(/export/CHROOT)% chroot /export/CHROOT
# env PATH=/usr/pkg_bulk/bin:/usr/pkg_bulk/sbin:${PATH} pkg_info
bootstrap-mk-files-20120305 *.mk files for the bootstrap bmake utility
bmake-20110606      Portable (autoconf) version of NetBSD 'make' utility
pkg_install-20120221 Package management and administration tools for pkgsrc

pbulk を用意する:

に用意します。脇に用意するので、他のものと別の位置に置くには、前述の /usr/pkg_bulk/etc/mk.conf
.ifdef BSD_PKG_MK       # begin pkgsrc settings
.endif
の中に、次の行を追加しておきます。
PACKAGES=               /packages_bulk
ここで右辺の設定はどこでも構いません。(この項 2015/04/23 追記)

chroot 内の /etc/resolv.conf が外側と同じになるように写しておきます

まず mozilla-rootcerts を入れておきます (2023/07/15 追記)

cd /usr/pkgsrc/security/mozilla-rootcerts
env PATH=/usr/pkg_bulk/bin:/usr/pkg_bulk/sbin:${PATH} bmake package-install
これは、次のようになるのを避けるためです
ftp: Can't connect to `2001:470:142:3::b:443': No route to host
Trying 209.51.188.20:443 ...
18446744073709551615:error:1416F086:SSL
  routines:tls_process_server_certificate:certificate verify
  failed:/usr/src/crypto/external/bsd/openssl.old/dist/ssl/statem/statem_clnt.c:1919:
ftp: Can't connect to `ftp.gnu.org:https'
その上で次のようにして、まず pbulk を作ります。
cd /usr/pkgsrc/pkgtools/pbulk ; 
env PATH=/usr/pkg_bulk/bin:/usr/pkg_bulk/sbin:${PATH} bmake package-install
ここまでで次の最後の五つが追加されます。これも です。
# env PATH=/usr/pkg_bulk/bin:/usr/pkg_bulk/sbin:${PATH} pkg_info
bootstrap-mk-files-20120305 *.mk files for the bootstrap bmake utility
bmake-20110606      Portable (autoconf) version of NetBSD 'make' utility
pkg_install-20120221 Package management and administration tools for pkgsrc
digest-20111104     Message digest wrapper utility
perl-5.14.2nb5      Practical Extraction and Report Language
rsync-3.0.9         Network file distribution/synchronisation utility
pbulk-base-0.44     Core components of the modular bulk build framework
pbulk-0.48          Modular bulk build framework
2017/11 の場合
cwrappers-20171027  pkgsrc compiler wrappers
bootstrap-mk-files-20170802 *.mk files for the bootstrap bmake utility
bmake-20150505      Portable (autoconf) version of NetBSD 'make' utility
pkg_install-20171030 Package management and administration tools for pkgsrc
digest-20160304     Message digest wrapper utility
rsync-3.1.2         Network file distribution/synchronisation utility
pbulk-base-0.53     Core components of the modular bulk build framework
pbulk-0.65          Modular bulk build framework
僕の場合は、この他に zsh, net-snmp, sendmail, (最近は libkver) を追加します
cd ../../shells/zsh;
env PATH=/usr/pkg_bulk/bin:/usr/pkg_bulk/sbin:${PATH} bmake package-install 
cd ../../net/net-snmp;      #  2020/07/24 updated
env PATH=/usr/pkg_bulk/bin:/usr/pkg_bulk/sbin:${PATH} bmake package-install 
sendmail を入れる前に /usr/pkg_bulk/etc/mk.conf に次の行を 追加 しておきます。
SKIP_LICENSE_CHECK=	yes
cd ../../wip/sendmail; 2019/02/06 updated
cd ../../mail/sendmail; 
env PATH=/usr/pkg_bulk/bin:/usr/pkg_bulk/sbin:${PATH} bmake package-install 
ここでも make でなく (/usr/pkg_bulk 側に入れるため ) bmake を使います。 sendmail で 上記 mk.conf が効くためにも bmake の方が必要です。 また入れた後に
cd  /usr/pkg_bulk/share/sendmail/cf;
# -- Not necessary now (2014-06-20) -- -vi netbsd-proto.mc
make install-cf CF=netbsd-proto;

mkdir -p /var/spool/mqueue;
mkdir -p /var/spool/clientmqueue;
chown smmsp.smmsp  /var/spool/clientmqueue;
ln -sf /usr/pkg_bulk/share/examples/sendmail/mailer.conf /etc/mailer.conf;
touch /etc/mail/local-host-names
などをして echo test | mail username@example.com で自分宛にメールが出せる(届く)ことを確認しておきます。
(ちなみに 非 chroot 側で sendmail が動いていることが必要です)

pbulk.conf:

多分ここまでくれば、後は /usr/pkg_bulk/etc/pbulk.conf を調整して
env PATH=/usr/pkg_bulk/bin:/usr/pkg_bulk/sbin:${PATH} bulkbuild 
とやるだけではないかと思います。 pbulk.conf を調整する時に、 どこを見るかも重要かと思います。僕は、どこに記録が残っているのか分らないうちは、
du -sk /export/CHROOT/bulk/*
などのようにして log を探したりもしました。
pbulk.conf の中では
unprivileged_user=pbulk
これも僕は結構悩ましかったけれど、今は自分にしています。 どちらにしても chroot 内で vipw が必要です。

今うまく動き出した時の pbulk.conf は次のようなものです。全てが必須とは 限りませんが、自分の覚えとして、現状を書いておきます。
どうも packages = /packages を変更するとうまく行かなくなる(どこか他でも調整が必要になる) という気がしています (というのは誤りで CHROOT/etc/mk.conf と合せてあれば大丈夫)。

(人間用に編集しています)

--- pkg_bulk/share/examples/pbulk/pbulk.conf	2012-03-13 15:01:55.000000000 +0900
+++ /export/CHROOT/usr/pkg_bulk/etc/pbulk.conf	2012-03-14 20:09:15.000000000 +0900
-master_mode=yes
+master_mode=no

-pkg_rsync_args="-av --delete-excluded -e ssh"
+pkg_rsync_args="-av --delete-excluded"

-pkg_rsync_target="pkgsrc@192.168.75.1:/public/packages/current/DragonFly-1.8"
+pkg_rsync_target="/bulk/rsync"

-report_rsync_args="-avz --delete-excluded -e ssh"
+report_rsync_args="-avz --delete-excluded"

-report_rsync_target="pkgsrc@192.168.75.1:/public/reports/current/DragonFly-1.8"
+report_rsync_target="/bulk/report"

-report_recipients="pkgsrc-bulk at netbsd.org"
+report_recipients="pkgsrc-bulk at example.com"
 
-bootstrapkit=/usr/pkgsrc/bootstrap/bootstrap.tar.gz
+bootstrapkit=

-#limited_list=/limited_list
+limited_list=/limited-list

 unprivileged_user=pbulk
+unprivileged_user=username

-make=${prefix}/bin/bmake
+make=/usr//bin/make
上の設定に合せて、次のような mkdir も必要です。
 cd /export/CHROOT/;
 mkdir packages;
 sudo mkdir packages;
 sudo mkdir bulk;
 sudo mkdir bulklog;
 sudo mkdir packages/All;
 sudo mkdir bulk/report;
t-105# cat /etc/mk.conf 
PACKAGES=/packages
この後に limited_list に pkgtools/digest とだけ書いて pbulk を実行します。
必ず最初に作るもので、これが出来ないと次には行けないのと、簡単なので、問題が あれば、すぐ分るからです。
env PATH=/usr/pkg_bulk/bin:/usr/pkg_bulk/sbin:${PATH}  bulkbuild
次のように言われるのは、上の PACKAGES= /packages の行が不足しているからです。これは pbulk.conf で /packages に作るように設定して いるのに、同じところを見ないので、見つからない、と言っているのです。
pkg_add: no pkg found for 'digest-20121220', sorry.
pkg_add: 1 package addition failed



最近の日記
2024年05月08日
comparison on ./buildsh tools
2024年05月06日
py-setuptools (python 3.11.9)
make release took 1 hours and 10 min
qemu invocation for 10.99.10
2024年05月05日
Windows 10 version
serial connection
bc bench
2024年05月04日
Trial on 10.99.10
another version (later trial) to succeed
2024年04月29日
dkim
以上、1 日分です。
タイトル一覧
カテゴリ分類
Powered by hns-2.19.9, HyperNikkiSystem Project

Count.cgi (since 2000/02/05)