pkg_add(1) FreeBSD 一般コマンドマニュアル

pkg_add

前のページ 上に戻る 次のページ

pkg_add




解説

     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 がデフォルトディレクトリを保持している場合には、この
             ください。

             作業領域 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 を含む
     ファイル名 (通常拡張子 ``.tgz'' で終わります) か、ftp サイトにあるファイ
     ルを示す URL のどちらかになります。したがって、anonymous ftp から直接ファ
     イルを展開することが可能です (例えば pkg_add
     ftp://ftp.FreeBSD.org/pub/FreeBSD/packages/shells/bash-1.14.4.tgz) 。注
     意: もし上記のような転送で用いる ftp で passive mode を利用したいなら、環
     境変数 FTP_PASSIVE_MODE に何らかの値を設定する必要があります。そうでなけ
     れば、より一般的な ACTIVE モードが利用されます。もしうまく動作しているこ
     とがわかっているサイトから package を得ようとして pkg_add が常に失敗する
     場合、あなたが passive mode の ftp を使う必要のあるファイアウォールの中に
     いるのが原因である場合があります。


技術詳細

     pkg_add はきわめて単純です。各 package の "packing list" を特別な作業ディ
     レクトリに展開し、中身を解析し、内容を完全に展開するために以下の手順を実
     行します:

     1.   package がすでにインストールされている、と記録されているかどうかを
          チェックします。もしそうならインストールを中断します。

     2.   @pkgdep ディレクティブ ( pkg_create(1) を参照) による package のすべ
          ての依存関係をチェックし、各々が存在するかどうかを確認します。もし存
          在しなければ、足りない package を見つけて自動的にインストールしよう
          とします。もし見つからなければ、インストールを中断します。

     3.   package がどのようにシステムに追加されるかを制御する @option ディレ
          クティブを検索します。このマニュアルページを書いている時点では、実装
          されているオプションは @option extract-in-place のみであり、これは
          /tmp 内の作業領域を経由しないで、 package を最終的なディレクトリに直
          接展開するようにします。
                script pkg-name PRE-INSTALL

          ここで pkg-name は対象の package 名であり、 PRE-INSTALL はこれがイン
          ストール前のフェーズであることを示すキーワードです。

          B>注: ( -i および -I のフラグを pkg_create(1) に使用することにより)
          package 作成時に pre-install と post-install のスクリプトが別々に与
          えられる場合には、 PRE-INSTALL キーワードは登場しません。

     7.   @option extract-in-place が指定されていない場合、packing list (
          +CONTENTS ファイル) が作業領域から最終的な場所にファイルを移動 (必要
          ならコピー) するために参照されます。

     8.   package が mtreefile ファイル ( pkg_create(1) を参照) を含む場
          合、mtree が以下の引数を付けて実行されます:
                mtree -u -f mtreefile -d -e -p prefix
          ここで prefix-p フラグが指定されていればその prefix、 -p フラグ
          が指定されていない場合にはこの package の最初の @cwd ディレクティブ
          のディレクトリ名が prefix になります。

     9.   package に post-install スクリプトが含まれる場合、
                script pkg-name POST-INSTALL
          として実行されます。ここで pkg-name は対象の package 名であり、
          POST-INSTALL はこれがインストール後のフェーズであることを示すキーワ
          ードです。

          B>注: ( -i および -I のフラグを pkg_create(1) に使用することにより)
          package 作成時に pre-install と post-install のスクリプトが別々に与
          えられる場合には、 POST-INSTALL キーワードは登場しません。

          POST-INSTALL および PRE-INSTALL のキーワードを渡す背景には、 ``イン
          ストールの前とインストール後の両方'' の手続きをこなす一つの install
          スクリプトを用いることを可能にすることがあります。しかしながら、メン
          テナンスの観点からは、機能を分離する方が有利かつ容易です。

     10.  インストールが終了すると、後で 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/ が置き換えられます)
          に記録されます。

     11.  最後に、作業領域が削除されプログラムは終了します。

     すべてのスクリプトは環境変数 PKG_PREFIX にインストール時の prefix ( 前述
     の -p オプションを参照) が設定された状態で実行されます。このことによ
     り、package の作者は pkg_add-p フラグにより package がインストールさ
     れるディレクトリが変更されても、きちんとふるまうスクリプトを書くことが可
     能になります。


環境変数

     PKG_PATH の値は、指定された package が見つからない時に用いられます。環境
     に使用する 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_update(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.4                    November 25, 1994                   FreeBSD 4.4

ABELNET VPSサービス