---
title: 第3章 3 分間 porting
prev: books/porters-handbook/own-port
next: books/porters-handbook/slow
---

[[quick-porting]]
= 分間 porting
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:source-highlighter: rouge
:experimental:
:skip-front-matter:
:xrefstyle: basic
:relfileprefix: ../
:outfilesuffix:
:sectnumoffset: 7
:toc-title: 目次
:table-caption: 表
:figure-caption: 図
:example-caption: 例 

include::shared/authors.adoc[]
include::shared/releases.adoc[]
include::shared/ja/mailing-lists.adoc[]
include::shared/ja/teams.adoc[]
include::shared/ja/urls.adoc[]

toc::[]

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

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

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

[[porting-makefile]]
== [.filename]#Makefile# の作成

最小限の [.filename]#Makefile# は 次のようなものになります。

[.programlisting]
....
# 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 によって自動的に書き込まれます。 もっと詳しい例が見たい場合には、 <<porting-samplem,Makefile のサンプル>>の セクションをご覧ください。

[[porting-desc]]
== package 記述ファイルの作成

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

=== [.filename]#pkg-descr#

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

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

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

[.programlisting]
....
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
....

=== [.filename]#pkg-plist#

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

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

[.programlisting]
....
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
....

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

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

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

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

[[porting-checksum]]
== チェックサムファイルの作成

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

[[porting-testing]]
== port のテスト

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

* その port がインストールしないものが [.filename]#pkg-plist# に含まれていないこと。
* その port がインストールする、すべてのものが [.filename]#pkg-plist# に含まれていること。
* `reinstall` ターゲットを使うことで、その port が 何度でもインストール可能なこと。
* その port が deintall される際には <<porting-cleaning,後片付け>>をすること。

[.procedure]
====
*Procedure: 推奨されるテストの手順*

. `make install`
. `make package`
. `make deinstall`
. `pkg_add package 名`
. `make deinstall`
. `make reinstall`
. `make package`
====

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

[[porting-portlint]]
== `portlint` によるチェック

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

[[porting-submitting]]
== port の提出

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

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

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

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

port を提出したら、辛抱強くお待ちください。時には、ある port が FreeBSD に取り込まれるまで、数日しかかかりそうもないの に、数ヶ月かかることもあります。link:http://www.FreeBSD.org/cgi/query-pr-summary.cgi?category=ports[FreeBSD へのコミット待ちの ports] の一覧が見られます。

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