SCSIデバイスエミュレーターRaSCSIの設定方法

最終更新: 2019/08/19 6:36 (誤植修正、執筆時最新のRaspbian Buster + RaSCSI 1.45 + 公式変換基板で動作確認が取れたため)

先日X68000初代の修理を終えたので、改めてGIMONSさんのRaSCSIの設定をいちからやり直してみた。なお、本設定の元に筆者はX68000XVIで常用している。

ちなみに、RaSCSI(ラスカジー)とは、要するにRaspberry PiをSCSIハードディスクみたいに使えちゃう、という古くて新しいナウなガジェットである。これを導入すると、何とX68000やらFM TOWNSやらPC-9801やらでSCSI起動ドライブをRaspberry Piで代替出来てしまうのである。しかもRaspbian経由で動くのでHDDイメージをWi-Fi経由でいじくる事も可能。恐るべきレトロ未来感覚・・・(ごくり)

※SCSI(スカジー)って何ですか? と聞かれたら困るんですが、まあ要はSATAのご先祖様のIDEのもっと昔のご先祖様と考えてもらえれば。機種を超えたドライブ接続の標準規格として1980年後半から90年代前半に大流行しました。接続する各ドライブにはIDを0番から7番まで設定して接続します。7台まで数珠つなぎ(デイジーチェーン)できます。

RaSCSIはLinuxのディストリビューションであるRaspbian(ラズビアン)の上で動くため、UNIX系の操作がある程度出来る事が前提となる。まあ、ここはしょうがないので諦めて慣れましょう。

念のため本記事の前提となっている我が家の環境も書いておく。

  • Raspberry Pi 3B + 秋月の3.0A microUSB電源
  • RaSCSIレベルコンバーターシールド(公式)
  • 30cmのSCSIケーブル(ハーフピッチD-Sub – フルピッチアンフェノール)
  • X68000XVI

1. Raspberry Pi 3 Model BとACアダプターとMicroSDカードを買ってくる

どこかで適当に。どこでもいいと思うけど、専門店の方がいいんじゃないかなと。近所にお店があればそちらで是非。ちなみに少し高いPi 3 Model B+という高速モデルも出たのだが、どちらでもOK。だが、発熱が強いという話なので、安いModel Bの方が総合的に良いだろう。なお、執筆時点ではRaspberri Pi 4Bでは動作しない模様のため要注意。

合わせて、レベルコンバーターシールドで基板全体が覆われることになるため、放熱を考えて出来ればヒートシンクも付けておこう。

3.0A USB出力のACアダプターも一緒に。出力が足りなくてちゃんと動作しないケースが多すぎるんで、最低限3.0Aは必須で是非。

マイクロSDカードは16GB、Class 10辺りを選択すべし。遅くても動くと思うけど、余計な不安要素は最初に潰して置いた方がいいかと。

2. RaSCSIボードを買ってくる

何種類か出ている模様。筆者はは公式のfullspec版を使っているので、以下の説明もfullspec版をベースにしている。該当部分は赤字にしているので適宜読み替えを。

3. Raspbian (Raspberry PiのOS)インストールと設定

Raspberry PiはRaspbian等OSで動く。ので、OSを起動しないRaSCSIは動かない。まずOSの設定から。

※つまり、RaSCSIが動作するまでにはOSが起動するまでの10秒くらい待たねばならない、ということ。実際に使う際には先に電源を入れるように。

最初にRaspbian OSイメージのダウンロード。Raspbian Buster Liteを選択。Lite版ではないものもあるが、GUI等余計なものが入っているし、RaSCSIの動作にはほぼ役に立たない(むしろ余計なプロセスが増えて良くない)ので、最小構成であるLite版を推奨。

イメージ書き込みはRaspbian公式で推奨のソフトのEtcherをダウンロード。これでSDカードにイメージを書き込む。(もし書き込みで進捗が進まない場合は、一回マシンを再起動して再挑戦。多分それで治るかと)

書き込んだSDカードをRaspberry Piに差して起動。

  • HDMIケーブルでモニターに差す。
  • USBキーボードを差す。
  • マイクロUSB電源を差す。

マイクロUSB電源を差すと勝手に起動する。黒い画面でログオンプロンプトが出てきたら、ID: pi, Password: raspberry でログオン。

