SSD/Linux - Developer's Note
Japanese | English
0. はじめに
SSD/Linux のユーザーランドのソース・ツリーは NetBSD にならったものです。 /usr/share/mk は NetBSD のものをほぼそのまま利用し、ソース・ツリー内でのコンパイルには GNU make (make(1)) ではなく BSD make (bmake(1)) を用います。
Linux のユーザーランドは、BSD とは異なり、個別に配布されるソフトウェア・パッケージの集合体です。 BSD のように /usr/src の下にすべてのソース・コードを置いて CVS で管理することが理想ですが、SSD/Linux では、個別に配布されるソフトウェア・パッケージのソース・コードを /usr/src/dist の下に展開し、bmake(1) の .PATH 記述を使って参照させる構成としています。
多くのソフトウェア・パッケージは configure を用い Makefile を生成する構成となっています。 多種多様な OS や環境に柔軟に対応できる半面、コンパイルに時間を要してしまいます。 また、Crunched Binary を作成する上で BSD make 対応の Makefile が必要となることや、クロス・ビルドに対応しやすいこともあり、SSD/Linux では glibc や gcc などの巨大なパッケージを除き、なるべく BSD make で直接コンパイルできるよう Makefile を書き換えています。
1. ソース・ツリーの入手
SSD/Linux の開発版のスナップ・ショットのソース・ツリーは、以下の URL から入手できます。
ftp://ftp.plathome.co.jp/pub/ssdlinux/LATEST/source/
ソース・ツリーは、ISO イメージにも ./source/src.tgz として含まれています。
最新のソース・ツリーは CVS を用いて入手してください。
2. ソース・ツリーの構成
ソース・ツリーの構成を以下に示します。
/usr/src/ bin/ : /bin のソース・ツリー contrib/ : /usr/contrib のソース・ツリー cross/ : /usr/cross のソース・ツリー dist/ : ソフトウェア・パッケージ・ソースの展開用 distfiles/ : ソフトウェア・パッケージの distfiles 用 distrib/ : distribution 作成用ソース・ツリー etc/ : /etc のソース・ツリー lib/ : /lib, /usr/lib のソース・ツリー libexec/ : /usr/libexec のソース・ツリー linux : linux-x.y.z のシンボリック・リンク linux-x.y.z/ : カーネルのソース・ツリー (mkdist/kernel/Makefile により作成) mkdist/ : ソフトウェア・パッケージ収集/展開用ソース・ツリー sbin/ : /sbin のソース・ツリー share/ : /usr/share のソース・ツリー tools/ : glibc をアップデートするためのソース・ツリー usr.bin/ : /usr/bin のソース・ツリー usr.sbin/ : /usr/sbin のソース・ツリー
以上のソース・ツリーの内、/usr/src/dist と /usr/src/linux-x.y.z は、SSD/Linux として管理すべきコードを含んでいないため、src.tgz や CVS Repository には含まれていません。 /usr/src/linux-x.y.z および /usr/src/linux は mkdist/kernel/Makefile により作成されます。
3. ソフトウェア・パッケージ・ソース
ソース・ツリーをコンパイルするためには、まず /usr/src/dist の下にソフトウェア・パッケージ・ソースを集め展開する必要があります。
SSD/Linux には、ちょうど NetBSD の pkgsrc のソース収集と似た仕組みが用意されており、次の操作で /usr/src/dist/distfiles にソフトウェア・パッケージ・ソース (以下 distfiles) が ftp(1) により集められ /usr/src/dist 以下に展開されます。 カーネルは /usr/src/linux-x.y.z として展開されます。
# export HOSTTYPE # export MACHTYPE # export SHELL # cd /usr/src/mkdist && bmake
以上の処理は、`cd /usr/src && bmake build’ で自動的にされるため、通常意識的に行う必要はないでしょう。
ISO イメージには、distfiles がすべて含まれています。 distfiles のバージョンは ISO イメージが配布された時点のもののみを含みます。 ISO イメージを入手している場合は、あらかじめ /usr/src/dist/distfiles にコピーしておくと良いでしょう。 SSD/Linux の ftp(1) は、NetBSDに実装されている tnftp(1) です。 Proxy サーバを利用する場合は、以下のようにコマンドを実行します。 詳しくは ftp(1) のマニュアル・ページをご覧ください。
# export ftp_proxy=ftp://proxy.example.com:8080 # export http_proxy=http://proxy.example.com:8080 # export no_proxy=.example.com
distfiles のバージョン管理
distfiles が展開されると、/usr/src/mkdist/XXX/Makefile (XXX はパッケージ名) の記載に基づき /usr/src/dist/VERSIONS に /usr/src/dist/XXX として展開された distfiles のバージョン情報が記載されます。 /usr/src/mkdist/XXX/Makefile のバージョン情報が更新された場合、/usr/src/dist/VERSIONS の記載内容との不一致が検出され、distfiles の収集と展開が自動的に行われます。 また、/usr/src/dist/VERSIONS は gcc や glibc 等、コンパイル時に configure を用いる distfiles について build ツリー (glibc であれば /usr/src/lib/glibc/build) を更新するか否かを判断するためにも用いられます。 build ツリーのバージョン情報は、bmake(1) の実行により build ツリーが作成された時点で .version (glibc であれば /usr/src/lib/glibc/.version) として保存されます。
4. パッチ・ファイル
SSD/Linux におけるパッチ・ファイルには、次の三種類があります。
公式に配付されているパッチ・ファイル
distfiles と同様に /usr/src/dist/distfiles に収集され /usr/src/dist に展開される際に適用される。
SSD/Linux が独自に適用しているパッチ
bmake(1) が、.PATH により定義されるソース参照パスよりもカレント・ディレクトリを優先して参照する特性を利用して、/usr/src/usr.bin/XXX 等にパッチが適用されたソース・コードの状態で置かれる。
SSD/Linux が独自に適用しているパッチで、コンパイル時に configure を用いるもの
/usr/src/mkdist/XXX にパッチ・ファイル (SSD/Linux のソース・ツリー) として置かれ、/usr/src/dist/XXX が展開される際に適用される。
5. コンパイルの実行
コンパイルを実行する前に、環境変数 HOSTTYPE, MACHTYPE, SHELL を export してください。
# export HOSTTYPE # export MACHTYPE # export SHELL
コンパイルの実行は、NetBSD と同様に `bmake build’ です。
# cd /usr/src && bmake build
`bmake build’ は、/ ディレクトリ以下に直接インストールしますが、DESTDIR を指定することで、別のディレクトリへインストールすることができます。
# cd /usr/src && bmake DESTDIR=/home/dest build
コンパイル済のオブジェクトが消去されるのを防ぐためには、-DNOCLEAN オプションを付けます。
# cd /usr/src && bmake -DNOCLEAN build
`bmake build’ によって / (root) 以下に直接インストールした後、DESTDIR にそのコピーを作りたい場合は、-DNOCLEAN よりも -DSKIPBUILD の方が効率的です。 -DNOCLEAN が単に消去に関わる処理を行わないのに対し、-DSKIPBUILD はコンパイル (build) に関わる処理もスキップしインストールに関わる処理のみを行います。
# cd /usr/src # bmake build # bmake DESTDIR=/home/dest -DSKIPBUILD build
FD イメージやファームウェアを含む distribution ツリーを作成する場合は、`bmake release’ を用います。 `bmake release’ を用いる場合は、必ず DESTDIR と distribution ツリーの作成先となる RELEASEDIR が指定されていなくてはなりません。
# cd /usr/src # bmake DESTDIR=/home/dest RELEASEDIR=/home/release release
あるいは、-DSKIPBUILD を用いて `bmake build’ の後に `bmake release’
# cd /usr/src # bmake build # bmake DESTDIR=/home/dest RELEASEDIR=/home/release -DSKIPBUILD release
個々のバイナリのみを作り直す場合、例えば vi(1) を作り直すのであれば次のように実行します。
# cd /usr/src/usr.bin/vi # bmake # bmake install
CVS を用いソース・ツリーを更新している場合、bmake(1) のインクルード・ファイル /usr/src/share/mk が更新され、変数の未定義等で `bmake build’ 等がうまく通らなくなる場合があります。 そのような場合は、`bmake update_mk’ を用い /usr/share/mk を更新してください。
# cd /usr/src && bmake update_mk
6. コンパイル・オプション
コンパイル時に指定可能な主なオプションを示します。
変数名 | 設定可能文字列 | 説明 |
---|---|---|
BUILD_SRCDIST | `yes’ or `no’ | `bmake release’ 実行時に src.tgz を作成する。 |
BUILD_DISTFILES | `yes’ or `no’ | `bmake release’ 実行時に distfiles/ を作成する。 |
CROSS_BUILD | `mipsel’, `powerpc’, or `x86_64’ | 未定義でなければ、指定されたアーキテクチャのクロス・ビルドを行う。 |
DESTDIR | ディレクトリ名 | インストール先 |
DEVELOPTOOLS | `yes’ or `no’ | `no’ でのコンパイル実績は無し。 |
FULL_SHARED | `yes’ or `no’ | /bin, /sbin を shared で構築する。 |
HAVE_CVS | `yes’ or `no’ | `bmake release 実行時に src.tgz 用に export するソース・ツリーとして CVS を用いて取得するか /usr/src を用いるか切替える。`yes’ とする場合、CVS Repository へ接続できるよう設定されている必要がある。 |
IPV6 | `yes’ or `no’ | IPv6 を使用する。 |
KERNEL_CONFIG | ファイル名 | SSD/Linux デフォルトの /usr/src/linux/.config に代えてユーザー独自の .config を指定する。 |
OLD_GLIBC | x.y.z | /usr/src/tools を用いて glibc のメジャーなバージョン・アップを図る場合のデバッグ作業用として内部変数 GLIBC_VERSION を強制的に古いバージョンにする変数。 |
OPENBLOCKS | `obs1550’, `obs200’, `obs266’, or `none’ | マイクロサーバシリーズの機種を指定する。i386 の場合は `none’。 |
MASTER_SITE_OVERRIDE | URL | /usr/src/mkdist における distfiles の取得先。 |
MTA | `sendmail’ or `postfix’ | MTA として sendmail を用いるか postfix を用いるかを設定する。 |
NEW_GLIBC | x.y.z | /usr/src/tools を用いた glibc のメジャーなバージョン・アップ。 |
NEW_GLIBC_HEADERS | パス名 | /usr/src/tools が参照するヘッダ・ファイルを含むパス。 |
NEW_GLIBC_LIBS | パス名 | /usr/src/tools が参照するライブラリを含むパス。 |
NEW_KERNEL_PATCH | 文字列 | マイクロサーバシリーズ用のカーネル・パッチを作成/改修する際に用いる変数。 |
RCS_LOCALID | `ssdlinux’ | cvs バイナリに埋め込まれるローカルなキーワード。 |
RELEASEDIR | ディレクトリ名 | distribution ツリーの作成先。 |
SSDCVSDATE | YYYYMMDD | `bmake release’ 実行時に src.tgz 用に export すべきソースコードの日付。SSDCVSTAG に指定がなく SSDCVSDATE が未定義であればカレント日時で export される。 |
SSDCVSTAG | `RELENG_0_1’ 等の CVS tag | `bmake release’ 実行時に src.tgz 用に export すべきソース・ツリーの CVS tag。 |
USE_EXT3FS | `yes’ or `no’ | ext3 ファイル・システムを使用する。さもなければ ext2 ファイル・システム。 |
USE_PAM | `yes’ or `no’ | PAM を使用/不使用。 |
USE_PCMCIA | `yes’ or `no’ | PCMCIA を使用/不使用。 |
これらのオプションは、/etc/mk.conf に設定することができます。 また、CROSS_BUILD が設定されている場合は、/etc/mk.conf を評価した後に /etc/mk.conf.${CROSS_BUILD} が評価されます。 オプションをコマンド・ライン引数として渡す場合には、必ず bmake(1) のオプションとして渡してください。
誤 # DESTDIR=/home/dest bmake build 正 # bmake DESTDIR=/home/dest build
詳細については /usr/share/mk/bsd.own.mk, /usr/share/mk/bsd.mkdist.mk を参照してください。
7. クロス・ビルド
i386 上でマイクロサーバシリーズ用バイナリのクロス・ビルドを行うためには、CROSS_BUILD, OPENBLOCKS, DESTDIR を設定します。 マイクロサーバシリーズ上で i386 用バイナリのクロス・ビルドを行うことはできません。
# export PATH=$PATH:/usr/cross/mipsel/bin:/usr/cross/powerpc/bin:/usr/cross/x86_64/bin # cd /usr/src # bmake CROSS_BUILD=mipsel OPENBLOCKS=obs1550 DESTDIR=/home/dest build
RELEASEDIR を指定し `bmake release’ することも可能です。
# cd /usr/src # bmake CROSS_BUILD=mipsel OPENBLOCKS=obs1550 DESTDIR=/home/dest \ RELEASEDIR=/home/relase release
/etc/mk.conf と /etc/mk.conf.${CROSS_BUILD} を活用し、簡単なシェル・スクリプト (/usr/src/Build.sh) を用意しておくと i386 上で i386 とマイクロサーバシリーズを含む distribution セットを作成することができます。
/etc/mk.conf の内容
RELEASEDIR?= /home/release RCS_LOCALID= ssdlinux SSDCVSTAG= OPENBLOCKS?= none
/usr/src/Build.sh の内容
#!/bin/sh bmake build bmake -DSKIPBUILD DESTDIR=/home/dest release bmake CROSS_BUILD=mipsel OPENBLOCKS=obs1550 BUILD_SRCDIST=no \ BUILD_DISTFILES=no DESTDIR=/home/dest-mipsel release bmake CROSS_BUILD=powerpc OPENBLOCKS=obs266 BUILD_SRCDIST=no \ BUILD_DISTFILES=no DESTDIR=/home/dest-powerpc release
8. カーネル・ソース
SSD/Linux のカーネル・ソースは、2.6 系は LInux/MIPS、2.4 系は PowerPC Kernel Archivesの BitKeeper Kernel 2.4 Development をベースに USAGE Project の IPv6 protocol stack とマイクロサーバシリーズ用の独自パッチを適用したものです。 (必要に応じて、公式にアナウンスされたパッチ (sync_fs-2.4.20.diff, CAN-2003-0127.diff 等) を適用しています。) ただし、新しいアーキテクチャ (マイクロサーバシリーズの新機種等) へ対応する過程、もしくは対応直後においては、暫定的にパッチ適用済みのカーネル・ソースを dist/distfiles 以下に置く場合や別のパッチとして提供し、後日、独自パッチへマージする場合があります。 また、マージ作業を行う間 *-YYYYMMDD の付加された一時的なファイルが置かれる場合もあります。
/usr/src/dist/distfiles/ linux-ppc-2.4.20.tar.bz2 BitKeeper Kernel 2.4 Development usagi-linux24-stable_20030214-2.4.20.diff.bz2 USAGE stable 4.1 patch /usr/src/mkdist/kernel/2.4.20 linux-ppc-2.4.20-obs.diff OpenBlockS シリーズ用の独自パッチ linux-ppc-2.4.20-obs266.diff OpenBlockS 266 用の暫定パッチ sync_fs-2.4.20.diff CAN-2003-0127.diff linux-ppc-2.4.20-obs-YYYYMMD マージ作業中の暫定パッチ
BitKeeper Kernel には、release 毎に tarball を保存したり Release tag を振ったりすることが無いため、bk(1) (BitKeeper) を用い、次のように linux-2.4.2x の最終 ChangeSet@ を tarball (linux-ppc-2.4.2x.tar.bz2) にして、これを distfiles としています。 適用されている ChangeSet@ は、/usr/src/mkdist/kernel/2.4.2x/Makefile.inc に記載されています。
BitKeeper Kernel 2.4 Development の Repository をコピー (clone) する
# /usr/local/bitkeeper/bk clone \ -d http://ppc.bkbits.net/linuxppc_2_4_devel \ /any_work_dir/linuxppc_2_4_devel
既に Repository のコピー(clone)がある場合はアップデート (pull) する
# cd /any_work_dir/linuxppc_2_4_devel # /usr/local/bitkeeper/bk pull
特定の ChangeSet@ (以下の例は ChangeSet@1.1176) を export し、tarball (linux-ppc-2.4.20.tar.bz2) にする
# cd /any_work_dir/linuxppc_2_4_devel # /usr/local/bitkeeper/bk export -vwk -r1.1176 . /any_work_dir/linux-2.4.20 # cd /any_work_dir # tar cvf linux-ppc-2.4.20.tar linux-2.4.20 # bzip2 -9 linux-ppc-2.4.20.tar
カーネルの .config ファイル (SSD/Linux におけるデフォルト) は、/usr/src/mkdist/kernel にカーネルのバージョンをファイル名としたディレクトリにあります。 `bmake build’ 実行時に HOSTTYPE, MACHTYPE, OPENBLOCKS, IPV6 および CROSS_BUILD の各変数を評価し、適切なファイルを /usr/src/linux/.config としてコピーしています。
9. ファームウェアの作り方 - マイクロサーバシリーズ
マイクロサーバシリーズのファームウェア zImage.initrd.treeboot は、次のように作成します。
# cd /usr/src && bmake build # cd /usr/src/distrib && bmake bootfs
以上の操作で zImage.initrd.treeboot は、次のディレクトリに作成されます。 -product は、WEB セットアップツール (setup.cgi) を含むイメージ・ファイルです。
/usr/src/distrib/mipsel-obs1550/ standard/treeboot/treeboot/zImage.initrd.treeboot product/treeboot/treeboot-product/zImage.initrd.treeboot-product
/usr/src/distrib/powerpc-obs2xx/ standard/treeboot/treeboot/zImage.initrd.treeboot product/treeboot/treeboot-product/zImage.initrd.treeboot-product
また、zImage.initrd.treeboot に含まれる ramdisk イメージ (initrd のファイル・システム) は、次のディレクトリに作成されます。
/usr/src/distrib/mipsel-obs1550/ standard/initrd/ramdisk.image.gz product/initrd/ramdisk.image-product.gz
/usr/src/distrib/powerpc-obs2xx/ standard/initrd/ramdisk.image.gz product/initrd/ramdisk.image-product.gz
initrd に何等かのファイルを追加したい場合、次のように ramdisk.image を loopfs デバイスとして /mnt 等にマウントし、作業を進めます。
# cd /usr/src/distrib/powerpc-obs2xx/standard/initrd # gunzip ramdisk.image.gz # losetup /dev/loop0 ramdisk.image # ramdisk.image を loopfs デバイス設定 # mount /dev/loop0 /mnt # /mnt へマウント : /mnt に必要なファイルを追加 : # umount /mnt # losetup -d /dev/loop0 # loopfs デバイスを開放 # cd /usr/src/distrib/powerpc-obs2xx/standard/initrd # gzip -9 ramdisk.image # cd /usr/src/distrib/powerpc-obs2xx/standard/treeboot # bmake clean # bmake # zImage.initrd.treeboot を作成
initrd に含まれている機能を削りたい場合は、あまり小回りは効きませんが、/usr/src/distrib/powerpc-obs2xx/starndard//initrd/Makefile.inc の LIST_S を修正するとよいでしょう。 LIST_S によって initrd に取り込まれるファイルについては、/usr/src/distrib/powerpc-obs2xx/standard/initrd/list_in を参照してください。 例えば、named と sendmail, vtund を削るのであれば、Makefile.inc を次のように修正します。
#LIST_S?= common inst flashcfg dhcpd ifconfig named ppp pppoe useradd \ # sendmail vtund ftpd telnetd ntpd LIST_S?= common inst flashcfg dhcpd ifconfig ppp pppoe useradd \ ftpd telnetd ntpd
bmake(1) を実行し ramdisk.image.gz を作り直します。
# cd /usr/src/distrib/powerpc-obs2xx/standard/initrd # bmake clean && bmake
10. Crunced Binary - i386
本節の内容は SSD/Linux のカスタマイズを行ったりなさる開発者向けです。
Crunched Binary は、現在のところ i386 のみの対応です。 マイクロサーバシリーズについては、static nss 対応の glibc が PowerPC アキーテクチャではコンパイルできないため未対応です。 使い方は NetBSD とほぼ同じですが、オブジェクトのサーチがうまく働かないため、conf ファイルに `special xxx objs’ 記述子を用いてオブジェクト名を洩れなく列挙する必要があります。 詳しくは、”/usr/src/distrib/i386/ramdiskbin/ramdiskbin.conf.in*” を参照してください。
11. Glibc の更新
本節の内容は SSD/Linux のカスタマイズを行ったりなさる開発者向けです。
Glibc の更新について説明します。 ここでは、 2.3.1 から 2.3.2 への更新について記述してあります。 2.3.2 から 2.3.3 に更新する場合には、以下において 2.3.1 と 2.3.2 をそれぞれ 2.3.2 と 2.3.3 に置き換えて読んでください。 2.3.1 から 2.3.3 への更新は検証していません。
Glibc を 2.3.1 から 2.3.2 に更新する手順は以下の通りです。 Glibc の更新をするのに、ほとんどの SSD/Linux ユーザは以下の通り作業を行う必要はありませんし、お勧めも しません。 まず、システムを壊してしまう可能性があります。 それと、システムに負荷をかけハード・ディスクを大量に消費し時間が非常にかかるからです。 Glibc-2.3.2 ベースの binary sets がリリースされたとき、14 節にしたがって更新するのをお勧めします。
11.0. ヘッダ・ファイルとライブラリの用意
Tools で使われるヘッダ・ファイルとライブラリを用意します。 以下の手順で作成するか、こちらから i386 用 ( 2.3.2 , 2.3.3 )、またはOpenBlockS 用 ( 2.3.2 , 2.3.3 ) をダウンロードしてください。
i386
Glibc-2.3.1 の環境で glibc-2.3.2 をコンパイル、インストールします。 インストール先のディレクトリは “DESTIDR” で指定した “/home/dest” とします。 これは “/” 以外ならどこでもかまいません。 “/” にするとシステムを壊します。
# cd /usr/src # bmake build # cd /usr/src/mkdist/glibc # bmake GLIBC_VERSION=2.3.2 # cd /usr/src/lib/glibc # rm -rf /home/dest # bmake GLIBC_VERSION=2.3.2 DESTDIR=/home/dest
(
2.3.2 から 2.3.3 への更新の場合、次の install を正常終了させるために “/usr/src/dist/glibc/Makeconfig” の中の一行を以下のように一時的に修正します。
旧: $(elf-objpfx)$(rtld-installed-name) \ 新: /lib/$(rtld-installed-name) \
)
# bmake GLIBC_VERSION=2.3.2 DESTDIR=/home/dest install
(
2.3.2 から 2.3.3 への更新の場合、上で行った “/usr/src/dist/glibc/Makeconfig” での修正を元通りにします。
)
必要なファイルを “/home/dest” から “/home/i386-headers-2.3.2” にコピーします。 後者はどこでもかまいません。 ただし 11.1 節で参照します。
# mkdir -p /home/i386-headers-2.3.2 # cd /home/i386-headers-2.3.2 # (cd /home/dest/usr; tar cvpf - include) | tar xpf - # cd /home/i386-headers-2.3.2/include # rm asm # ln -s /usr/src/linux/include/asm-i386 asm # mkdir -p /home/i386-headers-2.3.2/lib # cd /home/i386-headers-2.3.2/lib # cp /home/dest/lib/libc.so.6 . # cp /home/dest/lib/ld-linux.so.2 . # cp /home/dest/usr/lib/libc_nonshared.a . # cp /home/dest/usr/lib/crt*.o . # cp /home/dest/usr/lib/libc.so .
“libc.so”を以下の通りに修正します。
旧: GROUP ( /lib/libc.so.6 /usr/lib/libc_nonshared.a ) 新: GROUP ( libc.so.6 libc_nonshared.a )
これらのファイルを
# cd /home # tar cvpf i386-headers-2.3.2.tar i386-headers-2.3.2 # gzip -9 i386-headers-2.3.2.tar
と gzipped tar したものが こちらです。
OpenBlockS266
手順は i386 とほぼ同じです。 シンボリック・リンクの張り方などいくつか違うので注意してください。
# cd /usr/src # bmake build # cd /usr/src/mkdist/glibc # bmake GLIBC_VERSION=2.3.2 # cd /usr/src/lib/glibc # rm -rf /home/dest # bmake GLIBC_VERSION=2.3.2 DESTDIR=/home/dest
(
2.3.2 から 2.3.3 への更新の場合、次の install を正常終了させるために “/usr/src/dist/glibc/Makeconfig” の中の一行を以下のように一時的に修正します。
旧: $(elf-objpfx)$(rtld-installed-name) \ 新: /lib/$(rtld-installed-name) \
)
# bmake GLIBC_VERSION=2.3.2 DESTDIR=/home/dest install
(
2.3.2 から 2.3.3 への更新の場合、上で行った “/usr/src/dist/glibc/Makeconfig” での修正を元通りにします。
)
必要なファイルを “/home/dest” から “/home/ppc-headers-2.3.2” にコピーします。 後者はどこでもかまいません。 ただし 11.1 節で参照します。
# mkdir -p /home/ppc-headers-2.3.2 # cd /home/ppc-headers-2.3.2 # (cd /home/dest/usr; tar cvpf - include) | tar xpf - # cd /home/ppc-headers-2.3.2/include # rm asm # ln -s /usr/src/linux/include/asm-ppc asm # ln -s /usr/src/linux/arch/ppc/platforms # mkdir -p /home/ppc-headers-2.3.2/lib # cd /home/ppc-headers-2.3.2/lib # cp /home/dest/lib/libc.so.6 . # cp /home/dest/lib/ld-2.3.2.so . # ln -s ld-2.3.2.so ld.so.1 # cp /home/dest/usr/lib/libc_nonshared.a . # cp /home/dest/usr/lib/crt*.o . # cp /home/dest/usr/lib/libc.so .
“libc.so”を以下の通りに修正します。
旧: GROUP ( /lib/libc.so.6 /usr/lib/libc_nonshared.a ) 新: GROUP ( libc.so.6 libc_nonshared.a )
これらのファイルを
# cd /home # tar cvpf ppc-headers-2.3.2.tar ppc-headers-2.3.2 # gzip -9 ppc-headers-2.3.2.tar
と gzipped tar したものが こちらです。 i386 のクロス開発環境で作ることもできます。 上記の glibc-2.3.2 をコンパイル、インストールする個所は以下の通りになります。
# /usr/src/lib/glibc # bmake CROSS_BUILD=powerpc OPENBLOCKS=obs266 \ GLIBC_VERSION=2.3.2 DESTDIR=/home/dest
(
2.3.2 から 2.3.3 への更新の場合でも “/usr/src/dist/glibc/Makeconfig” の修正は必要ありません。
)
# bmake CROSS_BUILD=powerpc OPENBLOCKS=obs266 \ GLIBC_VERSION=2.3.2 DESTDIR=/home/dest install
11.1. Glibc-2.3.2 ベースのバイナリの作成
Tools を用いて glibc-2.3.2 ベースのバイナリを作成します。
環境変数 “PATH” に “/usr/src/tools/toolchain/bin” を追加します。
“/usr/src/dist/distfiles/” にファイル “ppc-headers-2.3.2.tar.gz” を置きます。 このファイルは 11.0 節で用意したものです。
“/etc/mk.conf” に以下の四行を追加します。 “NEW_GLIBC_LIBS” と “NEW_GLIBC_HEADER” は 11.0 節に合せてください。
i386
DESTDIR=/home/dest NEW_GLIBC=2.3.2 NEW_GLIBC_LIBS=/home/i386-headers-2.3.2/lib NEW_GLIBC_HEADER=/home/i386-headers-2.3.2/include
OpenBlockS266
DESTDIR=/home/dest NEW_GLIBC=2.3.2 NEW_GLIBC_LIBS=/home/ppc-headers-2.3.2/lib NEW_GLIBC_HEADER=/home/ppc-headers-2.3.2/includeこれらの変数をコマンド行で指定すると、”DESTDIR” が悪さをして `”bmake build”’ 時にうまくゆきません。 原因は不明です。
次の通り実行します。(i386 とマイクロサーバシリーズ共通)
# cd /usr/src # bmake build
“/etc/mk.conf” から上で追加した四行を削除します。
これで glibc-2.3.2 ベースのバイナリが “/home/dest/” に作られました。
11.2. 移行と後始末
これから移行の手順を説明します。 最悪の場合、システムを壊して起動しなくなります。
i386 の場合インストール FD または CD-ROM から、マイクロサーバシリーズの場合本体から、起動してください。
ハード・ディスクをマウントして必要なファイルをコピーします。 パーティションがひとつで “/mnt” にマウントしたとします。 “/mnt/home/dest” の下の
"bin" "lib" "sbin" "usr/bin" "usr/i386-ssd-linux-gnu2.3.2"(i386) "usr/include" "usr/lib" "usr/libexec" "usr/mdec"(i386) "usr/powerpc-ssd-linux-gnu2.3.2"(OpenBlockS) "usr/sbin"
を “/mnt/” にコピーします。
ハード・ディスクをアンマウントして再起動します。 マイクロサーバシリーズの場合、ハードディスクから起動するようにするのを忘れないでください。
“/etc/mk.conf” に以下の一行を追加します。
GLIBC_VERSION=2.3.2
以下の通り実行します。
# cd /usr/src # bmake build
システムには gnu2.3.2 を含むディレクトリやファイルが存在します。 もはや不要ですので削除してください。
“/etc/mk.conf” に追加した一行は、”/usr/src/share/mk/bsd.own.mk” の “GLIBC_VERSION” が 2.3.2 に修正されたら削除します。
12. Gcc の更新
本節の内容は SSD/Linux のカスタマイズを行ったりなさる開発者向けです。
Gcc を 3.2.3 から 3.y.z に更新する手順は以下の通りです。 “/etc/mk.conf”に以下の一行を追加します。
GCC_VERSION=3.y.z
以下の通りに実行してください。
# cd /usr/src/mkdist/gcc # bmake # cd /usr/src/usr.bin/gcc # bmake && bmake install
システムには 3.2.3 なるディレクトリが存在します。 もはや不要ですので削除してください。
“/etc/mk.conf” に追加した一行は、”/usr/src/share/mk/bsd.own.mk” の “GCC_VERSION” が 3.y.z に修正されたら削除します。
13. カーネルの更新
本節の内容は SSD/Linux のカスタマイズを行ったりなさる開発者向けです。
カーネルを 2.4.20 から 2.4.26 に更新する手順は以下の通りです。
“/etc/mk.conf” に以下の一行を追加します。
KERNEL_PATCHLEVEL=26
以下の通りに実行してください。
# cd /usr/src # bmake build
再起動
i386
古いカーネルは “/vmlinuz.old” です。 それで起動できるよう “/boot/grub/menu.lst” を編集してから再起動した方がよいかも知れません。
マイクロサーバシリーズ
ファームウェアを作ります。
# cd /usr/src/distrib/utils # bmake # cd /usr/src/distrib/powerpc-obs2xx # bmake
ディレクトリ “/usr/src/distrib/powerpc-obs2xx/product/treeboot/” に作られたファームウェア “zImage.initrd.treeboot-product” に更新してから再起動してください。
“/etc/mk.conf” に追加した一行は、”/usr/src/share/mk/bsd.own.mk” の “KERNEL_PATCHLEVEL” が 26 に修正されたら削除します。
14. 0.2-current から 0.3-current への binary sets による更新
本節の内容は SSD/Linux のカスタマイズを行ったりなさる開発者向けです。
0.2-current と 0.3-current は kernel と glibc のバージョンが異ります。 その結果、ソースによる更新は 11 節から 13 節で説明したように手間がかかります。 ここではより簡単な binary sets による更新を説明します。 最悪の場合、システムを壊して起動しなくなます。
0.2-current から 0.3-current への binary sets により更新する手順は以下の通りです。 ここではひとつのパーディション “/dev/hda1” にシステムがインストールされているとします。 それを “/mnt” にマウントします。 複数のパーディションの場合にはシステム全体が “/mnt” に存在するようマウントしてください。
i386 とマイクロサーバシリーズとでは手順はほとんど同じなので、以下には一緒に書きます。 それぞれに固有なことは「i386 の場合」「マイクロサーバシリーズの場合」と断りました。
i386 またはマイクロサーバシリーズに応じた binary sets (”bast.tgz”、”comp.tgz”、”kern.tgz”) をダウンロードします。 ここでは “/var/tmp” に置くとします。 i386 の場合、以下の通り実行しておきます。
# cd /var/tmp # tar zxpvf base.tgz ./lib/libpthread-0.10.so
また kernel のバックアップをして、それで起動できるようにしておきます。 マイクロサーバシリーズの場合、ファームウェアもダウンロードします。
i386 の場合インストール FD または CD-ROM から、マイクローサバシリーズの場合本体から、起動してください。
ハード・ディスクをマウントして binary sets を展開します。
# e2fsck /dev/hda1 # mount /dev/hda1 /mnt # cd /mnt/var/tmp # tar zxpvf base.tgz -C /mnt # tar zxpvf comp.tgz -C /mnt # tar zxpvf kern.tgz -C /mnt
i386 の場合、以下の通り実行します。
# cp lib/libpthread-0.10.so /mnt/lib
マイクロサーバシリーズの場合は、ファームウェアを更新します。
ハード・ディスクをアンマウントして再起動します。 マイクロサーバシリーズの場合、ハード・ディスクから起動するようにするのを忘れないでください。
“/usr/src/share/mk/bsd.own.mk” が最新であることを確認して以下を実行します。
# cd /usr/src # bmake build
古いバージョンのヘッダ・ファイルやライブラリなどが残っています。 もはや不要ですので削除してください。