連載
» 2012年08月24日 00時00分 UPDATE

FreeBSDのコレ知ってる?(3):次世代パッケージ管理システム、pkg(8) (1/3)

FreeBSD 10-CURRENTに、パッケージのビルドシステムや配布システム、管理システムなどを刷新した次世代パッケージ管理システム「pkg(8)」がマージされた。今回はその機能を紹介する。(編集部)

[後藤大地,BSDコンサルティング株式会社]

次世代パッケージ管理システム「pkg(8)」登場

 FreeBSD 10-CURRENTに、これまで開発が進められてきた次世代パッケージ管理システムpkg(8)がマージされた。

 pkg(8)は、apt-get(8)yum(8)のようなものだと想像してもらえばよいだろう。もともとpkgngとして開発が進められてきたもので、portmaster(8)portupgrade(8)などを置き換えるものではなく、パッケージのビルドシステム配布システム管理システムなども含めて新しく構築した次世代のパッケージ管理システムである。

 pkg(8)のインストール方法は以下の通りだ。

# pkg install zsh
Updating repository catalogue
Repository catalogue is up-to-date, no need to fetch fresh copy
The following packages will be installed:
        Installing zsh: 5.0.0
The installation will require 14 MB more space
3 MB to be downloaded
Proceed with installing packages [y/N]: y
zsh-5.0.0.txz           100% 3733KB 186.7KB/s 103.3KB/s   00:20    
Checking integrity... done
Installing zsh-5.0.0...Updating /etc/shells
 done
# 

  pkg(8)でzshをインストール

# pkg info -f zsh
Name           : zsh
Version        : 5.0.0
Origin         : shells/zsh
Prefix         : /usr/local
Categories     : shells
Licenses       : ZSH 
Maintainer     : bapt@FreeBSD.org
WWW            : http://www.zsh.org/
Comment        : The Z shell
Options        : 
        DEBUG: off
        DOCS: on
        GDBM: off
        MAILDIR: on
        MEM: off
        MULTIBYTE: on
        PCRE: off
        SECURE_FREE: on
        STATIC: off
