電子工作

玄箱Vine化

Vine化してみました。と言っても、ほとんどは山下さんちのBUFFALO LinkStation をハックしようを参考にさせていただきました。なのに、最終的に問題なく起動できるようにするまで、丸一日かかりました。fdiskに至っては10回以上。fdiskのコマンドはコンソール見なくても打てるほどです(笑)。私自身、Linuxシステムを熟知しておりませんから、同じようなレベルの方にわかって頂くためのKnowHowを書きたいと思います。ターゲットとなるレベルは、(恥ずかしながら私のレベルということですが)

  • Linux歴10年(ディストリビューターがSlackwareぐらいしか無かった頃ですね)
  • viは(全機能ではないが)使える。
  • 各種設定が「ネットで調べながら」できる。
  • Xwindowsには興味がない、ttyコンソール画面が好きだ
  • PCの横フタは閉まっていない
  • Linux自宅サーバーを運用している(していた)
  • telnet、pop3ポートを開けるのが嫌い

以降のメモは「玄箱」を対象としています。なにしろ玄箱は、標準でfdisk、ftpサーバーが入っていたり、rootが開いているなど、インストールに失敗してもやり直すのがとても楽チンです。何しろ、失敗してもいちいちHDDを基板からはずしてPC Linuxに移動させる必要が無いのですから。(インストール後半でミスるとその限りではない。)あと、ttyS0コンソール引き出しは必須です。telnetポートのみからの作業は目隠ししながら暗い洞窟を探検するようなモノですので、Linux上級者でないと無理かと。。少々面倒でもttyS0コンソールを引き出してからの作業をおすすめします。その方が中級以下の方にとっては結果的には、早く、確実にvine化できると思います。

インストールパッケージの用意

山下さんちのここから、玄箱にインストールするパッケージをvineのページからダウンロードしてきます。対象となるのはvine2.6のppcって奴です。私は最初isoイメージでダウンロードしてCD-Rで焼きましたが、できあがったCDの中身を見たらファイル名が大文字、ショートファイル名になってしまっていたので、結局FTPサイトから一個一個ダウンロードしてきました。 私はLinuxを構成するパッケージはどういうモノが必要で、どういう関連性があるのか全く知りませんが、上記山下さんちのパッケージリストを上から順番にインストールすれば、問題なくvine化できました。感謝。(これを機にパッケージ、少しは勉強しようかな。。)

インストールtarパック作成

玄箱付属CD-ROMからsetupが完了している玄箱上で作業します。まず、容量の大きい/mntに、/mnt/rootを作成して、ここをインストールルートとします。さらに、/mnt/root/rpmsを作成して、ここにftpで上記でダウンロードしたRPM達を転送します。

root@KURO-BOX:~# cd /mnt
root@KURO-BOX:/mnt# mkdir root
root@KURO-BOX:/mnt# cd root
root@KURO-BOX:/mnt/root# mkdir rpms

/mnt/rootをインストールルートとして考えたときの、RPM用のパッケージリストデータベースを置く場所を作成します。

root@KURO-BOX:/mnt/root# mkdir var
root@KURO-BOX:/mnt/root# cd var
root@KURO-BOX:/mnt/root/var# mkdir lib
root@KURO-BOX:/mnt/root/var# cd lib
root@KURO-BOX:/mnt/root/var/lib# mkdir rpm
root@KURO-BOX:/mnt/root/var/lib# cd rpm
root@KURO-BOX:/mnt/root/var/lib/rpm# rpm --root /mnt/root --initdb
root@KURO-BOX:/mnt/root/var/lib/rpm# ls
Packages

Packagesが作成されたことを確認してください。 あとは、/mnt/root/rpms内のRPMファイルをインストールしていきます。シェルスクリプトなり、一つ一つコマンドで打っていくなりご自由に。私は動作を確認するためにも、一つ一つ実行しながら、実行結果のメモを取っていきました。

root@KURO-BOX:/mnt/root/rpms# rpm -i --root /mnt/root setup-2.5.7-2vl2.noarch.rpm
root@KURO-BOX:/mnt/root/rpms# rpm -i --root /mnt/root filesystem-1.3.5-1vl2.noarcch.rpm
root@KURO-BOX:/mnt/root/rpms# rpm -i --root /mnt/root basesystem-6.0-4vl3.noarch.rpm

みたいな感じ。順番は、山下さんちのパッケージリストの上から順番に行えば矛盾が生じないようになっています。(すばらしい)

root@KURO-BOX:/mnt/root/rpms# rpm -i --root /mnt/root glibc-common-2.2.4-14vl10.ppc.rpm
package glibc-common-2.2.4-14vl10 is for a different architecture

よく、「アーキテキチャが違うよ」というエラーがでますが、--ignorearchオプションをつけて無理矢理インストールしてしまいます。

root@KURO-BOX:/mnt/root/rpms# rpm -i --root /mnt/root --ignorearch glibc-common-2.2.4-14vl10.ppc.rpm

パッケージリストを全部インストールし終わったら、/mnt/rootの内容をtarして、ftpでPCに待避しておきます。私は300MBくらいになりました。gzは遅くなるのでやりません。このtarは今後、インストール失敗するたびに使用することになります。

root@KURO-BOX:/mnt/root# tar cf /tmp/all.tar .

既存パーティション削除

setup済みHDDのパーティションを一度クリアにします。HDDから正常に起動している玄箱の場合(玄箱付属CD-ROMでsetup済みの場合)は、

# fdisk /dev/hda

EMモード(HDDが空、もしくは玄箱用で無い場合に、RAMDISKモードで起動した場合)の場合は、fdiskは入っていないので、

