PKG_ADD(1) FreeBSD 一般コマンドマニュアル PKG_ADD(1)
名称
pkg_add − ソフトウェア配布 package をインストールするプログラム |
書式
pkg_add [−vInfrRMS] [−t template] [−p prefix] [−C chrootdir] 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 −n −R −r −f −p prefix −t template 作業領域 template を package ファイルがインストールされるディレク トリと同じディスクパーティションに設定することによって、パフォー マンスを高めることが可能です (大抵は /usr )。 −M −S −C chrootdir 一つ以上の 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)
を参照) を含んでいる場
合、そのファイルを以下の引数を付けて実行します: |
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
が以下の引数を付けて実行されます: |
10.package に post-install スクリプトが含まれる場合、
script pkg-name POST-INSTALL 注: ( −i および −I のフラグを pkg_create(1) に使用することにより) package 作成時に pre-install と post-install のスクリプトが別々に与 えられる場合には、 POST-INSTALL キーワードは登場しません。 POST-INSTALL および PRE-INSTALL のキーワードを渡す背景には、 ‘‘イン ストールの前とインストール後の両方’’ の手続きをこなす一つの install スクリプトを用いることを可能にすることがあります。しかしながら、メン テナンスの観点からは、機能を分離する方が有利かつ容易です。 |
11.インストールが終了すると、後で pkg_delete(1) で使うために packinglist、 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
のどちらも適切なディレクトリを
指定しない場合に、作業領域を作成するために用いる作業用ディレ
クトリ。 関連項目 |
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 10.0 March 1, 2004 FreeBSD 10.0 |