8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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のアップグレード

portupgradeportmasterを使う。

# 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年も早い。その仕組みと使い方を解説するよ。

この記事が役に立ったら、いいね・ストックしてもらえると嬉しいです!

8
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?