« SNAの有効化方法 | トップページ | E17 正式リリース版 »

2012/11/05

systemd に対応したchromium cash のtmpfs での運用

以前Arch linux でのchrommium 設定を書いたのですが、数日前のアップデートで起動時にハングアップするようになってしまいました。
犯人を探したら自分のスクリプトが問題だと発見するという・・・。まぁ、いつものことですけどね。

ちなみに以下に自分が書く方法を使わなくても、他のブラウザにも対応したAUR パッケージを作ってくれているエロイ人がいます。なので、勉強のため以外ならAUR 使った方が簡単ですね。作者はいつもお世話になっているlinux-ck のメンテナの方です。

不具合が起きた原因は、rc.local の実行順が早すぎてtmpfs の用意が出来ていないっぽいような(?)。起動高速化の一環でsystemd では並列実行できるスクリプトをどんどん並列実行する訳ですが、効率化が進んで並列化を考えていなかった自分のスクリプトが不具合を起こしたということみたいです。
起動があまりに速いのも考えものダナー。

なんせchromium キャシュをtmpfs にコピーするのを停止させてみたら、systemd-analyze のトータル時間が3607[msec] とか言ってますよ。奥さん!! やばいな、ほんとに5秒以内で起動してるっぽい(キャッシュのコピーを止めればの話ですが)。
しかし、キャッシュのコピーは使用上必要です。爆速のchromium に慣れたらもう戻れないのです。

ということで、systemd に対応したchromim キャシュ運用方法です。
  1. chromium のキャッシュをラムドライブで運用する設定をする
  2. これは以前と変更なしなので、Arch linux でのchrommium 設定の該当箇所を参照。

  3. 実行するスクリプトの本体を用意
  4. 以前はshutdown をキーにしていたのを、rsync に変えただけ。書き戻しをシャットダウン時だけでなく、cron で定期的にやらせるのも良いよね。でもその時のキーがshutdown じゃ気持ち悪いよね、というのが理由です。
    場所は以前と変わらず/usr/bin/chromium_cache.sh です。というか、変えるのが面倒だっただけなんですが。
    #!/bin/bash
    # chromium_cache.sh - backup script for chromium cache on tmpfs
    #
    # backup cache of chromium on shutodown/reboot
    # write back them on boot
    # Usage call chromium_cache.sh [arg1]
    #	arg1 :	boot		write back cache from home folder
    #		rsync		backup cache to home folder
    #
    # Make sure chromium is using /tmp/cache/chromium
    
    USERNAME=yourusername
    
    case "$1" in
        boot)
            mkdir -p /tmp/cache/chromium
            chown $USERNAME:users /tmp/cache/chromium
            rsync -a /home/$USERNAME/.cache/chromium/Default/ /tmp/cache/chromium
        ;;
        rsync)
            rsync -a --delete  /tmp/cache/chromium/ /home/$USERNAME/.cache/chromium/Default
        ;;
    esac
    毎度の事ながら、yourusername は各自のユーザ名を。保存したら、実行属性を付与します。
    sudo chmod +x  /usr/bin/chromium_cache.sh

  5. 起動時及び終了時に実行されるサービス本体を用意
  6. ユーザ定義のサービスは、/etc/systemd/system 以下に置いておくのがアップデートで消される心配がなくて良いです。
    gksu leafpad /etc/systemd/system/chromium_cash.service &
    中身は、
    [Unit]
    Description=Chromium-cash-sync-daemon
    Wants=local-fs.target
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/usr/bin/chromium_cache.sh boot
    ExecStop=/usr/bin/chromium_cache.sh rsync
    
    [Install]
    WantedBy=multi-user.target
    
    こんだけ。簡単ですね。尚、rc.local とrc.local.shutdown の中でchromium_cache.sh を実行していた文は忘れずに削除します。

  7. テストします
  8. 以下当然ですが、chromium は終了している状態で行います。とりあえず現在のキャッシュをバックアップしたいですから、
    chromium_cache.sh rsync
    ホームフォルダの.cache/chromium/Default 以下が最新の状態に書き換わることを確認します。
    さて、いよいよサービスのテストです。/tmp/cache/chromium 以下を削除し、
    sudo systemctl start chromium_cash.service
    で、.cache/chromium/Default 以下がコピーされることを確認します。
    次に、ホームフォルダの.cache/chromium/Default 以下のファイルを1つ消し、
    sudo systemctl stop chromium_cash.service
    で、ファイルが戻ることを確認します。
    何かマズイことが起こっていないか、念の為/var/log/daemon.log の出力結果も見てみた方が良いでしょう。

  9. サービスを登録します
  10.  sudo systemctl enable chromium_cash.service
    簡単ですね。これで起動時に自動実行されるようになります。自動実行を無効にするのも簡単で、
     sudo systemctl disable chromium_cash.service

今回で大体systemd の起動スクリプトの書き方がわかったので、rc.local に登録してあるコマンドを全てスクリプトに持っていくのは簡単そうです。1つにまとめる方が簡単だけど、マルチコアなCPU+高速なシステムドライブという条件なら複数のファイルに分けて、可能な限り並列実行可能にした方が速度的には有利なんでしょうね。
もっとも現時点で3秒台ですからねぇ・・・。後数10[msec] 速くなっても関係ない気が。メンテナンス性を考えて今まで通り1つのファイルにまとめるか、思案しています。

« SNAの有効化方法 | トップページ | E17 正式リリース版 »

Arch Linux」カテゴリの記事

コメント

これは、psdと何か違いはありますか?

本文でも書いたことの繰り返しになりますが、これはあくまでもsystemdスクリプトの勉強用ですね。
psdの方が遥かに高機能ですし他のブラウザにも対応しているので、勉強目的以外なら素直にpsd使った方が良いのではないでしょうか。

コメントを書く

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

トラックバック

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

この記事へのトラックバック一覧です: systemd に対応したchromium cash のtmpfs での運用:

« SNAの有効化方法 | トップページ | E17 正式リリース版 »