ジャンル不定の日記です。

だいたい完了

ノートPCにgFTP入れて、
~/.gftpコピーして、
開発環境は整った感じ。

gFTPは、ブックマークのローカルディレクトリの保存が、
~/
とかできずに絶対指定しないといけないぽく、
メイン機とノートでユーザー名が違うんで、
そこ、ちと修正の必要がある感じ。
実際転送する時まで放置するけど。

.gftp
自体の共有もできるが、それはやめといた。

ノートの方に入ってた動画ファイルも転送しようと思って移動したが、
全部で500MB程度だったが、数分で終わった。
nautilusの時より早かった気がする・・・

今まではUSBメモリ使ってコピーしてたが、
USBとそれほど速度差ない気もする。
挿し直さなくていいから楽だし。

nfsに置いたまま動画再生もやってみたが、
速度問題ない感じ。
32GBしか無いから、あまり置けないが、
動画の一時保存領域として問題なさそう。

本なら永久共有領域としていけるかと思ったが、
漫画の圧縮ファイルって何気にでかい。
40MBの動画ファイルより漫画のが全然でかい感じ。
本も一時的な領域としてしか使えんな。

PCSXとかエミュレータのメモリカードとか保存領域なんかもnfsで共有すれば、
どの端末でもセーブデータ共有出来るから、その辺もいずれやろうかと。


とりあえず、思いつく作業はだいたい終わった感じかな。
結構いい感じに家内ネットワークできた感じ。
Windowsでもnfsのマウントしたいところだが、
たぶんWindows用のnfsもあると思うんだが、
そのうちWindows8にするから、その後でもいいかもしれない。
まあ、調べとくか。

rsync

SheevaPlugのnfsバックアップは、
rsync使うことにした。
更新されてなければ10秒くらいで終わりそう。

とりあえず、
rsync -a 元/ 先/
って感じにした。
ディレクトリ末尾に/付けないと、対象ディレクトリも作成されちゃうぽい。

-aオプションは、
-rlptgoD
と同一ぽくて、
rディレクトリを再帰的に
l
シンボリックリンクをたどる
p
パーミッションの維持
t
タイムスタンプ維持
g
グループ維持
o
所有者維持
D
デバイスもコピー
らしい。
lとDは要らなそう。
問題ありそうならオプション変更するかな。

あと、--deleteオプション付けると削除されたファイルは削除されるらしい。
付けたほうが良さそうだが、トラブル時には付いてるとマズイかもだな。


初回バックアップも、それほど時間かからなかった。
SDの読み込みは速くて、
書き込みが遅いのかもな。

SDカード届いた

注文してた32GBのSDカード届いた。
神田発送で3日かかるってどうなのよw
SDカードのあとに注文した岡山発送の食料は1日で届いたのに・・・

で、ノートでext3にフォーマットしようとしたんだが、
止まった?
ってわけで、抜いてメイン機で再フォーマット試したんだが、
同じ・・・
ってことになったんだが、
「SD フォーマット できない」
でググってたら、いつの間にか終わってた。
遅いだけだったらしい。

で、Sheevaでマウントして、
クライアントでnfsなわけだが、
まず、JDのキャッシュをコピーした。
30KBくらいしか速度でなかったが、
元がsshfsだからそっちの影響もあるかも知れん。
JD起動してみたが、問題なさそう。

次に、開発系のファイル共有だが、
時間かかりすぎるんで、tar.gzしてから転送して、
向こうで解凍することにした。
tar.gzで540MBほど。
転送速度は300KB程度ぽい。
ストレージの問題か回線の問題かCPUの問題か分からんが、
ギガイーサの必要ない感じ。
イーサは100でいいな。

次解凍だが、
CSV系の大きそうなファイルのとこで時間かかる。
CSV系なら再生成できるから、
削除しちゃっていいかも知れん。
今解凍中なんだが、10GBくらいにはなるのかな?

メディア系の共有に使うには速度厳しいかも知れんが、
テキスト系なら問題ないかな・・・


あと、開発系の共有ファイルは、
定期でごっそりバックアップしようかと思ったが、
ディレクトリまるごと保存だと、タイムスタンプが更新されないから、
ローテートで問題な感じ。
差分バックアップか、
たまに手動でバックアップかな・・・

