POPSの作成手順

Meta Packageで綺麗にできればいいのにね(試してから言えよ)。
portupgradeで綺麗にできればいいのにね(試してから言えよ)。

結局色々細々とした手作業が必要なような気がしています。

まずFreeBSDのリリースを待ちます。これはリリースと同時にpackagesもまとめて 作成されるからです。まあ見方によっては楽をするためとも言える。
リリースされたら配布されているパッケージのリストを入手します。ftpしてls した結果をファイルに落せば良いでしょう。例えばこんな感じ


kimoto@eterna% ftp 
ftp> open ftp.freebsd.org
Connected to ftp.beastie.tdk.net.
220 ftp.beastie.tdk.net FTP server (Version 6.00LS) ready.
Name (ftp.freebsd.org:kimoto): ftp
331 Guest login ok, send your email address as password.
Password:
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /pub/FreeBSD/releases/i386/4.6.2-RELEASE/packages
250 CWD command successful.
ftp> cd All
250 CWD command successful.
ftp> nlist . list_remote

これでlist_remoteというファイルに配布されているpackageのリストが入ります。
次にPOPSで導入するべきパッケージ名のベース名のリストを作成します。これは 三段階のフェイズに分けて作っておきます。 例えばFreeBSD 4.5-RELEASE用のベース名ファイルは phase1_base, phase2_base, phase3_base になります。これを作成するには迂余曲折があったのですが、まあとりあえずある ものとします。どうせここから更に迂余曲折があるので。
次に、ベース名リストと実際にあるパッケージ名とのマッチングを行ないます。 このためにpickup.plというスクリプトを作りました。 とりあえず、ベース名リストは全部catしてlist_baseというファイルに格納して おいて作業します。
kimoto@eterna% cat phase1_base phase2_base phase3_base > list_base
kimoto@eterna% ./pickup.pl list_base list_remote > pickup.result

するとpickup.resultというファイルに結果が入り ます。で、これを目で見ます。すると色々問題がみつかるので手で直します。 直すべきは、複数マッチしている箇所と[NONE]になっている箇所です。前者は 適当なバージョンを選んで(大抵は新しいのだけあれば大丈夫)残りは消します。 [NONE]になっているのは、どうでも良いから無視して良い場合と、適切な バージョンを選び直さないといけない場合があるので大変です。大変だけど 頑張ります。ここらへんは実際にpkg_addしながら確認しても良いでしょうし、 もしかしたらportupgradeしてその結果を元にしても良いのかもしれません。 私は野生人なので野生の勘でえいやと編集します。

……。

できましたか?できたら、それらのパッケージをdownloadします。といっても手動 でやっていると死ぬので、fetch_pickuped.pl というスクリプトを作りました。


kimoto@eterna% mkdir packages
kimoto@eterna% mkdir packages/All
kimoto@eterna% ./fetch_pickuped.pl pickup.result

そうすると、必要そうなファイルが全部ftpできます。この上で再度チェックして みましょう。
kimoto@eterna% cd packages/All
kimoto@eterna% ls > ../../list_local
kimoto@eterna% ./pickup.pl list_base list_remote > pickup.result

こうするとpickup.resultにはそれなりに綺麗なリストができますが、まだ [NONE]が現れます。これらは(色々な理由があるけど)FTPサイトにcompile済 パッケージが置かれていないものです。自力でportsからmake してmake package しましょう。
そうしてmake packageしたものをpackage/Allの下に置くと、これでだいたい 出来上がりです。
ただし、FreeBSD 4.6.2-RELEASEの場合は以下の問題がありました。 この二つ関しては、/usr/portsをCVSupして最新の物をmakeしてmake packageしま した。ところがそうすると他の依存しているpackageのバージョンとの間に不整合 が生じます。仕方がないので、今回はこの二つは強制インストールの対象と しました。ま、多分大丈夫でしょう。
本当はCVSupした/usr/potsから、必要なものだけmakeしてpackageして集めてくる という作業をするべきなのでしょうが。
Masahiko KIMOTO <kimoto@ohnolab.org>
Last modified: Fri Sep 6 12:38:00 2002