! NetBSD pkgsrc を Mac OS X で使う !! 参考 * pkgsrc を使えるようにする http://www.jp.netbsd.org/ja/Documentation/software/packages.html#bootstrap * Mac OS X / pkgsrc http://www.ki.nu/software/macosx/pkgsrc.html 最初に README.Darwin を読むこと。 Mac OS X の HFS+ では大文字小文字を区別しない。 これは pkgsrc を入れるファイルシステムの要求を満たしていない。 UFS ファイルシステムを作る。 kahori:~ rin$ cd usr/local/bootstrap-kit-20041008/bootstrap/ kahori:~/usr/local/bootstrap-kit-20041008/bootstrap rin$ su kahori:/Users/rin/usr/local/bootstrap-kit-20041008/bootstrap root# mkdir /usr/img kahori:/Users/rin/usr/local/bootstrap-kit-20041008/bootstrap root# ./ufsdiskimage create /usr/img/NetBSD 3072 kahori:/Users/rin/usr/local/bootstrap-kit-20041008/bootstrap root# ./ufsdiskimage mount /usr/img/NetBSD !! CVS せっかくだから ki.nu にあるように CVS を使う。 /Users/rin/usr/local/bootstrap-kit-20041008/ は削除する。 cvs でげっと。 kahori:/Volumes/NetBSD root# cvs -d :pserver:anoncvs@anoncvs.NetBSD.org:/cvsroot co pkgsrc cvs checkout: could not open /var/root/.cvspass: No such file or directory cvs [checkout aborted]: use "cvs login" to log in first 怒られたのでファイルを作ってやりなおし。 kahori:/Volumes/NetBSD root# touch ~/.cvspass kahori:/Volumes/NetBSD root# cvs -d :pserver:anoncvs@anoncvs.NetBSD.org:/cvsroot login (Logging in to anoncvs@anoncvs.NetBSD.org) CVS password: anoncvs kahori:/Volumes/NetBSD root# cvs -d :pserver:anoncvs@anoncvs.NetBSD.org:/cvsroot co pkgsrc !! bootstrap kahori:/Users/rin/usr/local/bootstrap-kit-20041008/bootstrap root# cd /Volumes/NetBSD/ kahori:/Volumes/NetBSD root# cd /Volumes/NetBSD/pkgsrc/bootstrap/ kahori:/Volumes/NetBSD/pkgsrc/bootstrap root# mkdir /Volumes/NetBSD/pkg kahori:/Volumes/NetBSD/pkgsrc/bootstrap root# mkdir /Volumes/NetBSD/pkgdb kahori:/Volumes/NetBSD/pkgsrc/bootstrap root# ln -s /Volumes/NetBSD/pkgsrc /usr/pkgsrc kahori:/Volumes/NetBSD/pkgsrc/bootstrap root# ln -s /Volumes/NetBSD/pkgdb /var/db/pkg kahori:/Volumes/NetBSD/pkgsrc/bootstrap root# ./bootstrap --prefix /Volumes/NetBSD/pkg --pkgdbdir /Volumes/NetBSD/pkgdb ===> bootstrap command: ./bootstrap --prefix /Volumes/NetBSD/pkg --pkgdbdir /Volumes/NetBSD/pkgdb ===> bootstrap started: Sun May 8 07:35:12 JST 2005 Working directory is: work ===> running: /usr/bin/sed -e 's|@DEFAULT_INSTALL_MODE@|'0755'|' files/install-sh.in > work/install-sh ===> running: /bin/chmod +x work/install-sh ===> Testing file system case sensitivity ===> running: /bin/sh work/install-sh -d -o root -g wheel /Volumes/NetBSD/pkg/pkgsrc-REQUIRES-case-SENSITIVE-filesystem ===> running: /bin/sh work/install-sh -d -o root -g wheel /Volumes/NetBSD/pkgsrc/pkgsrc-REQUIRES-case-SENSITIVE-filesystem ===> Building libnbcompat ===> running: /bin/sh work/install-sh -d -o root -g wheel work/libnbcompat ===> running: (cd work/libnbcompat; /bin/sh ./configure -C --prefix=/Volumes/NetBSD/pkg --sysconfdir=/Volumes/NetBSD/pkg/etc && make) configure: creating cache config.cache checking build system type... powerpc-apple-darwin7.7.2 checking host system type... powerpc-apple-darwin7.7.2 checking whether make sets $(MAKE)... yes checking for gcc... gcc checking for C compiler default output file name... configure: error: C compiler cannot create executables See `config.log' for more details. ===> exited with status 77 aborted. 怒られた。 以下によると bundle1.o, crt1.o, dylib1.o and gcrt1.o が必要らしい。 http://www.macintouch.com/panreader29.html http://www.gifu-nct.ac.jp/elec/deguchi/deguchi/panther/ http://fink.sourceforge.net/faq/comp-general.php?phpLang=ja#basic-headers XCode に入ってるらしい。 XCode を ADC からダウンロードしてインストールする。 !! 再度 bootstrap kahori:/Volumes/NetBSD/pkgsrc/bootstrap root# ./bootstrap --prefix /Volumes/NetBSD/pkg --pkgdbdir /Volumes/NetBSD/pkgdb ===> bootstrap command: ./bootstrap --prefix /Volumes/NetBSD/pkg --pkgdbdir /Volumes/NetBSD/pkgdb : gcc -L../libnbcompat -L../../libnbcompat -L../lib -o pkg_info main.o perform.o show.o -linstall -ltermcap -lnbcompat ld: warning -L: directory name (../libnbcompat) does not exist /usr/bin/install -c -m 755 -d /Volumes/NetBSD/pkg/sbin /usr/bin/install -c -m 755 -d /Volumes/NetBSD/pkg/man/man1 /usr/bin/install -c -m 755 -d /Volumes/NetBSD/pkg/man/cat1 /usr/bin/install -c pkg_add /Volumes/NetBSD/pkg/sbin /usr/bin/install -c -m 444 pkg_add.1 /Volumes/NetBSD/pkg/man/man1/pkg_add.1 /usr/bin/install -c -m 444 pkg_add.cat1 /Volumes/NetBSD/pkg/man/cat1/pkg_add.0 /usr/bin/install -c -m 755 -d /Volumes/NetBSD/pkg/sbin /usr/bin/install -c -m 755 -d /Volumes/NetBSD/pkg/man/man1 /usr/bin/install -c -m 755 -d /Volumes/NetBSD/pkg/man/cat1 /usr/bin/install -c pkg_admin /Volumes/NetBSD/pkg/sbin /usr/bin/install -c -m 444 pkg_admin.1 /Volumes/NetBSD/pkg/man/man1/pkg_admin.1 /usr/bin/install -c -m 444 pkg_admin.cat1 /Volumes/NetBSD/pkg/man/cat1/pkg_admin.0 /usr/bin/install -c -m 755 -d /Volumes/NetBSD/pkg/sbin /usr/bin/install -c -m 755 -d /Volumes/NetBSD/pkg/man/man1 /usr/bin/install -c -m 755 -d /Volumes/NetBSD/pkg/man/cat1 /usr/bin/install -c pkg_create /Volumes/NetBSD/pkg/sbin /usr/bin/install -c -m 444 pkg_create.1 /Volumes/NetBSD/pkg/man/man1/pkg_create.1 /usr/bin/install -c -m 444 pkg_create.cat1 /Volumes/NetBSD/pkg/man/cat1/pkg_create.0 /usr/bin/install -c -m 755 -d /Volumes/NetBSD/pkg/sbin /usr/bin/install -c -m 755 -d /Volumes/NetBSD/pkg/man/man1 /usr/bin/install -c -m 755 -d /Volumes/NetBSD/pkg/man/cat1 /usr/bin/install -c pkg_delete /Volumes/NetBSD/pkg/sbin /usr/bin/install -c -m 444 pkg_delete.1 /Volumes/NetBSD/pkg/man/man1/pkg_delete.1 /usr/bin/install -c -m 444 pkg_delete.cat1 /Volumes/NetBSD/pkg/man/cat1/pkg_delete.0 /usr/bin/install -c -m 755 -d /Volumes/NetBSD/pkg/sbin /usr/bin/install -c -m 755 -d /Volumes/NetBSD/pkg/man/man1 /usr/bin/install -c -m 755 -d /Volumes/NetBSD/pkg/man/cat1 /usr/bin/install -c pkg_info /Volumes/NetBSD/pkg/sbin /usr/bin/install -c -m 444 pkg_info.1 /Volumes/NetBSD/pkg/man/man1/pkg_info.1 /usr/bin/install -c -m 444 pkg_info.cat1 /Volumes/NetBSD/pkg/man/cat1/pkg_info.0 /usr/bin/install -c -m 755 -d /Volumes/NetBSD/pkg/sbin /usr/bin/install -c -m 755 -d /Volumes/NetBSD/pkg/man/man1 /usr/bin/install -c -m 755 -d /Volumes/NetBSD/pkg/man/cat1 /usr/bin/install -c linkfarm.sh /Volumes/NetBSD/pkg/sbin/linkfarm /usr/bin/install -c pkg_view.sh /Volumes/NetBSD/pkg/sbin/pkg_view /usr/bin/install -c -m 444 linkfarm.1 /Volumes/NetBSD/pkg/man/man1/linkfarm.1 /usr/bin/install -c -m 444 linkfarm.cat1 /Volumes/NetBSD/pkg/man/cat1/linkfarm.0 /usr/bin/install -c -m 444 pkg_view.1 /Volumes/NetBSD/pkg/man/man1/pkg_view.1 /usr/bin/install -c -m 444 pkg_view.cat1 /Volumes/NetBSD/pkg/man/cat1/pkg_view.0 ===> Installing packages(7) man page ===> running: /bin/sh work/install-sh -c -m 444 files/packages.cat7 /Volumes/NetBSD/pkg/man/cat7/packages.0 Please remember to add /Volumes/NetBSD/pkg/bin to your PATH environment variable and /Volumes/NetBSD/pkg/man to your MANPATH environment variable, if necessary. An example mk.conf file "work/mk.conf.example" with the settings you provided to "bootstrap" has been created for you. Please copy work/mk.conf.example to /Volumes/NetBSD/pkg/etc/mk.conf. You can find extensive documentation of the NetBSD Packages Collection in /Volumes/NetBSD/pkgsrc/Packages.txt and packages(7). Hopefully everything is now complete. Thank you ===> bootstrap started: Sun May 8 16:50:54 JST 2005 ===> bootstrap ended: Sun May 8 16:54:34 JST 2005 kahori:/Volumes/NetBSD/pkgsrc/bootstrap root# !! 環境変数 PATH と MANPATH を追加しておく。 * PATH to pkg/(s)bin kahori:~/usr/local/bootstrap-kit-20041008/bootstrap rin$ cat ~/.bashrc PATH=/usr/pkg/bin:/usr/pkg/sbin:${PATH} * MANPATH to pkg/man kahori:~/usr/local/bootstrap-kit-20041008/bootstrap rin$ cat >> ~/.bashrc MANPATH=/usr/pkg/man:${MANPATH} !! 確認 sl を入れてみる。 kahori:~ rin$ su kahori:/Users/rin root# cd /usr/pkgsrc kahori:/usr/pkgsrc root# cd games/sl/ kahori:/usr/pkgsrc/games/sl root# bmake install : => Unwrapping files-to-be-installed. nkf -e /Volumes/NetBSD/pkgsrc/games/sl/work/sl/sl.1 > /Volumes/NetBSD/pkgsrc/ga\ mes/sl/work/sl/sl.1.euc ===> Installing for sl-3.03p5 install -c -s -o root -g wheel -m 555 /Volumes/NetBSD/pkgsrc/games/sl/work/sl/s\ l /usr/pkg/bin/sl install -c -o root -g wheel -m 444 /Volumes/NetBSD/pkgsrc/games/sl/work/sl/sl.1\ .euc /usr/pkg/man/ja_JP.EUC/man1/sl.1 ===> Registering installation for sl-3.03p5 !! テスト sl を実行できた。 よしとする。 !! 起動時に mount する /Volumes/NetBSD を起動時に mount するように設定する。 起動項目は /Library/StartupItems/ 以下に書く。 kahori:/Volumes/NetBSD/pkgsrc/bootstrap root# mkdir -p /Library/StartupItems/pkgsrcimg kahori:/Volumes/NetBSD/pkgsrc/bootstrap root# cd /Library/StartupItems/pkgsrcimg kahori:/Library/StartupItems rin$ ls -l total 0 drwxr-xr-x 4 root wheel 136 18 May 13:35 pkgsrcimg kahori:/Library/StartupItems rin$ cd pkgsrcimg/ ディレクトリ以下には最低限 pkgsrcimg と StartupParameters.plist が必要。 pkgsrcimg はディレクトリ /Library/StartupItems/pkgsrcimg と同じ名前である必要がある。 kahori:/Library/StartupItems/pkgsrcimg rin$ ls -l total 16 -rw-r--r-- 1 root wheel 110 18 May 13:35 StartupParameters.plist -rwxr-xr-x 1 root wheel 144 18 May 13:34 pkgsrcimg 設定のスクリプト。 /etc/rc.common は不要なので削除してもよい。 SystemStarter が /Library/StartupItems を起動するときに start stop restart を引数にして起動するので引数を処理するときにうれしい。 ==ここでは引数は処理しないので /etc/rc.common は無くてもいい。== shutdown するときに stop されるときに umount しておかないと ln -s /Volumes/NetBSD/pkg /usr/pkg したときに 次回の起動時に /Volumes/NetBSD が mount されないようなのでまともに start と stop を処理することにした。 chmod +x を忘れずに。 kahori:~ rin$ chmod +x Library/StartupItems/pkgsrcimg/pkgsrcimg 内容。 kahori:~ rin$ cat /Library/StartupItems/pkgsrcimg/pkgsrcimg #!/bin/sh . /etc/rc.common StartService() { /usr/bin/hdiutil mount /usr/img/NetBSD.dmg } StopService() { /usr/bin/hdiutil eject /dev/disk1s2 } RunService "$1" 属性リスト。 *BSD の rcorder の設定の書式と意味は同じ。 kahori:/Library/StartupItems/pkgsrcimg rin$ cat StartupParameters.plist { Description = "NetBSD pkgsrc image"; Provides = ("pkgsrc"); Requires = ("Disks"); } 以上のように書いておいて起動すると mount はこうなる。 kahori:/Library/StartupItems/pkgsrcimg rin$ mount /dev/disk0s3 on / (local, journaled) devfs on /dev (local) fdesc on /dev (union) on /.vol automount -nsl [296] on /Network (automounted) automount -fstab [316] on /automount/Servers (automounted) automount -static [316] on /automount/static (automounted) /dev/disk1s2 on /Volumes/NetBSD (asynchronous, local, nodev, nosuid) kahori:/Library/StartupItems/pkgsrcimg rin$ !!! 参考 * Porting UNIX/Linux Applications to Mac OS X: Boot Sequence http://developer.apple.com/documentation/Porting/Conceptual/PortingUnix/additionalfeatures/chapter_10_section_4.html * System Startup Programming Topics: Creating a Startup Item http://developer.apple.com/documentation/MacOSX/Conceptual/BPSystemStartup/Articles/StartupItems.html * NetBSD Initialization and Services Control rcorder と rc スクリプトの役割 http://www.jp.netbsd.org/ja/Documentation/rc/index.html#a4 * rcorder - NetBSD Manual Pages http://netbsd.gw.com/cgi-bin/man-cgi?rcorder++NetBSD-current * A Daemon-Writer's Guide To NetBSD's Rc.d System http://www.bsdatwork.com/2004/01/15/guide_to_netbsd_rc_d/