- 1. 概要
- 2. pkg
- 3. ports
- 4. ports さらに
- 5. 参考サイト
1. 概要
最近知ったのですが・・・。
詳細は、「システムアップデート - freebsd-update - ABI FreeBSD:14:amd64 → FreeBSD:15」に書いております。
要は、「FreeBSD」のメジャーバージョンをアップグレードした場合、「ports」もしくは「pkg」を再ビルドしないと、「ABI(Application Binary Interface)」が古いままになっているようです。
2. pkg
「pkg」の場合は。
pkg upgrade -f
で、インストールしているパッケージを強制的に同期してアップグレードすることになります。
Proceed with this action? [y/N]:
ときかれた場合は、y を入力して、強制的に進めます。
3. ports
「ports」の場合。
env BATCH=yes portupgrade -af
または。
portmaster -af
で、インストールしている「ports」をすべて、再ビルドしてインストールしなおすようです。
オプションは、どちらもほぼ同じ意味で。
「-a」は「all」のことで、システムにインストールされているすべてのパッケージをアップグレードの対象にします。
「-f」は「force」のことで、バージョンが変わっていなくても、強制的にソースから再ビルド・再インストール(リビルド)させます。
「portmaster」の方が「portupgrade」より、危険度が少ないようです。
なぜならば。
| 項目 | portupgrade | portmaster | 備考 |
| 実装言語 | ruby | シェルスクリプト(/bin/sh) | |
| 依存関係 | ruby や各種専用ライブラリ(bdb など)に依存する | FreeBSD の基本コマンドと pkg のみ(外部依存が非常に少ない) | |
| 状態管理 | 独自のパッケージデータベース(pkgdb)を使用する | 主に pkg のデータベースと ports ツリーの構造を直接利用する | |
| 安全性・ロールバック | データベースの不整合(警告や破損)が起きると動作が不安定になりやすい |
シェルスクリプトでシンプルに動くため、環境起因の Ruby エラーに巻き込まれにくい | |
ということのようです。
でまぁ、長時間かかるのですが・・・。
それ故に「tmux」を使って実行した方がよさそうです。
portmaster -af
すると。
===>>> There are 'install complete' flags from a previous
-[rf] run of portmaster, delete them? y/n [n]
と問いかけられますが。
これは、「portmaster」の実行による「インストール完了フラグ」が残っています。これらを削除しますか?ちゅうことだそうです。
強制で、インストールしなおすのですから、これは y でフラグを削除すべきですね。
4. ports さらに
で、前項を実行しようとしたのですが。
全「ports」をビルドしなおすとなると、数時間ではすみませんわな・・・。
「llvm」「rust」「gcc」なんぞがはいっているので、数日かかる覚悟が必要です。
なんとかならんもんかいなとちょと考えまして。
まず。
pkg upgrade -f
「pkg」で再インストールします。
これならば、長くとも数十分で済むはずです。
これで、すくなくとも、前バージョンの「ABI」は、現バージョンに変わるはずです。
悲しいかな、「pkg」のバージョンは、「ports」より前だったりするので。
portversion -v | grep '<'
で、「ports」としてのアップグレードが必要なものを抽出して。
env BATCH=yes portupgrade -rR package_name
でアップグレードしていくことで、前項よりは、大幅に時間が短縮できるはずなのです。
5. 参考サイト
本ページは、「Gemini」伍長を参考にさせていただきました。
|
|