第 3 特集 一 Ports/Packages のすべて 場合があるので注意してほしい。 ftp を使う場合は、 ftp://ftp.freebsd ・ org/pub/FreeBSD/ branches/—current/ports/ か、そのミラーサイト (ftp ・ jp ・ free bsd. org や ftpC2-6] . jp. freebsd. org 等 ) から持ってくるとよいだろう。 また、 FreeBSD の Web ページなら説 明を見ながら持ってくることができる。 http : //www.freebsd.org/ports/ index . html 日本語が読める環境なら、 がわかりやすい注 1 。 持ってきた ports のファイルは、適 当なディレクトリに展開してもよいが、 / u s r / p 。 r t s / 以下に展開すると、 make を行う際に Ports のパスを変更す る必要がなくなる。 また、 Ports を make してインストー ルする際には、 Ports コレクションの トップディレクトリにある Makefile が 必要なので、 Ports の個々のディレクト http://www.jp.freebsd.org/ 導買w.freebsd.org/ja/ports/ index . html 表 1 Po 「 ts を探すときに指定されるバス ローカルディスク CD-ROM / ヾス ${CD_MOUNTPT}/ports/distfi1es/ ${PORTSDIR}/distfi1es/ /usr/ports/distfiles/ /cdrom/ports/distfiles/ テフォルトのバス リを持ってくる場合は注意してほしい。 PO 「 ts のインストール Ports をインストールするには、 Ports を展開したディレクトリで make を行う。 Ports は全部のコレクションを 一度にインストールすることも、一つ ーっインストールすることも可能だ たとえば Ports のトップディレクトリで make を行うとすべての Ports が make され、また X11 ー wm 以下で make を行う と xll-wm に含まれる Ports が make さ れる。 このとき、 Ports の Makefile は、 Ports を展開したトップディレクトリに ある . /Mk ディレクトリ下のファイルを 読み込むので、 /usr/ports/ 以外に Ports を展開した場合は PORTSD 工 R にそ のディレクトリを指定しなくてはなら make PORTSDIR="/usr/10ca1/ports" もしくは、 /usr/share/mk/bsd. User LonfI-rrnatIon Requested Wou1d you 1 e to izstall the FreeBSD ports collection? This lAli-II give you 工・ eady access t0 over 2000 ported software packages, though at a cost 0f 0 開 d 5 田 B 0f disk space when "clean" and possibly much more than that if a 10t of the distrxbution tarballs are loaded (unless you have the extra CDs 印 lable fr0f(l a FreeBSD CDRCIM distribution and thelTl on /cdE01Tl, which case せ far less 0f a proble(fl). The ports collection a very リリ able resource and, if you have at least 10 B to spare Y01 」工 /usr partition, well worth h ⅲ around. For cnore information on the ports collection & the latest ports, visit: http://lNLll•q. freebsd. org/ports 画面 1 インストール時に Ports を選択する方法 注 1 本誌付録 CD - ROM にも原稿執筆時点のすべての Ports を一覧表にまとめておくので参考にしてほしい。 p 。 rt . を編集し、 PORTSDIR?=/usr/ports の行を変更するとよいだろう。 さて、 Ports を展開しただけでは、 インストールしたいと思っているアプ リケーションのソースはまだ展開した ディレクトリには存在しない。 Ports の Makefile は、このソースをローカルの ディスク、 CD-ROM 、 ftp サイトの順 に自動的に探す。ローカルディスクと CD - ROM はそれぞれ表 1 のパスで指定 される。 デフォルトと異なるパスに用意した 場合は、以下のように make 時に指定 するとよいだろう。 make PORTSDIR=" /usr/local/ports " \ CD_MOUNTPT="/disk/cd0 " また、 ftp サイトからの取得には /usr/bin/fetch を用いているが、 ファイアウォールの内側などから pass ⅳ e モードで ftp アクセスを行わねばならな い場合は、 - p オプションを指定する必 要がある。これは FETCH-BEFORE- ARGS で与える。 make FETCH—BEFORE_ARGS=" —p" make を行うと必要なファイルが展 開され、 patch があたり、必要によっ てコンパイルが行われ、 FreeBSD で動 作するバイナリが完成する。続いて make i Ⅱ stall を行うと、バイナリや マニュアルページ、 1999 No. 1 ドキュメント等が BSD magazine 〃 5
フロジェクト短信 ports-jp について ports-jp は、日本で ports 関係の作業をしている人々が 集まっているメーリングリストです。プロジェクトという よりは、作業をしている個人の集まりという性格が強いと いえるでしよう。 FreeBSD の ports 自体については、 117 ページで解説されているのでそちらを参照していただくと 、ここでは ports - jp での活動や課題について簡単に説 して 明しましよう。 FreeBSD の特徴の一つとして、 ports Collection が充 実していることが挙げられます。日本関係の ports もかな り充実していて、通常使用するようなものについてはほと んど含まれているといっても過言ではありません。 ports 関係の議論が行われる p 。 rts - jp の果たす役割は重要になっ てきています。 FreeBSD の ports については、ほかに本家 FreeBSD.org の ports メーリングリストがあります。こちらは ports に関 する send-pr 注 1 が流れるため重要ですが、 ports-jp に比べ て ports 作成自体に関するテクニックや議論が流れる頻度 が少ないような気がします。 ports/packages の課題 FreeBSD の ports は基本的に全世界のユーザーを対象 に開発され、またアメリカでの配布を前提に配布物が作成 されているために日本での使用には若干の問題が生じてい ます。 A. アメリカの暗号輸出規制に抵触するものは package が 作成されない B. 日本語化された ports と英語版 ports の衝突 C. ports の国際化 (118N) A. では、たとえば日本で広く使われているメールソフト mew は、 PGP へのフックがあるために FreeBSD 配布物の 中に package が存在していません。 ports を使ってインス トールするしかないため、特に初心者にとっては敷居が高 くなってしまっています。日本国内に限ってしまえば、 mew の package を作成したり配布するのは自由なので、 ports-jp ではこうした packages を作成して配布し、ユー ザーが簡単にインストールできるように作業を始めたとこ ろです。 英語版 port と日本語版 port が同じファイル名で同じ ディレクトリにインストールされるために共存できす衝突 することがあります (). ) 。たとえば、 TeX と日本語 pTeX 、 lynx と日本語 lynx は共存できないため、これらの 英語版に依存する ports/packages をインストールすると 日本語版の上に英語版が上書きされてしまうという現象が 起きます。これを防ぐためには、英語版ではなく日本語版 に依存するよう ports を書換える必要があります。 FreeBSD 2.2. X では per15 が英語版日本語版ともに ports/packages の形で提供されていたため、 per15 に依存 する多くの ports/packages でこの問題が発生しました。 現在の FreeBSD 3. X では、英語版 per15 がシステム標準で / usr / 以下にインストールされているためこの現象はなく なっています。 FreeBSD の普及に伴って、各国語に LION (localization) された ports が多く登録されるようになっています。しか し、これら LION されたものをいくら集めても 118N ( 国際 化 ) 、つまり「どの言語でも同じように扱える」状態には なりません。 p 。 rts 自体の 118N をどう行っていくか検討し ていくことも重要になってきています (). )。 X の Window Manager や KDE の 118N された ports 群が FreeBSD に登 録されるなど、作業は進んでいます。 最後に こと ports に関しては、 ports-jp でかなりの部分まで用 が済む状況になっています。 FreeBSD ソースツリーへの登 録を担当している ports 担当 committer には、 10 名近くも の日本の方々が活躍しているので、「英語でのやりとりは まったく自信がない」という方でも安心です。 自分が作成した ports が FreeBSD 配布物に含まれて全 世界のユーザーに使われる、というのは非常にやりがいの ある作業です。 FreeBSD ハンドブックに自分の名前が載 るのが嬉しいという人もいるでしよう。新しい ports を作 成したり、既存の ports のバージョンアップをしようとい う意欲ある方の参加をお待ちしています。 フ野兀之 / M 研の , 〃石 Ko 〃〃 0 motoyuki@jp.FreeBSD.org 注 1 ports に関するバグ情報のほか、 ports の新規登録や更新の依頼が send - pr で扱われます。 77 イ BSD magazine 1999 No. 1
0 OpenBSD Ports メカニズム OpenBSD にも FreeBSD と同じく Ports system がある。 OpenBSD Ports は、 NetBSD の Package と同様に FreeBSD の Ports から派生したものだ。 初期は FreeBSD ports ソースツリー上 にあったのだが、 1 9 9 7 年後半に OpenBSD ソースツリー上に持ち込ま れた。 OpenBSD Ports もまた、 FreeBSD Ports の機能を取り込みつつ、 PLIST 作成スクリプトや distfiles 、 licence チェックスクリプトなどの Ports 作成支 援スクリプトを ports/infrastructure に揃えるなど、やはり独自の進化をと げている。しかし、 FreeBSD 式ヘッ ダー (Port 名、 Version 、作成日、作 成者など ) が存在する Makefile が多数 残っていることや、使用できる Ports 数 ( 1999 年 9 月現在約 500 個 ) を見て もわかるように、まだ多くの作業が 残っている。もし興味があれば、 Open - BSD の Ports を支える一人になってみ てはどうだろうか。詳しい情報は、 http.//www.openbsd.org/ports.html から得ることができる。 FreeBSD Ports 、 NetBSD Packages 、 OpenBSD Ports のおおまかな関係を示 す年表を図 1 に示す。 呼び名 ( ソース ) 呼び名 ( バイナリ ) ソースインストールティレクトリ バイナリインストールディレクトリ ソフトウェア数 mk file OpenBSD Ports NetBSD Packages FreeBSD Ports 1993 年 11 月 po s 収集開始 1994 年 8 月 2.0 po collection スタート 1995 年 3 月 japanese category 追加 1996 年 6 月 1996 年 9 月 1996 月 1 1 月 /usr/share/mk/bsd. po mk NetBSD 対応 1996 年 12 月 /usr/share/mk/bsd. port.mk に OpenBSD での変更を merge 1997 年 7 月 1000 po 突破 1997 年 8 月 FreeBSD の /usr/share/mk/bsd. port.mk インポート Jason Thorpe 氏 NetBSD 対応用 bsd. port.mk を FreeBSD に send-pr ー・ FreeBSD の /usr/share/mk/bsd. P0員 . mk インポート /usr/pkg/src->/usr/pkgsrc ー・ FreeBSD po s インポート pkgsrc tree スタート 1997 年 9 月 1997 年 10 月 1997 年 11 月 1998 年 4 月 FreeBSD po s インポ ート ports tree スタート /usr/share/mk/bsd. port.mk 削除 /usr/pkgsrc/mk/bsd. pkg. mk 使用に変更 1999 年 1 月 2000 po 員 s 突破 /usr/share/mk/bsd. port.mk - > /usr/ports/Mk/bsd. po s. mk 1999 年 5 月 /usr/share/mk/bsd. P0臧 . mk - > /usr/ports/infrastructure/mk/ bsd. port.mk NetBSD 図 1 Ports/Packa es の歴史 OpenBSD FreeBSD Packag es Precompiled (Binary Packag es /usr/pkgsrc /usr/pkg 約 900 /usr/pkgsrc/mk/ bsd. pkg. mk Ports Packages /usr/ports /usr/local 約 500 /usr/share/mk/ bsd. ports. mk /usr/ports/ infrastructure/mk/ bsd. ports. mk ( 実体 ) Ports Packages /usr/ports /usr/local 約 2600 /usr/share/mk/ bsd. ports. mk /usr/ports/Mk/ bsd. ports. mk ( 実体 ) 72 石 BSD magazine 1999 No. 1
第 3 特集 Ports/Packages のすべて ロ Ports/Packages の作り方 amaike@iri. CO. JP 天池健 /Takeshi Amaike たとえ自分でフリーソフトウェアを 開発していなかったとしても、たいへ んできのよいフリーソフトウェアは自 分の使っているシステムにすぐに導入 できるようにしておきたい、他の人に も使ってもらいたいと思うことがある だろう。たくさんのマシンを管理して いる人なら、いつも同じソフトを毎回 手で修正してコンパイルするのを面倒 に思うかもしれない。そんなときは、 自家製 Ports/Packages を作ってしま おう。 Ports にしておけば簡単に人に勧 めることもできるだろうし、 Package にしてしまえばインストールも一発だ。 バージョンの変更があったときも、入 れ換えやデリートが簡単である。 もしたいへん満足のいく Ports/Pac kages ができあがったら、 FreeBSD の Ports ツリーに置いて世界中の人々に 使ってもらおう。ただし、著作件には Ports の構造 注意してほしい。 MakefiIe を含むスケルトンと呼ばれる (distfile と呼ばれる ) と、 Ports 用の アプリケーションのソースファイル tar + compress でまとめられた形式の tarball と呼ばれる tar + gzip もしくは Po rts で重要な役割を担うのは、 tarball とスケルトン 作ることは難しい。 味がわからなければ希望した Ports を ろうとしても、ディレクトリ構造の意 を知っておくべきである。知らずに作 Ports を作るには、ま $Ports の構造 ファイル群である。 distfile はアプリケーションのソース ファイルやマニュアルページ、 MakefiIe を含んでおり、多くの場合は tarba Ⅱ形式で配布されるので、そのま ま Ports で利用できる。 Ports は tarball を展開し、スケルトンに含まれる patch をあて、コンパイルを行ったりシステ ムにファイルをインストールしたりする ので、もし distfile が tarball と異なる形 式で配布されている場合には、あらか じめ tarba Ⅱにしておく必要がある。 スケルトンは Ports の骨子となるファ イル群で、中核をなす M a k e fil e 、 tarba Ⅱが正しいものかを判断する MD5 checksum 、 tarball の中身を FreeBSD で正しく動作させるための patch ファ イル、そして Package 化で役立ついく らかのファイルと、それらを含むディ レクトリで構成される。 Ports コレク ションを展開し、そこに含まれる Ports スケルトンのディレクトリを見ると、 CVS ディレクトリも含まれているが、 これは Ports ツリーでの管理に必要なも のであり、 P 。 rts スケルトンに必須なも のではない ( 図 1 ) 。 MakefiIe Ports でもっとも重要なのは、この MakefiIe だ。これにより、 Ports は正 しくパッチをあて、コンパイルを行い、 インストールができる。 Ports の Makefile の核は /usr/ ports/Mk/bsd . port . mk にある 個々の Ports に付属する、つまりスケ ルトンの中にある Makefile は、この核 となる MakefiIe に対する設定を行う ファイルである。 スケルトンの Makefile を見てみよう。 例は EmiCIock-2 だ ( リスト 1 ) 。 MakefiIe の詳細には後ほど触れる。 こでは最後の・・ . include く bsd . port. mk>" に注目してほしい。 . include く bsd. port. > は、 /usr/ share/mk/bsd . port . mk をこの MakefiIe にインクルードする。 /usr/ Makefi1e files/ + ーー md5 patches/ 十一一 patch—?? + ーー PLIST + ーー DESCR + ーー COMMENT その Ports の Makefile ・・ tarball の md5 checksum ・・ tarball にあてる patch files ・・簡単な ( 一行の ) 説明 ・・詳細な説明 ・・プログラムのインストール時に作成されるすべてのファイルのリスト 図。 1 。尸 9 s スケルン 1999 No. 1 BSD magazine 177
ロ Ports/Packages の基礎知識 amaike@iri. CO. JP 天池健 /Takeshi Amaike UNIX ライクな OS では、たいへん多 くのフリーソフトウェアやシェアウェ アが利用されている。これらは CD- ROM で配布されていたり lnternet 経 由で入手できるが、その大半はソース 形式で配布されているか、バイナリ配 布されていたとしても若干の調整が必 要である。ーロに UNIX ライクな OS と 言っても、その種類やバージョンは両 手に収まらないほどあり、動いている アーキテクチャもさまざまなものがあ るので、より多くのシステムで動作す るように気を配ると、どうしてもその ような形を取らざるを得ないのだろう。 これらのソフトウェアを、配布され た状態から自分が使用しているシステ ムに合わせてコンパイルしたりするの はそれほど難しい作業ではないが、誰 にでもできるほど簡単ではないことも 確かである。 配布されているフリーソフトウェア やシェアウェアを自分が使用している システムに持ってきて動くように調整 するのは、多くの場合それほど難しい ことではない。しかし若干の手直しや 設定が必要な場合があり、それにはい くらかの技能が必要だ。ソフトウェア を手軽に利用できるように、 FreeBSD への移植 (port) の手順を自動化した もの、それが "Ports" である。 Ports は、 FreeBSD 上で自動的に手 直しや調整を行ってソフトウェアを構築 し、インストールできるようにする修正 ファイルと makefile を集めたものだ。 77 イ BSD magazine 1999 No. 1 Po 「 ts とは ? れには配布されているフリーソフトウェ アやシェアウェアそのもの ( 配布ファイ ル ) は含まれない。しかし、構築時に 自動的に CD - ROM やインターネット上 から必要な配布ファイルを持ってくるよ うに作られているので、あらかじめ準備 しておく必要はない ( もちろん、ローカ ルディスク上にあらかじめ準備しておい てもよい ) 。元になるソフトウェアの配 布ファイルは、 FreeBSD の配布サイト (ftp.freebsd.org やそのミラーサイ ト ) や Walnut Creek の CD-ROM の . /ports/distfiles/ 以下に集め られているので、そこから持ってくる ことができる。 Ports はソフトウェアの配布ファイル に修正を施して構築を行うので、たと えばコンパイル時のオプションを変更 したいという場合に、 Ports に手を加 えることも可能だ。 Packages とは ? 前述のように、 Ports は利用したい ソフトウェアの元の配布ファイルに FreeBSD 用の修正を加えて構築し、 インストールするものだ。ほば "make 一発 " で動かせるものができあがる手 軽さだが、これをさらに手軽にしたの が・・ Packages" である。 Packages は Ports を兀にコンパイル されたバイナリファイルと、必要に応じ てコンフィギュレーションファイル、も しあればマニュアルとドキュメントファ イル等をまとめたものだ。 "pkg_add" というコマンドを用いると、 ports のよ うに構築する必要なく Packages がシ ステムにインストールされる。また、 そのパッケージのデリート ( アンイン ストールと言ったほうがわかりやすい だろうか ) もコマンドー発で行えるよ うになっている。 sysinstall を使って入手する ports を手に入れるもっとも簡単な 方法は、 FreeBSD のインストール時に ports のインストールを選択する方法で ある ( 画面 1 ) 。この場合、 2500 種類 を越えるすべての Ports が /usr/ports 以下に展開されるので、 /usr 以下に 十分なディスク容量 ( 100M バイト程 度 ) とⅲ ode の空きが必要だ。あらか じめ / usr / ports から十分な空きのあ るパーティションにシンポリックリン クを張っておくのも手だ。 FreeBSD のインストール後に Ports をインストールしたくなった場合は、 /stand/sysinstall でインストーラが 起動するので、℃ ustom" から "Distri- butions" を選択し、 " 7 Custom" を選 んで "ports" にチェックを入れればイ ンストールできる。 p や Web プラウサを使って入手する OS のインストールがすっかり終わっ たあとや、最新の Ports コレクション を持ってきたいという場合には、 ftp を 使うと便利だろう。ただし、 FreeBSD 2.2.8-RELEASE など、ちょっと古いシ ステムを使っていて、最新の ports を 持ってくると、そのままでは使えない Po 「 ts のインストール
share/mk/bsd. port . mk は、同様に して /usr/port/Mk/bsd. port . mk を インクルードするので、これにより Ports の核となる MakefiIe が読み込ま れる。スケルトンに含まれる Makefile は、この核となる Makefile 、 /usr/ ports/Mk/bsd. port . mk に対して、 ユーザーのシステムのディレクトリ構 成や、 Ports 固有の設定を記述するた めのファイルといえるだろう。 pkg ディレクトリのファイル pkg ディレクトリに入るファイルは、 主に Package を作る際に使用される。 COMMENT や DESCR は Ports/Package の 説明を、 PLI ST はシステムにインス トールされる実際のファイル名を過不 足なく列挙する。 特に PL 工 ST ファイルは重要だ。この ファイルは Package を作る際に pkg_ マリスト 1 スケルトンの Makefile New ports collection makefile for: create から参照され、 pkg-add や pkg_ delete 時にどのファイルをインストー ルまたはデリートするのか、またイン ストール / デリート時にどんなコマンド を実行するかなどが決定される。 MD5 チェックサム アプリケーションの配布ファイルは Ports ファイルとは別に取得するので、 もしかすると同名の別のファイルを 持ってきてしまったり、通信途中で壊 れたり化けたりしてしまうかもしれな い。そのような場合に Ports が異常な 動作に陥らないよう、 Ports でインス トールを行う際は、取得してきた tarba Ⅱが正しいものかどうか、 MD5 を 用いたチェックサムの比較を行う。 チェックサムが合わない場合、 ports は 作業を中止する。 EmiC10ck Version : # Whom : Date created : 2 . 0 . 1 Takeshi Amaike 9 September 1999 DI STNAME= CATEGORIES= MASTER_SITES= MA 工 NTA INER= MAN 1 = USE_IMAKE= emic10ck—2.0. 1 xll—clocks ftp://ftp.noge ・ com/pub/EmiC10ck/X11/ amaike@iri . co ・」 p emiclock . 1 yes LANGRES= resources/R6/EUC/EmiC10ck. ad LANGDIR= $ (XIIBASE) /1ib/X11/j a_JP. EUC/app—defau1ts EMICLOCKDIR= COPYRI GHTS= pre—install : $ (XIIBASE) /1ib/X11/EmiC10ck COPYRIGHT COPYRIGHT . en @if [ ! —d $(EMICLOCKDIR) ] ; then ${MKDIR} $ (EMICLOCKDIR) ; fi @if [ ! -d $(LANGDIR) ] ; then ${MKDIR} $ (LANGDIR) ; fi cd $ (WRKSRC) ; ${INSTALL-DATA} $ (LANGRES) $ (LANGDIR) /EmiC10ck cd $ (WRKSRC) ; ${INSTALL_DATA} $ (COPYRIGHTS) $ (EMICLOCKDIR) . include く bsd. port . mk> 778 BSD magazine 1999 No. 1 Ports/Packages のルール Ports や Packages を作成するとき は、使いやすさや他の Ports/Packages との関係から、いくつかのルールやガ イドラインが存在する。まったく個人 で使うのならば、特にルールに従わな くても Ports/Packages を作成して利 用できるが、 FreeBSD の Ports ツリー に登録したり広く配布したいと少しで も思うならば、これらのルールやガイ ドラインに沿って作成すべきである。 ルールやガイドラインの詳細に触れ るには、残念ながら誌面が足りない。 しかし、 FreeBSD には "FreeBSD HandBook" というすばらしいドキュ メントが用意されていて、しかも日本 訳されている。この中に Ports に関す る詳しい記述もあるので、ぜひそちら も参照してほしい。 インターネット上ならば、 http ://www.jp.freebsd.org/ www.FreeBSD.org/j a/handbook/ porting. html に情報がある。また、アスキー出版局よ り「 FreeBSD ハンドブック」 (ISBN4- 7561-1580-2 ) として出版されているの てほしい。 ルやガイドラインにしたがって設定し ディレクトリに置こう。各変数はルー を作成し、これを Ports スケルトンの EmiClock-2 の例にならって MakefiIe MakefiIe の作成 で簡単に作成できる。 Ports が完成した後、 make package Ports を作ってみよう。 Package は、 さて、構造がわかったら実際に Ports/Package の作成 で、その第 17 章を参照してほしい。
第 3 特集 Ports/Packages のすべて ロ NetBSD Package System 坂本一樹 /Kazuki Sakamoto sakamoto@jp.netbsd.org NetBSD Package System は、 Net- BSD で使えるソフトウェアを簡単にイ ンストールするための仕組みである。 たとえば nethack で遊びたいと思っ cd /usr/pkgsrc/games/nethack—xll make insta11 もしくは、 pkg-add ftp : //ftp.netbsd ・ org/pub/* NetBSD/packages/1.4 / i386 / A11 / \ nethack—x11—3.2.2. tgz とするだけでインストールできて、す ぐさま Dungeon に潜れる。 このように、あるソフトウェアの ソースコードをコンパイルして、 NetBSD で実行できるバイナリとその 他必要なファイルをインストールする ためのファイル群 (Makefile や patch など ) を Package と呼んでいる。 そう、 NetBSD Package は Free- BSD でいうところの ports に相当する のである。 FreeBSD Po 「 ts との関係 FreeBSD Ports と NetBSD Pack- age 、いったいどこが違うのだろうか。 まず名前。 NetBSD では、 port は各 機種用に移植された NetBSD を指す。 i386 port 、 sparc port などと日常的に 注 1 こでの ports は各機種用 NetBSD のこと。 NetBSD Package System とは 使っているので、 Ports では紛らわしい のである。 また、 FreeBSD では Ports をコンパ イルして作ったバイナリでの配布セッ トを Package と呼ぶが、 NetBSD では Package をコンパイルして作ったバイ ナリでの配布セットは Precompiled package ( または Binary package) と 呼んでいるので、混乱しないようにし ていただきたい。 名前が異なるのと同じように、それ ぞれのインストールディレクトリも異 なる。 FreeBSD Ports は標準で / usr / バイナリは /usr/local に ports に、 インストールされるが、 NetBSD Package は標準で /usr/pkgsrc に バイナリは / usr / pkg にインストールさ れる。 システム的にはどうだろうか。元々 NetBSD Package を構成するソース コードやファイルは、 FreeBSD の Ports から派生したものである。初期 の Package は FreeBSD Ports ソースツ リー上にあったのだが、効率の面や、 いろいろな機種を抱えた NetBSD への 対応を考えた結果、 1997 年後半に NetBSD ソースツリー上に持ち込まれ た。その後 NetBSD Package System 表 1 FreeBSD と NetBSD の違い 呼び名 ( ソース ) 呼び名 ( バイナリ ) ソースインストールティレクトリ バイナリインストールディレクトリ ソフトウェア数 FreeBSD Port(s) Package(s) /usr/ports /usr/local 約 2500 は、 FreeBSD Ports の機能を取り込み つつ独自の機能が加えられていった。 しかし、基本的な部分は変わっていな いので、新しくできた Ports に NetBSD 用の変更を施し、 Package に加えると いうことはよく行われている。 また NetBSD Package System は、 SoIaris や Linux kernel べースの OS な どでも利用できるような変更も行われ ている。まだ部分的にしか利用できな いが、試してみるとよいだろう。 PrecompiIed (Binary) Package のインストール 実際に Package をインストールして みよう。多くの ports 注 1 で Precompiled package ( すでにコンパイル済みの package) が NetBSD の ftp ミラーサイ トに多数用意されているので、まずは これのインストール方法から説明する。 http: //www.jp ・ netbsd ・ org/ja/JP/ Documentation/Packages/1ist/ README . html に利用可能な Package のリストがある ので、ここからインストールしたいソ フトウェアを選択する注 2 。 たとえば X Window System で動作 PrecompiIed (binary) Package(s) Packag e(s) NetBSD 約 900 /usr/pkg /usr/pkgsrc 注 2 本誌付録 CD - ROM にも、原稿執筆時点でのすべての Packages を一覧表にまとめておくので参考にしてほしい。 1999 No. 1 BSD magazine 727
1 . 2. 3. 4. 忘れ物はないだろうか ? 特に . /pkg/ PLIST の中身には注意してほしい。動 作確認は、以下の手順で行うことが推 2 23 : 33 : 48 奨されている。 make install パイルを行い、 トールする。 make package システムにインス tarball を展開し、 patch をあてコン pkg-add 、 make pakcage-name 、・ tgz からデリートする。 インストールした Ports をシステム make deinstall Ports から Package を作成する。 5. 6. 7. 作成した Package を pkg_add でシ ステムにインストールする。 make deinstall pkg-add でインストールした Pack- age をシステムからデリートする に Package を作成する。 て ei Ⅱ stall で作成した物をベース make package 再インストールを行う。 make reinstall 動作確認の中で、 make install や、 make reinstall 、 make package を 行う際に、 warn ⅲ g が出力されないこ とを確認しよう。もし warning が出力 マリスト 2 COMMENT の例リスト 2 COMMENT の例 Hyper—animated face analog clock f0 て X11 マリスト 3 DESCR の例 、 Emi CIock ー is a hyper animated face analog clock with pretty characters. CIick the left button t0 display the menu. Copyright (c) 1994 , 1995 , 1997 , 1998 , 1999 Masayuki KOba. Copyright (c) 1994 M0tosoft (ORIGINAL) . ports maintained by Takeshi Amaike amaike@iri . CO ・ JP マリスト 4 PLIST の例 bin/emiclock 1ib/XI 1/app—defau1ts/EmiCIock 1ib/XI l/j a—JP. EUC/app—defau1ts/EmiCIock 1ib/X11/EmiC10ck/COPYRIGHT. en 1ib/X11/EmiC10ck/COPYRIGHT 1ib/X11/EmiC10ck/myu. au @dirrm Iib/XII/EmiC10ck/ マリスト 5 patch-aa config. h Thu Sep + + + config. h Mon Sep ー 51 , 7 + 51 , 7 @@ * サウンド関係の設定 —#unde f USE_S OUND + #define USE_SOUND 6 16 : 02 : 06 1999 1999 / * #define EmiC10ckLib / * サウンドを使う ? * / / * サウンドを使う ? * / /usr/IocaI/1ib/X11/EmiCIock * / されたら、その内容にしたがって修正 を施し、 warning が出力されないよう にしてほしい。コンパイル時に warning が出るならば、ソースにパッチをあて に感謝する。 快く提供してくださった古場正行さん X Window System 版 Version 2.0.1 を この原稿を書くにあたり、 EmiCIock 謝辞 んどん ports 化していこう。 世界中のすばらしいソフトウェアをど より快適な FreeBSD Life のために 議論を行うこともできる。 ば、 Ports や Package に関して詳しい ports-jp メーリングリストに参加すれ ports - jp の情報もたいへん役に立つ。 詳しい情報が得られるだろう。また、 こで紹介した Ports の作り方のより ブック』に目を通しておいてほしい。 思ったら、ぜひ一度 fFreeBSD ハンド FreeBSD の Ports ツリーに置きたいと うか。もし、できあがった Ports を うまく自家製 P 。 rts は完成しただろ 終わりに 0 る必要があるかもしれない。 動作はするが、極力発生しないように してほしい。 WARN ならばとりあえず FATAL や WARN が出ていないか確認 一通りのチェックが行われるので、 ディレクトリで p 。 rtlint を動かすと をチェックする。作成した Ports の た Ports がガイドラインに沿っているか まれているプログラムの 1 つで、作成し portlint は ports コレクションに含 portlint / * $(LIBDIR)/EmiC10ck 以外の場所にサウンドファイルをインストール * / 720 BSD magazine 1999 No. 1
第 3 特集 Ports/Packages のすべて もう一度、 MakefiIe の例を見てみよ う。この MakefiIe で特に重要なのは、 D 工 STNAME PKGNAME CATEGOR I ES MASTER_S 工 TES MA I NTA 工 NER の 5 つの変数を設定している箇所と、 最後の . include く bsd. port. mk> の 行である。 . include の行に関しては 先ほど触れたので、 こではそれぞれ の変数について説明する。 ・ DISTNAME 配布ファイルの名前。 tarball から ・ t ar. gz 、または . tgz を抜いた名 前になる。 ・ PKGNAME Package の名称。 DISTNAME と同一 ならば指定する必要はない。 Pack- age の名前付けにはガイドラインが あるので、 DISTNAME がガイドライ ンに沿っていない場合は、沿った名 前をここに指定する。 ・ CATEGORIES この Ports がどのカテゴリに属するか を決める。現在のカテゴリー覧から 適切なものを選ぶが、複数のカテゴ リに属する場合もある。複数に属す る場合は、記述の順番にルールがあ るので注意してほしい。 ・ MASTER SITES tarball が置かれている Master ftp サ イト。通常、そのアプリケーション の公式配布サイトを指定する。 ・ MAINTAINER この Ports の保守担当者の電子メー ルアドレス。 FreeBSD やアプリケー ションのバージョンが変わった場合 にスケルトンの変更を行う担当者を 指定する。 ほかにも大切な変数があるが、最低 限これだけ設定すればよいだろう。 pkg ファイルの作成 package 用の各ファイル、 COMMENT と DESCR 、 PL 工 ST を記述する。これも 例をみるとわかりやすいだろう。再び EmiCIock-2 から例示する。 COMMENT は簡単だ。簡単な説明を 1 行に収まるように書く ( リスト 2 ) 。 DESCR には詳しい説明を記述する。 EmiCIock -2 では簡潔に書かれている が、 24 行に収まる程度に、より詳しく 書いてもよい。最後に MAINTAINER の名前を書いておこう ( リスト 3 ) 。 PLIST には、インストールされる ファイルを /usr/local または /usr/ X11R6 からの相対パスで列挙する ( リ スト 4 ) 。それ以外にインストールした い場合は、 @cwd で指定する。ディレク トリを指定する必要はないが Ports/Package のインストールによっ て新規に作られるようなディレクトリ は@dirrm で指定すると、 pkg-delete などで Package を削除したときにいっ しょに消してくれる。ほかにも @exec (Package のインストール時に実行され るコマンドを指定 ) や @ u n e x e c (Package のデリート時に実行されるコ マンドを指定 ) などがあり、これらを 組み合わせて正しくインストールされ るようにする。 3 つのファイルができたら、 pkg ディ レクトリの下に置く。 patch ファイル 必要なら patch ファイルを作成する。 いくつかのアプリケーションは何の 変更もなく FreeBSD に持ってきて動か ソースの変更を行う必要があるかもし ケーションによっていくらかの設定や すことができるかもしれないが、アプリ れない。 patch ファイルは、 Ports が完全に FreeBSD で動作するように元のファイ ルを変更するためのものである。 Emi Clock -2 の patch ファイルを見よう ( リス ト 5 ) 。 こでは EmiCIock の config ・ h に若干の変更を加えている。場合によっ ては、もっと多くのファイルに patch を あてる必要があるだろう。その場合は ファイルことに patch-aa 、 patch—ab ・・と複数の patch ファイルを作る。 patch ファイルの名前は、必 $patch- * という形式にすること。 MD5 チェックサムファイル MD5 チェックサムは、先に Makefile が できていれば、簡単に作成できる。配布 ファイルの t b を distfiles ディレク トリ ( 通常は /usr/ports/distfiles) に置き、 make makesum で自動的に . /fi1es/md5 ファイルカ胙成される。 作成した PO s のチェック 自家製 Ports はできただろうか ? 作 成した Ports が正しく動くか、ガイド ラインに沿っているか、確認しよう。 動作確認 まずはなにより、正しく動作するか を確認する。確認するべき項目は、 ・ PL 工 ST に、作成した Ports でインス トールしないものが含まれていない ・ PL 工 ST に、作成した Ports でインス トールするすべてのものが含まれて いること ・ make reinstall で、何度も再イン ストールが可能なこと ・ make deinstall で、インストール したものが正しく消去されること BSD magazine 779 1999 No. 1
乃お SD 高負荷下での性能・安定性を重視 FreeBSD コアチーム (Ports Collection 担当 ) 浅見賢 /Satoshi Asami asami@FreeBSD.org 取っていかなくても http://www. ports と packages FreeBSD.org/cgi/cvsweb.cgi などを 使って簡単に履歴の参照や変更点の確 ports/packages と呼ばれるシステム 認ができるようになっている注 2 。 CVS リポジトリの配布は主にコア により、アプリケーションのインストー ルが容易にできるようになっている。 チームメンバーでもある扣 h Ⅱ Polstra ports とは直訳すれは移植ソフトウェア 氏が開発した cvsup というシステムに FreeBSD は lntel および AIpha アーキ テクチャ上で動く BSD 由来のオペレー のことだが、決まった形式にまとめ、誰 よって行われている注 3 。以前使われて ティングシステムである。まず、他の でも「 make—発」で簡単にインストー いた sup に比べて、 cvsup はファイル ルできるようにしたものを FreeBSD プ オープンソース OS と比べて FreeBSD の変更分だけを送るために飛躍的に の特徴といえるものを見てみよう。 ネットワークの負荷が軽減されている ロジェクトとして Ports Collection とい う名前でまとめてある。また、これをコ という特長を持つ。また、リポジトリ 高負荷化での安定性 ンパイルしたバイナリをまとめたものが をそのまま取ってくるだけでなく、 package で、リリースと一緒に公開され 「チェックアウトモード」という機能を FreeBSD プロジェクトでは特に高負 るだけでなく、毎日新しく加わったり 使うことによりリポジトリを展開した 荷下での性能・安定性に重きをおいて バージョンアップされている ports に対 形で取得することも可能であり、少な 開発を進めている。これは FreeBSD が 応すべく package もどんどん更新されて いディスクスペースで最新のソースや おり、一週間ごとに師.FreeBSD.org に ある特定のプランチ / 日付のソースを見 ftp://ftp.cdrom.com/、 http://www. 新しい package 群がアップロードされて ることができるようになっている。 yah00.com/、 http://www.bluemountain. com/などのインターネット上でも有数 いる。 ports と package については第 3 cvs 叩用のミラーサーバーには cvs 叩 . の巨大サイトに使われていることに 特集の「 Ports/Packages のすべて」を jp.FreeBSD.org 、 cvsup2. jp. FreeBSD. よっても裏づけられている。また、多 ご覧いただきたい。 org などがある。なお、よく米国の cvs 叩 . 少古く、非力なマシンでパーソナル FreeBSD.org に日本から接続するユー CVS によるソースツリーの ワークステーションとして使うには ザーがいるが、これもミラーサーバーの 全履歴の公開 ・・というようなものをメー ちょっと・・ ーっにすぎず、日本のサーバーに比べて ルサーバーやファイヤウォールとして FreeBSD プロジェクトでは全ソース 特にアップデートが早いわけではないこ 「第二の人生」を歩ませるのにも適し ツリーの履歴を誰でも見られるように公 とに注意。日本からは国内のサーバー た OS である。これはちょっと見ると逆 に接続するようにしていただきたい。 開している。カーネルから po れ s まですべ のことを言っているようだが、実際に てのソースのバージョン管理は CVS 注 1 システムとしての統一性 は「どの機械でもその性能を最大限に で行われており、この CVS リポジトリ 引き出す」という点で共通しているデ を誰でも取得できるように公開してい ザイン思想と言える。 るほか、巨大な CVS リポジトリを全部 FreeBSD ではオフィシャルなソース FreeBSD の特徴 注 1 Concurrent Versions System の略で、 RCS の流れを汲むバージョン管理システム。 注 2 ちなみに現在の CVS リポジトリのサイズは src 520MB 、 ports 110MB 、 doc32MB などとなっている。 注 3 cvsup は ports の net/cvsup または net/cvsup-bin ( 後者はバイナリリリースを取ってきて展開するだけのものである ) からインストールできる。かなり重 要なものであるにも関わらず / usr / src に入っていないのは、コンパイルに X や Modula -3 を必要とするからである。 72 BSD magazine 1999 No. 1