Flat size      : 14 MB
Description    : 
Zsh is a UNIX command interpreter (shell) which of the standard shells
most resembles the Korn shell (ksh), although it is not completely
compatible.  It includes enhancements of many types, notably in the
command-line editor, options for customising its behaviour, filename
globbing, features to make C-shell (csh) users feel more at home and
extra features drawn from tcsh (another `custom' shell).
If you want to use zsh completion system, you should type the following
commands:
        $ autoload -U compinstall
        $ compinstall
See also zshcompsys(1) manpage. :)
WWW: http://www.zsh.org/
# 

  インストールされたzshの情報を表示

 pkg(8)はFreeBSD 10を最も特徴付ける機能の1つになると見られる。すべてのユーザーおよび管理者に大きな影響を与えることになるため、先行した実験用の資料としての意味も込めて、10-CURRENTにマージされたいまの段階で一通り機能を紹介しておきたい。

ソフトウェアを管理する「Ports Collection」と「pkg_*」コマンド

 FreeBSDプロジェクトは、サードパーティ製ソフトウェアのビルドや管理にPorts Collectionを採用している。Ports Collectionはソフトウェア・ソースコードの配布場所、ビルド方法、パッチ、インストール方法などをまとめたソフトウェアカタログのようなもので、FreeBSDユーザーはPorts Collectionを経由してソフトウェアのビルドやインストール、インストールしたソフトウェアのアップグレードなどを実施している。

 FreeBSDプロジェクトではリリースごとにPorts Collectionからビルドしたソフトウェアをパッケージとして配布している。パッケージはPorts Collection経由でインストールしたソフトウェアをtarボールにまとめたもので、基本的にtarボールを展開すればインストールされた状態になる。

 ビルドの必要がないため、リリース版FreeBSDをインストールした場合、パッケージを使ってソフトウェアをインストールすることが多い。pkg_add(1)pkg_delete(1)pkg_info(1)pkg_version(1)など、pkg_*系コマンドで操作する。

 Ports Collectionとpkg_*系パッケージの主な使い分けは、次のようなところだ。

  • リリース版FreeBSDをインストールしてサーバとして動作させるなど安定性重視のシステムでは、OSインストール後にパッケージからソフトウェアをインストール。基本的にソフトウェアのアップデートは実施せず、セキュリティ問題が発生した場合などのみ、必要があればPorts Collectionからアップデートを実施。
  • 常に最新のソフトウェアを使い続けたいユーザーはPorts Collectionを利用。

 既存のFreeBSDユーザーや開発者はPorts Collectionを使うため、パッケージ管理システムはシンプルなままだった。しかし仮想環境の普及やAmazon EC2などの登場で、もっと高機能なパッケージ管理システムが求められるようになった。仮想サーバやクラウドサーバといった環境では、Ports Collectionよりも、パッケージを使って簡単にシステムを構築し、最新版にも簡単に追従していきたい……そういった要望が強くなり、pkgngの開発へつながっている。

次世代パッケージ管理システムの1つ「PBI」

 FreeBSDパッケージを高機能なものに置き換えようとする取り組みは、これまでにもいくつか存在している。中でも最も代表的なものが、FreeBSDベースのデスクトップソリューションであるPC-BSDが採用した「PBI」だ。PBIはFreeBSDのパッケージ管理システムとして利用することもでき、すでにこれを採用しているユーザーもいる。

 PBIが採用したアプローチは、ほかのUNIX系OSが採用したパッケージの方法とはかなり異なっており、どちらかといえばWindowsやMac OS X向けに提供されるアプリケーションに似た特性を持っている。UNIX系OSのパッケージは、依存するライブラリやほかのソフトウェアを、インストール時に同時にインストールするという方法を採用している。この方法は本質的にライブラリの衝突といった問題を発生させやすく、バージョンのロールバックが難しいという問題を抱えている。

 PBIではこの問題を回避するため、パッケージに関連するライブラリなどをすべて同梱するという方法を採用している。パッケージの独立性が高く、特定のアプリケーションだけをバージョンアップしたり、逆にロールバックしたりといったことを簡単に実施できる。反面、アプリケーションのディスク消費が増えるという問題があったが、同一のデータは共有して利用するという機能が追加されたことで、この問題は解消されている。

 pkg(8)は、ほかのUNIX系OSが採用しているパッケージ管理システムの方式に、Ports Collectionが持つ特性を追加したような仕組みになっている。このため開発者の中には、pkg(8)は根本的な問題を解決しておらず、PBIの方が優れているという意見を持っている人もいる。

 今後、FreeBSDをデスクトップ用途で採用する場合にはPC-BSDを使うシーンが増えると見込まれるので、知らず知らずのうちにPBIを使っているというシーンも増えていくのではないかと見られる。

 選択肢が多い分には問題なく、PBIもpkg(8)も向こう数年に渡ってFreeBSDにとって重要なパッケージ管理システムであり続けることになるだろう。

「パッケージセット」というアイデアを活用したpkg(8)

 従来のpkg_*パッケージの最大の問題点は、簡単にアップグレードする方法が提供されていなかった、という点にある。ただし、アップグレードしながら利用するようなケースではPorts Collectionが使われることが多かったため、これまでそれほど問題にならなかった。

 これに対しpkgng開発者は、次のようなアイデアで次世代のパッケージ管理システムを構築する方法を考案した。

  • 現在はリリースに対して作成しているパッケージだが、これを週に1回くらいのペースで作成するようにする。これを「パッケージセット」と呼ぶ。
  • 1つ前のパッケージセットから、新しいパッケージセットへアップグレードする方法を提供する。
  • これを積み重ねることで、古いパッケージから最新のパッケージへ累進的にアップグレードできるパスを実現する。

 ほかのUNIX系OSで採用されている代表的なパッケージ管理システムでは、リリースバージョンに対しては特定のバージョンのソフトウェアだけを提供し、バグ修正やセキュリティ修正のみをアップデートとして提供する方法を採用している。これに対してpkg(8)は、常に最新版へアップグレードできる点が特徴になっている。

 pkg(8)は高機能性を実現するため、メタデータファイルを根本的に作り替えている。また、操作の高速化や依存関係のトラッキング性向上などを実現するために、SQLiteデータベースを導入している。pkg(8)では/var/db/pkg/以下に作成されるファイルはSQLiteデータベースであり、従来のようにソフトウェアごとのディレクトリとテキストファイル、という構成は排除されている。

 pkg(8)のアイデアを実現するには、技術的にというよりも、プロジェクトの運用的にいくつかの課題がある。デベロッパサミットでもこのあたりの議論は行われ、ワーキンググループに参加したコミッタが問題意識を共有している。

  • 週1ですべてビルドするためのビルドクラスタを実現する必要がある。全アーキテクチャでこれを実現するにはハードウェアリソースが必要になる。
  • pkg(8)を実現するには、それ相応のネットワーク通信幅が必要になる。CDNを契約するなどして、パッケージの配布が世界中で円滑に進むようにインフラを整備する必要があると考えられる。

 今後、従来のpkg_*系コマンドはすべてpkg(8)に置き換わることになる。FreeBSDプロジェクトとして採用するパッケージ管理システムはpkg(8)となる。

       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。