スキップしてメイン コンテンツに移動

SheevaPlugで共有ファイルサーバーを立てるまでの道のり

なぜ今SheevaPlug! そういう声がほうぼうから聞こえてくるわけですが、世の中はプラグコンピュータですよ。SheevaPlugしかり、Raspberry PIしかり。ただ、SheevaPlugは購入から3年以上経過している古めなコンピュータ故に、欲しいソフトウェアがあったりなかったり、名前が変わっていて悩んだり迷ったりで、かなり体力を使いました。きっと明後日辺りにはわけが分からないことになっているんでしょうから、今回の顛末をまとめて、2013年の最新版として過去の遺産の有効利用を考えます。



SheevaPlugとPCによるHello World

まず、何はともあれSheevaPlugとPC(いわゆる母艦)を繋がなければ話になりません。なぜならディスプレイがないから。USB経由でシリアル接続するなんていうギークが好みそうな手法でないと端末にアクセスすることさえできません。
Raspberry PIにHDMIポートが付いているのが夢のようです。

Windowsの場合
CD-ROMからドライバをインストール。CDを紛失した場合は詰みかも(真剣には探してないけどネットにはなかった)。
ドライバは、SheevaPlug_Host_SWsupportPackageWindowsHost.zip。
インストール後、LibUSBもインストール。
Filter Wizardで、SheevaPlugと繋がっているUSB Converter一式をインストールする。
再起動で接続できるようになった。
TeraTermのメニュー、設定からシリアルポートで通信速度を「115200」に設定すれば接続できる。 「Marvell>>」が先頭につくコンソールはU-bootのコンソールでLinuxが起動する前にキー受付があるのでその間に何か押すとU-bootのコンソールに繋がる
Linuxの場合
sudo rmmod ftdi_sio
sudo modprobe ftdi_sio vendor=0x9e88 product=0x9e8f
sudo screen /dev/ttyUSB0 115200
screenは、sudoなしだとコネクションエラーになる。command not found的なエラーは、適宜、sudo apt-get install screenで対応の事。


sheevaplug-installerを利用したインストール方法

用意するもの:USBメモリ(1GB以上のものならおk)
Windows機で作業しましたので、それっぽい説明になっておりますが、Linuxは適宜読み替えてください。

Sheeva Plug Installerをダウンロードする → Plug Computer Basic Downloads

