月別アーカイブ: 2014年2月

Raspberry Piでbochsを動かしてみました

< x86 on ARM >
とりあえずDOSをRaspberry Pi上のDebian wheezyで動かしてみます。
( Windows95も動くとは思いますがかなり遅いと思うので )

< “bochs” のインストール >
チョー簡単です。
こんな感じです。

root@myhost:~# apt-get install bochs bochs-x bochs-sdl bochs-svga

< ハードディスクイメージの生成 >
Raspberry Pi上で “bximage” を実行します。
非rootユーザでの実行を推奨します。
bochsを使用する予定のユーザで実行することをお勧めします。
こちらが自分が2GBで作成したときのサンプルです。

$ bximage
========================================================================
                                bximage
                  Disk Image Creation Tool for Bochs
        $Id: bximage.c,v 1.34 2009/04/14 09:45:22 sshwarts Exp $
========================================================================
Do you want to create a floppy disk image or a hard disk image?
Please type hd or fd. [hd]
What kind of image should I create?
Please type flat, sparse or growing. [flat]
Enter the hard disk size in megabytes, between 1 and 129023
[10] 
2048
I will create a ‘flat’ hard disk image with
  cyl=4161
  heads=16
  sectors per track=63
  total sectors=4194288
  total size=2047.99 megabytes
What should I name the image?
[c.img] 
msdoshdd.img
Writing: [] Done.
I wrote 2147475456 bytes to msdoshdd.img.
The following line should appear in your bochsrc:
  
ata0-master: type=disk, path=”msdoshdd.img”, mode=flat, cylinders=4161, heads=16, spt=63

“bximage” によると 「 “
ata0-master: type=disk, path=”msdoshdd.img”, mode=flat, cylinders=4161, heads=16, spt=63” を “.bochsrc” に追加してね 」 とのことです。

< MS-DOS用の”.bochsrc”を作成 >
ホームディレクトリへ移動します。
私の場合テキストエディタにはnanoを使用しています。

$ cd /home/username
$ nano .bochsrc

私の”.bochsrc”はこんな感じです。

megs: 64
romimage: file=$BXSHARE/BIOS-bochs-latest
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
display_library: sdl
ata0-master: type=disk, path=/home/username/msdoshdd.img, mode=flat, cylinders=4161, heads=16, spt=63
ata0-slave: type=cdrom, path=/home/username/MS-DOS-6.22.iso, status=inserted
boot: cdrom, disk
#keyboard_mapping: enabled=1, map=/usr/share/bochs/keymaps/x11-pc-us.map
log: bochsout.txt
clock: sync=realtime, time0=local

“MS-DOS-6.22.iso”は私が使用したMS-DOSの起動イメージファイルです。これをあなたが持っている他のブータブルISOファイルに書き換えてください。私の場合”.bochsrc”ではマウスは未設定です。 マウスを使用したい場合はググるなりして”.bochsrc”を編集してください。

< VNCのインストール >
HDMIディスプレイを使用する場合はこのステップは関係ありません。
ディスプレイを使用しない場合はRaspberry Pi上のXへリモートログインするためにVNC serverをインストールする必要があります。
以下のコマンドをrootで実行してください。

root@myhost:~# apt-get install tightvncserver

以下のコマンドをbochsを使用するユーザで実行してください。

$ vncserver :1 -geometry 1024×768 -depth 24
You will require a password to access your desktops.
Password:
Verify:
Would you like to enter a view-only password (y/n)? 
n
New ‘X’ desktop is myhost:1

“:1″ はポート “5901″ を意味し、
“-geometry 1024×768″ は解像度を意味し、
“-depth 24″ は色数のビット指定を意味します。

< bochsの実装 >
Raspberry Pi上のVNC serverに接続します。 ( ディスプレイを使用の場合は “startx” を実行してください )
ターミナルを起動します。 ( 例. LXTerminal )
ターミナルでbochsを実行します。

$ bochs

bochsがときどきこんな感じで確認してくるかもしれません。

A PANIC has occurred.  Do you want to:
  cont       – continue execution
  alwayscont – continue execution, and don’t ask again.
               This affects only PANIC events from device [MEM0 ]
  die        – stop execution now
  abort      – dump core
  debug      – hand control to gdb

私はいつも “alwayscont” と答えています。

< 正直なところ >
Windows95をインストールしようとしましたが、DOSの起動ディスクやWindows3.1のディスクが必要でした。( 自分のWindows95がアップグレードバージョンだったため ) さすがに面倒だったためDOSインストールまででやめてしまったというわけです。

