Last Update: "2010/06/23 16:31:52 makoto"
bootstrap-pkgsrc
NetBSD 上にアプリケーションプログラムを用意する方法として
pkgsrc
というものがあります。NetBSD の場合、OS 設置直後に入っている
ものはとても少ないので、この
pkgsrc
は必需品です。
例えば perl も apache も emacs も入っていないのですが、
この
pkgsrc を使えば、とても簡単に入ってしまいます。
2005/02 現在で 5,300 くらいのアプリケーションが用意されて
います。
この便利な pkgsrc を一度使ってしまうと、
他の OS でも同じものが使いたくなります。そのような時のために、
用意されているものがあります。
その時に最初に使うのが bootstrap-pkgsrc です。
意味としては、「何もないところでも pkgsrc」ということです。
これを使うと (/usr/pkg/sbin 以下に)
pkg_add, pkg_info pkg_delete などと、BSD 用の make である
bmake を入れてくれます
NetBSD 以外で使う時のしくみが
bootstrap-pkgsrc ですが、その先は
NetBSD
と共通になります。
つまり実際の操作(設置作業)
としては、bootstrap-pkgsrc と
pkgsrc
の両方が必要になります。
参考:
- Mac OS X 10.4.1 で pkgsrc (ポータブルな NetBSD パッケージシステム)を使う
(深町さん)
-
http://www.fml.org/home/fukachan/ja/macosx.pkgsrc.html
- MacOSXでpkgsrc (2006/08/27) -- 森島さん
-
http://www.morishima.net/~naoto/fragments/archives/2006/08/27-0007.php
-
NetBSDのパッケージ管理システム / NetBSDだけではなく,Mac OS X?やOpenBSDでも使える.
-
http://www.kono.cis.iwate-u.ac.jp/~hiki/?pkgsrc
- あるPC-AT屋の日記
-
http://www.fastwave.gr.jp/diarysrv/fy/200506b.html#20050612-2
pkgsrc を
Mac OS X の上で使う場合、次のような準備が必要です。
(と書いていましたが、どうも最近は、
大・小文字を区別しないファイル・システムでも大丈夫
らしいです)
-
Re: pkg/26211 (Darwin bootstrap: case-sensitive HFS+ can be used)
-
http://mail-index.netbsd.org/pkgsrc-bugs/2010/02/23/msg036584.html
- ここには、そうは書いていないですけれども:
-
http://wiki.netbsd.se/How_to_use_pkgsrc_on_Mac_OS_X#Bootstrapping_Mac_OS_X
- bootstrap 手続に
-
[ --ignore-case-check ] 引数があります
(おそらく次の緑文字の部分は情報が古く必要がないと思います)
大・小文字を区別する FS
pkgsrc は、大文字と小文字を区別するファイルシステムが必須です。
Mac OS X で良く使われている HFS+ (Mac OS 拡張形式)では、
大小文字を区別しないため、そのままでは使えません。
いくつかの方法があります。
10.3 (以降)の場合には次のようなことが考えられます。
-
ディスクユーティリティを使って大文字小文字を区別する HFS+ の区画を作る
-
ディスクユーティリティを使って UFS 形式の区画を作る
-
ufsdiskimage を使って UFS 形式のディスク・イメージを作る
-
ディスクユーティリティの裏で動いている
hdiutil
を使って変更する
http://journal.mycom.co.jp/column/osx/090/
3. の方は、例えば bootstrap-pkgsrc に含まれている ufsdiskimage を使い、
次のような操作をして仮想的な Volume を作ります。
./ufsdiskimage create ~/Documents/NetBSD 3072 ( /usr/pkg, /usr/pkgsrc に 3G 割当)
./ufsdiskimage mount ~/Documents/NetBSD
1. か 2. の場合は、Mac OS X を設置する時に、予め区画を
作っておく必要があります。
10.4 Tiger からは、ディスクユーティリティの選択が増えました。
形式 | 略称 |
MacOS 拡張 | HFS+ |
MacOS 拡張(ジャーナリング) | HFS+(J) |
MacOS 拡張(大文字、小文字を区別、ジャーナリング) | HFS+大小(J) |
MacOS 拡張(大文字、小文字を区別) | HFS+大小 |
MacOS 標準 | HFS |
UNIX ファイルシステム | UFS |
余分に用意してある区画については、
中を消してしまっていいなら、最初から UFS である必要はありません。
どの形式でも、ディスク・ユーティリティを使って、その区画を
指定し、「消去」を選ぶと、形式をその時に選ぶことが出来ます
(ただし、この項の説明が有効なのは Panther 10.3 以降です)。
しかし、
おそらく多くの場合には、単一区画で設置していて、
区画を分けているということは
していないと思います。もちろんもう一度初めから入直す
ならば問題なく可能です。
もし、そのように、
単一区画に Mac OS X が入っている場合で、それを入直す
ことを考えられない時には、前者の 3. しか選択はありません。
これはこれで気が楽なので、一つの方法だと思います。
結局のところ、まとめると、次のようになります。
区画数 | 起動 | pkgsrc | 特徴・問題 | 現実問題として | pkgsrc(例) |
2 | HFS+ | HFS+大小 | 確実 | | /usr/pkg -> /Volume/pkg
| 2 | HFS+ | UFS | (ちょっと遅いか) | | /usr/pkg -> /Volume/pkg
| 1 | HFS+大小 | 一番簡単、ただし無保証 | 藤原はこれを使っています(ジャーナリング) |
/usr/pkg |
この中で、
「無保証」と書いてある意味
ですが、Mac OS X の説明を読むと、HFS+大小を起動 disk にはしない方がいい
と書いてあります。
実際、例えば、World of Warcraft
というゲームのインストールが出来なかったという話を聞いたことがあります。
しかし考えようによっては新しい区画を用意するのに、別の方法もあります。
外付の Firewire
Firewire disk をつないでそれをまるごと UFS にするというのも便利かも
知れません。つないでおいてから、ディスク・ユーティリティを使って
UFS 形式で初期化します。
実は
2005/03 に bulk build をした時
には、その方法を使いました。
内蔵の区画し直し
Mac OS X には asr (Apple Software Restore) という便利な道具があります。
これは次のようにすると、/ に入っているものを、そのままそっくり
他の disk に、起動可能な形で写してくれるものです(man asr 参照)。
sudo asr --source / --target /Volume/backup -erase
もし、 Firewire の外付 disk というものを
利用出来るなら、この方法で一度別のところに写して、
その写した外付から起動が出来ますので、その中の
「ユーティリティ → ディスク・ユーティリティ」を使って、
内蔵側を区画し直し、その後で外から内に戻すというようにすれば、
既に設置済のものを失うことなく、内蔵の disk の区画を変更することも
可能になります。
この原稿を用意している時には UFS の区画には 3G を当てています
(OS 本体が 17 G くらいです)。
ディスク・ユーティリティでは、UFS という名前は
UNIX ファイルシステムと呼ばれます。
それだったら、初めから全部 UFS にしてしまっては ?
と思われるかも知れませんが、性能的には HFS+ の方が上な
ので、おそらく全てを UFS にはしない方がいいと思います。
binary か src か
bootstrap-pkgsrc にも
pkgsrc にも
実行形式(binary) かソース (src)
のどちらを使うかという選択があります。ただ、実行形式は用意
されていないものもあるので、全く自由な選択ではありません。
-
bootstrap-pkgsrc の実行形式は
ftp://ftp.netbsd.org/pub/NetBSD/packages/bootstrap-pkgsrc/ (not found)
にありました。また
ftp://ftp.jp.netbsd.org/pub/NetBSD-jp/mirror-status/packages.html
に一覧があるので、これを見て、
-
src の方は pkgsrc/bootstrap にあります。
今回の
Mac OS X の場合、ソースから作る方を紹介します。
binary を使うなら、
ftp://ftp.netbsd.org/pub/NetBSD/packages/bootstrap-pkgsrc/
(not found now)
にある、
bootstrap-pkgsrc-Darwin-7.6.0-powerpc-20041219.tar.gz
を使います。これは 10.3.6 用ですが、それ以降でも使えるかも知れません。
10.3.6 では uname -sr で Darwin 7.6.0 の表示がありますが、その名前に合せて
あります。10.3.7 の場合には次のような表示があります。
d169:~ makoto$ uname -sr
Darwin 7.7.0
d169:~ makoto$
この実行形式は展開すると、usr 以下に開きます。
ただ、現時点で、binary を使う利点はあまり思い着きません。
pkgsrc の実行形式が多く用意されていれば、一切コンパイルする
することなしに、パッケージ・システムを利用出来ますが、
現状では自分でコンパイルすることが必要なので、ここだけ実行形式
のものを利用することに何も利点がないという意味です。
とは言うものの
2005/03 に 2,200 くらい用意しました →
ftp://ftp.ki.nu/packages/powerpc-apple-darwin/7.8.0/All/
src の場合
実は、bootstrap-pkgsrc を src から作る場合に必要なものは
他の pkgsrc と全く同じところに入っています。
このため、bootstrap-pkgsrc を入れる場合にも、まず、
pkgsrc 全体(スケルトンと呼ぶ人もいます)
を持って来ます。
これにはいくつも方法があるので、
別に書いて
おきます
(
source の取得
)。簡単な例だけを一つ示します。
ここで参考になるのは次の URL です。
http://www.jp.netbsd.org/guide/en/chap-cvs.html
ここでは UFS の区画に p という名前を付けているとします
(Mac OS X では区画の名前は、かなり自由に変えられます)。
それは /Volumes/p という名前で参照出来ます。
まず その /Volumes/p を自分の持物にしておきます。
その後は cvs を使って anoncvs サーバから pkgsrc のスケルトン(枠)
をもらって来ます。
cd /Volumes/p
sudo chown `id -u`:`id -g` .
cvs -d :pserver:anoncvs@anoncvs.NetBSD.org:/cvsroot co pkgsrc
上の最後の行を入力する時のことですが、
もしモデムを使っていて、
回線が遅いという場合には、その代りに、
次のようにして -z3 などを付けて圧縮するようにした方がいいかも
知れません。
cvs -z3 -d :pserver:anoncvs@anoncvs.NetBSD.org:/cvsroot co pkgsrc
これらにはとても時間がかかります。また画面上にも多くの行が表示されます。
それを記録して、後からゆっくり確めたいということであれば、
cvs -d :pserver:anoncvs@anoncvs.NetBSD.org:/cvsroot co pkgsrc 2>err 1>log &
などとするのもいいかも知れません(これは bash の場合です)。
NetBSD の pkgsrc では、実行形式は /usr/pkg/bin に置きます。
それに相当するもののディレクトリを作っておきます。
また、
ここでは /Volumes/p という名前を使っていますが、
その二つをシンボリック・リンクを使って結びつけておきます。
sudo mkdir /Volumes/p/pkg
sudo ln -s /Volumes/p/pkg /usr/pkg
持って来た pkgsrc の中の pkgsrc/bootstrap
で 次のように入力します
cd /Volumes/p/pkgsrc/bootstrap
sudo ./bootstrap \
--prefix=/Volumes/p/pkg \
--pkgdbdir=/Volumes/p/pkgdb \
もし /usr/pkg などが次のようなままで良いなら、--prefix, --pkgdbdir
等は不要です。つまり、/usr や /var が case sensitive file system に
あり、開き容量が充分あれば、という意味です。
prefix /usr/pkg
pkgdbdir /var/db/pkg
もし bootstrap なんか知らない (bootstrap: command not found)
と言われた時には
cd /Volumes/p/pkgsrc/bootstrap
sudo sh bootstrap \
--prefix=/Volumes/p/pkg \
--pkgdbdir=/Volumes/p/pkgdb \
のように sh から bootstrap を呼ぶようにして下さい。/usr/pkgsrc で作業している
のであれば、
cd /usr/pkgsrc/bootstrap
sudo sh bootstrap
のようになります。
これにより、/Volumes/p の中には次の三つの directory が出来ています。
ディレクトリ | 内容 | リンクなど |
pkg | bin (実行形式) | ← /usr/pkg/bin |
sbin (pkg 用の道具) | ← /usr/pkg/sbin |
pkgdb | データベース |
pkgsrc | source、build の作業域 |
これで /usr/pkg/sbin 以下に pkg_add などが用意されます。
PATH 変数に /usr/pkg/bin と /usr/pkg/sbin を追加しておきます。
export PATH=/usr/pkg/bin:/usr/pkg/sbin:$PATH
bashrc
次に
ターミナル
の窓を開けた時にも、
PATH 変数が設定されているようにするには
~/.bashrc
と
~/.bash_profile
に
設定します。
-
~/.bashrc:
-
PATH=/Volumes/p/pkg/bin:/Volumes/p/pkg/sbin:${PATH}
- ~/.bash_profile
-
#!/bin/bash
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
pkgsrc
後は
必要だと思った
pkgsrc の下で BSD の make である bmake を使って、
bmake
sudo bmake install
sudo bmake package-install
などとするだけです。あるいはその前に
sudo bmake package
とすると、install はしないで、package を作ってくれるだけです。
初めから sudo make package とする方が便利かも知れません。
後者は実行形式のパッケージを
/Volumes/p/pkgsrc/packages/powerpc/All に
作ってくれます(ここに powerpc/ という字が入るかどうかは
/etc/mk.conf /usr/pkg/etc/mk.conf
の PACKAGES 変数の設定によります)。
入れたものが要らなくなったら
pkg_delete -f jless
のようにして消します。パッケージが作ってあれば、
cd /Volumes/p/pkgsrc/packages/powerpc/All に
pkg_add jless*
のようにして、また追加することが出来ます。
各論
各 pkgsrc については(まだ本当に少ししかありませんが)、
pkgsrc 各論
に書いてあります。また、pkg_add, pkg_delete などに
ついては
NetBSD 解説
の
一部
の
付近
にも書いてあります。
問題
例えば lang/perl58 で make した時に、
===> *** '/usr/pkg/sbin/download-vulnerability-list'.
===> Creating toolchain wrappers for perl-5.8.6nb2
/bin/sh: -c: line 1: syntax error near unexpected token `)'
*** Error code 2
となることがあります。これは Makefile の変数 X11BASE が空
になっているためです。NetBSD などでは /usr/X11R6 などのよう
に設定されているのですが Mac OS X では今のところ未定義に
なります。これは
/etc/mk.conf /usr/pkg/etc/mk.confに
X11BASE= /usr/X11R6
と書いておけば、解決します。
debug
pkgsrc は、それなりに良く考えられている仕組みですが、
その分、理解するのも、問題が起きたときの解決も、ちょっと
手間がかかります。
make
make install
などで問題が起きた場合、
pkgsrc/mk/bsd.pkg.mk に書いてある次の部分を参考にします。
# Debugging levels for this file, dependent on PKG_DEBUG_LEVEL definition
# 0 == normal, default, quiet operation
# 1 == all shell commands echoed before invocation
# 2 == shell "set -x" operation
PKG_DEBUG_LEVEL?= 0
_PKG_SILENT= @
_PKG_DEBUG= # empty
_PKG_DEBUG_SCRIPT= # empty
そうして、例えば、
/etc/mk.conf /usr/pkg/etc/mk.conf
に
PKG_DEBUG_LEVEL?= 1
と書いたり、
_PKG_SILENT= # was @ here
のようにすると、Makefile の動きが少し見えます。
以上について、
御意見・御質問がありましたら makoto at ki dot nu
までお送り下さい。
以前に用意した情報
以下の情報は微妙に情報が古いと言われています。
代りに
http://www.pkgsrc.org/
をごらん下さい。(2004/06/26)
NetBSD を使っていると、
その pkgsrc の便利さは格別です。
同じことが Mac OS X でも出来ないかなぁという時の為に:
ftp://ftp.netbsd.org/pub/NetBSD/packages/bootstrap-pkgsrc/
cd ~/Documents
mkdir local-src distfiles
cd distfiles
wget --passive \\
ftp://ftp.netbsd.org /pub/NetBSD/packages/
bootstrap-pkgsrc/bootstrap-pkgsrc-20040312.tar.gz
cd ../local-src
tar zxf ../distfiles/bootstrap-pkgsrc-20040312.tar.gz (See getting-started)
cd bootstrap-pkgsrc
less README.Darwin
./ufsdiskimage create ~/Documents/NetBSD 3072 ( /usr/pkg, /usr/pkgsrc に 3G 割当)
./ufsdiskimage mount ~/Documents/NetBSD
sudo chown `id -u`:`id -g` /Volumes/NetBSD
curl -O ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-current/tar_files/pkgsrc.tar.gz
tar -C /Volumes/NetBSD -zxvf pkgsrc.tar.gz && rm pkgsrc.tar.gz
sudo ./bootstrap \
--prefix=/Volumes/NetBSD/pkg \
--pkgdbdir=/Volumes/NetBSD/pkgdb \
--pkgsrcdir=/Volumes/NetBSD/pkgsrc
d176:/Volumes/NetBSD/pkgsrc/textproc/namazu2 makoto$ bmake
sh: line 1: /usr/pkg/sbin/pkg_info: No such file or directory
d176:/Volumes/NetBSD/pkgsrc/textproc/namazu2 makoto$ \
sudo ln -s /Volumes/NetBSD/pkg /usr/pkg
Password:
pkg_admin: Cannot chdir to /var/db/pkg: No such file or directory
sudo mkdir /var/db/pkg
- Zoularis
pkgsrc for non-NetBSD systems
-
http://www.netbsd.org/zoularis/
- bootstrap-pkgsrc
NetBSD 以外のシステム向けの pkgsrc
-
http://www.jp.netbsd.org/ja/zoularis/
-
pkgsrc for non-NetBSD systems
例えば Mac OS X の上で pkgsrc を作っていく場合
-
http://www.zoularis.org/
-
pkgsrc/cross/zoularis
同じものを NetBSD 側で用意する場合
-
http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/cross/zoularis/
|