doc/ja_JP.eucJP/man/man1/pkg_add.1
SUZUKI Koichi 332b359851 Catch up with 5.3-BETA1.
Submitted by:  Norihiro Kumagai <kuma@nk.rim.or.jp>
Reviewed by:   Watanabe Kazuhiro <CQG00620@nifty.ne.jp>, kano@na.rim.or.jp
2004-09-24 05:34:01 +00:00

532 lines
13 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
.\"
.\" %FreeBSD: src/usr.sbin/pkg_install/add/pkg_add.1,v 1.65 2004/08/11 15:47:13 eik Exp %
.\"
.\" $FreeBSD$
.Dd March 1, 2004
.Dt PKG_ADD 1
.Os
.Sh 名称
.Nm pkg_add
.Nd ソフトウェア配布 package をインストールするプログラム
.Sh 書式
.Nm
.Op Fl vInfrRMS
.Op Fl t Ar template
.Op Fl p Ar prefix
.Op Fl C Ar chrootdir
.Ar pkg-name Op Ar pkg-name ...
.Sh 解説
.Nm
コマンドは、
.Xr pkg_create 1
コマンドにより作成された package
(訳注: FreeBSD の package system におけるパッケージを指す場合にこう表記します)
を展開するのに用いられます。
.Sh 警告
.Bf -emphasis
.Nm
コマンドは package ファイルに含まれるスクリプトやプログラムを
実行することがあるので、あなたのシステムは、危険な配布ファイルを
作る極悪人からの
.Dq Em トロイの木馬
や他の巧妙な攻撃などを受ける
可能性があります。
.Pp
package ファイルを提供する人物の能力と身元を確認するとよいでしょう。
より進んだ安全のためには、package を展開するのに
.Fl M
フラグを用い、その内容と、スクリプトがシステムに害をおよぼさないかを
確認します。
+INSTALL, +POST-INSTALL, +DEINSTALL, +REQUIRE, +POST-INSTALL, +REQUIRE,
+MTREE_DIRS の各ファイルには
特に注意を払い、+CONTENTS ファイルの
.Cm @cwd ,
.Cm @mode
(setuid をチェック),
.Cm @dirrm ,
.Cm @exec ,
.Cm @unexec
ディレクティブを調べてください。
package ファイルを調べるのには
.Xr pkg_info 1
コマンドも使えます。
.Ef
.Sh オプション
以下のコマンドラインオプションが提供されています:
.Bl -tag -width indent
.It Ar pkg-name Op Ar pkg-name ...
指定された package がインストールされます。
.Fl
という名前が指定されると、
.Nm
は stdin から読み込みます。
package がカレントディレクトリに見つからないと、
.Nm
.Ev PKG_PATH
で指定された各ディレクトリを探します。
.It Fl v
饒舌な出力に切り替えます。
.It Fl I
package にインストール用スクリプト (pre-install または post-install)
が存在しても、それを実行しません。
.It Fl n
実際にはインストールを行わず、インストールした場合に実行されるであろう
ステップを表示します。
.It Fl R
package のインストール結果を記録しません。
このオプションは、後でアンインストールすることを不可能にするため、
自分が何をしているかを理解している人のみ使ってください。
.It Fl r
リモートフェッチ機能を使用します。
適切なオブジェクト形式とリリースを決定してから、
package を取得してインストールします。
.It Fl f
あらかじめ必要な package がインストールされていなかったり、
requirements スクリプトが失敗した場合にも強制的にインストールします。
これは
.Nm
が見つからない必要な package を探して自動的にインストールすることを
止めるわけではなく、見つからない場合でも中断しないようにします。
.It Fl p Ar prefix
package からファイルを展開するディレクトリの前に
.Ar prefix
を付けます。
package がデフォルトディレクトリを保持している場合には、
このオプションで変更できます。
.Nm
はディレクトリ設定が相対的に行われているか、絶対的に行われているか
を知る術がないので、最初の
.Cm @cwd
ディレクティブのみが変更されることに注意してください。
複数回のディレクトリ変更が行われることはまれですが、
実際にあった場合、すべてのディレクトリ変更を制御したくなる
でしょう。
この場合、
.Cm MASTER
モード、
.Cm SLAVE
モードの使用を検討してみてください (オプション
.Fl M
.Fl S
を参照)。
.It Fl t Ar template
.Dq 作業領域
を作成する際に、
.Xr mktemp 3
への入力として
.Ar template
を用います。
これはデフォルトでは
.Pa /var/tmp/instmp.XXXXXX
という文字列ですが、
.Pa /var/tmp
ディレクトリの容量が制限されているような状況では
変更する必要があるかもしれません。
.Xr mktemp 3
が一意の ID を用いるために必要な `X' の文字をいくつか残しておく
ことを忘れないでください。
.Pp
作業領域
.Ar template
を package ファイルがインストールされるディレクトリと同じディスク
パーティションに設定することによって、パフォーマンスを高めることが
可能です (大抵は
.Pa /usr
)。
.It Fl M
.Cm MASTER
モードで実行します。
これは
.Nm
のとても特殊な実行モードであり、
.Cm SLAVE
モードと共に実行しなければなりません。
このモードで実行されると、
.Nm
は一時的な作業領域 (
.Fl t
オプションを参照) へ package を展開する以上のことはせず、
現在の作業領域ディレクトリ名を頭に付加した packing list を標準出力に
出力します(標準出力は
.Xr sed 1
のようなプログラムにフィルタされているかもしれません)。
.Cm SLAVE
モードと共に用いると、中身を処理する前に package 構造に
大きな変更を加えることが可能になります。
.It Fl S
.Cm SLAVE
モードで実行します。
これは
.Nm
のとても特殊な実行モードであり、
.Cm MASTER
モードと共に実行しなければなりません。
このモードで実行されると、
.Nm
は package の内容がすでに作業領域に展開され、その場所が
標準入力から文字列として入力されることを想定します。
完全な packing list も stdin から読み込まれ、その後中身が
通常どおり処理されます。
.It Fl C Ar chrootdir
処理を行なう前に、
ディレクトリ
.Ar chrootdir
に対して
.Xr chroot 2
を実行し、パッケージファイルとパッケージデータベースが
.Ar chrootdir
にインストールされているようにします。
.Ar chrootdir
は、
.Nm
の実行に通常必要なものすべてを含む、
相当程度完全なファイルシステムである必要があります。
このフラグは、
.Xr sysinstall 8
が実行する操作のサポートを支援するために追加されました。
その他の用途に役に立つようにということではありません。
.Ar chrootdir
は適切に設定され、通常のユーザが変更できないようにすること、
.Xr fetch 1
のようないくつかのコマンドは
.Ar chrootdir
の内側で実行されることに注意してください。
.El
.Pp
一つ以上の
.Ar pkg-name
引数を指定することが可能で、それらは package を含むファイル名 (通常
拡張子
.Dq .tbz
で終わります) か、ftp サイトにあるファイルを
示す URL のどちらかになります。
したがって、anonymous ftp から直接ファイルを展開することが
可能です (例えば
.Nm
.Li ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/shells/bash-1.14.7.tbz )
注意: もし上記のような転送で用いる ftp で
.Bf -emphasis
passive mode
.Ef
を利用したいなら、環境変数
.Bf -emphasis
FTP_PASSIVE_MODE
.Ef
に何らかの値を設定する必要があります。
そうでなければ、より一般的な ACTIVE モードが利用されます。
もしうまく動作していることがわかっているサイトから package を
得ようとして
.Nm
が常に失敗する場合、あなたが
.Bf -emphasis
passive mode
.Ef
の ftp を使う必要のあるファイアウォールの中にいるのが原因である場合が
あります。
.Sh 技術詳細
.Nm
ユーティリティは、
各 package の "packing list" を /tmp
(設定されている場合には $PKG_TMPDIR )
中の特別な作業ディレクトリに展開し、
中身を解析し、package の内容を完全に展開するために
以下の手順を実行します。
.Bl -enum
.It
package がすでにインストールされている、と記録されているかどうかを
チェックします。
もしそうならインストールを中断します。
.It
package が、既にインストール済の package と衝突するかどうかをチェックします
.Pf ( Cm @conflicts
ディレクティブを読みます。
.Xr pkg_create 1
を参照)。
もしそうならインストールを中断します。
.It
packing list に書かれている、package の全依存関係をスキャンします
.Pf ( Cm @pkgdep
ディレクティブを読みます。
.Xr pkg_create 1
を参照)。
もし必須の package が現在インストールされていなければ、
それを見つけてインストールしようとします。
ない package がみつからなかったりインストールできなかったりすると、
インストールを中断します。
.It
package がどのようにシステムに追加されるかを制御する
.Cm @option
ディレクティブを検索します。
このマニュアルページを書いている時点では、実装されているオプションは
.Cm @option extract-in-place
のみであり、これは
.Pa /tmp
内の作業領域を経由しないで、
package を最終的なディレクトリに直接展開するようにします。
.It
.Cm @option extract-in-place
が指定されていれば、package は最終的な場所に直接展開され、
そうでなければ作業領域内に展開されます。
.It
package が
.Ar require
ファイル (
.Xr pkg_create 1
を参照) を含んでいる場合、そのファイルを以下の引数を付けて実行します:
.Bd -ragged -offset indent -compact
.Ar pkg-name
.Ar INSTALL
.Ed
ここで
.Ar pkg-name
は問題としている package の名前であり、
.Ar INSTALL
キーワードはインストールの requirements チェックであることを
示しています (これは複数の機能を提供するひとつのスクリプトを
用いようとする場合に有用です)。
.It
package に
.Ar pre-install
スクリプトが存在する場合、以下の引数を付けて実行されます:
.Bd -ragged -offset indent -compact
.Cm script
.Ar pkg-name
.Ar PRE-INSTALL
.Ed
.Pp
ここで
.Ar pkg-name
は対象の package 名であり、
.Ar PRE-INSTALL
はこれがインストール前のフェーズであることを示すキーワードです。
.Pp
.Sy 注:
(
.Fl i
および
.Fl I
のフラグを
.Xr pkg_create 1
に使用することにより) package 作成時に
pre-install と post-install のスクリプトが別々に与えられる場合には、
.Ar PRE-INSTALL
キーワードは登場しません。
.It
.Cm @option extract-in-place
が指定されていない場合、packing list (
.Pa +CONTENTS
ファイル) が作業領域から最終的な場所に
ファイルを移動 (必要ならコピー) するために参照されます。
.It
package が
.Ar mtreefile
ファイル (
.Xr pkg_create 1
を参照) を含む場合、mtree が以下の引数を付けて実行されます:
.Bd -ragged -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
フラグが指定されていない場合にはこの package の最初の
.Cm @cwd
ディレクティブのディレクトリ名が prefix になります。
.It
package に
.Ar post-install
スクリプトが含まれる場合、
.Bd -ragged -offset indent -compact
.Cm script
.Ar pkg-name
.Ar POST-INSTALL
.Ed
として実行されます。
ここで
.Ar pkg-name
は対象の package 名であり、
.Ar POST-INSTALL
はこれがインストール後のフェーズであることを示すキーワードです。
.Pp
.Sy 注:
(
.Fl i
および
.Fl I
のフラグを
.Xr pkg_create 1
に使用することにより) package 作成時に
pre-install と post-install のスクリプトが別々に与えられる場合には、
.Ar POST-INSTALL
キーワードは登場しません。
.Pp
.Ar POST-INSTALL
および
.Ar PRE-INSTALL
のキーワードを渡す背景には、
.Dq インストールの前とインストール後の両方
の手続きをこなす一つの
.Ar install
スクリプトを用いることを可能にすることがあります。
しかしながら、メンテナンスの観点からは、機能を分離する方が有利かつ容易です。
.It
インストールが終了すると、後で
.Xr pkg_delete 1
で使うために packing list、
.Ar deinstall
スクリプト、 description、 display の各ファイルが
.Pa /var/db/pkg/<pkg-name>
にコピーされます。
package の依存関係は、他の package の
.Pa /var/db/pkg/<other-pkg>/+REQUIRED_BY
ファイル (PKG_DBDIR 環境変数が設定してある場合、上記の
.Pa /var/db/pkg/
が置き換えられます) に記録されます。
.It
最後に、作業領域が削除されプログラムは終了します。
.El
.Pp
すべてのスクリプトは環境変数
.Ev PKG_PREFIX
にインストール時の prefix (
前述の
.Fl p
オプションを参照) が設定された状態で実行されます。
このことにより、package の作者は
.Cm pkg_add
.Fl p
フラグにより package がインストールされるディレクトリが
変更されても、きちんとふるまうスクリプトを書くことが可能になります。
.Sh 環境変数
.Ev PKG_PATH
の値は、指定された package が見つからない時に用いられます。
環境変数はコロンで区切られた一連のエントリです。
各エントリはディレクトリ名からなります。
カレントディレクトリは空欄のディレクトリ名で暗黙のうちに指定されるか、
一つのピリオドで明示的に指定します。
.Pp
環境変数
.Ev PKG_DBDIR
は、インストールされた package についてのデータベースの位置を指定します。
デフォルト位置は
.Pa /var/db/pkg
です。
.Pp
.Nm
が作業領域の生成を試みる作業用ディレクトリの名前は、環境変数
.Ev PKG_TMPDIR
.Ev TMPDIR
とから (この順で) 取られます。
これらの変数が存在しないか、指定されたディレクトリに十分な空き容量が
ない場合、
.Nm
は、
.Pa /var/tmp ,
.Pa /tmp ,
.Pa /usr/tmp
のうちで、十分な空き容量を持つ最初のディレクトリを使います。
.Pp
環境変数
.Ev PACKAGEROOT
は、
.Nm
が取得を行う代替位置を指定します。
取得に使用する URL は、本環境変数と、
.Fl r
オプション使用時に
.Nm
が自動的にディレクトリを決定する論理とで、構築されます。
設定例は
.Qq Li ftp://ftp3.FreeBSD.org
です。
.Pp
環境変数
.Ev PACKAGESITE
は、
.Nm
が取得を行う代替位置を指定します。
この変数を使用すると、
.Fl r
オプション使用時に
.Nm
が自動的にディレクトリを決定する論理が破壊されます。
よって、これはリモートパッケージファイルへの完全な URL であることが必要です。
.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
インストールされた package についてのデータベースのデフォルトの位置。
.El
.Sh 関連項目
.Xr pkg_create 1 ,
.Xr pkg_delete 1 ,
.Xr pkg_info 1 ,
.Xr pkg_version 1 ,
.Xr mktemp 3 ,
.Xr sysconf 3 ,
.Xr mtree 8
.Sh 作者
.An Jordan Hubbard
.Sh 協力者
.An John Kohl Aq jtk@rational.com
.Sh バグ
配布物のファイル間のハードリンクは、
(1) 作業領域が、ファイルへのすべてのリンクの最終的な
ディレクトリと同じファイルシステムの場合もしくは、
(2) ファイルへのすべてのリンクが contents ファイル内で
.Cm @cwd
ディレクティブで括られている場合にのみ保存されます。
.Em さらに
その上、リンク名は単一の
.Cm tar
コマンド (
.Fn sysconf _SC_ARG_MAX
により返される値に依存する実行時の引数の長さの制限により、複数の
実行には分割できません) で展開されなければなりません。
.Pp
バグは他にもあるはずです。