LS-XHLのwheezy化

LS-XHLをwheezy化したので手順を載せておこうかと思います。基本的には
http://www.zorac.org/wp/?p=447
を参考にさせて頂きました。

実施の際はくれぐれも自己責任でお願いします。
ここに記載した内容を実行したことによるいかなるトラブル/故障/データ消失にも当方は責任はもてませんのであしからず。

英語がイケるかたはこちらも参考にして頂くといいかもしれません。
Buffalo NAS-Central Forums • View topic – LS-CHLv2 – LS-XHL – Debian Wheezy Rootfs – Update 2013.05.15

< 必要なものなど >
1. LS-XHL本体 ( LS-VLシリーズだとネットワーク周りの設定が違うだけとの話です )
2. Debian Wheezy Rootfs
3. ARMアーキテクチャのDebianまたはUbuntuマシン ( 非ARM向けの手順も記載していますが自分は試していません )
4. USB-HDDケース ( インストール時に 3 に接続できればいいので内部SATA接続などであれば不要 )

手順はなるべくARMと非ARMで共通になるように書いていますが、私自身はARMでしか試していませんのでご注意ください。

< ハマりどころ >
●パーティション作成をGpartedでやるとなぜかうまく起動しなくなる。
●chrootを使用した手順はARMマシン(同じアーキテクチャ)でしか動作しない。
こんなとこですね。

< ステップ 1 – LS-XHLの分解 >
本体の分解はYoutubeにわかりやすい動画があるので参考にして下さい。

< ステップ 2 – HDDのパーティショニング&初期化 >
Linuxマシンを起動します。( 私の環境ではRaspberry Pi上のDebian wheezyです )
rootでログインします。
partedがインストールされていない場合は

apt-get install parted

としてインストールします。
LS-XHL用Debianのインストール先HDDをLinuxマシンにUSBなどで接続し、パーティションを確認します。HDDが /dev/sda とすると

parted /dev/sda print

とするとHDD情報が表示されます。自分の場合、

Model: ATA Hitachi HDS72202 (scsi)
Disk /dev/sda: 2000GB
Sector size (logical/physical): 512B/512B

のような感じでした。
肝心なのは “Disk /dev/sda: 2000GB” です。
この “2000GB” がご自分の環境でどんな値になっているか覚えておいてください。
パーティションを切ります。

parted /dev/sda mklabel gpt
parted -a cylinder /dev/sda mkpart primary 0 511
parted -a cylinder /dev/sda mkpart primary 511 8191
parted -a cylinder /dev/sda mkpart primary 8191 9215
parted -a cylinder /dev/sda mkpart primary 9215 2000G
parted /dev/sda set 1 boot on

“/dev/sda1″ を “/boot” に
“/dev/sda2″ を “/” に
“/dev/sda3″ をスワップに
“/dev/sda4″ を “/home” に
設定するつもりの切り方です。

コマンド中の最後のパーティション設定の “parted -a cylinder /dev/sda mkpart primary 9215 2000G” のところの “2000G” は先ほど “parted /dev/sda print” で確認した値に置き換えてください。それぞれのパーティションのサイズもご自分の環境にあわせてお好みのサイズにしてください。ではパーティションをフォーマットします。

mke2fs -I 128 -j /dev/sda1
mke2fs -j -t ext4 /dev/sda2
mkswap /dev/sda3
mke2fs -j -t ext4 /dev/sda4

マウントします。

mount /dev/sda2 /mnt
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot

< ステップ 3 – Rootfs展開 >
作業用フォルダに移動します。 /tmp などがいいかと思います。
でもってhttp://neboola.de/fjen/lschlv2/debian/wheezy/ から
debian_wheezy_rootfs_lschlv2-lsxhl_20130515.tar.xz
をダウンロードします。

cd /tmp
wget http://neboola.de/fjen/lschlv2/debian/wheezy/debian_wheezy_rootfs_lschlv2-lsxhl_20130515.tar.xz

これを展開します。

tar Jxvf debian_wheezy_rootfs_lschlv2-lsxhl_20130515.tar.xz -C /mnt

“/mnt/boot” に移動して “uImage.buffalo.3.9.2-fjen-1.lsxhl” をダウンロードします。

cd /mnt/boot
wget http://neboola.de/fjen/lschlv2/debian/wheezy/lsxhl-kernel-for-20130515/uImage.buffalo.3.9.2-fjen-1.lsxhl

