4.98-STABLE のソースを用意


ではいよいよ、98 版のソースを作りましょう。handbook98 にもあるように、何もしなくてもそれなりに 98 版バイナリは作ることはできますが、リリース状態に近いものを作ろうと思えば 98 版パッチが適用されている方が嬉しいという理由で、私は 98src のパッチを適用するツリーをわざわざつくっています。

まず、i386 版のコピーを作ります。とはいっても cp -r だと私のところではシンボリックリンクの関係か、パスがループしていると怒られたので、tar でコピーすることにします。私は /export の下に 98stable というディレクトリを作ることにしました。


# mkdir /export/98stable # cd /export/cvsup # tar cf - . | ( cd ../98stable ; tar xf - )

こんな感じでよさそうです。次に、FreeBSD(98) の最新のリリースから、あるものを取り出します。それは、98 版をリリースする際に i386 版に当てたパッチ総集編(?)です。これは、FreeBSD(98)配布物の 98src ディレクトリにある patches.tar.gz ファイルがそれにあたります。これを展開すると ./patches ディレクトリのなかに


% ls base.diff release.diff sys.diff etc.diff share.diff usr.sbin.diff

というファイルが含まれています。これを i386版 STABLE のソースツリーに適用し、reject された部分は手で修正します。今、これらのファイルは /tmp にあるとします。


# cd /export/98stable/src # patch -p < /tmp/base.diff # patch -p < /tmp/etc.diff # patch -p < /tmp/release.diff # patch -p < /tmp/share.diff # patch -p < /tmp/sys.diff # patch -p < /tmp/usr.sbin.diff

パッチの途中で Reverse パッチとして適用するか聞かれる場合があります。これは、i386 版の RELEASE バージョンが出てから 98src に含まれるパッチの一部が -STABLE ブランチに commit された場合などに起こりえます。Reverse パッチで適用せずに中止するようにしましょう。

パッチ当てが終わったら、reject されていないか確認します。例えば 2001/6/19 に cvsup したソースに 4.3R-Rev01 のパッチ集をあてると以下のようになりました。


% cd /export/98stable/src % find . -name \*rej -print ./release/sysinstall/Makefile.rej ./release/sysinstall/devices.c.rej ./release/sysinstall/label.c.rej ./release/sysinstall/pccard.c.rej ./release/sysinstall/sysinstall.8.rej ./release/Makefile.rej

では1つ見てみましょう。


*************** *** 66,90 **** file2c 'u_char mbr[] = {' '};' < /boot/mbr >> makedevs.tmp echo "size_t mbr_size = sizeof(mbr);" >> makedevs.tmp .endif .if ${MACHINE} == "pc98" file2c 'u_char boot0[] = {' '};' < /boot/boot0 >> makedevs.tmp echo "size_t boot0_size = sizeof(boot0);" >> makedevs.tmp file2c 'u_char boot05[] = {' '};' < /boot/boot0.5 >> makedevs.tmp echo "size_t boot05_size = sizeof(boot05);" >> makedevs.tmp .endif mv makedevs.tmp makedevs.c rtermcap: ${.CURDIR}/rtermcap.c ${CC} -o rtermcap ${.CURDIR}/rtermcap.c -ltermcap - KEYMAPS= be.iso br275.iso danish.iso finnish.iso fr.iso \ german.iso hr.iso hu.iso2.101keys it.iso icelandic.iso jp.106 \ norwegian.iso pl_PL.ISO_8859-2 pt.iso ru.koi8-r si.iso \ spanish.iso swedish.iso swissfrench.iso swissgerman.iso uk.iso \ us.dvorak us.iso - keymap.h: rm -f keymap.tmp for map in ${KEYMAPS} ; do \ kbdcontrol -L $$map | \ --- 95,131 ---- file2c 'u_char mbr[] = {' '};' < /boot/mbr >> makedevs.tmp echo "size_t mbr_size = sizeof(mbr);" >> makedevs.tmp .endif + .if ${BOOTMENU} == "YES" .if ${MACHINE} == "pc98" + .if defined(RELEASEDIR) + file2c 'u_char boot0[] = {' '};' < \ + ${RELEASEDIR}/stage/trees/98bin/boot/boot0 >> makedevs.tmp + echo "size_t boot0_size = sizeof(boot0);" >> makedevs.tmp + file2c 'u_char boot05[] = {' '};' < \ + ${RELEASEDIR}/stage/trees/98bin/boot/boot0.5 >> makedevs.tmp + echo "size_t boot05_size = sizeof(boot05);" >> makedevs.tmp + .else file2c 'u_char boot0[] = {' '};' < /boot/boot0 >> makedevs.tmp echo "size_t boot0_size = sizeof(boot0);" >> makedevs.tmp file2c 'u_char boot05[] = {' '};' < /boot/boot0.5 >> makedevs.tmp echo "size_t boot05_size = sizeof(boot05);" >> makedevs.tmp .endif + .endif + .endif mv makedevs.tmp makedevs.c rtermcap: ${.CURDIR}/rtermcap.c ${CC} -o rtermcap ${.CURDIR}/rtermcap.c -ltermcap KEYMAPS= be.iso br275.iso danish.iso finnish.iso fr.iso \ german.iso hr.iso hu.iso2.101keys it.iso icelandic.iso jp.106 \ norwegian.iso pl_PL.ISO_8859-2 pt.iso ru.koi8-r si.iso \ spanish.iso swedish.iso swissfrench.iso swissgerman.iso uk.iso \ us.dvorak us.iso + CLEANFILES+= rtermcap rtermcap.tmp makedevs.c + + keymap.h: Makefile rm -f keymap.tmp for map in ${KEYMAPS} ; do \ kbdcontrol -L $$map | \

rej ファイルは2パートに分かれていて、上に現段階で適用済みのファイルと、そこからパッチで削除が指示されている部分が記述され、下にパッチファイルで追加が指示されている部分が記述されているようです。

削除指示が2つでていますが、1つは空行なのでいいとして、2つめは下段で追加指示がでている部分と同じ行のようですので、置換をすればよさそうです。そこで、- の付いた行を消して、追加指示のある部分を手で書き換えます。

同様の作業を他の rej ファイルができたものに対して行っていきます。

label.c と pccard.c それに src/release/Makefile はかなり変更が入っており、また EUC_JP でメッセージが埋め込まれているので、日本語が使えるターミナルとエディタが必要です。



←前へ      ↑戻る       次へ→