apacheでnfs領域を・・・

apacheでnfs領域を使う作戦だが、
シンボリックリンクでapacheの公開ディレクトリにおいたら、
403なったんでちょいハマった。

リンクじゃなくてAliasでもダメで、
マウント中のnfs領域のパーミッション見たら、700なってた。
これ原因だね。
ってわけなんだが、
マウントしたnfsは、Sheeva上のext3のSDカード。
SDカードのパーミッション見たら、700。
ここが原因ぽかったが、

マウント時のオプションでパーミッションつけるのかと思ったが、
ext3なら普通にchmodでシステムのルートも変更できるんだね。
ユーザーがフォーマットした時のユーザーになってたみたいで、
全端末ユーザーIDが同じだから気づかなかった。

chmodで0755にしたら普通に使えたんで、
ノートの方にもapache2入れて準備した。
最近のUbuntuはmpm-workerが標準なんだね。
普通にapache2いれたら、mpm-preforkじゃなかった。


SDはユーザー所有で0755だが、
新しいSDカードきたら、所有者をrootにして0777にする感じのほうがいいかな。

apacheのインストールも考えてたが・・・

SheevaPlugへのapacheのインストールも当初考えてたが、
nfsで共有ストレージをクライアントでマウントできてるわけで、
クライアント機にapacheを入れてnfsでマウントした場所を公開すれば、
サーバーにapache入れんでも共有領域をWEBで使えるようになるな。

Sheevaの内蔵フラッシュ消費するのはもったいないから、その方向で行こう。

iptablesも入れようかと思ったが・・・

SheevaPlugにはiptablesも入れようかと思ったが、
鯖じゃiptablesはいつもWebmin使って設定してるが、
利用するならネットワーク構成変わるたびに設定しなきゃいけないから、
CUIで設定だと設定方法忘れるから難しいし、
Webminがあれば簡単だが、
Webminはサイズがでかいのと、SSLしなきゃ使えない?
ってわけでWebminのインストールもどうかと思うんで、
やめた。

アクセス制限はルータでも設定できるはずだから、
Webminないなら、ルータで設定した方が簡単かと。

SheevaPlug届いてからの作業をまとめる

SheevaPlug届いてからやった作業をまとめとく。

大目的はNFSサーバー。

まず、シリアルコンソールでつないで作業。
SSHは標準で入ってたと思うから、ブートローダの編集作業以外はシリアルじゃなくても出来るかもしれない。
SSHでrootログイン試してないけど。
シリアルコンソールは、メイン機のUbuntuにscreenが最初から入ってたので、それを利用。

scrennは、
screen /dev/ttyUSB0 115200
こんな感じで。
参考にした先人のページだと、/dev/ttyUSB0ではなかったんで、人によって違うぽい。
母艦にUSBつけて出てきたデバイスで接続する。

ブートローダは、3秒待ちでkernel起動するので、なにかキーを押してキャンセルすると、
Marvell>>
というU-Bootのプロンプトになる。
もしすでにkernelが起動しちゃってたら、ログインしてrebootする必要があるが、
rootの初期パスワードはnosoup4uになってる。

U-Bootのコマンドはたくさんあるが、とりあえず、
コマンド
説明
?
コマンド一覧の表示
boot標準設定でkernel起動
reset
再起動
printenv環境変数確認
setenv環境変数設定
saveenv環境変数保存
辺りを使う。

U-Bootの書き換えをしている先人たちも多いようだが、
万が一トラブったら修復困難と思われるので、やらなかった。
今後も必要がなければやらない。
環境変数の保存も、シリアル関連とかミスったら修復困難になるんじゃないかと思うんで、あまり触らないことにする。