以下でWi-fi・タイムゾーン・言語の設定を行う。(“$”はコマンドプロンプトの文字なので、この文字が出ていたらコマンドを叩き、Enterキーを叩いて実行すると読んで欲しい)

$ sudo raspi-config

青い画面のメニューが出てくるので、そこから下記の設定を行う。

  • ホスト名の変更 (わかりやすい名前に変更しておこう)
    • 2 Network Options > N1 Host Name
      • (適当な名前。筆者はrascsixviとした) 
  •  Wi-Fiの設定
    • 2 Network Options > N2 Wi-Fi
      • Select the country: JP
      • SSID: <WIFI_SSID>
      • Password: <WIFI_PASSWORD>
  • 地域・エンコーディング設定
    • 4 Localization Options > I1 Change Locale
      • →ja_JP.UTF-8
      • →Default: C.UTF-8 (ja_JPを標準にするとメッセージが化けるので)
  • タイムゾーン設定
    • 4 Localization Options > I2 Change Timezone
      • →Asia/Tokyo
  • キーボードレイアウト
    • 4 Localization Options > I3 Change Keyboard Layout
      • →使っているもので。USキーボードなら変更不要。
  • 国設定
    • 4 Localization Options > I4 Change Wi-Fi Country
      • →JP
  • 更新
    • 8 Update
      • →Wi-Fi設定が合っていれば勝手にダウンロードを開始するので待つ。もしエラーが出たら上記のWi-Fi設定が間違っているので要再確認

上記が終わればFinishで完了後、再起動を聞いてくるのでYesで再起動。もしホスト名を変更していなければ再起動を聞いてこないので、下記で手動にて再起動。

$ sudo shutdown -r now

10-20秒ほど待ってSSHより再ログイン。その後、SSHサーバーを有効化する。これで外部マシンから繋がるようになる。

$ sudo systemctl enable ssh
$ sudo systemctl start ssh

Raspberry PiのIPアドレスを控えておく。確認する項目は”wlan0″で、IPアドレスは “inet”の項目。後ほどここに接続する。

$ /sbin/ifconfig -a

実機での作業はここまで。以降はWindows/Mac/Linux機からSSHで接続して作業する。

4. RaSCSIのインストールと設定

Raspbianを直接いじくるのはめんどくさいので、これ以降はリモートで作業。ここでRaspberry Pi 3からHDMIケーブルとUSBキーボードは外してOK。電源ON状態でいきなり抜いてもOK。

まずSSHクライアントを入れる (WindowsだとPoderosa辺りで。macOSだと標準で入っているので、Terminalから”ssh -l pi <IP_ADDRESS>”で接続)。

次にSFTPクライアントを入れる (WindowsだとWinSCP辺りで。MacだとFileZilla辺りか)。

SSHで控えておいたIPアドレスに接続する。接続出来たら、まずOSを更新し、一旦最新にしておく。あと、時刻同期のためのNTPクライアントとしてchronyもついでに入れておこう。終わったら恐らくカーネルが最新に置き換わってる可能性大なので、一旦再起動。

$ sudo apt-get update;sudo apt-get -y upgrade
$ sudo apt-get install chrony
$ sudo shutdown -r now

10-20秒程度待って再度SSHよりログオン。

それでは本作業開始。外部マシンでRaSCSIをダウンロード。「RaSCSI version 1.45」を選択する。(バージョン番号は適宜読み替えて)

もしRaspbian側で直接ダウンロードしたい場合は、curlというコマンドが使えるので、それで直接ダウンロードのURLを叩いてしまう。ダウンロードしたものはファイルとして保存する必要があるので、”-O”オプションを忘れずに。

$ curl <FILE_URL> -O

もしくは、リモート側でダウンロードして、RaspberryPiにSFTPで転送する。転送後、Raspbian側でZIPを伸張する。

$ unzip rascsi143.zip

展開したファイル内の “bin/raspberrypi/rascsi.tar.gz” が本体。これを更に伸張する。

$ cd rascsi143/bin/raspberrypi
$ tar xvzf rascsi.tar.gz

これでRaSCSI側の基本準備は完了。

