第3章 3 分間 porting

このセクションでは、簡単な port の作り方について説明します。 多くの場合、これだけでは不十分なので、 この文書の続きを読まなければならないでしょう。

まず、元の tar ファイルを DISTDIR に置きます。この変数の デフォルト値は /usr/ports/distfiles です。

以下の例では、そのソフトウェアが そのままコンパイル可能なものと仮定しています。 つまり、FreeBSD マシンで動かすために、 変更がまったく必要ないという意味です。 もし何か変更が必要な場合には、次のセクションも 参照する必要があるでしょう。

3.1. Makefile の作成

最小限の Makefile は 次のようなものになります。

# New ports collection makefile for:   oneko
# Date created:     5 December 1994
# Whom:             asami
#
# $FreeBSD$
#

PORTNAME=       oneko
PORTVERSION=    1.1b
CATEGORIES=     games
MASTER_SITES=   ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/

MAINTAINER=     asami@FreeBSD.org
COMMENT=        A cat chasing a mouse all over the screen

MAN1=           oneko.1
MANCOMPRESSED=  yes
USE_IMAKE=      yes

.include <bsd.port.mk>

おわかりでしょうか。$FreeBSD$ を 含む行の内容については、気にする必要はありません。 この行は、このファイルが FreeBSD の ports ツリーに 取り込まれる際に、CVS によって自動的に書き込まれます。 もっと詳しい例が見たい場合には、 Makefile のサンプルの セクションをご覧ください。

3.2. package 記述ファイルの作成

package にするしないに関わらず、どのような port でも 2 つの記述ファイルが必要です。それは pkg-descrpkg-plist です。ファイル名が pkg- で始まっていることで 他のファイルと区別できるようになっています。

3.2.1. pkg-descr

このファイルには、その port についての少し長い説明を書きます。 その port が何をするのかについての、 数段落程度の簡潔な解説があれば充分です。

これはマニュアルでもなければ、使用方法やコンパイル方法に ついての細かい説明書でもありませんREADME ファイルや マニュアルを引用するつもりなら注意が必要です。 これらは多くの場合、その port の簡潔な説明になっていなかったり、 扱いにくい形式になっていたりします。 (マニュアルの場合、行を揃えるために空白が調整されていたりします。) このソフトウェアに公式のウェブサイトがあるのなら、 ここに書いてください。その際自動化ツールが正しく動作するように、 ウェブサイトのうちの一つには、 先頭に WWW: をつけておいてください。

このファイルの最後に、あなたの名前を書くことが推奨されています。 たとえば、こんな具合です。

This is a port of oneko, in which a cat chases a poor mouse all over
the screen.
 :
(うんぬん。)

WWW: http://www.oneko.org/

- Satoshi
asami@cs.berkeley.edu

3.2.2. pkg-plist

このファイルには、その port によってインストールされる すべてのファイルを列挙します。 このファイルは package を作る際のリストとして使われるため、 "パッキングリスト (packing list)" とも呼ばれます。 ここに書くパス名は、インストール時のプレフィックス (通常 /usr/local または /usr/X11R6) からの相対パスです。 MANn 変数を 使用している場合 (使用することが推奨されています)、このリストに マニュアルは入れないようにしてください。

簡単な例を載せておきましょう。

bin/oneko
lib/X11/app-defaults/Oneko
lib/X11/oneko/cat1.xpm
lib/X11/oneko/cat2.xpm
lib/X11/oneko/mouse.xpm
@dirrm lib/X11/oneko

パッキングリストの詳細については、 pkg_create(1) のマニュアルを参照してください。

このリストには、すべてのファイルを列挙しなければ なりませんが、ディレクトリそのものは列挙する必要がありません。 また、この port がインストール時に独自のディレクトリを 作成する場合には、この port が削除されるときに そのディレクトリも削除されるよう、@dirrm の行を 追加しておくのを忘れないでください。

このファイルでは、すべてのファイル名を アルファベット順にソートしておくことを推奨します。 そうすることで、port を更新する際の 変更点の確認が楽になります。

