Table of Contents
CFLAGS
を無視するパッケージがあるのはなぜ?この節では、pkgsrc の特別な事柄に関する助言、技巧や要領のうち、 前章までに適当な掲載場所がなかったものを掲載しています。 ここでは、pkgsrc 利用者向けの情報と pkgsrc 開発者向けの情報を、どちらも掲載します。
pkgsrc の利用者向けに、以下のようなメーリングリストがあります。
pkgsrc-users: pkgsrc 関連の話題のほとんどをプラットフォームにかかわらず扱う汎用目的のメーリングリストです。 たとえば、pkgsrc の設定に関する助けの要請、 予期しない構築失敗、個々のパッケージの使用、 インストールした pkgsrc の更新、pkgsrc リリース枝に関する質問などです。 ここには、一般的なお知らせや、pkgsrc 利用者コミュニティーに影響のある変更 (たとえば、大規模な基盤の変更、新機能、パッケージ削除など) の提案も投稿されることがあります。
pkgsrc-bulk: pkgsrc のバルクビルドの結果が送付され、 その議論がおこなわれるメーリングリストです。
pkgsrc-changes: pkgsrc のすべての変更についての commit メッセージが流れるメーリングリストです。 毎日、 24 時間分のすべての commit メッセージをまとめて送る、 ダイジェスト版もあります。
参加するためには以下のようにして下さい。
%
echo subscribelistname
| mail majordomo@NetBSD.org
以上の各メーリングリストのアーカイブは http://mail-index.NetBSD.org/ から辿れます。
pkgviews は buildlink に密接に統合されています。
pkgviews の利用者向けの手引きは
pkgsrc/mk/buildlink3/PKGVIEWS_UG
にあります。
pkgsrc/pkgtools
ディレクトリー以下には、
pkgsrc の利用者および開発者それぞれにとって便利なユーティリティーがいくつもあります。
この節の目的は、このユーティリティーの存在と、
どんな場合に有用かを知っていただくことだけであり、
各パッケージの附属ドキュメントを引き写すことではありません。
pkgsrc が使用するユーティリティー (必要に応じて自動的にインストールされます):
pkgtools/x11-links
:
buildlink が使用するシンボリックリンクです。
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
:
インストール済みのパッケージを報告します。
個々のパッケージの保守や作成をする人のためのユーティリティー:
pkgtools/pkgdiff
: パッケージ用のパッチの作成や保守を自動化します
(pkgdiff, pkgvi, mkpatches, ...
が含まれます)。
pkgtools/rpm2pkg
,
pkgtools/url2pkg
: pkgsrc
への変換の補助ツールです。
pkgtools/gensolpkg
: pkgsrc を Solaris
パッケージに変換します。
pkgsrc を保守する人のためのユーティリティー (あるいは、もっと地味な pkg ユーティリティー)
pkgtools/pkg_comp
: chroot
領域でパッケージを構築します。
pkgtools/libkver
: chroot 環境でのクロス構築用に、
カーネルのバージョンを誤魔化します。
pkgsrc を root 以外のユーザーで使いたい場合は、いくつかの変数を設定すれば、
そのような環境で pkgsrc が動くようにすることができます。
最低限、UNPRIVILEGED
を “yes”
に設定することが必要です。こうすると非特権モードに切り替わり、
関連のある複数の変数が設定されて、
root 以外のユーザーがパッケージをインストールできるようになります。
標準状態の非特権モードでは不十分な場合は、
他の変数を調節するとよいでしょう。たとえば、
ユーザーやグループの自動検出により正しくない (あるいは使いたくない)
値が検出される場合は、それぞれ、
UNPRIVILEGED_USER
や
UNPRIVILEGED_GROUP
を設定すれば変更することができます。
なお、ブートストラップについては、bootstrap
スクリプトに “--ignore-user-check” フラグを与えると、
標準で使われるインストール先が
~/pkg
以下の複数のディレクトリーになるため、
非 root 用の構成にしやすくなることを覚えておいてください。このディレクトリーは、
他のディレクトリーの配置が細かく調節可能であるのと同様に、
スクリプトに “--prefix”
フラグを与えて上書きすることができます。
標準では、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
システム附属の X11 (/usr/X11R6
,
/usr/openwin
, ...) ではなく pkgsrc の
modular X.org を使いたい場合は、mk.conf
に以下の行を追加する必要があります。
X11_TYPE=modular
DragonFly オペレーティングシステムは、標準で、 この pkgsrc の modular X.org の X11 の実装を使います。
もし、あなたが防火壁の内側にいて、インターネットのホストに直接接続できない (つまりNATを使っていない)場合、適切なプロキシーホストを指定することができます。 これはURL形式の環境変数で指定します。例えば、Amdahlドメインにおいては、 “orpheus.amdahl.com” というマシンは防火壁のひとつで、プロキシーポート番号として、 80番のポートを使用します。この場合、proxy環境変数は以下のようになります。
ftp_proxy=ftp://orpheus.amdahl.com:80/ http_proxy=http://orpheus.amdahl.com:80/
distfileの取得にどのユーティリティーを使っているかによります。
bsd.pkg.mk
は、以下のリストのなかで利用可能なコマンドのうち、
最初のものをFETCH_CMD
に割り当てます:
${LOCALBASE}/bin/ftp
/usr/bin/ftp
NetBSD のデフォルトのインストールでは、/usr/bin/ftp
となり、これは自動的に、
最初はパッシブ接続を試みます。そして、サーバーがパッシブ接続を拒否した場合
は、アクティブ接続に切り替わります。これ以外のツールの場合は、
mk.conf
に以下の設定を追加してください。
PASSIVE_FETCH=1
これを設定すると、
/usr/bin/ftp
はアクティブ転送への切り替えをおこなわなくなります。
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
pkgtools/pkg_install
パッケージのコンパイル時に、makeが
/usr/share/tmac/tmac.andoc
の作り方がわからないというエラーを出します。これは、そのマシンに
NetBSD の基本配布物の“text”セット(nroffなど)
がインストールされていないことを意味しています。マニュアルページの整形ができるようにするため、
“text”セットをインストールしてください。
このpkgtools/pkg_install
パッケージの事例は、
環境変数かmk.conf
のどちらかで
NOMAN=YES
を設定して回避することもできます。
NetBSD のインストール時にコンパイラー一式comp.tgz
をインストールしなかったからです。comp.tgz
を入手し、
/
で展開してインストールしてください:
#
cd /
#
tar --unlink -zxvpf .../comp.tgz
comp.tgz
は NetBSD のどのリリースにも含まれていますので、
あなたがインストールしたリリース (uname
-rで調べられます) に合ったものを入手してください。
パッケージのインストールを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
システム管理者は、設定ファイルがインストールされる場所を選ぶことができます。
標準の設定では、設定ファイルはすべて ${PREFIX}/etc
またはそのサブディレクトリー以下にインストールされます。
設定ファイルのインストール先は、あなたの都合 (たとえば、
NFS でエクスポートされた読み込み専用の PREFIX
で、パッケージの設定をマシン毎にする必要がある場合)
にあわせて調整することができます。
標準の設定を変えるために、(mk.conf
で) PKG_SYSCONFBASE
変数を、
好みの設定用ディレクトリーを指すように変えることができます。
一般的な設定例としては、/etc
や
/etc/pkg
などがあります。
さらに、PKG_SYSCONFDIR.${PKG_SYSCONFVAR}
変数を設定することで、パッケージ毎に設定用ディレクトリーを変更することができます。
PKG_SYSCONFVAR
の値は、通常は変更対象のパッケージ名に合わせたもの、
つまり、PKGBASE
の値にします。
なお、この設定を変更した後は、影響を受けるパッケージをすべて再構築し、 再インストールする必要があります。
サードパーティーのソフトウェアにはしばしばバグがあること、
そして、バグのなかにはマシンをアタッカーの攻撃に対して脆弱な状態にするものもあることに、
どうか注意してください。そのような攻撃にさらされることを減らすために、NetBSD
パッケージチームでは、pkgsrc化されたことのあるパッケージに関する既知の攻撃のデータベースを保守しています。
このデータベースを自動的にダウンロードして、
システムにインストールされている全パッケージのセキュリティー監査をおこなうことができます。
これをおこなうには、以下の二つのツール (pkgtools/pkg_install
パッケージの一部としてインストールされます) を使います。
pkg_admin fetch-pkg-vulnerabilities: セキュリティー脆弱性情報のリストの ダウンロードを簡単にできるようにするものです。この脆弱性情報のリストは、 pkgsrc セキュリティーチームが最新の状態に保っており、 NetBSD ftpサーバーで配布されています。
pkg_admin audit: マシンの監査を簡単にできるようにするもので、 既知の各脆弱性の確認をします。 脆弱性のあるパッケージがインストールされていた場合、そのことを標準出力に出力します。 この出力には、脆弱性の種類の説明と詳細情報のURLが含まれます。
これらのツールを使うよう強くおすすめします。
“pkg_install” をインストールした後に、
パッケージのメッセージを読んでください。このメッセージは pkg_info -D
pkg_install
を実行すれば表示できます。
このパッケージをインストールすると、pkgsrc は各パッケージの構築前にこのパッケージを使ってセキュリティーのチェックをするようになります。 このチェックを制御する方法についてはSection 5.2, “構築の過程に影響を及ぼす変数”をご覧ください。
mk.conf
で
CFLAGS
変数に独自の設定をした場合、
設定されたフラグは環境変数によって ./configure
スクリプトに渡されてから make(1) に渡されます。
パッケージの作者によっては、
環境変数で渡された CFLAGS
を、
パッケージの Makefile
で上書きして、
無視するようにしていることがあります。
現在のところ、この問題の解決策はありません。
独自の CFLAGS
を使うことがどうしても必要な場合は、
パッケージのディレクトリーで make patch を実行してから、
Makefile
と
Makefile.in
をすべて調べて、
CFLAGS
を明示的に定義していないかを調べてください。
ふつうは、その部分を削除することができます。
ただし、一部の“小賢しい”プログラマーは、
彼らが選んだ特定の CFLAGS
の組合せのもとでしか動作しないような、
まずいコードを書いていることに注意してください。
使っている pkgsrc ツリーの一貫性を確認します。 この問題の原因としてありがちなのは、 時間などを節約するために pkgsrc の一部だけを更新していたというものです。 pkgsrc は小さなシステムの寄せ集めではなく、ひとつの大きなシステムですので、 pkgsrc ツリー全体を更新しておかないと動かなくなるような変更が時々おこなわれます。
CVS の衝突が起きていないことを確認します。 pkgsrc のファイルすべてについて、 “<<<<<<” や “>>>>>>” という文字列を検索します。
古いパッケージが展開されていないことを確認します。 これを確認するには、make clean clean-depends を実行します。
以上の確認をおこなってもなお問題がある場合は、
pkgsrc-users
メーリングリストにメールを出してください。
あなたが pkgsrc のファイルに変更を加えており、かつ、
他の誰かが CVS リポジトリーにおいて同じファイルに変更を加えています。
この変更がいずれもファイル内の同じ箇所に対するものであるため、
あなたが pkgsrc を更新したときに、変更が衝突したという印を
cvs
コマンドがファイルにつけたのです。
この印があるために、ファイルが妥当な
Makefile
ではなくなっています。
ファイルの内容を見てください。あなたが独自に加えた変更がもはや不要であれば、 ファイルを削除してからそのディレクトリーで cvs -q update -dP を実行し、最新版のファイルをダウンロードすることができます。