次に、SCSI HDDイメージを作成する。作成はXM6で。XM6のインストールや操作方法は割愛。XM6を起動させ、メニューの”Tools > Make a new SCSI Fixed Disk”でSCSI HDDイメージを作成する。一旦XM6の最大値である4GB(4096MB)で作成しておいてもOK。

但し、SCSIとして利用する機種・OSによって最大値が決まっているのでそれに従う。例えば、X68000でSCSI利用であればブートパーティションは1GB以内であるべきだし、更にそこにXCをインストールする場合は768MB程度に抑えておかないと途中でエラーで止まる、等々の制約があるのでそれに倣うよう。

作ったHDSファイル(以下ファイル名を”x68000scsi0.hds“とする。何でもOK)をSFTP等でRaspbian側のrascsiディレクトリーへ転送する。転送が終わったら、基板に応じてバイナリーを選択し起動してみる。(ここではgamernium版の例)

$ sudo fullspec/rascsi -ID0 x68000scsi0.hds

正常に起動したら以下のメッセージが出る

SCSI Target Emulator RaSCSI(*^..^*) version 1.45(Apr 28 2019, 13:52:52)
Powered by XM6 TypeG Technology / Copyright (C) 2016-2019 GIMONS
Connect type : FULLSPEC

上記がうまく動いたら、起動しっぱなしになる。そのままではどうしようもないので、一旦Ctrl+Cで停止させる。

5. RaSCSIの自動起動設定

一旦うまく動いたらしめたもの 。が、このままではRaspberry Piの電源をOFFにしたらプロセスが未起動状態となり、また上記の起動を手動で行わねばならなくなる。自動で全部Ready状態にするために、下記の作業を最後に行う。

まず、HDDイメージファイルであるHDSファイルをOS上適切な位置に配置する。SysV以降の習わしとしては、可変ファイル(variable files)は /var 配下に置くことが決まっているため、RaSCSIもそれに従おう。/var/rascsi ディレクトリーを作成し、そこに移動する。

$ sudo mkdir /var/rascsi
$ sudo mv x68000scsi0.hds /var/rascsi

次に、RaSCSIをRaspbian上の適切な場所へ移動する。apt等で管理されない所謂「オプショナルパッケージ (optional packages)」は/optに置くのが同じくSysV以降の習わしなのでまず移動。複数のバージョンを管理したいのと、バージョンアップ時に楽をしたいので、バージョン番号付きのディレクトリーにリネームしながら移動して、シンボリックリンクを張っておく。これで新しいバージョンが出てもシンボリックリンクの作り直しだけでOK。

$ cd rascsi145/bin
$ sudo mv raspberrypi /opt/rascsi-1.45
$ sudo ln -s rascis-1.45 rascsi

※もし、RaSCSIが将来バージョンアップした場合は、シンボリックリンクを張り直してやろう。下記は1.46(執筆時点ではまだ出てない)が出た場合の例。RaSCSIのデーモンを停止し、”rascsi”のシンボリックを最新のディレクトリーに張り替えて、デーモン再開、という処理となる。

$ sudo systemctl stop rascsi
$ sudo mv raspberry /opt/rascsi-1.46
$ cd /opt
$ sudo rm rascsi
$ sudo ln -s rascis-1.46 rascsi
$ sudo systemctl start rascsi

次にRaSCSIの起動スクリプトを作る。

$ cd /etc/systemd/system/
$ sudo nano rascsi.service

テキストエディターnanoで新規作成された「rascsi.service」に対し、下記をコピペする。(もちろんvimが使える方はそちらでも)

[Unit]
Description=RaSCSI
After=syslog.target

[Service]
Type=simple
WorkingDirectory=/opt/rascsi
ExecStart=/usr/bin/sudo fullspec/rascsi -ID0 /var/rascsi/x68000scsi0.hds
TimeoutStopSec=5
StandardOutput=null

[Install]
WantedBy = multi-user.target

上記をCtrl+X → [Enter]で保存する。systemctlに認識されるようになるので、rascsiプロセスを自動起動に設定する。

$ sudo systemctl enable rascsi
Created symlink /etc/systemd/system/multi-user.target.wants/rascsi.service → /etc/systemd/system/rascsi.service.

設定が終わった。自動起動するように変更されているはずなので、念のため再起動してみる。