展開すると、色々ごちゃごちゃとファイルがあるけど、ひとまず展開してできたディレクトリごとcドライブとかのトップに置く。理由はアクセスしやすいから。
トップディレクトリにあるinstallerの下にあるファイルやディレクトリをUSBメモリにコピーする。
Linuxでいうところのこういう感じ。
sudo cp -a ~/work/sheevaplug-installer/installer/* /media/usb/

同梱されているU-bootはSDカードをうまく扱えないポンコツなので、使えるヤツに入れ替える。SDカード使わないならそのままでもいいけれど、それ以外にもバグを孕んでいるので更新した方がいいよう。

よくぞコンパイルして公開してくれましたって感じです。
U-boot SDカード対応版 → Hisao's blog -SDカード対応u-bootの作成-

上のヤツは、U-bootのコンパイル済みバイナリファイルなので、展開して中にあるu-boot-rd88f6281Sheevaplug_400db_nand.binを\ubootに移動して、uboot.binにリネーム。元のuboot.binは取っておいてもいいですし、上書きしてしまってもいいです。今回は使いません。

下準備は終わったのでインストーラを動かすわけですが、OSを起動せずにU-Bootのコンソール画面にしておき、TeraTermは切っておきます。
cドライブ直下ににあるSheeva Plug Installerのディレクトリがあると仮定して、コマンドプロンプトから
cd c:\sheevaplug-installer-v1.0
runme.exe mmc (NANDに直書きする場合は、runme.exe nand)

途中で止まる場合は、この辺の確認。 → [SheevaPlug]壊れたSheevaPlugの復旧

書いてあるけど、Filter Wizardでインストールするデバイスは、3つ。1つでも2つでも繋がらない。

wrote file uboot-env.bin to NAND flash 0 up to offset ---
wrote file uboot.bin to NAND flash 0 up to offset ---
と、uboot-env.binとuboot.binの書き込みが終わったという表示が出たら、Ctrl+Cでコマンドプロンプトのプログラムを止めて、USBケーブルを一度挿し直す。
挿しなおして認識されたら、TeraTermを開いてシリアル接続する
タイミングが早ければU-bootの起動画面が見えるが、放置しているとubuntu9.04のインストールが始まる。

ここまでが、ブートローダ的役割のU-bootとOSのインストールでした。
以降は、Ubuntu9.04の話です。
sheevaplug-installerのreadme.txtによると、USBにコピーしたファイルは、Linuxカーネルとかファイルシステムがトップディレクトリからtar.gzして固めたもののようなので、この辺りを差し替えると、他のディストリビューションであったり、新しめのOSに変更できそうです。uImageはいくつか落ちていましたけれど、今回は言及しません。話がどんどんディープになりますので・・・。


いざ、Ubuntu9.04の設定へ

これを書いている時点で、来月末には13.04がでるというタイミングなので丸4年前のバージョン。まぁ今回はローカルのファイル共有サーバーの役割だけなので、これでいいです。

さすがに9.04はサポート切れのようで、apt-getがうまく動きませんでした。
なので、/etc/apt/sources.list を修正
http://ports.ubuntu.com/
↓↓
http://old-releases.ubuntu.com/ubuntu/
# 3つほどURLが書かれているので全て変更する
# 変更後、
sudo apt-get update

これでとりあえずapt-getが使えるようになる。
ubuntuのviは少しCentOSとかで慣れ親しんだキーバインドとは少し違うようなので、vim辺りをapt-getしていると捗りそうです。

IPアドレスがころころ変わるとうざいので、ローカルIPアドレスを固定化します。
/etc/network/interfacesを書き換えます。
sudo vi /etc/network/interfaces

# 設定例
iface eth0 inet static
address 192.168.XXX.XXX    #好きなIPアドレス
netmask 255.255.255.0
gateway 192.168.XXX.XXX    #192.168.1.1とかそういうの
auto eth0

# 設定変更後
sudo /etc/init.d/networking restart

ifconfigで設定を確認して、IPアドレスが設定通りならおk。

次に、HDD追加します。HDDはUSBのものを使います。
まず、USB接続する。
fdisk /dev/sda
cmd: o    #パーティションテーブル新規作成
cmd: p    #パーティションがないのを確認
cmd: n    #パーティションを作成
p         #プライマリパーティション
1         #パーティションの番号
空Enter   #先頭のシリンダー
空Enter   #シリンダーの終わり(要は1つのパーティションで全部使うってこと)
cmd: p    #パーティションができているのを確認
cmd: w    #保存して終わり

mkfs.ext3 /dev/sda1    #容量に比例して時間がかかる
# mkfs -t ext3 の書式はエラーになった。

# 終わったらマウント
mount /dev/sda1 /foo/bar
df -h     #マウントされているか確認

問題なければfstabにHDDを追記する。fstabの書き方は適当にググってみてください。
fstabの追記が終わったら、一度アンマウントして、mount -aとかして試してみる。


sambaのインストール

sudo apt-get install samba

smb.confの書き換え
とりあえずの共有の設定
[global]
security = share        #security = user 推奨らしいけれど、今回はログインという概念を排除したいので
unix charset = UTF-8
dos charset = CP932
display charset = UTF-8

[public]
comment = Public
path = /var/samba
public = yes
writable = Yes
read only = No
hosts allow = 192.168.    # IPアドレスでアクセス制限

#ゴミ箱機能の追加
vfs objects = recycle
recycle:repository = .recycle
recycle:keeptree = no
recycle:versions = yes
recycle:touch = no
recycle:maxsize = 0
recycle:exclude = *.tmp ~$*

#プリンタの共有はしないので以下の行をコメントアウト
load printers = yes
↓↓
; load printers = yes

#共有ディレクトリのパーミッションを変更。上の例ならば
chmod 0777 /var/samba

#変更完了後、sambaをリスタート
sudo /etc/init.d/samba restart

これをたたき台にして盤石の体制を整える(これから)。

文字化け
一応ファイルサーバーとして機能するようになった。
ただ、コンソールからアップしたファイルをlsしたりすると、日本語が見事に化けている。android端末からアップロードしたので、文字コードがSJISとかそういうオチはないと思う。しかし、実害は全くといっていいほどないので、おそらくこのまま使い続けるだろう。この時点で平日の夜中2時半を回っていたので気力が続かなかった。


以上です。
全般的にsudoを使っていますが、よく考えたらrootでログインしているのでまったく必要ないです。
私は一応これで飯を食っているのでどうとでもなるけれど、うちの妻は基本ITテクノロジーには疎いので、スマートフォンで撮った息子の写真やムービーを簡単にバックアップできれば、という愛の力で書き上げた記事です:-)


コメント

このブログの人気の投稿

[VB.NET]オレオレ証明書でSSL通信するための短絡的な解決法

VB.NETソフトウェアでサーバーと通信することはよくある事だと思いますが、最近はHTTPを使って明けっ広げに刺しに行くよりHTTPSを使って暗号化してこそこそやった方が時代の流れに即した感じですよね(違うか)。 いちいちテスト環境でSSL証明書を用意するのも面倒だということで、セキュリティ的には全くよろしくない方法で迂回できるので紹介します。

[JS]Canvasでよく使う描画テクまとめ

HTMLで画像をいじくりたい時は、canvasを利用して編集するのは一般的ですが、WindowsストアアプリではHTML+CSS+JSでのアプリ開発ができる事もあって、簡単な画像編集であれば、C#やVBを使うより分かりやすいし資料が多く、C++でDirectXをガリガリ書くよりお手軽。入出力もファイルピッカーを使えば簡単に実装できます。今回は、Windowsのコードではなく、Canvasを利用する時のJavaScriptを使いどきに合わせてまとめていきます。

curl の基本的な使い方 -設定編-

今回のcurl TIPSは、curlをより日常的に使っていくためのHow toです。curlには、数多くのオプションが用意されていて、それらを組み合わせる事で様々な事が楽になるでしょう。サービス監視の自動化などにはまさにcurlの得意分野です。 今回は、curlを更に自分のものにしていくために大事なカスタマイズの部分を解説します。