FreeBSD 10-CURRENTに、パッケージのビルドシステムや配布システム、管理システムなどを刷新した次世代パッケージ管理システム「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にマージされたいまの段階で一通り機能を紹介しておきたい。
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ユーザーや開発者はPorts Collectionを使うため、パッケージ管理システムはシンプルなままだった。しかし仮想環境の普及やAmazon EC2などの登場で、もっと高機能なパッケージ管理システムが求められるようになった。仮想サーバやクラウドサーバといった環境では、Ports Collectionよりも、パッケージを使って簡単にシステムを構築し、最新版にも簡単に追従していきたい……そういった要望が強くなり、pkgngの開発へつながっている。
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_*パッケージの最大の問題点は、簡単にアップグレードする方法が提供されていなかった、という点にある。ただし、アップグレードしながら利用するようなケースではPorts Collectionが使われることが多かったため、これまでそれほど問題にならなかった。
これに対しpkgng開発者は、次のようなアイデアで次世代のパッケージ管理システムを構築する方法を考案した。
ほかのUNIX系OSで採用されている代表的なパッケージ管理システムでは、リリースバージョンに対しては特定のバージョンのソフトウェアだけを提供し、バグ修正やセキュリティ修正のみをアップデートとして提供する方法を採用している。これに対してpkg(8)は、常に最新版へアップグレードできる点が特徴になっている。
pkg(8)は高機能性を実現するため、メタデータファイルを根本的に作り替えている。また、操作の高速化や依存関係のトラッキング性向上などを実現するために、SQLiteデータベースを導入している。pkg(8)では/var/db/pkg/以下に作成されるファイルはSQLiteデータベースであり、従来のようにソフトウェアごとのディレクトリとテキストファイル、という構成は排除されている。
pkg(8)のアイデアを実現するには、技術的にというよりも、プロジェクトの運用的にいくつかの課題がある。デベロッパサミットでもこのあたりの議論は行われ、ワーキンググループに参加したコミッタが問題意識を共有している。
今後、従来のpkg_*系コマンドはすべてpkg(8)に置き換わることになる。FreeBSDプロジェクトとして採用するパッケージ管理システムはpkg(8)となる。
Copyright © ITmedia, Inc. All Rights Reserved.