日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.2-RELEASE-K, 8.0-RELEASE-K は、プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.2-RELEASE-K, 8.0-RELEASE-K は、全翻訳済み)
6.4-STABLE-K, 7.2-STABLE-K, 8.0-STABLE-K は現在、 作成中で日々更新されています。 最新の snapshots を元に作成しています。
PKG_ADD(1) FreeBSD 一般コマンドマニュアル PKG_ADD(1)
名称
pkg_add - ソフトウェア配布 package をインストールするプログラム
書式
pkg_add [-vInfrRMS] [-t template] [-p prefix] pkg-name [pkg-name ...]
解説
pkg_add コマンドは、 pkg_create(1) コマンドにより作成された package (訳
注: FreeBSD の package system におけるパッケージを指す場合にこう表記しま
す) を展開するのに用いられます。
警告
pkg_add コマンドは package ファイルに含まれるスクリプトやプログラムを実行
することがあるので、あなたのシステムは、危険な配布ファイルを作る極悪人か
らの ``トロイの木馬'' や他の巧妙な攻撃などを受ける可能性があります。
package ファイルを提供する人物の能力と身元を確認するとよいでしょう。より
進んだ安全のためには、package を展開するのに -M フラグを用い、その内容
と、スクリプトがシステムに害をおよぼさないかを確認します。 +INSTALL,
+POST-INSTALL, +DEINSTALL, +REQUIRE, +POST-INSTALL, +REQUIRE, +MTREE_DIRS
の各ファイルには特に注意を払い、+CONTENTS ファイルの @cwd, @mode (setuid
をチェック), @dirrm, @exec, @unexec ディレクティブを調べてください。
package ファイルを調べるのには pkg_info(1) コマンドも使えます。
オプション
以下のコマンドラインオプションが提供されています:
pkg-name [pkg-name ...]
指定された package がインストールされます。 - という名前が指定さ
れると、 pkg_add は stdin から読み込みます。 package がカレント
ディレクトリに見つからないと、 pkg_add は PKG_PATH で指定された各
ディレクトリを探します。
-v 饒舌な出力に切り替えます。
-I package にインストール用スクリプト (pre-install または post
install) が存在しても、それを実行しません。
-n 実際にはインストールを行わず、インストールした場合に実行されるで
あろうステップを表示します。
-R package のインストール結果を記録しません。このオプションは、後で
アンインストールすることを不可能にするため、自分が何をしているか
を理解している人のみ使ってください。
-r リモートフェッチ機能を使用します。適切なオブジェクト形式とリリー
スを決定してから、 package を取得してインストールします。
-f あらかじめ必要な package がインストールされていなかったり、
requirements スクリプトが失敗した場合にも強制的にインストールしま
す。これは pkg_add が見つからない必要な package を探して自動的に
インストールすることを止めるわけではなく、見つからない場合でも中
断しないようにします。
-p prefix
package からファイルを展開するディレクトリの前に prefix を付けま
す。 package がデフォルトディレクトリを保持している場合には、この
オプションで変更できます。 pkg_add はディレクトリ設定が相対的に行
われているか、絶対的に行われているかを知る術がないので、最初の
@cwd ディレクティブのみが変更されることに注意してください。複数回
のディレクトリ変更が行われることはまれですが、実際にあった場合、
すべてのディレクトリ変更を制御したくなるでしょう。この場合、
MASTER モード、 SLAVE モードの使用を検討してみてください (オプ
ション -M と -S を参照)。
-t template
``作業領域'' を作成する際に、 mktemp(3) への入力として template
を用います。これはデフォルトでは /var/tmp/instmp.XXXXXX という文
字列ですが、 /var/tmp ディレクトリの容量が制限されているような状
況では変更する必要があるかもしれません。 mktemp(3) が一意の ID を
用いるために必要な `X' の文字をいくつか残しておくことを忘れないで
ください。
作業領域 template を package ファイルがインストールされるディレク
トリと同じディスクパーティションに設定することによって、パフォー
マンスを高めることが可能です (大抵は /usr )。
-M MASTER モードで実行します。これは pkg_add のとても特殊な実行モー
ドであり、 SLAVE モードと共に実行しなければなりません。このモード
で実行されると、 pkg_add は一時的な作業領域 ( -t オプションを参
照) へ package を展開する以上のことはせず、現在の作業領域ディレク
トリ名を頭に付加した packing list を標準出力に出力します(標準出力
は sed(1) のようなプログラムにフィルタされているかもしれません)。
SLAVE モードと共に用いると、中身を処理する前に package 構造に大き
な変更を加えることが可能になります。
-S SLAVE モードで実行します。これは pkg_add のとても特殊な実行モード
であり、 MASTER モードと共に実行しなければなりません。このモード
で実行されると、 pkg_add は package の内容がすでに作業領域に展開
され、その場所が標準入力から文字列として入力されることを想定しま
す。完全な packing list も stdin から読み込まれ、その後中身が通常
どおり処理されます。
一つ以上の pkg-name 引数を指定することが可能で、それらは package を含む
ファイル名 (通常拡張子 ``.tbz'' で終わります) か、ftp サイトにあるファイ
ルを示す URL のどちらかになります。したがって、anonymous ftp から直接ファ
イルを展開することが可能です (例えば pkg_add
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/shells/bash-1.14.7.tbz)
。注意: もし上記のような転送で用いる ftp で passive mode を利用したいな
ら、環境変数 FTP_PASSIVE_MODE に何らかの値を設定する必要があります。そう
でなければ、より一般的な ACTIVE モードが利用されます。もしうまく動作して
いることがわかっているサイトから package を得ようとして pkg_add が常に失
敗する場合、あなたが passive mode の ftp を使う必要のあるファイアウォール
の中にいるのが原因である場合があります。
技術詳細
pkg_add ユーティリティは、各 package の "packing list" を /tmp (設定され
ている場合には PKG_TMPDIR) 中の特別な作業ディレクトリに展開し、中身を解析
し、package の内容を完全に展開するために以下の手順を実行します:
1. package がすでにインストールされている、と記録されているかどうかを
チェックします。もしそうならインストールを中断します。
2. package が、既にインストール済の package と衝突するかどうかをチェッ
クします (@conflicts ディレクティブを読みます。 pkg_create(1) を参
照)。もしそうならインストールを中断します。
3. packing list に書かれている、package の全依存関係をスキャンします
(@pkgdep ディレクティブを読みます。 pkg_create(1) を参照)。もし必須
の package が現在インストールされていなければ、それを見つけてインス
トールしようとします。ない package がみつからなかったりインストール
できなかったりすると、インストールを中断します。
4. package がどのようにシステムに追加されるかを制御する @option ディレ
クティブを検索します。このマニュアルページを書いている時点では、実装
されているオプションは @option extract-in-place のみであり、これは
/tmp 内の作業領域を経由しないで、 package を最終的なディレクトリに直
接展開するようにします。
5. @option extract-in-place が指定されていれば、package は最終的な場所
に直接展開され、そうでなければ作業領域内に展開されます。
6. package が require ファイル ( pkg_create(1) を参照) を含んでいる場
合、そのファイルを以下の引数を付けて実行します:
pkg-name INSTALL
ここで pkg-name は問題としている package の名前であり、 INSTALL キー
ワードはインストールの requirements チェックであることを示しています
(これは複数の機能を提供するひとつのスクリプトを用いようとする場合に
有用です)。
7. package に pre-install スクリプトが存在する場合、以下の引数を付けて
実行されます:
script pkg-name PRE-INSTALL
ここで pkg-name は対象の package 名であり、 PRE-INSTALL はこれがイン
ストール前のフェーズであることを示すキーワードです。
注: ( -i および -I のフラグを pkg_create(1) に使用することにより)
package 作成時に pre-install と post-install のスクリプトが別々に与
えられる場合には、 PRE-INSTALL キーワードは登場しません。
8. @option extract-in-place が指定されていない場合、packing list (
+CONTENTS ファイル) が作業領域から最終的な場所にファイルを移動 (必要
ならコピー) するために参照されます。
9. package が mtreefile ファイル ( pkg_create(1) を参照) を含む場
合、mtree が以下の引数を付けて実行されます:
mtree -u -f mtreefile -d -e -p prefix
ここで prefix は -p フラグが指定されていればその prefix、 -p フラグ
が指定されていない場合にはこの package の最初の @cwd ディレクティブ
のディレクトリ名が prefix になります。
10. package に post-install スクリプトが含まれる場合、
script pkg-name POST-INSTALL
として実行されます。ここで pkg-name は対象の package 名であり、
POST-INSTALL はこれがインストール後のフェーズであることを示すキー
ワードです。
注: ( -i および -I のフラグを pkg_create(1) に使用することにより)
package 作成時に pre-install と post-install のスクリプトが別々に与
えられる場合には、 POST-INSTALL キーワードは登場しません。
POST-INSTALL および PRE-INSTALL のキーワードを渡す背景には、 ``イン
ストールの前とインストール後の両方'' の手続きをこなす一つの install
スクリプトを用いることを可能にすることがあります。しかしながら、メン
テナンスの観点からは、機能を分離する方が有利かつ容易です。
11. インストールが終了すると、後で pkg_delete(1) で使うために packing
list、 deinstall スクリプト、 description、 display の各ファイルが
/var/db/pkg/<pkg-name> にコピーされます。 package の依存関係は、他の
package の /var/db/pkg/<other-pkg>/+REQUIRED_BY ファイル (PKG_DBDIR
環境変数が設定してある場合、上記の /var/db/pkg/ が置き換えられます)
に記録されます。
12. 最後に、作業領域が削除されプログラムは終了します。
すべてのスクリプトは環境変数 PKG_PREFIX にインストール時の prefix ( 前述
の -p オプションを参照) が設定された状態で実行されます。このことによ
り、package の作者は pkg_add の -p フラグにより package がインストールさ
れるディレクトリが変更されても、きちんとふるまうスクリプトを書くことが可
能になります。
環境変数
PKG_PATH の値は、指定された package が見つからない時に用いられます。環境
変数はコロンで区切られた一連のエントリです。各エントリはディレクトリ名か
らなります。カレントディレクトリは空欄のディレクトリ名で暗黙のうちに指定
されるか、一つのピリオドで明示的に指定します。
環境変数 PKG_DBDIR は、インストールされた package についてのデータベース
の位置を指定します。デフォルト位置は /var/db/pkg です。
pkg_add が作業領域の生成を試みる作業用ディレクトリの名前は、環境変数
PKG_TMPDIR と TMPDIR とから (この順で) 取られます。これらの変数が存在しな
いか、指定されたディレクトリに十分な空き容量がない場合、 pkg_add は、
/var/tmp, /tmp, /usr/tmp のうちで、十分な空き容量を持つ最初のディレクトリ
を使います。
環境変数 PACKAGEROOT は、 pkg_add が取得を行う代替位置を指定します。取得
に使用する URL は、本環境変数と、 -r オプション使用時に pkg_add が自動的
にディレクトリを決定する論理とで、構築されます。設定例は
"ftp://ftp3.FreeBSD.org" です。
環境変数 PACKAGESITE は、 pkg_add が取得を行う代替位置を指定します。この
変数を使用すると、 -r オプション使用時に pkg_add が自動的にディレクトリを
決定する論理が破壊されます。よって、これはリモートパッケージファイルへの
完全な URL であることが必要です。
関連ファイル
/var/tmp 環境変数 PKG_TMPDIR と TMPDIR のどちらも適切なディレクトリを
指定しない場合に、作業領域を作成するために用いる作業用ディレ
クトリ。
/tmp /var/tmp が存在しないか、十分な空き容量を持たない場合、その
次に選ばれるディレクトリ。
/usr/tmp /var/tmp と /tmp のどちらも作業領域を作成するには適切でない
場合、最後に選ばれるディレクトリ。
/var/db/pkg インストールされた package についてのデータベースのデフォル
トの位置。
関連項目
pkg_create(1), pkg_delete(1), pkg_info(1), pkg_version(1), mktemp(3),
sysconf(3), mtree(8)
作者
Jordan Hubbard
協力者
John Kohl <jtk@rational.com>
バグ
配布物のファイル間のハードリンクは、 (1) 作業領域が、ファイルへのすべての
リンクの最終的なディレクトリと同じファイルシステムの場合もしくは、 (2)
ファイルへのすべてのリンクが contents ファイル内で @cwd ディレクティブで
括られている場合にのみ保存されます。 さらにその上、リンク名は単一の tar
コマンド ( sysconf(_SC_ARG_MAX) により返される値に依存する実行時の引数の
長さの制限により、複数の実行には分割できません) で展開されなければなりま
せん。
バグは他にもあるはずです。
FreeBSD 4.9 November 25, 1994 FreeBSD 4.9