« Windows7 インストールメモ | トップページ | BodhiでNotify OSDをgmailの着信表示に使う »

2011/08/23

Bodhi(Ubuntu)での起動スクリプト応用編: ラムドライブのバックアップ

起動時のコマンド実行だけだとあまりに面白みがないので、別の例としてラムディスクの情報を終了時にホームディレクトリにバックアップし、起動時に書き戻すという例を考えてみます。
使用するのはUpstart スクリプトです。

実はこのお題はWindows7で使っているRAM DRIVEというソフトにシャットダウン時にRAMDISKイメージを書きだして、起動時に戻してくれるという機能があるのを見て、Bodhiでやってみるとどうなるかと考えたものです。
以前にubuntuのjapanese forumで同様な話題が上がっていましたし。
ただ、RAM DRIVEのように丸ごとはバックアップしません。必要なのはブラウザのキャッシュだけとします。
Windowsでもディレクトリ単位で指定できる方が本当は良いのですが、やりようが無いのですよね。
差分だけバックアップしているので速度の面でもRAM DRIVE方式に対してかなり速いはずです。

ただ、当初やろうとしたことは結局半分位しか実現出来ませんでした。

[出来たこと]

  • シャットダウン時にバックアップし、起動時に書き戻すという操作
  • どのディレクトリにバックアップするかはハードコーディング

[出来なかったこと]

  • ユーザ毎のキャッシュ自動判定

ユーザ毎にキャッシュを自動判定するには、ログインしてからキャッシュを書き戻す必要があります。これには最新に近いUpstart及びDbusが必要です。BodhiのパッケージはUbuntuの最新に比べて随分遅れているので、これが不可能です。いろいろ調べてわかった結果は、Bodhiが現在サポートしているUpstart及びDbusでは、SysVinitと大差ないイベント駆動が出来るだけだということです。つまりrunlevelだけでしか駆動出来ないということですね。
Bodhiが現在の最新に近いUpstartやDbusをサポートしたら再度スクリプトを書き換えたいと思います。
現状は、マルチユーザで使っている人は、ユーザ数分だけrsyncを追加して下さいになりますね。
もちろんマルチユーザであればそもそもfirefoxのキャッシュ保存先もユーザ毎に分けておかないといけない訳ですが。
そうしないと肌色なキャッシュが奥様や子供のキャッシュに紛れたりして、あら大変なことになりかねませんし。

  1. まずはスクリプトを作ります。
  2. 名前はfirefoxcashe.conf にしました。例によってファイルを作ります。

    gksu leafpad /etc/init/firefoxcashe.conf &
    

    以下のコードを記述して保存します。

    # firefoxcache.conf - backup script for firefox cache on tmpfs
    #
    # backup cache of firefox on shutodown/reboot
    # write back them on boot
    
    

    description "backup script for firefox cache on tmpfs"

    start on runlevel [2345]
    stop on runlevel [06]

    console output

    pre-start script
    mkdir -p /tmp/Cache
    chown loginusername:loginusername /tmp/Cache
    rsync -a /home/loginusername/ramdisk/Cache/ /tmp/Cache
    end script

    post-stop exec rsync -a --delete /tmp/Cache/ /home/loginusername/ramdisk/Cache


    当然ですが、loginusernameの箇所は使用するユーザー名です。
    pre-start を単にscriptにすると起動してすぐにstopまで走ってしまいます。実際にscriptがなく、console outputでこのスクリプトをずっと生きている状態にしているのが少しトリッキーな所です。
    行間が異常に空いているのはいつもの病気です・・・

  3. テストです。当然ですが、start時はfirefoxを起動していない状態で行います。
  4. sudo initctl start firefoxcache
    

    でとりあえずスクリプトがrunningになることを確認します。 /tmp/Cashe が無ければ作られるはずです。
    firefoxが起動して /tmp/Cache の中身が出来た後で、

    sudo initctl stop firefoxcache
    

    で、ホームディレクトリの ramdisk/Cache 以下にファイルが出来るのを確認します。
    再度startさせた後、ホームディレクトリの中のファイルを1つ別名に変えてstopさせてやると、別名に変えたファイルが自動的に消えて、元のファイルが戻るはずです。

    次に、 /tmp/Cache 以下のファイルを適当にリネームし、

    sudo initctl start firefoxcache
    

    をやって、元のファイルが復元されるのを確認します。ファイル全部消して復元されるのを見てもいいですけどね。

  5. 最終確認は実際に再起動してみて下さい。
  6. /tmp/Cache 以下にファイルが戻っていればOKです。

実行しないようにするには、/etc/init/ からファイルを消すなり、ファイルの中身をコメントアウトするしかないですね。


それと、これは別件ですが、しばらく前から起動時に

Error inserting ramzswap (/lib/modules/2.6.39-2-generic/kernel/ubuntu/
compcache/ramzswap.ko): Invalid module format

というメッセージが出ていました(実際には起動が早すぎるのでメッセージ読めてませんでしたが。今回は調べる為にカメラのシャッタースピードを調整して写真に撮りました)。

そもそもramzswapというのはリソースが極端に少ない場合かとでも起動を求められるLive CD(USB)で使われるだけで、通常はよっぽどのことがない限り使われていないはずです。
で、使われていないはずなのに使おうとする → 使わないつもりなのでパラメータ設定が足りない → エラーメッセージ
となっているみたいです。なので、そもそも使わないようにするのが正しいです。

ubuntuにもバグ情報として上がっています。

で、修正方法も中に書いてありますが、

sudo rm /usr/share/initramfs-tools/conf.d/compcache
sudo update-initramfs -u

で再起動だけです。最初はファイル消すのが嫌だったので、mvして同じ場所に別名(orj_compcache)にしたんですけど、それではダメでした。ファイルそのものを無くさないとダメなんですね? とりあえず完全に消すのは怖かったので、ホームディクトリにバックアップは取りましたが。
なんかのパッケージだけ消すとOKとかの方が良いのですけどねぇ。どうもファイルを単体で消すというのはこういう風にどこかに書いておかないと後で何をやったか忘れそうで怖いです。

それとfirefoxが6.0になって毎度おなじみの日本語化&他のエクステンションが丸ごとやり直しですよ。ええ加減にせえよですが。
みんなわかっているかと思いますが、日本語化については過去記事のやり方でバージョン番号だけ4.0.1から6.0に変えてやれば他は同じです。自分も毎回自分の書いた過去の記事からリンクたどっているんですが、1〜2ヶ月毎にこれをやらされるのはなんとかして欲しいですね。
Bodhiでもchronium使えというfirefox開発陣からのメッセージなんでしょうか・・・

« Windows7 インストールメモ | トップページ | BodhiでNotify OSDをgmailの着信表示に使う »

Bodhi Linux」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/28800/52497692

この記事へのトラックバック一覧です: Bodhi(Ubuntu)での起動スクリプト応用編: ラムドライブのバックアップ:

« Windows7 インストールメモ | トップページ | BodhiでNotify OSDをgmailの着信表示に使う »