Chapter 9. よくある質問

Table of Contents

9.1. pkgについて話しあうためのメーリングリストはありますか?
9.2. pkgviews のドキュメンテーションはどこにあるか?
9.3. パッケージ管理用ユーティリティー (pkgtools)
9.4. pkgsrc を root 以外で使う方法
9.5. distfile 取得時に、転送を再開する方法は?
9.6. pkgsrc の modular X.org をインストールあるいは使用する方法は?
9.7. 防火壁の内側からファイルを取得する方法
9.8. どうすればmake fetchでpassive FTPを使用することができますか?
9.9. 一度にすべてのdistfileを取得する方法
9.10. Don't know how to make /usr/share/tmac/tmac.andoc ってどういうこと?
9.11. Could not find bsd.own.mk ってどういうこと?
9.12. pkgsrcで'sudo'を使う
9.13. 設定ファイルの置き場所を変更する方法は?
9.14. 自動セキュリティーチェック
9.15. CFLAGS を無視するパッケージがあるのはなぜ?
9.16. パッケージが構築できません。どうすればいい?
9.17. Makefile appears to contain unresolved cvs/rcs/??? merge conflicts ってどういうこと?

この節では、pkgsrc の特別な事柄に関する助言、技巧や要領のうち、 前章までに適当な掲載場所がなかったものを掲載しています。 ここでは、pkgsrc 利用者向けの情報と pkgsrc 開発者向けの情報を、どちらも掲載します。

9.1. pkgについて話しあうためのメーリングリストはありますか?

pkgsrc の利用者向けに、以下のようなメーリングリストがあります。

  • pkgsrc-users: pkgsrc 関連の話題のほとんどをプラットフォームにかかわらず扱う汎用目的のメーリングリストです。 たとえば、pkgsrc の設定に関する助けの要請、 予期しない構築失敗、個々のパッケージの使用、 インストールした pkgsrc の更新、pkgsrc リリース枝に関する質問などです。 ここには、一般的なお知らせや、pkgsrc 利用者コミュニティーに影響のある変更 (たとえば、大規模な基盤の変更、新機能、パッケージ削除など) の提案も投稿されることがあります。

  • pkgsrc-bulk: pkgsrc のバルクビルドの結果が送付され、 その議論がおこなわれるメーリングリストです。

  • pkgsrc-changes: pkgsrc のすべての変更についての commit メッセージが流れるメーリングリストです。 毎日、 24 時間分のすべての commit メッセージをまとめて送る、 ダイジェスト版もあります。

参加するためには以下のようにして下さい。

% echo subscribe listname | mail majordomo@NetBSD.org

以上の各メーリングリストのアーカイブは http://mail-index.NetBSD.org/ から辿れます。

9.2. pkgviews のドキュメンテーションはどこにあるか?

pkgviews は buildlink に密接に統合されています。 pkgviews の利用者向けの手引きは pkgsrc/mk/buildlink3/PKGVIEWS_UG にあります。

9.3. パッケージ管理用ユーティリティー (pkgtools)

pkgsrc/pkgtools ディレクトリー以下には、 pkgsrc の利用者および開発者それぞれにとって便利なユーティリティーがいくつもあります。 この節の目的は、このユーティリティーの存在と、 どんな場合に有用かを知っていただくことだけであり、 各パッケージの附属ドキュメントを引き写すことではありません。

pkgsrc が使用するユーティリティー (必要に応じて自動的にインストールされます):

OS ツールの拡張 (必要に応じて自動的にインストールされます):

  • pkgtools/digest: 各種チェックサム(SHA1 など) を計算します。

  • pkgtools/libnbcompat: pkgsrc ツール用の互換ライブラリーです。

  • pkgtools/mtree: BSD 以外のシステムにはネイティブの mtree がないため、これがインストールされます。

  • pkgtools/pkg_install: /usr/sbin/pkg_install を最新版に置き換えます。または、 pkg_install のないオペレーティングシステム用です。

pkgsrc が使用するユーティリティー (自動ではインストールされません):

  • pkgtools/pkg_tarup: インストールされているパッケージをもとに、 バイナリーパッケージを作成します。 make replace が古いパッケージを保存するのに使います。

  • pkgtools/dfdisk: distfile を複数の場所から fetch できる機能を pkgsrc に追加します。現在のところ、 以下の方法に対応しています: 複数の CD-ROM および FTP/HTTP のネットワーク接続。

  • pkgtools/xpkgwedge: X11 パッケージの場所を変えます (標準で有効となります)。

  • devel/cpuflags: お使いの CPU とコンパイラー用にコードを最適化するための コンパイラーのフラグを考えてくれます。