とりあえず、
printenv
で環境変数を確認して、メモ。
Marvell>> printenv
baudrate=115200
loads_echo=0
rootpath=/mnt/ARM_FS/
console=console=ttyS0,115200 mtdparts=nand_mtd:0xc0000@0(uboot)ro,0x1ff00000@0x100000(root)
CASset=min
MALLOC_len=1
ethprime=egiga0
bootargs_root=root=/dev/nfs rw
bootargs_end=:::DB88FXX81:eth0:none
image_name=uImage
standalone=fsload 0x2000000 $(image_name);setenv bootargs $(console) root=/dev/mtdblock0 rw ip=$(ipaddr):$(serverip)$(bootargs_end) $(mvPhoneConfig); bootm 0x2000000;
ethmtu=1500
mvPhoneConfig=mv_phone_config=dev0:fxs,dev1:fxs
mvNetConfig=mv_net_config=(00:11:88:0f:62:81,0:1:2:3),mtu=1500
usb0Mode=host
yuk_ethaddr=00:00:00:EE:51:81
nandEcc=1bit
netretry=no
rcvrip=169.254.100.100
loadaddr=0x02000000
autoload=no
ethact=egiga0
filesize=202588
fileaddr=2000000
netmask=255.255.255.0
ipaddr=10.4.50.4
serverip=10.4.50.5
tun_diag=yes
run_diag=no
bootargs=console=ttyS0,115200 mtdparts=nand_mtd:0x400000@0x100000(uImage),0x1fb00000@0x500000(rootfs) rw root=/dev/mtdblock1 rw ip=10.4.50.4:10.4.50.5:10.4.50.5:255.255.255.0:DB88FXX81:eth0:none
bootcmd=nand read.e 0x800000 0x100000 0x400000; bootm 0x800000
ethaddr=F0:AD:4E:00:BB:59
stdin=serial
stdout=serial
stderr=serial
mainlineLinux=no
enaMonExt=no
enaCpuStream=no
enaWrAllo=no
pexMode=RC
disL2Cache=no
setL2CacheWT=yes
disL2Prefetch=yes
enaICPref=yes
enaDCPref=yes
sata_dma_mode=yes
netbsd_en=no
vxworks_en=no
bootdelay=3
disaMvPnp=no
enaAutoRecovery=yes

Environment size: 1374/131068 bytes
こんな感じ。

bootコマンドやresetでkernelを起動。
上にも書いたが、rootの初期パスワードはnosoup4uになってる。
起動時にはエラーや警告もいくつか出るはず。
ログイン画面のあとにメッセージが出てきて
login:
が流されちゃうが、Enterすればまた表示される。

うちはルーター使ってるから、ルーターがDHCP鯖になってるんで、
IPアドレスはDHCPで設定。
SheevaPlugも最初からDHCPクライアントとしてネットワーク起動するようになってるので、
ネットワークは最初から使える。
だが、DNSが固定されていてドメインが使えない。
/etc/dhcp3/dhclient.conf
の、
supersede domain-name-servers 127.0.0.1;
って行をコメントアウトしてreboot。
適当にドメイン宛にpingして確認。

インストールされているUbuntuは9.04だが、
9.04はすでにサポート切れで、リポジトリがold-releases.ubuntu.comに移動している。
/etc/apt/sources.list
を、
#deb http://ports.ubuntu.com jaunty main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu/ jaunty main restricted universe multiverse
に変更。
また、apt-getする際に、ディレクトリが存在しないって怒られるので、
mkdir /var/cache/apt/archives
mkdir /var/cache/apt/archives/partial
で作成。
apt-get update
とかで確認。
apt-get upgrade
もここでしちゃっていいかもしれない。

カーネルを、コミュニティーサイトのやつに更新する。
標準のカーネルはNFSに対応していないと思うので、
NFSするならカーネルの更新は必要と思う。

http://sheeva.with-linux.com/sheeva/
にSheevaPlug用のカーネルが用意されているが、
インストーラまで用意されてる。
README-PLUG-UPDATE.sh
がインストーラになってる。
これを用意して、
USBメモリに保存。
USBメモリは通常FATでフォーマットされていると思うが、
FATだと難しいと思うのでext3でフォーマットした。
USBメモリをSheevaPlugにつないで、
/dev/sda1
になると思うので、
mkdir /mnt/usb
mount -t ext3 /dev/sda1 /mnt/usb
でマウント。
cd /mnt/usb
chmod 0755 README-PLUG-UPDATE.sh
README-PLUG-UPDATE.sh
を実行できるようにパーミッション変更。

README-PLUG-UPDATE.sh
でカーネル更新だが、
必要なwgetがインストールされてない。
apt-get install wget
でwgetインストール。

