doc/ja/man/man1/pkg_add.1
Hiroyuki Hanai 08cc5a7471 Now, the Japanese manual is for 2.2.7-RELEASE.
Reviewed by: The FreeBSD Japanese Manual Project <man-jp@jp.FreeBSD.ORG>
Submitted by: horikawa@jp.freebsd.org
1998-07-26 12:08:45 +00:00

422 lines
11 KiB
Groff

.\"
.\" FreeBSD install - a package for the installation and maintainance
.\" of non-core utilities.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\"
.\" Jordan K. Hubbard
.\"
.\"
.\" @(#)pkg_add.1
.\" %Id: pkg_add.1,v 1.17.2.9 1998/07/18 11:11:38 jkh Exp %
.\" jpman %Id: pkg_add.1,v 1.3 1997/06/09 04:19:05 jsakai Stab %
.\"
.Dd November 25, 1994
.Dt pkg_add 1
.Os FreeBSD
.Sh 名称
.Nm pkg_add
.Nd ソフトウェア配布パッケージをインストールするプログラム
.Sh 書式
.Nm
.Op Fl vInfRMS
.Op Fl t Ar template
.Op Fl p Ar prefix
.Ar pkg-name [pkg-name ...]
.Sh 解説
.Nm
コマンドは、
.Xr pkg_create 1
コマンドにより作成されたパッケージを展開するのに用いられます。
.Sh 警告
.Bf -emphasis
.Nm
コマンドはパッケージファイルに含まれるスクリプトやプログラムを
実行することがあるので、あなたのシステムは、危険な配布ファイルを
作る極悪人からの「トロイの木馬」や他の巧妙な攻撃などを受ける
可能性があります。
.Pp
パッケージファイルを提供する人物の能力と身元を確認するとよいでしょう。
より進んだ安全のためには、パッケージを展開するのに
.Fl M
フラグを用い、その内容と、スクリプトがシステムに害をおよぼさないかを
確認します。
+INSTALL 、 +DEINSTALL 、 +REQUIRE 、 +MTREE_DIRS の各ファイルには
特に注意を払い、+CONTENTS ファイルの
.Cm @cwd
.Cm @mode
(setuid をチェック)、
.Cm @dirrm
.Cm @exec
.Cm @unexec
ディレクティブを調べてください。
パッケージファイルを調べるのには
.Xr pkg_info 1
コマンドも使えます。
.Ef
.Sh オプション
以下のコマンドラインオプションが提供されています:
.Bl -tag -width indent
.It Ar pkg-name [... pkg-name]
指定されたパッケージがインストールされます。
- という名前が指定されると、
.Nm
は stdin から読み込みます。
パッケージがカレントディレクトリに見つからないと、
.Nm
.Ev PKG_PATH
で指定された各ディレクトリを探します。
.It Fl v
饒舌な出力に切り替えます。
.It Fl I
パッケージにインストール用スクリプトが存在しても、それを実行しません。
.It Fl n
実際にはインストールを行わず、インストールした場合に実行されるであろう
ステップを表示します。
.It Fl R
パッケージのインストール結果を記録しません。
このオプションは、後でアンインストールすることを不可能にするため、
自分が何をしているかを理解している人のみ使ってください。
.It Fl f
あらかじめ必要なパッケージがインストールされていなかったり、
requirements スクリプトが失敗した場合にも強制的にインストールします。
これは
.Nm
が見つからない必要なパッケージを探して自動的にインストールすることを
止めるわけではなく、見つからない場合でも中断しないようにします。
.It Fl p Ar prefix
パッケージからファイルを展開するディレクトリの前に
.Ar prefix
を付けます。
パッケージがデフォルトディレクトリを保持している場合には、
このオプションで変更できます。
.Nm
はディレクトリ設定が相対的に行われているか、絶対的に行われているか
を知る術がないので、最初の
.Cm @cwd
ディレクティブのみが変更されることに注意してください。
複数回のディレクトリ変更が行われることはまれですが、
実際にあった場合、すべてのディレクトリ変更を制御したくなる
でしょう。この場合、
.Cm MASTER
モード、
.Cm SLAVE
モードの使用を検討してみてください (オプション
.Fl M
.Fl S
を参照)。
.It Fl t Ar template
``作業領域'' を作成する際に、
.Xr mktemp 3
への入力として
.Ar template
を用います。
これはデフォルトでは
.Pa /var/tmp/instmp.XXXXXX
という文字列ですが、
.Pa /var/tmp
ディレクトリの容量が制限されているような状況では
変更する必要があるかもしれません。
.Xr mktemp 3
が一意の ID を用いるために必要な `X' の文字をいくつか残しておく
ことを忘れないでください。
.Pp
作業領域
.Ar template
をパッケージファイルがインストールされるディレクトリと同じディスク
パーティションに設定することによって、パフォーマンスを高めることが
可能です (大抵は
.Pa /usr
)。
.It Fl M
.Cm MASTER
モードで実行します。これは
.Nm
のとても特殊な実行モードであり、
.Cm SLAVE
モードと共に実行しなければなりません。
このモードで実行されると、
.Nm
は一時的な作業領域 (
.Fl t
オプションを参照) へパッケージを展開する以上のことはせず、
現在の作業領域ディレクトリ名を頭に付加した packing list を標準出力に
出力します(標準出力は
.Xr sed 1
のようなプログラムにフィルタされているかもしれません)。
.Cm SLAVE
モードと共に用いると、中身を処理する前にパッケージ構造に
大きな変更を加えることが可能になります。
.It Fl S
.Cm SLAVE
モードで実行します。これは
.Nm
のとても特殊な実行モードであり、
.Cm MASTER
モードと共に実行しなければなりません。
このモードで実行されると、
.Nm
はパッケージの内容がすでに作業領域に展開され、その場所が
標準入力から文字列として入力されることを想定します。
完全な packing list も stdin から読み込まれ、その後中身が
通常どおり処理されます。
.El
.Pp
一つ以上の
.Ar pkg-name
引数を指定することが可能で、それらはパッケージを含むファイル名(通常
拡張子 ``.tgz'' で終わります)か、ftp サイトにあるファイルを
示す URL のどちらかになります。
したがって、anonymous ftp から直接ファイルを展開することが
可能です (例えば
.Nm
ftp://ftp.freebsd.org/pub/FreeBSD/packages/shells/bash-1.14.4.tgz
)。
注意: もし上記のような転送で用いる ftp で
.Bf -emphasis
passive mode
.Ef
を利用したいなら、環境変数
.Bf -emphasis
FTP_PASSIVE_MODE
.Ef
に何らかの値を設定する必要があります。
そうでなければ、より一般的な ACTIVE モードが利用されます。
もしうまく動作していることがわかっているサイトからパッケージを
得ようとして
.Nm
が常に失敗する場合、あなたが
.Bf -emphasis
passive mode
.Ef
の ftp を使う必要のあるファイアウォールの中にいるのが原因である場合が
あります。
.Sh 技術詳細
.Nm
はきわめて単純です。各パッケージの "packing list" を
特別な作業ディレクトリに展開し、
中身を解析し、内容を完全に展開するために
以下の手順を実行します:
.Bl -enum -indent indent
.It
パッケージがすでにインストールされている、と記録されているかどうかを
チェックします。もしそうならインストールを中断します。
.It
.Cm @pkgdep
ディレクティブ (
.Xr pkg_create 1
を参照) による
パッケージのすべての依存関係をチェックし、各々が存在するかどうかを
確認します。もし存在しなければ、足りないパッケージを見つけて自動的に
インストールしようとします。もし見つからなければ、
インストールを中断します。
.It
パッケージがどのようにシステムに追加されるかを制御する
.Cm @option
ディレクティブを検索します。このマニュアルページを書いている時点では、
実装されているオプションは
.Cm @option extract-in-place
のみであり、これは
.Pa /tmp
内の作業領域を経由しないで、
パッケージを最終的なディレクトリに直接展開するようにします。
.It
.Cm @option extract-in-place
が指定されていれば、パッケージは最終的な場所に直接展開され、
そうでなければ作業領域内に展開されます。
.It
パッケージが
.Ar require
ファイル (
.Xr pkg_create 1
を参照) を含んでいる場合、そのファイルを以下の引数を付けて実行します:
.Bd -filled -offset indent -compact
.Ar pkg-name
.Ar INSTALL
.Ed
ここで
.Ar pkg-name
は問題としているパッケージの名前であり、
.Ar INSTALL
キーワードはインストールの requirements チェックであることを
示しています (これは複数の機能を提供するひとつのスクリプトを
用いようとする場合に有用です)。
.It
パッケージに
.Ar install
スクリプトが存在する場合、以下の引数を付けて実行されます:
.Bd -filled -offset indent -compact
.Ar pkg-name
.Ar PRE-INSTALL
.Ed
ここで
.Ar pkg-name
は問題としているパッケージの名前であり、
.Ar PRE-INSTALL
はこれがインストール前のステップであることを示すキーワードです。
.It
.Cm @option extract-in-place
が指定されていない場合、packing list (
.Pa +CONTENTS
ファイル) が作業領域から最終的な場所に
ファイルを移動 (必要ならコピー) するために参照されます。
.It
パッケージが
.Ar mtreefile
ファイル (
.Xr pkg_create 1
を参照) を含む場合、mtree が以下の引数を付けて実行されます:
.Bd -filled -offset indent -compact
.Cm mtree
.Fl u
.Fl f
.Ar mtreefile
.Fl d
.Fl e
.Fl p
.Pa prefix
.Ed
ここで
.Pa prefix
.Fl p
フラグが指定されていればその prefix、
.Fl p
フラグが指定されていない場合にはこのパッケージの最初の
.Cm @cwd
ディレクティブのディレクトリ名が prefix になります。
.It
パッケージに
.Ar install
スクリプトが含まれる場合、
.Bd -filled -offset indent -compact
.Cm script
.Ar pkg-name
.Ar POST-INSTALL
.Ed
として実行されます。これによりインストール前とインストール後の
両方の手続きをこなす一つの
.Ar install
スクリプトを用いることが可能になります。
.It
インストールが終了すると、後で
.Xr pkg_delete 1
で使うために packing list 、
.Ar deinstall
スクリプト、 description 、 display の各ファイルが
.Pa /var/db/pkg/<pkg-name>
にコピーされます。
パッケージの依存関係は、他のパッケージの
.Pa /var/db/pkg/<other-pkg>/+REQUIRED_BY
ファイル (PKG_DBDIR 環境変数が設定してある場合、上記の
.Pa /var/db/pkg/
が置き換えられます) に記録されます。
.It
最後に、作業領域が削除されプログラムは終了します。
.El
.Pp
すべてのスクリプトは環境変数
.Ev PKG_PREFIX
にインストール時の prefix (
前述の
.Fl p
オプションを参照) が設定された状態で実行されます。
このことにより、パッケージの作者は
.Cm pkg_add
.Fl p
フラグによりパッケージがインストールされるディレクトリが
変更されても、きちんとふるまうスクリプトを書くことが可能になります。
.Sh 環境変数
.Ev PKG_PATH
の値は、指定されたパッケージが見つからない時に用いられます。
環境変数はコロンで区切られた一連のエントリです。
各エントリはディレクトリ名からなります。
カレントディレクトリは空欄のディレクトリ名で暗黙のうちに指定されるか、
一つのピリオドで明示的に指定します。
.Pp
環境変数
.Ev PKG_DBDIR
は、インストールされたパッケージについてのデータベースの位置を指定します。
.Pp
.Nm
が作業領域の生成を試みる作業用ディレクトリの名前は、環境変数
.Ev PKG_TMPDIR
.Ev TMPDIR
とから(この順で)取られます。
これらの変数が存在しないか、指定されたディレクトリに十分な空き容量が
ない場合、
.Nm
は、
.Pa /var/tmp
.Pa /tmp
.Pa /usr/tmp
のうちで、十分な空き容量を持つ最初のディレクトリを使います。
.Sh ファイル
.Bl -tag -width /var/db/pkg -compact
.It Pa /var/tmp
環境変数
.Ev PKG_TMPDIR
.Ev TMPDIR
のどちらも適切なディレクトリを指定しない場合に、作業領域を作成するため
に用いる作業用ディレクトリ。
.It Pa /tmp
.Pa /var/tmp
が存在しないか、十分な空き容量を持たない場合、その次に選ばれる
ディレクトリ。
.It Pa /usr/tmp
.Pa /var/tmp
.Pa /tmp
のどちらも作業領域を作成するには適切でない場合、最後に選ばれる
ディレクトリ。
.It Pa /var/db/pkg
インストールされたパッケージについてのデータベースのデフォルトの位置。
.El
.Sh 関連項目
.Xr pkg_create 1 ,
.Xr pkg_delete 1 ,
.Xr pkg_info 1 ,
.Xr mktemp 3 ,
.Xr sysconf 3 ,
.Xr mtree 8
.Sh 作者
.An Jordan Hubbard
最初の仕事およびそれに続く開発。
.An John Kohl
NetBSD 向け改良。
.El
.Sh バグ
配布物のファイル間のハードリンクは、
(1) 作業領域が、ファイルへのすべてのリンクの最終的な
ディレクトリと同じファイルシステムの場合もしくは、
(2) ファイルへのすべてのリンクが contents ファイル内で
.Cm @cwd
ディレクティブで括られている場合にのみ保存されます。
.Em さらに
その上、リンク名は単一の
.Cm tar
コマンド (
.Fn sysconf _SC_ARG_MAX
により返される値に依存する実行時の引数の長さの制限により、複数の
実行には分割できません) で展開されなければなりません。
.Pp
バグは他にもあるはずです。