# mfdisk -c /dev/hda

という感じで、一度すべてのパーティションを削除します。

# mfdisk -c /dev/hda
Command (m for help): p
Disk /dev/hda: 16 heads, 63 sectors, 39714 cylinders
Units = cylinders of 1008 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hda1 1 39194 19753681+ 83 Linux
/dev/hda2 39194 39714 262143 82 Linux swap
Command (m for help): d
Partition number (1-4): 1
Command (m for help): d
Partition number (1-4): 2
Command (m for help): p
Disk /dev/hda: 16 heads, 63 sectors, 39714 cylinders
Units = cylinders of 1008 * 512 bytes
Device Boot Start End Blocks Id System
Command (m for help): w
The partition table has been altered!
Re-read table failed with error 16: Device or resource busy.
Reboot your system to ensure the partition table is updated.
Syncing disks.
#

ここで、一度電源SW長押しで、シャットダウン→パワーオンします。

パーティション作成

電源投入後、EMモードで起動していることを確認します。

Kroutoshikou KURO-BOX (IETSUNA)
kernel 2.4.17-kuro-box on ppc
KURO-BOX-EM login:

mfdiskでパーティションを作成します。私は/dev/hda1は2GB、SWAP領域は200MB、残りを/dev/hda3にしました。/dev/hda2はタイプを82hに変更しておきます。

# mfdisk -c /dev/hda
Command (m for help): p
Disk /dev/hda: 16 heads, 63 sectors, 39714 cylinders
Units = cylinders of 1008 * 512 bytes
Device Boot Start End Blocks Id System
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-39714, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-39714, default 39714): +2000M
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (4065-39714, default 4065):
Using default value 4065
Last cylinder or +size or +sizeM or +sizeK (4065-39714, default 39714): +200M
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (4472-39714, default 4472):
Using default value 4472
Last cylinder or +size or +sizeM or +sizeK (4472-39714, default 39714):
Using default value 39714
Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 82
Changed system type of partition 2 to 82 (Linux swap)
Command (m for help): p
Disk /dev/hda: 16 heads, 63 sectors, 39714 cylinders
Units = cylinders of 1008 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hda1 1 4064 2048224+ 83 Linux
/dev/hda2 4065 4471 205128 82 Linux swap
/dev/hda3 4472 39714 17762472 83 Linux
Command (m for help): w
The partition table has been altered!
Syncing disks.

フォーマット

/dev/hda1をext3に、/dev/hda2はswapにします。(/dev/hda3は面倒なので放置。のちほどフォーマット、mountすればいいです。)

# mke2fs -j /dev/hda1
mke2fs 1.22, 22-Jun-2001 for EXT2 FS 0.5b, 95/08/09
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
256512 inodes, 512056 blocks
25602 blocks (5.00%) reserved for the super user
First data block=0
16 block groups
32768 blocks per group, 32768 fragments per group
16032 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
# mkswap /dev/hda2
Setting up swapspace version 1, size = 210046976 bytes

マウント

/dev/hda1を/tmp/rootにマウントします。

# cd /tmp
# mkdir root
# mount /dev/hda1 /tmp/root

必要な玄箱モジュール吸い上げ

ftpでpcから、玄箱CD-ROMの中のimage.zipを/tmp/rootに転送して、解凍します。

# cd /tmp/root
# unzip image.zip
Archive: image.zip
inflating: tmpimage.tgz
# tar xvzf tmpimage.tgz

必要なファイルをtarして、ftpでPCに待避しておきます。他にwww/scriptsあたりにも重要なファイルがあるのですが、これらは後からvineで起動したあとでも解凍できるので、後回しです。

# tar cf modules.tar lib/modules
# tar cf ppc.tar sbin/start-stop-deamon usr/sbin/ppc_uartd etc/rc.d/init.d/ppc_uartd

/dev/hda1をもう一度フォーマット

rm -rするのは面倒なので、umount後再フォーマットしちゃいます。その後、/tmp/rootに再度mountします。

tar解凍

/tmp/rootにall.tar、modules.tar、ppc.tarをftpで転送して、解凍します。

# tar xf all.tar

設定ファイルの書き換え

最低限の設定ファイルの書き換えをします。とにかくvineとして起動さえしてしまえば、後からどうにでもなりますから。

etc/inittab

mingettyのラインはすべてコメントアウトします。 mingettyの上あたりに、次のラインを追加します。

con:2345:respawn:/sbin/agetty 57600 ttyS0

これがないと、コンソールにlogin:が出る前に停止してしまいます。私はこの罠に何度かはまってしまい、ここではまると一度HDDを玄箱から取り外して、他のPCでパーティションを削除しないといけなくなります。

etc/securetty

一番下に「ttyS0」を追加します。これが無いと、コンソールでrootログインがはじかれます。この罠にもはまって、HDDを取り外して再インストールの羽目に。

etc/fstab

新規作成ですが、

# cp /etc/fstab /tmp/root/etc/.

でコピーしてきたあと、一番上のラインを、

/dev/hda1 / ext3 defaults 0 1

に変更します。

起動確認

リブートすれば、vineが立ち上がってくると思います。最後に少なくともppc_uartdを起動しておかないと数分でシャットダウンしてしまいますから、気をつけてください。

# /etc/rc.d/init.d/ppc_uartd start

rc*.dに、S**ppc_uartdのシンボリックリンクを作成します。あとはのんびりネット関係の設定から詰めていけばOKです。玄箱標準のまま使うより自由度が高く、間違いなくおすすめです。また、ここまで見て頂いてわかって頂けたと思いますが、ttyS0コンソールが無いと、このvine化は不可能です。

-電子工作