インストールしたパッケージの追跡や最新への追従用などのユーティリティー:

  • pkgtools/pkg_chk: インストールされているパッケージのバージョンが pkgsrc の最新バージョンと異なるものを報告します。

  • pkgtools/pkgdep: パッケージ更新計画の策定を支援するため、 パッケージの依存関係のグラフを作成します。

  • pkgtools/pkgdepgraph: pkgtools/pkgdep の出力をもとに (graphviz を使って) 図表を作成します。

  • pkgtools/pkglint: pkglint(1) プログラムは pkgsrc の個々のパッケージに誤りがないか検査します。

  • pkgtools/lintpkgsrc: lintpkgsrc(1) プログラムは pkgsrc システム全体に対して各種の検査をおこないます。

  • pkgtools/pkgsurvey: インストール済みのパッケージを報告します。

個々のパッケージの保守や作成をする人のためのユーティリティー:

pkgsrc を保守する人のためのユーティリティー (あるいは、もっと地味な pkg ユーティリティー)

  • pkgtools/pkg_comp: chroot 領域でパッケージを構築します。

  • pkgtools/libkver: chroot 環境でのクロス構築用に、 カーネルのバージョンを誤魔化します。

9.4. pkgsrc を root 以外で使う方法

pkgsrc を root 以外のユーザーで使いたい場合は、いくつかの変数を設定すれば、 そのような環境で pkgsrc が動くようにすることができます。 最低限、UNPRIVILEGEDyes に設定することが必要です。こうすると非特権モードに切り替わり、 関連のある複数の変数が設定されて、 root 以外のユーザーがパッケージをインストールできるようになります。

標準状態の非特権モードでは不十分な場合は、 他の変数を調節するとよいでしょう。たとえば、 ユーザーやグループの自動検出により正しくない (あるいは使いたくない) 値が検出される場合は、それぞれ、 UNPRIVILEGED_USERUNPRIVILEGED_GROUP を設定すれば変更することができます。

なお、ブートストラップについては、bootstrap スクリプトに --ignore-user-check フラグを与えると、 標準で使われるインストール先が ~/pkg 以下の複数のディレクトリーになるため、 非 root 用の構成にしやすくなることを覚えておいてください。このディレクトリーは、 他のディレクトリーの配置が細かく調節可能であるのと同様に、 スクリプトに --prefix フラグを与えて上書きすることができます。

9.5. distfile 取得時に、転送を再開する方法は?

標準では、pkgsrc の転送再開機能は有効になっていませんが、 mk.conf にオプション PKG_RESUME_TRANSFERS=YES を追加すれば、 この機能を有効にすることができます。こうすると、fetch している最中に、 不完全な distfile があった場合、pkgsrc はそのファイルの残りの部分を取得しようとします。

また、 FETCH_CMD 変数を変更すれば、 標準である ftp(1) 以外のプログラムを使うこともできます。 この変数値を ftp, fetch, wget または curl にすると、指定したプログラムを使うことができます。 このほか、変数値を manual にすると、取得をしないようにすることができます。 変数値を custom にすると、システム標準の設定を使わないようになり、 取得プログラムに対する依存性も追わないようになります。 この場合は、FETCH_CMD, FETCH_BEFORE_ARGS, FETCH_RESUME_ARGS, FETCH_OUTPUT_ARGS, FETCH_AFTER_ARGS の各変数を設定する必要があります。

たとえば、 ダウンロードに wget を使いたい場合は、以下のような設定が必要です。

FETCH_USING=	wget

9.6. pkgsrc の modular X.org をインストールあるいは使用する方法は?

システム附属の X11 (/usr/X11R6, /usr/openwin, ...) ではなく pkgsrc の modular X.org を使いたい場合は、mk.conf に以下の行を追加する必要があります。

X11_TYPE=modular

Note

DragonFly オペレーティングシステムは、標準で、 この pkgsrc の modular X.org の X11 の実装を使います。

9.7. 防火壁の内側からファイルを取得する方法

もし、あなたが防火壁の内側にいて、インターネットのホストに直接接続できない (つまりNATを使っていない)場合、適切なプロキシーホストを指定することができます。 これはURL形式の環境変数で指定します。例えば、Amdahlドメインにおいては、 orpheus.amdahl.com というマシンは防火壁のひとつで、プロキシーポート番号として、 80番のポートを使用します。この場合、proxy環境変数は以下のようになります。

ftp_proxy=ftp://orpheus.amdahl.com:80/
http_proxy=http://orpheus.amdahl.com:80/

9.8. どうすればmake fetchでpassive FTPを使用することができますか?

