FreeBSD で portupgrade を用いて,アプリケーションソフトウェアの再インストールや全更新
はじめに
パッケージ・レジストリ・データベースと, ポーツ・インデックス・ファイルと, ポーツ・データベース・ファイルが「実態を反映していない」ような場合になったときは,次のコマンドで対処します.
- 「pkgdb -F」 : パッケージ・レジストリ・データベース (package registry database) の不整合修正 (fix)
- 「portsdb -uU」 : ポーツ・データベース・ファイル INDEX.db の生成/更新と,ポーツ・インデックス・ファイル INDEXの生成/更新
それで,問題は, 上記のコマンドをいちいち実行するのは面倒だし,時間がかかるし,ということです.
portupgrade コマンド等の活用
そこで,cd /usr/ports/<ほげほげ>/<ほげ> で make コマンドを直接叩くのはなく, 次のように portupgrade コマンド等を活用することにします. * そうしておけば,パッケージ・レジストリ・データベースと, ポーツ・インデックス・ファイルと, ポーツ・データベース・ファイルが,自動的に実態を反映してくれる,ということです. 但し,例外的にエラーが出ることがありますが,そのときは, pkgdb -F, portsdb -uU などで対処です.
- アプリケーションソフトウェアの新規インストール
portupgrade --new --package -v --beforebuild 'make rmconfig' <名前>
- インストール済みのアプリケーションソフトウェアの再ビルドと再インストール
* pkg_deinstall で一旦消去して再ビルド,再インストールする手順
これは,<名前>で指定するアプリケーションソフトウェアを pkg_deinstall で消して,再度,ビルドしてインストールするということです.
pkg_deinstall <名前> portupgrade --new --package -v --beforebuild 'make rmconfig' <名前> # 省略形は portupgrade -Npv -B 'make rmconfig' <名前>
* 再ビルドと再インストールを「強行」する手順(上書きインストール)
依存するファイルについても再ビルトと再インストールを行ないたいので, clean-dependsと--recursiveを付けている.
cd /usr/ports/<名前> make clean-depends portupgrade --force --package --recursive -v --beforebuild 'make rmconfig' <名前> # 省略形は portupgrade -fprv -B 'make rmconfig' <名前>
- インストール済みのアプリケーションソフトウェアの全更新
これは,インストール済みのアプリケーションソフトウェアそれぞれについて,ポーツ・ツリーに新バージョンがあれば更新する.新バージョンがなければ何もしない,ということです.
「-R」は upward recursive
pkgdb -F portupgrade -aRv
- インストール済みのアプリケーションソフトウェアの全削除
pkg_deinstall -a
- アプリケーションソフトウェアの依存関係に関する情報の表示
pkg_info -r <名前> pkg_info -R <名前>
- アプリケーションソフトウェアの一覧の表示
pkg_info -a
インストール済みのアプリケーションソフトウェアの再インストールの実行例
- --new (-N): 更新ではない(pkg_deinstall で一度消して,新しく入れるので)
- --package (-p): パッケージを作る(これは必須ではない.作ったパッケージを他のマシンで活用する,ということも有りえると思いまして)
- --beforebuild 'make rmconfig' (-B): 一度,ビルドすると,そのときのコンパイル・オプションが残り続けるので,それを消すための操作です
* 実行例:japanese/nkf の再インストール
pkg_deinstall japanese/nkf
portupgrade -Npv -B 'make rmconfig' japanese/nkf
インストール済みのアプリケーションソフトウェアの全削除
パッケージ(あるいは DVD 等に付属のパッケージ・コレクション)やポーツ・ツリーを使ってインストールしたアプリケーションソフトウェアの全削除について.
次の判断を行って下さい.
- 今までポーツ・ツリーを使ってアプリケーションソフトウェアをインストールしたことが無いと自信をもって言える場合
各自で,リスクを判断の上, 今までパッケージ(あるいは DVD 等に付属のパッケージ・コレクション)でインストールしたアプリケーションソフトウェアを全削除してください. 次のような操作です.
* portupgrade のインストール が済んでいる場合
shutdown now pkg_deinstall -a sync sync sync sync sync reboot
* portupgrade のインストール が済んでいない場合
shutdown now pkg_info pkg_delete -a pkg_info sync sync sync sync sync reboot
全削除しない,という判断もありえるかも知れません. とは言え,ポーツ・ツリーとパッケージの両方でアプリケーションソフトウェアをインストールしたときのデメリットはあると思います.それも考えて判断してください.
- 今までポーツ・ツリーを使ってアプリケーションソフトウェアをインストールした可能性がある場合
* portupgrade のインストール が済んでいる場合
shutdown now pkg_deinstall -a sync sync sync sync sync reboot