FreeBSD でアプリケーションソフトウェアの再インストールや全更新(pkg, portupgrade を使用)
はじめに
FreeBSD でインストール済みソフトウェアを管理する方法は 2 つある.
- pkg: ビルド済みバイナリパッケージを扱う,FreeBSD 標準のパッケージ管理コマンド.インストール,更新,削除,依存関係の確認をこれ 1 つで行える.
- portupgrade (ports-mgmt/portupgrade): ポーツ・コレクションからのビルドを伴う更新を行うためのツール.ビルドオプションを自分で指定してソフトウェアを導入する場合に用いる.
かつて用いられていた pkg_add, pkg_delete, pkg_info, pkg_deinstall といった pkg_install 系のコマンドは,FreeBSD 10 以降では提供されていない. これらの代わりに pkg のサブコマンドを用いる.
* ports-mgmt/portmaster と ports-mgmt/portmanager は,いずれも DEPRECATED(非推奨)の指定を受けている.多数のソフトウェアを独自オプションでビルドして運用する場合は,ports-mgmt/poudriere で自前のパッケージリポジトリを構築する方法が適する.
pkg を用いた操作
- パッケージのインストール
端末を開き,管理者権限で次のコマンドを実行する.
pkg install -y <名前> - インストール済みパッケージの全更新
端末を開き,管理者権限で次のコマンドを実行する.
pkg update pkg upgrade - パッケージの再インストール(同一バージョンの上書き)
端末を開き,管理者権限で次のコマンドを実行する.
pkg install -f <名前> - パッケージの削除
端末を開き,管理者権限で次のコマンドを実行する.
pkg delete <名前> - インストール済みパッケージの全削除
端末を開き,管理者権限で次のコマンドを実行する.
pkg delete -af* ロックされたパッケージは削除されない.事前に解除しておく場合は,端末を開き,管理者権限で次のコマンドを実行する.
pkg unlock -ay - 不要になった依存パッケージの削除
他のどのパッケージからも必要とされなくなった,依存関係のためだけに導入されたパッケージを削除する. 端末を開き,管理者権限で次のコマンドを実行する.
pkg autoremove - 依存関係に関する情報の表示
端末を開き,次のコマンドを実行する.
pkg info -d <名前> pkg info -r <名前>-d はそのパッケージが依存しているパッケージ,-r はそのパッケージを必要としているパッケージの一覧である.
- インストール済みパッケージ一覧の表示
端末を開き,次のコマンドを実行する.
pkg info - パッケージデータベースの検査と修復
依存関係の欠落や,インストール済みファイルの破損を調べる. 端末を開き,管理者権限で次のコマンドを実行する.
pkg check -d -a pkg check -s -a-d は依存関係の検査,-s はファイルのチェックサム検査である.欠落した依存パッケージは次のコマンドで補う.
pkg install -y <不足しているパッケージ名> - 更新対象からの除外(ロック)
ポーツから独自オプションでビルドしたソフトウェアが pkg upgrade でバイナリパッケージに置き換わることを防ぐ. 端末を開き,管理者権限で次のコマンドを実行する.
pkg lock -y <名前>ロックされているパッケージの一覧を表示するときは,端末を開き,次のコマンドを実行する.
pkg lock -l
portupgrade を用いた操作
ポーツ・コレクションからビルドしてソフトウェアを導入・更新する場合に用いる. インストールは,端末を開き,管理者権限で次のコマンドを実行する.
pkg install -y portupgrade
portupgrade はポーツ・インデックス・ファイル INDEX と,そのデータベース INDEX.db を参照する. これらが最新のポーツ・コレクションを反映していないときは,端末を開き,管理者権限で次のコマンドを実行する.
cd /usr/ports
make fetchindex
portsdb -u
* INDEX を自分のシステムで生成する場合は「make index」を用いるが,全ポーツの走査を伴うため長い時間がかかる.FreeBSD プロジェクトが配布する INDEX を取得する「make fetchindex」の方が短時間で済む.
主なオプションは次の通りである.
- --new (-N): 未インストールのソフトウェアを新規にインストールする
- --package (-p): ビルド結果をパッケージファイルとして保存する(他のマシンへの導入に利用できる)
- --force (-f): 最新版がインストール済みでも,強制的に再ビルドと再インストールを行う
- --recursive (-r): そのソフトウェアが依存しているソフトウェアも対象にする
- -R: そのソフトウェアを必要としているソフトウェアも対象にする
- --beforebuild 'make rmconfig' (-B): 以前のビルドで保存されたビルドオプションを消してから処理を行う
アプリケーションソフトウェアの新規インストール
端末を開き,管理者権限で次のコマンドを実行する.
portupgrade --new --package -v --beforebuild 'make rmconfig' <名前>
省略形は次の通りである.
portupgrade -Npv -B 'make rmconfig' <名前>
インストール済みのアプリケーションソフトウェアの再ビルドと再インストール
* 一旦削除してから,再ビルド,再インストールする手順
端末を開き,管理者権限で次のコマンドを実行する.
pkg delete <名前>
portupgrade --new --package -v --beforebuild 'make rmconfig' <名前>
省略形は次の通りである.
pkg delete <名前>
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' <名前>
インストール済みのアプリケーションソフトウェアの全更新
インストール済みのソフトウェアそれぞれについて,ポーツ・ツリーに新しいバージョンがあれば更新する.新しいバージョンがなければ何もしない. 端末を開き,管理者権限で次のコマンドを実行する.
git -C /usr/ports pull
cd /usr/ports
make fetchindex
portupgrade -aRv
* 「-R」は,更新対象のソフトウェアを必要としているソフトウェアも併せて更新することを指示する.
実行例:japanese/nkf の再インストール
端末を開き,管理者権限で次のコマンドを実行する.
pkg delete ja-nkf
portupgrade -Npv -B 'make rmconfig' japanese/nkf
更新前後の確認
更新の前に,インストール済みソフトウェアの一覧を保存しておくと,更新後の状態と比較できる. 端末を開き,次のコマンドを実行する.
pkg info > ~/pkg-list-before.txt
更新後の一覧は,端末を開き,次のコマンドで得られる.
pkg info > ~/pkg-list-after.txt
diff ~/pkg-list-before.txt ~/pkg-list-after.txt
* ZFS を使用している場合は,更新前にスナップショットを作成しておくと,問題が生じたときに更新前の状態に戻せる. 端末を開き,管理者権限で次のコマンドを実行する.
zfs snapshot -r zroot@before-upgrade