distfileの取得にどのユーティリティーを使っているかによります。 bsd.pkg.mkは、以下のリストのなかで利用可能なコマンドのうち、 最初のものをFETCH_CMDに割り当てます:

  • ${LOCALBASE}/bin/ftp

  • /usr/bin/ftp

NetBSD のデフォルトのインストールでは、/usr/bin/ftpとなり、これは自動的に、 最初はパッシブ接続を試みます。そして、サーバーがパッシブ接続を拒否した場合 は、アクティブ接続に切り替わります。これ以外のツールの場合は、 mk.confに以下の設定を追加してください。 PASSIVE_FETCH=1

これを設定すると、 /usr/bin/ftp はアクティブ転送への切り替えをおこなわなくなります。

9.9. 一度にすべてのdistfileを取得する方法

make fetchを実行できない職場や大学において、 一回のバッチ処理で、すべてのdistfileをダウンロードしたいと思うことがあるかもしれません。ftp.NetBSD.org に distfile が置かれていますが、 このディレクトリーをまるごとダウンロードするのは不適切です。

現時点では、make fetch-list/usr/pkgsrcまたはそのサブディレクトリーで実行し、 その結果のリストを職場や学校のマシンに持ってきて、使用してくださいとしかいえません。 NetBSD と互換な ftp(1) (tnftpなど)が使えない場合は、 URLを指定して取得ができるコマンドを FETCH_CMDに指定することを忘れないでください:

自宅で:

% cd /usr/pkgsrc
% make fetch-list FETCH_CMD=wget DISTDIR=/tmp/distfiles >/tmp/fetch.sh
% scp /tmp/fetch.sh work:/tmp

職場で:

% sh /tmp/fetch.sh

実行後、 /tmp/distfiles を tar で固めて自宅に持って帰ります。

NetBSD で動いているマシンがあって、すべてのdistfile (そのマシンのアーキテクチャー向けではないものも含む)を取得したい場合は、 上述のmake fetch-listの方法を使うか、 以下のようにしてdistfileを直接取得することができます。

% make mirror-distfiles

NO_{SRC,BIN}_ON_{FTP,CDROM} も無視したい場合は、 以下のようにしてすべてのものを取得することができます。

% make fetch NO_SKIP=yes

9.10. Don't know how to make /usr/share/tmac/tmac.andoc ってどういうこと?

pkgtools/pkg_installパッケージのコンパイル時に、makeが /usr/share/tmac/tmac.andoc の作り方がわからないというエラーを出します。これは、そのマシンに NetBSD の基本配布物のtextセット(nroffなど) がインストールされていないことを意味しています。マニュアルページの整形ができるようにするため、 textセットをインストールしてください。

このpkgtools/pkg_installパッケージの事例は、 環境変数かmk.confのどちらかで NOMAN=YESを設定して回避することもできます。

9.11. Could not find bsd.own.mk ってどういうこと?

NetBSD のインストール時にコンパイラー一式comp.tgz をインストールしなかったからです。comp.tgzを入手し、 /で展開してインストールしてください:

# cd /
# tar --unlink -zxvpf .../comp.tgz

comp.tgzは NetBSD のどのリリースにも含まれていますので、 あなたがインストールしたリリース (uname -rで調べられます) に合ったものを入手してください。

9.12. pkgsrcで'sudo'を使う

パッケージのインストールをroot以外のユーザーで実行し、 root権限が必要なところではpkgsrcの su(1) 機能を使う場合、 必要なパッケージをインストールするたびに rootのパスワードを打つのは面倒かもしれません。これを避けるために、 パスワードを一定時間保持してくれるsudoパッケージを使うことができます。 sudoを使うには、sudoを(バイナリーパッケージ、またはsecurity/sudoのいずれかから) インストールしてから、mk.conf の、 LOCALBASE 変数の定義より の部分に、以下の内容を書いておきます。

.if exists(${LOCALBASE}/bin/sudo)
SU_CMD=        ${LOCALBASE}/bin/sudo /bin/sh -c
.endif

9.13. 設定ファイルの置き場所を変更する方法は?

システム管理者は、設定ファイルがインストールされる場所を選ぶことができます。 標準の設定では、設定ファイルはすべて ${PREFIX}/etc またはそのサブディレクトリー以下にインストールされます。 設定ファイルのインストール先は、あなたの都合 (たとえば、 NFS でエクスポートされた読み込み専用の PREFIX で、パッケージの設定をマシン毎にする必要がある場合) にあわせて調整することができます。

標準の設定を変えるために、(mk.conf で) PKG_SYSCONFBASE 変数を、 好みの設定用ディレクトリーを指すように変えることができます。 一般的な設定例としては、/etc/etc/pkg などがあります。