README-PLUG-UPDATE.sh
は、引数二つで、
1個目がカーネルバージョン。
2個目が--nandkernelか--rootkernel。
内蔵フラッシュを書き換える場合は--nandkernel。
カーネルバージョンは、
http://sheeva.with-linux.com/sheeva/
で公開されているものを選べる。
2.6.39.4
を入れたんで、
./README-PLUG-UPDATE.sh 2.6.39.4 --nandkernel
でカーネル更新。
万が一更新中にエラーが出たら、
カーネルが起動できなくなってめんどいと思うので、
成功するまでがんばる。
停電にも注意。

README-PLUG-UPDATE.sh
に記載されているが、
新しいカーネルにした場合は、U-Bootの環境変数を変更する必要がある。
rebootしてU-Boot画面にして、
setenv mainlineLinux yes
setenv arcNumber 2097
setenv bootargs rootfstype=jffs2 console=ttyS0,115200 mtdparts=orion_nand:0x400000@0x100000(uImage),0x1fb00000@0x500000(rootfs) rw root=/dev/mtdblock1
saveenv
reset
で新カーネル起動。

Linux側も、
/etc/sysctl.d/10-process-security.conf
を、数字部分を32768にしないとリモートからroot以外のユーザーログインできない様なので変更。
変更したら、
adduser ユーザー名
で一般ユーザを作って、一般ユーザのログインを確認。

SSHは最初からインストールされているが、
シリアルコンソールよりも、一般ユーザーでSSHログインしてsudoのが操作しやすいと思うので、
visudo
で、
ユーザー名 ALL=(ALL) NOPASSWD: ALL
で、sudo出来るように設定。(パスワード不要設定)
/etc/hosts

127.0.1.1
にホスト名が設定されてないとsudoできないようなので、
127.0.1.1 debian
とする。

起動時に /etc/rc.localが余計なことをしているようなので修正。
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
#insmod /boot/fat.ko
#insmod /boot/vfat.ko
mkdir -p /var/cache/apt/archives/partial
#/root/discoverd
#cd /
#./demo.sh
#date 012618002009
#hwclock -w

exit 0
こんな感じに。
普通のUbuntuだと、
最後のexit 0しかないが、
/var/cache/apt/archives/partial
が起動時に作成しないと消えてaptが使えないようなので、
mkdir -p /var/cache/apt/archives/partial
は必要ぽい。

時計が日本のローカル時間になってないので、
locale-gen ja_JP.UTF-8
echo 'LANG="ja_JP.UTF-8"' > /etc/default/locale
dpkg-reconfigure tzdata
で、Asia→Tokyoってすると日本時間になる。

SDカードをNFSの共有ストレージにするが、
SDカードの1番目のパーティションは/dev/mmcblk0p1になると思うので、
sudo mkdir /mnt/sd
sudo mount -t ext3 /dev/mmcblk0p1 /mnt/sd
で、マウントポイント作ってマウント確認。
確認できたら、
/etc/fstab
を、
/dev/mmcblk0p1 /mnt/sd ext3 defaults 0 0
な感じで、起動時自動マウント。

NFSサーバーは、
apt-get install nfs-kernel-server
でインストールできるが、
コミュニティーサイトのカーネルはNFSはモジュールでサポートなので、
起動スクリプトのカーネルチェックで失敗するんで、
/etc/init.d/nfs-kernel-server
の70行目付近の、
        if [ -f /proc/kallsyms ] && ! grep -qE 'init_nf(sd|    )' /proc/kallsyms; then
            log_warning_msg "Not starting $DESC: no support in current kernel."
            exit 0
        fi
の部分4行をコメントアウトする。

/etc/exports
でNFSサーバーの設定。
/mnt/sdを192.168.1.0/255.255.255.0で共有するので、
/mnt/sd 192.168.1.0/255.255.255.0(rw,no_subtree_check)
な感じにした。
IP(ホスト名)の後ろに()で囲んでオプションを付けるが、
()の前に不要なスペースをつけるとオプションが無効になるので注意。
no_subtree_check(又はsubtree_check)
は、付けないと警告が出る。

で、再起動でエラーがでなければNFS鯖は成功。

