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

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行追加。
マウントできて、問題なさそう。

nano

LinuxのCUIテキストエディタは、いつも普通にvi使ってたが、
どうもSheevaPlugで使いにくかったんで、nanoっての試してみたんだが、
これいいな。
エディタコマンド使わずに、GUIエディタ感覚で使える。

コマンドはショートカットで使えるが、
保存は、
Ctrl+X
で終了するときに変更されてれば保存するか聞かれるからyすればいいだけ。

今度からviじゃなくてnano使おうと思う。

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カードは注文した。