$ sudo shutdown -r now

再起動後にプロセスが自動起動しているか確認する。SSHで再接続し、下記を叩いて表示が出ることを確認する。出ない場合は正常起動していないので、上記設定を再確認。

$ cd /opt/rascsi
$ fullspec/rasctl -l
---+------+--------------------------------------- ID | TYPE | DEVICE STATUS ---+------+--------------------------------------- 0 | SCHD | x68000scsi0.hds ---+------+---------------------------------------

6. X68000等にSCSI接続してみる

ここから先はFM TOWNSだったりPC-9801だったりと各者各様で良いかと思うので具体的には割愛。SCSIコネクターに接続し、先にRaspberry Piの電源を入れて10秒くらい待って、マシンを起動すれば、(ある場合は)RaSCSIボード上のランプが光ってマシン上でDevice ID: 0として認識する。あとはOSのインストール等々、通常のSCSI HDDとして煮るなり焼くなり好きにするが良い。

更に、X68000だけの特別追加機能として、イーサネット機能及びホストファイルシステム(ホスト機でSCSIドライブをネットワークドライブとしてマウントできる機能)等がある。詳しくは付属ドキュメントの”doc/x68k.txt”を参照のこと。多分ここで書くよりそちらを参照した方が良い。というかこの2019年に実機でSCSI使える人ならそんなこと書かなくても分かるでしょ! (が、あとで書くかも)→下に書きました

7. X68000からRaspberryPiのファイルシステムを丸見えにする

結局書いてしまった・・・ということで続き。RaSCSIにはX68000専用に二つの機能が提供されている。ひとつがRaspberryPiのEthernet機能を使わせてもらうネットワークデバイスドライバー”RASETHER.SYS”、もうひとつがRaspberryPiのファイルシステムを直接参照できるファイルシステムドライバー”RASDRV.SYS”。

前者は実際問題としてクライアントソフトとして古くさいtelnetソフトウェア等を使うことになりセキュリティー的に疑問なのでここでは取り扱わず、安全な後者の解説に留める。

この後者”RASDRV.SYS”であるが、下記の設定でX68000からRaspbianの中身を参照できる。ので、あとはRaspbian側とWindowsやらMacやらとSFTP辺りでファイルをやりとりできれば、何と稼働中のX68000とリアルタイムでファイル連携が出来るのである。何という万能感。X68000とのファイルのやりとりのためにSCSIのMOドライブを繋いでおく時代は遂に終わったのです(いや、とはいえ便利なのでMO環境は残しておいた方がいい気もする・・・)。

まず、RaSCSIの配布パッケージに含まれている “bin/x68k/RASDRIVER.HDS”のHDDイメージにRASDRV.SYSが含まれている。これをRaSCSIにマウントさせるだけでX68000からRASDRV.SYSを操作できるようになる。まずはここからだ。

手順としては下記となる。

  1. RASDRIVER.HDSをコピーする
  2. RASDRIVER.HDSをマウントさせる記述を追加、RaSCSIデーモンを再起動させRASDRIVER.HDSを認識させる
  3. X68000を再起動してRASDRIVER.HDSのドライブを認識させ、RASDRV.SYSをAドライブにコピーしてCONFIG.SYSを書き換える
  4. あと片づけ

では順番に見ていこう。

7-1. RASDRIVER.HDSをコピーする

RASDRIVER.HDSはRaSCSIの配布イメージの中に含まれている。これを/var/rascsiにコピーしよう。

$ sudo cp bin/x68k/RASDRIVER.HDS /var/rascsi

7-2. RASDRIVER.HDSをマウントさせる記述を追加する

これは上記で記述したスタートアップ設定ファイルに追記するだけだ。

$ sudo vi /etc/systemd/system/rascsi.service

中身をこのように変更しよう。緑色の箇所が追記したポイントだ。-ID1が仮想ドライブ用のブリッジデバイス名、-ID2がRASDRIVER.HDS用だ。この「ExecStart=」から「.HDS」までは一行で記載しよう。

