FreeBSD入門シリーズ
| Part1 導入 | Part2 pkg/ports | Part3 jail | Part4 ZFS | Part5 bhyve |
|---|---|---|---|---|
| ✅ Done | 👈 Now | - | - | - |
はじめに
FreeBSDを使い始めて最初に困惑するのが、パッケージ管理システムが2つあること。
-
pkg- バイナリパッケージ -
ports- ソースからビルド
「え、なんで2つあるの?どっち使えばいいの?」
今回はこの謎を解明していく。
pkgとportsの関係
┌─────────────────────────────────────────────────────────────┐
│ Ports Collection │
│ (ソースコード + ビルド手順のレシピ集) │
│ ↓ │
│ ビルドサーバー │
│ ↓ │
│ pkg (バイナリパッケージ) │
└─────────────────────────────────────────────────────────────┘
実はpkgはportsからビルドされたバイナリなんだ。
つまり:
-
ports: 料理のレシピ -
pkg: レシピから作られた完成品
pkg - バイナリパッケージ
基本的な使い方
# パッケージ検索
pkg search vim
# vim-9.0.2190 Improved version of the vi editor
# vim-console-9.0.2190 Improved version of the vi editor (console only)
# vim-tiny-9.0.2190 Improved version of the vi editor (minimal)
# パッケージ情報
pkg info vim
# vim-9.0.2190
# Name : vim
# Version : 9.0.2190
# ...
# インストール
pkg install vim
# アップグレード
pkg upgrade
# 削除
pkg delete vim
# 不要な依存パッケージを削除
pkg autoremove
# キャッシュ削除
pkg clean
リポジトリの更新
pkg update
# Updating FreeBSD repository catalogue...
# FreeBSD repository is up to date.
# All repositories are up to date.
インストール済みパッケージ一覧
pkg info
# pkg-1.20.9 Package manager
# sudo-1.9.15p4 Allow others to run commands as root
# vim-9.0.2190 Improved version of the vi editor
# ...
依存関係の確認
# このパッケージが依存しているもの
pkg info -d vim
# vim-9.0.2190 depends on:
# indexinfo-0.3.1
# gettext-runtime-0.22.3
# ...
# このパッケージに依存しているもの
pkg info -r vim
ports - ソースからビルド
portsコレクションの取得
# portsnap(古い方法、14.0で非推奨)
portsnap fetch extract # 初回
portsnap fetch update # 更新
# Git(推奨)
pkg install git
git clone https://git.FreeBSD.org/ports.git /usr/ports
portsの構造
/usr/ports/
├── Makefile
├── editors/
│ ├── vim/
│ │ ├── Makefile # ビルド手順
│ │ ├── distinfo # チェックサム
│ │ ├── pkg-descr # 説明
│ │ └── files/ # パッチ等
│ └── nano/
├── www/
│ ├── nginx/
│ └── apache24/
├── databases/
│ ├── postgresql15/
│ └── mysql80/
└── ...
カテゴリ別にソフトウェアが整理されている。
portsでのインストール
cd /usr/ports/editors/vim
# 設定オプションを表示
make config
┌──────────────────────────────────────────────────────────────┐
│ Options for vim-9.0.2190 │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ [ ] CTAGS_BASE Use ctags from base │ │
│ │ [ ] CTAGS_EXUBERANT Use exuberant ctags │ │
│ │ [X] CSCOPE cscope support │ │
│ │ [X] DEFAULT_VIMRC Install default vimrc │ │
│ │ [ ] GUI Build with GUI │ │
│ │ [ ] GTK3 Use GTK+ 3 │ │
│ │ [X] LUA Lua scripting support │ │
│ │ [ ] PERL Perl scripting support │ │
│ │ [X] PYTHON Python scripting support │ │
│ │ [ ] RUBY Ruby scripting support │ │
│ │ [ ] X11 X11 (clipboard) support │ │
│ └──────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
これがportsの最大の利点。ビルドオプションを自由にカスタマイズできる。
# ビルド&インストール
make install clean
# または依存関係も含めて
make install clean BATCH=yes # 対話なしで全部デフォルト
portsのアップグレード
portupgradeかportmasterを使う。
# portmasterインストール
pkg install portmaster
# 全パッケージのアップグレード
portmaster -a
# 特定のポートをアップグレード
portmaster editors/vim
pkgとportsの使い分け
pkgを使うべきケース(95%以上)
✅ 普通にソフトをインストールしたい
✅ サーバー運用で安定性重視
✅ 時間をかけたくない
✅ デフォルト設定で問題ない
portsを使うべきケース
✅ 特定のビルドオプションを有効/無効にしたい
✅ 最新版が必要(pkgより先に更新されることがある)
✅ パッチを当てたい
✅ 学習目的
混在させる場合の注意
pkgとportsを混在させると地獄を見る。
# やってはいけない例
pkg install nginx # pkgでインストール
cd /usr/ports/www/nginx
make install # portsで上書き ← 依存関係が壊れる可能性
混在させるならpkg lockで管理するか、poudriere(後述)を使う。
poudriere - 自前のpkgリポジトリを作る
portsのカスタムビルドをpkgとして管理したいならpoudriereを使う。
pkg install poudriere
# jail作成(ビルド環境)
poudriere jail -c -j 14amd64 -v 14.2-RELEASE -a amd64
# portsツリー作成
poudriere ports -c -p default
# ビルド設定
poudriere options -j 14amd64 -p default editors/vim
# ビルド実行
poudriere bulk -j 14amd64 -p default editors/vim
これで/usr/local/poudriere/data/packages/に独自のpkgリポジトリができる。
実用的なpkgコマンド集
# 脆弱性チェック
pkg audit -F
# 0 problem(s) in the installed packages found.
# パッケージのファイル一覧
pkg info -l vim
# /usr/local/bin/vim
# /usr/local/bin/vimdiff
# ...
# このファイルを含むパッケージを検索
pkg which /usr/local/bin/vim
# /usr/local/bin/vim was installed by package vim-9.0.2190
# パッケージの依存関係をツリー表示
pkg info -d vim | head -20
# リポジトリのパッケージ数
pkg stats
# Local package database:
# Installed packages: 42
# Disk space occupied: 534 MiB
トラブルシューティング
pkgがロックされてる
pkg install vim
# pkg: database is locked
# ロックファイルを確認
ls /var/db/pkg/local.sqlite-*
# 強制的に解除(他でpkgが動いてないことを確認)
rm /var/db/pkg/local.sqlite-*
portsのビルドが失敗
make install clean
# ...
# Error: ...
# クリーンしてやり直し
make clean
make install clean
# それでもダメなら依存関係を再インストール
make missing | xargs pkg install -y
make install clean
pkg upgradeで依存関係エラー
# 強制的に再インストール
pkg upgrade -f
まとめ
| 項目 | pkg | ports |
|---|---|---|
| インストール速度 | 速い(バイナリ) | 遅い(コンパイル) |
| カスタマイズ | 不可 | 可能 |
| 最新版 | やや遅れる | 最新 |
| 推奨度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
結論:
- 普段は
pkgを使え - カスタマイズが必要なときだけ
portsを使え - 両方混在させるな
次回予告
Part3: jail入門、Dockerより先にあったコンテナ
FreeBSD生まれのコンテナ技術「jail」。2000年にリリースされて、Docker(2013年)より13年も早い。その仕組みと使い方を解説するよ。
この記事が役に立ったら、いいね・ストックしてもらえると嬉しいです!