pkgsrc.tar.gz のダウンロードは ftp ではなく wget を使ってください (ftp コマンドの挙動は由緒正し過ぎ == 古くさくて使えない)。
% su root # cd /usr # wget ftp://ftp.jp.netbsd.org/pub/pkgsrc/stable/pkgsrc.tar.gz # tar zxvf pkgsrc.tar.gz
pkgsrc のアップデートの際、 cvs が rsh を使う(古い)仕様のままなので ssh を強制してください。
# cd /usr/pkgsrc # env CVS_RSH=ssh cvs update -d -P
pkgsrc の作業を始める前に、 CentOS に足りないものをいくつか入れないといけません。
pkgsrc は「コンパイルする」のがデフォルトですが、 CentOS は「コンパイルをしない」前提(バイナリ配布)なので、 ライブラリが足りなさ過ぎます。また、開発ツールも足りません。
たいていのものは pkgsrc が自力でライブラリも作るのですが、 あまりにも基本的なものは自力で作る前に失敗してしまいます。 少なくとも gcc gcc-c++ ncurses-devel libtermcap-devel は必要らしいので、入れて下さい。
# yum install gcc gcc-c++ ncurses-devel libtermcap-devel
bootstrap のテストをします。うまくいくはず。
# cd /usr/pkgsrc/bootstrap/ # ./testbootstrapうまく最後まで終ったら、本番の bootstrap。 ./testbootstrap の中を見て真似 [1] をしましょう。見本を作っておいたので、それを使うと楽です。
# cd /usr/pkgsrc/bootstrap # wget ftp://ftp.fml.org/pub/NSRG/tips/CentOS/root/pkgsrc/bootstrap.sh # sh bootstrap.sh/usr/pkg の下にすべてインストールするようにしてあります。 [2]
make ではなく bmake を使うことに注意!
pkgsrc の作業では、 つねに make ではなく bmake (/usr/pkg/bin/bmake) を使います。 make を実行してしまうと、 OS デフォルトの方(GNU make)が動いてエラーになるので注意。
シェルの設定を編集し /usr/pkg/bin と /usr/pkg/sbin に PATH を通しておきましょう。
もしくは常に
# env PATH=/usr/pkg/bin:/usr/pkg/sbin:$PATH bmakeのように bmake コマンドを実行して下さい。
最初に作るパッケージは pkgtools/digest
念のため、 (bootstrap 後)、最初に作るパッケージは digest コマンドです。
# ( cd /usr/pkgsrc/pkgtools/digest ; bmake package )これはパッケージ管理のために必須のソフトウエアです。
第二に、 端末制御ライブラリ(termcap や curses)を作ります。
/usr/pkg/etc/mk.conf は、そのまま (デフォルトの PREFER_PKGSRC=NO のままで) ncurses をつくって下さい。
# ( cd /usr/pkgsrc/devel/ncurses ; bmake package )
この後は NetBSD 上での pkgsrc と同様です。
なお pkgsrc でも static なものはうまく作れないようです。 あきらめましょう。 たとえば shells/static-tcsh は作れません。 普通の(つまり shared library な) shells/tcsh なら作れますので、 そちらをインストールして下さい。
あとは、 tcsh の色キチを直す とかしないと目がつぶれそうです。
極力 pkgsrc 単体で動作する [3] ように (mk.conf を書き換え PREFER_PKGSRC=YES に)変更するなら、 ncurses を作成直後のタイミングで行ないます。
mk.conf の見本は作っておきました。以下の URL にあります。
# cd /usr/pkg/etc/ # mv mk.conf mk.conf.orig # wget ftp://ftp.fml.org/pub/NSRG/tips/CentOS/root/pkgsrc/mk.conf
なお、
ftp://ftp.fml.org/pub/NSRG/tips/CentOS/root/pkgsrc/以下に前述のファイルも含め見本が一式あります。 ファイル群を /root/pkgsrc にダウンロードし、 /root/pkgsrc/build.sh を実行してください。 今まで述べた操作を一式自動的に実行します。
補足: Circular dependency について
ERROR: This package has set PKG_FAIL_REASON: ERROR: Circular dependency detectedというエラーメッセージで止まることがあります。 たとえば、最初から PREFER_PKGSRC=YES で tcsh を作ろうとすると、 このエラーで止まります。
これは PREFER_PKGSRC=yes のため、 pkgsrc が自力で何とかしようとしておきてしまうエラーです。
pkgsrc はソースのダウンロードをするプログラム(ftp)を作ろうとし、 ftp (pkgsrc/net/tnftp) が pkgsrc/devel/ncurses に依存し、 ncurses はソースをダウンロードするために tnftp に依存し… という悪循環に陥っているためです。
そのために Circular dependency エラーと言っているのです。
[1] | まぁ、こんな感じで良いんじゃないでしょうかね。 # ./bootstrap \ --prefix=/usr/pkg \ --sysconfdir=/usr/pkg/etc \ --pkgdbdir=/usr/pkg/.db \ --ignore-user-check 2>&1 | \ tee BOOTSTRAP.LOG |
[2] | 注: /usr/pkg の下にすべていれるようにしてあります。 通常、データベースは /var/db/pkg を使っていますが、 あちこちに OS 本体と違うものが散らばるのは美しくありません。 また、 OS によっては OS 自体が /var/db/pkg を使っているため混ざってしまいます。 たとえば FreeBSD がそうです。 汚染区域は、できるだけ少なくするべきです。 pkgsrc 関連のファイルは /usr/pkg 以下に封じ込めたいので、 データベースは /usr/pkg/.db としています。 そういうわけで --pkgdbdir=/usr/pkg/.dbオプションを設定しています。 |
[3] | 本来は PREFER_PKGSRC が望ましい のですが、 「端末制御ライブラリではまりやすい」とか 後述する「Circular dependency」の問題があるため、 心配性な人は CentOS では PREFER_PKGSRC を頑張らない方がよいのかもしれません。 もっとも心配性な人は CentOS で pkgsrc なんて使わないと思いますけど… |
Copyright (C) 1993-2025 Ken'ichi Fukamachi mail:< fukachan at fml.org >