[Unit]
Description=RaSCSI
After=syslog.target
[Service]
Type=simple
WorkingDirectory=/opt/rascsi
ExecStart=/usr/bin/sudo fullspec/rascsi -ID0 /var/rascsi/x68000scsi0.hds -ID1 BRIDGE -ID2 /var/rascsi/RASDRIVER.HDS
TimeoutStopSec=5
StandardOutput=null
[Install]
WantedBy=multi-user.target

これで再認識&再起動させる。きちんと認識しているかどうかまでrasctlを起動して確認を入れておこう。緑色の行が出ていれば成功。

$ sudo systemctl daemon-reload
$ sudo systemctl restart rascsi
$ /opt/rascsi/fullspec/rasctl -l

---+------+---------------------------------------
ID | TYPE | DEVICE STATUS
---+------+---------------------------------------
0 | SCHD | /var/rascsi/x68000scsi0.hds
1 | SCBR | RaSCSI BRIDGE
2 | SCHD | /var/rascsi/RASDRIVER.HDS
---+------+---------------------------------------

7-3. X68000を再起動してRASDRIVER.HDSのドライブを認識させ、RASDRV.SYSをAドライブにコピーしてCONFIG.SYSを書き換える

X68000を再起動させる。RASDRIVER.SYSはDドライブに登録されている筈である。中身にあるRASDRV.SYSをAドライブのどこかにコピーする(下記ではA:\SYS。どこでもよい)

>b:
>copy RASDRV.SYS a:\SYS

 “A:\config.sys” を開いて、RASDRVを登録してやる。

A:\> ed config.sys

下記の行を “DEVICE=” の最後の行に追加する。

DEVICE = \SYS\RASDRV.SYS

書き終わったら “ESC → E”で保存。その後にX68000のリセットボタンを押して再起動。起動時のログにD:ドライブが追加された、という下記のようなメッセージが出れば成功。

RaSCSI FileSystem Driver version 1.42
ドライブE:を登録しました

あとは起動完了後にEドライブを覗いてみれば・・・あら不思議、X68000からRaspberryPiの全てが見える!!

あとは、RaspberryPiに向けてSFTPでファイルを “/home/pi” 辺りに転送してやれば、X68000からは “E:\home\pi” で参照出来る訳です。無線でX68000とファイルのやりとりが出来るなんて21世紀は何て素晴らしいんでしょう!!!

ちなみに、Raspbianのルートから公開したくない場合は、”config.sys” の設定で下記のように記載すれば “/home/pi” の直下が “E:” ドライブの直下として見えるので、そのようにしても良いだろう。いやむしろそうした方が良いかもしれない。お好み・用途に応じて。

DEVICE  = \SYS\RASDRV.SYS /home/pi

7-4. あと片づけ

このまま使ってもらっても良いのだが、RASDRIVER.HDMのBドライブへの登録が残った状態になっている。最後に外してやろう。Raspbian側に戻り、登録を外す。

$ sudo vi /etc/systemd/system/rascsi.service

サービス定義からRASDRIVER.SYSを外す。

[Unit]
Description=RaSCSI
After=syslog.target
[Service]
Type=simple
WorkingDirectory=/opt/rascsi
ExecStart=/usr/bin/sudo fullspec/rascsi -ID0 /var/rascsi/x68000scsi0.hds -ID1 BRIDGE
TimeoutStopSec=5
StandardOutput=null
[Install]
WantedBy=multi-user.target

リロードし、念のためドライブ状況を確認しておこう。RASDRIVERの行が無くなってれば成功。

$ sudo systemctl daemon-reload
$ sudo systemctl restart rascsi
$ /opt/rascsi/fullspec/rasctl -l

---+------+---------------------------------------
ID | TYPE | DEVICE STATUS
---+------+---------------------------------------
0 | SCHD | /var/rascsi/x68000scsi0.hds
1 | SCBR | RaSCSI BRIDGE
---+------+---------------------------------------

最後にX68000を再起動させる。RASDRVがDドライブに変更されたはずである。前記「E:」で書いた箇所は全てD:に変更されているので読み替えを。もちろん、HDSイメージを何個もマウントするとこのドライブ名が後ろにどんどんズレていくことになるのでご注意を(これは恐らくHuman68Kの仕様)。

RaSCSI FileSystem Driver version 1.42
ドライブD:を登録しました

 

それではお宅のレトロマシンの幸せなSCSIライフを!!!