pkg_delete(1)

名称
pkg_delete - インストールされているソフトウェア配布パッケージを削除するプログラム

書式
pkg_delete [-vDdnf] [-p prefix] pkg-name ...

解説
pkg_delete コマンドは、 pkg_add(1) コマンドにより既にインストールされているパッケージを削除するために 用いられます。

警告
pkg_delete コマンドはパッケージファイルにより提供されるスクリプトやプログラムを 実行することがあるので、あなたのシステムは、危険な配布ファイルを 作る極悪人からの「トロイの木馬」や他の巧妙な攻撃などを受ける 可能性があります。

パッケージファイルを提供する人物の能力と身元を確認するとよいでしょう。 より進んだ安全のためには、パッケージ記録ディレクトリ ( /var/db/pkg/<pkg-name>/ ) にあるすべてのパッケージ制御ファイルを確認します。 +INSTALL 、 +DEINSTALL 、 +REQUIRE 、 +MTREE_DIRS の各ファイルには 特に注意を払い、+CONTENTS ファイルの @cwd 、 @mode (setuid をチェック)、 @dirrm 、 @exec 、 @unexec ディレクティブを調べてください。 インストールされているパッケージ制御ファイルを調べるのには pkg_info(1) コマンドも使えます。

オプション
以下のコマンドラインオプションが提供されいます:

pkg-name ...
    指定されたパッケージがアンインストールされます。

-v  饒舌な出力に切り替えます。

-D  パッケージにアンインストール用スクリプトが存在しても、それを実行しません。

-n  実際にはアンインストールは行わず、アンインストールした場合に実行されるであろう ステップを表示します。

-p prefix
    インストールされているパッケージが明示的にディレクトリを設定していない 場合に、削除するファイルの前に prefix をディレクトリとして付け加えます。 ほとんどのパッケージでは、このディレクトリは pkg_add(1) によってインストールされた場所に自動的に設定されます。

-d  ファイル削除により生じた空のディレクトリを削除します。 デフォルトでは、パッケージの内容一覧に明示的に羅列された ファイル/ディレクトリ (通常のファイル/ディレクトリか @dirrm ディレクトリを伴ったもの) のみがアンインストール時に削除されます。 このオプションにより pkg_delete はパッケージを削除することにより生ずる空ディレクトリも削除するように なります。

-f  依存関係が記録されていたり、アンインストールスクリプトや require スクリプトが失敗した場合でも、強制的にパッケージを削除します。

技術詳細
pkg_delete は名前の通りに働きます。 pkg_delete は /var/db/pkg/<pkg-name> に記録されたインストール済みのパッケージをチェックし、 パッケージの内容を削除し、最後にパッケージの記録も削除します。

あるパッケージが他のインストール済みのパッケージから必要とされている場合、 pkg_delete はそれらの依存しているパッケージの一覧を表示し、パッケージの削除は 行いません (ただし -f オプションが指定された場合を除く)。

パッケージが require ファイル( pkg_create(1) を参照)を含んでいる場合、まずそのファイルを以下の引数を付けて実行し、 アンインストール作業を続けるべきかどうかを確かめます:
require <pkg-name> DEINSTALL

(ここで pkg-name は問題としているパッケージの名前であり、 DEINSTALL はこれがアンインストールであることを示すキーワードです) 終了ステータスが 0 以外の場合には、 -f オプションが指定されていない限りアンインストールを中断します。

パッケージに deinstall スクリプトが含まれている場合、 そのスクリプトはファイルが削除される前に実行されます。 pkg_delete はオリジナルのパッケージに含まれていたファイルを削除することしか 関知しないので、 パッケージのインストールにまつわる雑多な事項をきれいに片づけるのは この deinstall スクリプトの責任です。 deinstall スクリプトは以下の引数を付けて実行されます:
deinstall <pkg-name> DEINSTALL

渡されるキーワード DEINSTALL はインストールとアンインストールの両方を扱える一つのプログラム/ スクリプトを作ることを可能にするためにあります。

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

関連項目
pkg_add(1), pkg_create(1), pkg_info(1), mktemp(3), mtree(8)

作者
Jordan Hubbard ほとんどの仕事 John Kohl NetBSD 向け修正

バグ
まだあるはずです。