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年03月10日
停電 (瞬電)
2024年03月03日
the second try on bare-metal
useradd
2024年02月29日
opendkim and senmail
2024年01月24日
chat/iam 0.0.8
2024年01月21日
uselocale vs setlocale (textproc/R-readxl)
以上、1 日分です。
タイトル一覧
カテゴリ分類
Powered by hns-2.19.9, HyperNikkiSystem Project

Count.cgi (since 2000/02/05)