< ステップ 4 – 設定変更 >
/mnt/etc/fstab
/mnt/etc/network/interfaces
/mnt/etc/resolv.conf
/mnt/etc/hostname
/mnt/etc/hosts
をそれぞれ自分の環境にあわせて修正します。

私の環境では “/mnt/etc/fstab” はこんな感じに修正しました。

/dev/sda1       /boot         ext3     noauto,noatime         1 2
/dev/sda2       /             ext4     noatime                0 1
/dev/sda3       none          swap     sw                     0 0
/dev/sda4       /home         ext4     noatime                0 0
proc            /proc         proc     defaults               0 0
shm             /dev/shm      tmpfs    nodev,nosuid,noexec    0 0
devpts          /dev/pts      devpts   gid=4,mode=620         0 0
#tmpfs           /tmp          tmpfs    defaults               0 0
sysfs           /sys          sysfs    defaults               0 0

でもって “/mnt/etc/network/interfaces” はこんな風にしました。

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
auto eth1
iface eth1 inet static
  address 192.168.1.101
  netmask 255.255.255.0
  network 192.168.1.0
  broadcast 192.168.1.255
  gateway 192.168.1.1

これはLinkstationのIPを “192.168.1.101″ にして
ルータが “192.168.1.1″ の場合の設定です。
LS-VLは持っていませんが eth1 が無く eth0 を使用するとのことなので、

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
  address 192.168.1.101
  netmask 255.255.255.0
  network 192.168.1.0
  broadcast 192.168.1.255
  gateway 192.168.1.1

的な感じになるのではないでしょうか。
“/mnt/etc/resolv.conf” は

domain linkstation
search linkstation
nameserver 8.8.8.8
nameserver 8.8.4.4

としましたが、まぁお好みで修正しちゃってください。
あとは
“/mnt/etc/hostname” は “linkstation” とし、
“/mnt/etc/hosts” は特に修正しませんでしたが、
このへんもお好みでどうぞ。

< ステップ 5 – chroot作業 >
chrootで作業しますが、これはARMマシンのLinuxで作業している場合のみ可能です。

chroot /mnt

ARMマシンが無い場合やchrootがうまくいかない場合は未検証ですが ステップ 6 に進んでください。chrootがうまくいった場合は以下のコマンドを実施します。

cd /boot
mv uImage.buffalo uImage.buffalo.bk
ln -s uImage.buffalo.3.9.2-fjen-1.lsxhl uImage.buffalo

< ステップ 6 – chrootできない場合 >
動作確認はしていませんが、

cd /mnt/boot
mv uImage.buffalo uImage.buffalo.bk
mv uImage.buffalo.3.9.2-fjen-1.lsxhl uImage.buffalo

としてしまえば問題ないでしょう。
くれぐれも自己責任でお願いします。

< ステップ 7 – 基本設定 >
設定したHDDをLS-XHLにセットし起動します。
この際、うまく起動せず再設定する可能性を考慮して、ネジやフタは閉めないで初期設定することをお勧めします。
マシンはなんでもいいのでSSHで “192.168.1.101″ に接続します。Windowsからの場合はTeraTermなどを使用するといいでしょう。自分の場合はLinuxから

ssh root@192.168.1.101

としました。rootの初期パスワードは “toor” です。
ログインしたら

passwd
dpkg-reconfigure locales
dpkg-reconfigure tzdata
rm /etc/ssh/ssh_host_* && dpkg-reconfigure openssh-server

として、
1. rootパスワードの変更
2. ロケール設定
3. タイムゾーン
4. SSH暗号化キーの更新
を実施します。
( 尚、この工程は手順を共通化するためにここに書いていますが、chroot可能であればそのときに 4 をやっておけばSSHの再ログインは不要になります )

クライアント側の暗号化キーを更新するため一旦SSHをログアウトします。
ログアウトしたら、LinuxやUNIXの場合

ssh-keygen -R 192.168.1.101

な感じで更新をかけます。
でもって再度SSHでrootログインして以下のコマンドを実行します。

apt-get update
apt-get upgrade

以上で完了です。
LS-XHLのネジをしめてフタをしてください。

< 感謝 >
Rootfs作者様および
http://forum.buffalo.nas-central.org/viewtopic.php?f=71&t=26291 の面々および
http://www.zorac.org/wp/?p=447 を書いて下さった方に感謝感謝です。