[HOME] [github] [twitter] [blog] [fml4] [fml8] [北海道] Powered by NetBSD and [nuinui.net] .

CentOS で pkgsrc を使う場合の注意点

  1. 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

  2. pkgsrc のアップデートの際、 cvs が rsh を使う(古い)仕様のままなので ssh を強制してください。

    # cd /usr/pkgsrc
    # env CVS_RSH=ssh cvs update -d -P

  3. pkgsrc の作業を始める前に、 CentOS に足りないものをいくつか入れないといけません。

    pkgsrc は「コンパイルする」のがデフォルトですが、 CentOS は「コンパイルをしない」前提(バイナリ配布)なので、 ライブラリが足りなさ過ぎます。また、開発ツールも足りません。

    たいていのものは pkgsrc が自力でライブラリも作るのですが、 あまりにも基本的なものは自力で作る前に失敗してしまいます。 少なくとも gcc gcc-c++ ncurses-devel libtermcap-devel は必要らしいので、入れて下さい。

    # yum install gcc gcc-c++ ncurses-devel libtermcap-devel

  4. 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]

  5. 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 コマンドを実行して下さい。

  6. 最初に作るパッケージは pkgtools/digest

    念のため、 (bootstrap 後)、最初に作るパッケージは digest コマンドです。

    # ( cd /usr/pkgsrc/pkgtools/digest ; bmake package )
    これはパッケージ管理のために必須のソフトウエアです。

  7. 第二に、 端末制御ライブラリ(termcap や curses)を作ります。

    /usr/pkg/etc/mk.conf は、そのまま (デフォルトの PREFER_PKGSRC=NO のままで) ncurses をつくって下さい。

    # ( cd /usr/pkgsrc/devel/ncurses ; bmake package )

  8. この後は NetBSD 上での pkgsrc と同様です。

    なお pkgsrc でも static なものはうまく作れないようです。 あきらめましょう。 たとえば shells/static-tcsh は作れません。 普通の(つまり shared library な) shells/tcsh なら作れますので、 そちらをインストールして下さい。

    あとは、 tcsh の色キチを直す とかしないと目がつぶれそうです。

  9. 補足: PREFER_PKGSRC=YES 化

    極力 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 を実行してください。 今まで述べた操作を一式自動的に実行します。

  10. 補足: 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 エラーと言っているのです。

Notes

[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 なんて使わないと思いますけど…

[HOME] [github] [twitter] [blog] [fml4] [fml8] [北海道] Powered by NetBSD and [nuinui.net] .
Copyright (C) 1993-2022 Ken'ichi Fukamachi mail:< fukachan at fml.org >