2004年02月21日

[  小技研  ]

べりきゅーとちゃん

SL−C700(通称べりきゅーとちゃん)の設定についてのメモ。今日は難しいよ。
もうすでに二世代も前のマシンになってしまったけどいまだにいじり続けている。けっこういい暇つぶし。 とりあえずswap周りでやったことを忘れないようにメモ。新型の860あたりはパフォーマンスも上がっているのでこういうのはいらないのかもね。

言わずもがなだけど、以下の記述は俺の機材に施した処理のメモなので、もしこれを参考に自分でもやってみようという方は、自己責任でお願いします。たとえばSDスロットにメモリカード以外をさした場合は実験したことがないのでまったくわかりません。
まぁそんな難しいことはしてないし、話題としてもすでに旬をはるかに過ぎ去っているけどね。

  • swapファイルを手動で作成する手順

  • とりあえずこの辺なんかを参考にswapファイルをターミナルから作成する。
    ファイル名は .swapf とする。最初にSDカードを刺しておいて、ターミナルでコマンドを入力。入力するコマンドはこんな感じ。
    これでまず16MBほどの空ファイルを作る。
    dd if=/dev/zero of=/mnt/card/.swapf count=32768
    作った空ファイルをswapに使用することを宣言。
    /sbin/mkswap /mnt/card/.swapf
    で、swap使用開始がこれ。
    /sbin/swapon /mnt/card/.swapf
    ちゃんとスワップが動いているかどうかはfreeコマンドで確認できる。 ちなみに、swap停止はこれ。SDカードを抜くときは実行する必要あり。コレやっとかないとカード抜いたときにべりきゅーとちゃんが気絶(つまり勝手に再起動とか)する可能性あり。
    swap停止
    /sbin/swapoff /mnt/card/.swapf
  • 起動時にswapon

  • 毎回べりきゅーとちゃんの電源投入時にswapファイルを見つけたら勝手にswaponを実行するようにスクリプトを仕込む。まず、rootで/etc/rc.d/にrc.swapを作成。シェルスクリプトなんで実行属性をつけとく。内容は以下のとおり。
    #!/bin/bash
    if [ -e /mnt/card/.swap ]; then
    	/sbin/mkswap /mnt/card/.swap
    	/sbin/swapon /mnt/card/.swap
    fi
    exit 0
    
    で、こいつが起動時に呼び出されるように細工する。具体的には、さっき作ったrc.swapを起動時に呼び出されるようにリンクを張るだけ。ターミナルでrootになって、こんな感じに入力。
    # cd /etc/rc.d/rc5.d
    # ln -s /etc/rc.d/rc.swap S99swap
    
    これで再起動後にfreeでスワップが確認できればOK。
  • SDカードの抜き差しにあわせてswapon/off

  • このままだと、SDカードを抜くのにいちいちターミナルからswapoffコマンドを打ち込まないといけないので、たいへんめんどい。swaponの状態でいきなりぶっこ抜くと、べりきゅーとちゃんは気絶してしまうのだ。
    なので/home/etc/sdcontrolというスクリプトに手を加える。
    このsdcontrolってやつが、SDを挿したときと、タスクバーのSDアイコンからSDスロットを開放するときに呼び出される。最後の方のcase文の 'insert' と 'eject' に以下のように修正を入れる。赤字が変更箇所。
    case "$ACTION" in
    'insert')
    	mount $FSTYPE $FATOPTS $DEVICE $MOUNT_POINT
    	MOUNT_RES = `mount | grep $DEVICE`
    	if [ "$MOUNT_RES" = "" ]; then
    		mount $FSTYPE $DEVICE $MOUNT_POINT
    	fi
    	chkmntsh ${MOUNT_POINT}
    	if [ -d $SMB_MOUNT ] ; then
    		rm -rf $SMB_MOUNT
    	fi
    	ln -s $MOUNT_POINT $SMB_MOUNT
    	mkdir -p $MOUNT_POINT/$INSTALL_DIR
    	#echo mount $? >> /tmp/sd
    	if [ -e /mnt/card/.swapf ]; then
    		/sbin/mkswap /mnt/card/.swapf
    		/sbin/swapon /mnt/card/.swapf
    	fi
    	;;
    'eject')
    	if [ -e /mnt/card/.swapf ]; then
    		/sbin/swapoff /mnt/card/.swapf
    	fi
    	fuser -s -m $DEVICE
    	if [ $? = 1 ]; then
    		umount $MOUNT_POINT
    		rm $SMB_MOUNT
    	else
    		exit 1
    	fi
    	;;
    
  • 自由にswapon/off

  • これでいちおう、正常なSDカードの抜き差しでswapon/offが同調できるようになったけど、SDを正常に抜くにはタスクバーのちっちゃいちっちゃいアイコンをタップしなければいけない。このペン入力というのは案外とめんどくさいのだ。付属のスタイラスをつかえばそこそこ確実に操作できるのだが、満員電車の中でいじってると必ずいつか落っことす(すでに3本目)。だもんで俺はいつもペン入力のときは人差し指のつめの先でカリカリやってるんだけど、これがまた隣のアイコンに触ったりしてなかなか難しい。べりきゅーとちゃんの存在価値の半分くらいはやっぱキーボードにある。ここはもう一工夫して、キーボードからswapon/offができるようにしたい。
    1. RunItの導入

    2. スクリプトを一発呼び出しするために、有名なRunItを導入。こういう、単純だけど使えるアイデアはすばらしいと思う。便利。
    3. sudoコマンドも導入。

    4. swaponはrootでないと実行できないので、sudoコマンドも導入しておく(ここから探してね)。Linuxベースである場合の強みがこういうところに出ているよね。 sudoインストール後、rootになってからvisudoコマンドで設定を追加しておく。zaurusユーザで全部のコマンドを使えるようにしておくのもいいけどなんとなくセキュリティ的に気味悪いので必要なコマンドだけパスワード無しで使えるようにしたい。ので、以下の3行を追加する。
      
      zaurus ALL=NOPASSWD:/sbin/mkswap
      zaurus ALL=NOPASSWD:/sbin/swapon
      zaurus ALL=NOPASSWD:/sbin/swapoff
      				
    5. SDカードが刺さっているか確認

    6. SDカードが刺さっているかどうか確認するスクリプトを組む。刺さっていればTrueを返す。 本来ならちゃんとパスを通してファイルを作るべきだけど、めんどいので/home/zaurus/に直に作っておく。確認の方法は、先のsdcontrolからパクってくることにした。
      スクリプトの内容はこんなの⇒checksd.sh これはべつにRunitには登録しなくてもよし。
    7. まずはswapoffして、いきなりカードをぶっこ抜けるようにする

    8. /home/zaurus/に直にsawpoff.shを作成。
      スクリプトの内容はこんなの⇒swapoff.sh これはRunitに登録。実行結果を表示するようにしておくと安心。
      スワップファイルが存在しているかどうかで見てるけれども、本当ならswaponの状態になっているかどうかで見るべきかも。このスクリプトは改良の余地あり。
      注意する点として、たくさんのアプリを同時に実行している状態でswapoffするとかなりの確率でべりきゅーとちゃんが気絶してしまうので、事前に閉じれるアプリはセーブして閉じとくこと。
    9. swapファイルがSDにあったら、swapon

    10. /home/zaurus/に直にswapon.shを作成。
      スクリプトの内容はこんなの⇒swapon.sh これもRunitに登録。やっぱり実行結果を表示するようにしておくと安心。
    11. swapファイルの一発削除

    12. SDにデータを突っ込んで外したい場合、スワップファイルが邪魔になる場合も考えられる。一発削除のスクリプトは欲しい。 /home/zaurus/に直にdeleteswap.shを作成。
      スクリプトの内容はこんなの⇒deleteswap.sh これもRunitに登録。実行結果を表示するようにしておくこと。
    13. swapファイルの一発作成

    14. まっさらのSDを持ってきた場合、いちいちコマンドを入力してswapファイルを作るのはめんどくさい。これもスクリプトを組んでおく。 /home/zaurus/に直にmakeswap.shを作成。
      スクリプトの内容はこんなの⇒makeswap.sh 引数に数字を指定しておくと、指定した分のメガバイトでスワップファイルを作成する。たとえば「>/home/sbin/makeswap.sh 32」とやると32MBのスワップを作成する。デフォルトは16MB。 当然Runitに登録。実行結果を表示するようにしておく。

    作ったスクリプトをRunitに登録すれば作業は終了。
    これでSD挿しっぱなしという状況ともおさらば、SDカードを本来の使い方で活用できるようになった。
「ここまちがってんぞ」「もっとうまい方法あるのに」ってご指摘がありましたらコメント欄にでもお願いします。

追記(2004/02/07): makeswap.shが間違ってたので修正しました。
古いやつを実行すると名前が「=」でサイズが0バイトのファイルをはくんですが、それはもうさくっと削除してください。新しいやつは余計なファイルは作りません。何でこんな単純な間違いに気がつかなかったんだろう・・・
投稿者 snjx : 2004年02月21日 01:44
このエントリーのトラックバックURL:
http://snjx.net/mt/mt-tb.cgi/73
コメント
コメントする









名前、アドレスを登録しますか?