パッキングリストを手作業で作成するのは、 時にとても退屈な作業になります。 その port が非常に多数のファイルをインストールするとしたら、 パッキングリストの 自動生成を行なえば、時間の節約になるかもしれません。

3.3. チェックサムファイルの作成

make makesum と入力するだけで、 (訳注: bsd.port.mk に書かれている) port 生成ルールに従い、 自動的に distinfo ファイルが生成されます。

3.4. port のテスト

package 化も含め、その port が思った通りに 動くことを確認してください。 確認の必要な重要ポイントは以下の通りです。

  • その port がインストールしないものが pkg-plist に含まれていないこと。

  • その port がインストールする、すべてのものが pkg-plist に含まれていること。

  • reinstall ターゲットを使うことで、その port が 何度でもインストール可能なこと。

  • その port が deintall される際には 後片付けをすること。

Procedure: 推奨されるテストの手順

  1. make install

  2. make package

  3. make deinstall

  4. pkg_add package 名

  5. make deinstall

  6. make reinstall

  7. make package

package および deinstall の段階で、 どんな警告 (warning) も出力されないことを確認してください。 ステップ 3 の後、(訳注: その port が作成した) すべての新しい ディレクトリが正しく消去されていることを確認してください。 また、ステップ 4 の後にそのソフトウェアを使用してみて、 package からインストールされた場合にも正しく動作することを 確認してください。

3.5. portlint によるチェック

portlint を使い、その port が FreeBSD の ガイドラインに沿っているかどうかを確認してください。 portlint プログラムは ports collection に 含まれています。 特に、Makefile が 正しい形式になっているか、 package の 名前が正しいかどうかをチェックするのに良いでしょう。

3.6. port の提出

まず、やって良いこと悪いことの セクションを読んでください。

さて、満足のいく port が完成したら、残るは それを FreeBSD のメインの ports ツリーに置いて、 他の人にも使ってもらうだけです。 work ディレクトリや pkgname.tgz といった package は 必要ありませんから、まずこれらを消去してください。 あとは shar find port_dir の出力を バグレポートに入れ、send-pr(1) プログラムを使用して 送ってください (send-pr(1) についての詳細はバグ報告と一般的な論評を参照してください)。 もし、圧縮していない状態で 20KB 以上あるような port であれば、 それを ひとつの tar ファイルにまとめて圧縮し、 バグレポートに入れる前に uuencode(1) を使用してください (20KB 以下のものを tar ファイルにして送っても良いのですが、 あまり歓迎されません)。 バクレポートの category は必ず ports, class は change-request としてください (レポートを confidential (機密) 指定には しないでください!)。 また、port 化したプログラムの短い説明文を バグレポートの "Description" フィールドに追加して、 "Fix" フィールドには shar したファイル、 もしくは uuencode した tar ファイルを追加するようにしてください。

障害報告の概要 (synopsis) 欄がよく書けていると、 わたしたちが作業しやすくなります。 新しい port を提出するなら "New port: <カテゴリ>/<port 名> <短い port の概要>"、 port の更新なら、 "Update port: <カテゴリ>/<port 名> <短い更新の概要>" のような形が歓迎されます。 この考え方に沿っていれば、 誰かがあなたの障害報告を時間をおかずに見てくれる可能性が高くなります。

もう一度、オリジナルのソースファイルや work ディレクトリ、 make package で作成した package が 含まれていないことを確認してください。

port を提出したら、辛抱強くお待ちください。時には、ある port が FreeBSD に取り込まれるまで、数日しかかかりそうもないの に、数ヶ月かかることもあります。FreeBSD へのコミット待ちの ports の一覧が見られます。

わたしたちがひとたびその port をチェックしたら、必要なら あなたに確認して、それをツリーへ置きます。 あなたの名前はその他の FreeBSD への貢献者の一覧やその他のファイルにも載るでしょう。 う~ん、素晴らしい。:-)


最終更新日: 2021年12月11日 by Sergio Carlavilla Delgado