FreeBSDのportsとは?pkgとは?rpm/yum/dnf(Red Hat系Linux)との違い。

FreeBSDのportsでnginxをビルドしようとしているときの覚書。
Gemini 2.5 Proと対話。

環境: FreeBSD 14.3-RELEASE-p2


portsとは?

Ports Collection (Ports)はソースコードからソフトウェアをコンパイル(ビルド)してインストールする仕組み。

FreeBSD Ports Collectionは、単なるソフトウェア管理ツールではなく、オープンソースの世界における一つの発明と言えるほど画期的なもの。

Portsの仕組みを基盤として、公式ビルドサーバーで事前にコンパイルしたバイナリパッケージを提供する Pkg システムが開発された。
つまりPkg で配布されている公式パッケージはPorts を使ってビルドしたもの。

参考: 第4章 アプリケーションのインストール - packages と ports | FreeBSD Documentation Portal


2021年3月に旧来のSubversionリポジトリが更新を停止し、Gitが唯一の公式Ports Collectionのリポジトリとなった。
コマンドもportsnapからgitに移行。

FreeBSDのソースコード本体は2020年にSubversionからGitへ移行していた。

FreeBSD PortsのGitへの移行は、単なるツールの変更ではなく、プロジェクトの開発・メンテナンス手法を21世紀の標準に合わせるための、戦略的な決断。
これにより、開発者の貢献を促し、システムの透明性を高め、長期的なメンテナンス性を確保するという、大きなメリットがもたらされた。


MacPortsとの関係

MacPortsは、FreeBSD PortsのコンセプトをmacOS上に実現するためのプロジェクト。

macOS (当時はMac OS X) は、その心臓部にFreeBSD由来のコードを含むBSD UNIX (Darwin) をベースとしるため、FreeBSDの文化との親和性が高く、Portsの思想が持ち込まれた。

MacPortsはもともとAppleが主導したが、独立したコミュニ-ティによって運営されている。


pkgとrpm/yum/dnf(Red Hat系Linux)との違い

pkgとは?

pkgはportsで事前にビルドされたバイナリパッケージを展開するツール。
FreeBSDの公式パッケージリポジトリは、リポジトリ全体で依存関係の整合性が保証されているため、依存関係地獄には陥らない。


RPMとは?

RPM(Red Hat Package Manager)はコンパイル済みの実行ファイル、ライブラリ、設定ファイルなどを一つにまとめたアーカイブ。
rpmコマンドは依存関係を解決しない。

yum/dnfはRPMの依存関係を自動解決する高レベルなコマンド。

FreeBSD PortsとRPMソースコードの違い

Linuxディストリビューション(Fedora, RHEL, CentOS, openSUSEなど)でRPMパッケージをビルドするためのソースコードは、一般的にSRPM (Source RPM) という形式で管理・配布される。

SRPM 管理と自動ビルド

  1. パッケージのメンテナーは、バージョン管理システムに変更を加え、レビューを受け、承認されるとマージされる。
  2. リポジトリに変更が加わると、大規模な自動ビルドシステムがそれを検知。
  3. ビルドシステムは、クリーンな環境(ビルド用の仮想マシンやコンテナ)で、SRPMからバイナリRPMをビルド。
  4. ビルドが成功し、QA(品質保証)テストを通過すると、そのバイナリRPMが公式リポジトリに公開され、ユーザーがdnf updateなどで利用できるようになる。


Portsは工房。SRPMは工場。

FreeBSD Portsはユーザーが直接ビルドすることを前提に設計されている。
コミュニティ全体で一つのPortsツリーをメンテナンスしている。
コンパイラのバージョン、依存ライブラリの状態、ネットワークの問題など、様々な要因でビルドが失敗することがある。

FreeBSD Portsは、腕利きの職人が自分のために道具を調整する「工房」のようなシステム。


SRPMは、Linuxディストリビューションがビルドすることを前提に設計されている。
誰がどこでビルドしても同じ結果(バイナリRPM)が得られるように、厳密にビルドプロセスを定義し、ディストリビューション全体でソフトウェアの品質と一貫性が保たれる。

SRPMは、誰が作っても同じ品質の製品を大量生産するための「工場」の設計図のようなシステム。

SRPMは、数千ものソフトウェアパッケージを一貫性のあるルールでビルドし、管理することを可能にした。
1000台のサーバーを管理する場面では、SRPMの方が一貫性した安定運用が可能。


つまり自分でビルドしたくなったらCentOSは卒業して、FreeBSDへ行こうという話。