NFSクライアントの方もUbuntuだが、
初期状態でNFSクライアントが入ってなかったんで、
nfs-commonをインストールした。
sudo mkdir /mnt/nfs
sudo mount -t nfs 192.168.1.23:/mnt/sd /mnt/nfs
マウントポイントを作ってマウント。
IPはうちの。

fstabの自動マウントは、
192.168.1.23:/mnt/sd /mnt/nfs  nfs defaults 0 0
とりあえずこんな感じにした。
192.168.1.23:/mnt/sd /mnt/nfs  nfs rsize=8192,wsize=8192,hard,intr 0 0
こんな感じに修正した。
rsizeとwsizeは読み込みと書き込みのバッファ。
カーネル依存で標準は1024ぽいが、大きいサイズが設定できるなら速度が向上するらしい。
hardは、書き込みが成功しない場合、クライアントは停止するので、書き込み失敗がない。
intrは、hardでの書き込み失敗時にアプリケーションにシグナルを送って永久停止を回避する。

NFS接続できたー

目的としていたNFSの接続できました。

メイン機とノートをクライアントにするわけだが、とりあえずメイン機で。
まず、マウントポイントを作成。
sudo mkdir /mnt/nfs
で、鯖の/mnt/sdのSDカードをストレージとするんで、
sudo mount -t nfs 192.168.1.23:/mnt/sd /mnt/nfs
でマウントなんだが、(IPは自分の)
ファイルタイプが不正って言われる。
標準でNFSクライアント入ってないらしい。
nfs-commonをSynapticでインストール。
で、もっかいマウントしたら成功。
ユーザー権限で編集もできました。

NFSのユーザーは、ユーザーIDで識別されるらしいんで、
共有する端末のユーザーIDを全て統一しておけばいいらしい。
Ubuntuは一人目の一般ユーザーは1000になるはず。
全機一人用だから最初から多分統一されてる。

fstabも設定してみたが、
192.168.1.23:/mnt/sd /mnt/nfs  nfs defaults 0 0
とりあえずこんな感じで。
オプションあとでいじるかもしれない。



fstabでSD自動マウント

テスト用のSDカードは64MBしか無い年代物で、
新しい32GB注文してるわけだが、
デバイス名は変わらんはずだし、
fstab設定しといていいかな。

ってわけで、設定。

すでにマウントポイントとして、/mnt/sdは作成済みだが、無いなら、
sudo mkdir /mnt/sd
で作成。
sudo mount -t ext3 /dev/mmcblk0p1 /mnt/sd
でマウントテスト。

/etc/fstabの方は、
/dev/mmcblk0p1 /mnt/sd ext3 defaults 0 0
を1行追加。
マウントできて、問題なさそう。

NFSサーバーインストール

NFSサーバーのインストールは、
aptでnfs-kernel-serverを入れればいいだけなんだが、
* not starting nfs kernel daemon: no support in current kernel.
言われて起動に失敗する。

kernelコンパイルしなきゃダメかと思ってgcc入れたりして、
内蔵フラッシュ4%ほど消費しちゃったんだが、
コミュニティーサイトから落としたkernelはモジュールでNFSサポートしてるんで、
/etc/init.d/nfs-kernel-server
の70行目付近の、
        if [ -f /proc/kallsyms ] && ! grep -qE 'init_nf(sd|    )' /proc/kallsyms; then
            log_warning_msg "Not starting $DESC: no support in current kernel."
            exit 0
        fi
をコメントアウトしてkernelのチェックをスキップすれば、
kernelコンパイルしなくてもNFS起動できるみたい。

NFSサーバー設定の、/etc/exportsも設定する必要があるが、
/home 192.168.1.0/255.255.255.0(rw,no_subtree_check)
とりあえず起動テストだけの適当設定だが、こんな感じ。
注意点は、設定方法調べると、
IP(ホスト名)の後ろにオプションをつけるわけだが、
(の前にスペースいれちゃダメらしい。
ダメ設定教えてるサイトが多くて困る。
あと、
no_subtree_check(subtree_checkでもいいはず)
を付けないと警告出る。

とりあえず、これで警告でなくなった。
(NFS以外にまだ一箇所起動時に警告出てる)

まだ実際のマウントは試してない。
共有ストレージにするつもりのSDカードは注文した。