さらに、PKG_SYSCONFDIR.${PKG_SYSCONFVAR} 変数を設定することで、パッケージ毎に設定用ディレクトリーを変更することができます。 PKG_SYSCONFVAR の値は、通常は変更対象のパッケージ名に合わせたもの、 つまり、PKGBASE の値にします。

なお、この設定を変更した後は、影響を受けるパッケージをすべて再構築し、 再インストールする必要があります。

9.14. 自動セキュリティーチェック

サードパーティーのソフトウェアにはしばしばバグがあること、 そして、バグのなかにはマシンをアタッカーの攻撃に対して脆弱な状態にするものもあることに、 どうか注意してください。そのような攻撃にさらされることを減らすために、NetBSD パッケージチームでは、pkgsrc化されたことのあるパッケージに関する既知の攻撃のデータベースを保守しています。 このデータベースを自動的にダウンロードして、 システムにインストールされている全パッケージのセキュリティー監査をおこなうことができます。 これをおこなうには、以下の二つのツール (pkgtools/pkg_install パッケージの一部としてインストールされます) を使います。

  1. pkg_admin fetch-pkg-vulnerabilities: セキュリティー脆弱性情報のリストの ダウンロードを簡単にできるようにするものです。この脆弱性情報のリストは、 pkgsrc セキュリティーチームが最新の状態に保っており、 NetBSD ftpサーバーで配布されています。

    ftp://ftp.NetBSD.org/pkgsrc/distfiles/pkg-vulnerabilities

  2. pkg_admin audit: マシンの監査を簡単にできるようにするもので、 既知の各脆弱性の確認をします。 脆弱性のあるパッケージがインストールされていた場合、そのことを標準出力に出力します。 この出力には、脆弱性の種類の説明と詳細情報のURLが含まれます。

これらのツールを使うよう強くおすすめします。 pkg_install をインストールした後に、 パッケージのメッセージを読んでください。このメッセージは pkg_info -D pkg_install を実行すれば表示できます。

このパッケージをインストールすると、pkgsrc は各パッケージの構築前にこのパッケージを使ってセキュリティーのチェックをするようになります。 このチェックを制御する方法についてはSection 5.2, “構築の過程に影響を及ぼす変数”をご覧ください。

9.15. CFLAGS を無視するパッケージがあるのはなぜ?

mk.confCFLAGS 変数に独自の設定をした場合、 設定されたフラグは環境変数によって ./configure スクリプトに渡されてから make(1) に渡されます。 パッケージの作者によっては、 環境変数で渡された CFLAGS を、 パッケージの Makefile で上書きして、 無視するようにしていることがあります。

現在のところ、この問題の解決策はありません。 独自の CFLAGS を使うことがどうしても必要な場合は、 パッケージのディレクトリーで make patch を実行してから、 MakefileMakefile.in をすべて調べて、 CFLAGS を明示的に定義していないかを調べてください。 ふつうは、その部分を削除することができます。 ただし、一部の小賢しいプログラマーは、 彼らが選んだ特定の CFLAGS の組合せのもとでしか動作しないような、 まずいコードを書いていることに注意してください。

9.16. パッケージが構築できません。どうすればいい?

  1. 使っている pkgsrc ツリーの一貫性を確認します。 この問題の原因としてありがちなのは、 時間などを節約するために pkgsrc の一部だけを更新していたというものです。 pkgsrc は小さなシステムの寄せ集めではなく、ひとつの大きなシステムですので、 pkgsrc ツリー全体を更新しておかないと動かなくなるような変更が時々おこなわれます。

  2. CVS の衝突が起きていないことを確認します。 pkgsrc のファイルすべてについて、 <<<<<<>>>>>> という文字列を検索します。

  3. 古いパッケージが展開されていないことを確認します。 これを確認するには、make clean clean-depends を実行します。

  4. 以上の確認をおこなってもなお問題がある場合は、 pkgsrc-users メーリングリストにメールを出してください。

9.17. Makefile appears to contain unresolved cvs/rcs/??? merge conflicts ってどういうこと?

あなたが pkgsrc のファイルに変更を加えており、かつ、 他の誰かが CVS リポジトリーにおいて同じファイルに変更を加えています。 この変更がいずれもファイル内の同じ箇所に対するものであるため、 あなたが pkgsrc を更新したときに、変更が衝突したという印を cvs コマンドがファイルにつけたのです。 この印があるために、ファイルが妥当な Makefile ではなくなっています。

ファイルの内容を見てください。あなたが独自に加えた変更がもはや不要であれば、 ファイルを削除してからそのディレクトリーで cvs -q update -dP を実行し、最新版のファイルをダウンロードすることができます。