カラクリサイクル

『輝かしい青春』なんて失かった人の雑記

Rackhub.netでDropboxドリブンなブログ生成環境を整えてみた!

概要: Rackhub上でDropboxのファイル追加をトリガーにごにょごにょする


こんにちま!

いつも心にWeb & Tech、悪い意味で脆弱性が恋人(ぉぃ にゃるらこと、岡村 直樹(24)です。皆様ご機嫌麗しゅう。

さて、疑問符を社名に持つ某企業のトラッキング問題で、 すっかり影に隠れている間がありますが、ちょうど前々から注目していた、 fluxflex社の

が、いつのまにやら公開されておりました。

で、公開に気づいてから速攻でアカウントを取り、 昨日と今日あたりでいじり倒して快適な環境を構築できたので、 今回はその辺り書きたいと思います。

Rackhub.netとは?

Rackhub.netとは以前に取り上げたPaaS、

を提供するfluxflex社の新サービスで、格安のお手軽VPSみたいなサービスです。

Rackhubが普通のVPSと違う所は、

  1. さくらのクラウド上に構築されてるらしい
  2. メジャーなプログラミング言語環境が、モダンにセットアップされている
  3. 基本的なポート以外は、デフォルトで閉じられている(ポート解放は有料)
  4. SSH公開鍵をWeb UIから登録するだけで、サーバにログインできる
  5. 15日間290円からのお手軽なプライス

という感じでしょうか。

あと、fluxflexにも有った、github連携のワンクリックセットアップが、 近々実装される予定らしいので、その辺りも特長になるのかなと思います。

まあ、RackhubはPaaSかIaaSのどっち? って聞かれると、 IaaSに傾いたPaaSの様な、何とも言えない新ジャンルっぽい香りがするので、 RackhubはRackhubというモノだ、と言えるんじゃないかなーと思います。

Rackhubのセットアップとハマった事

次。

RackhubではサーバのコトをRackと呼び、 このRackをセットアップするには、

で登録したのち、ログインして、

にアクセスすると、サーバ名の指定や、 Rackのプラン等を選択等ができるようになってます。

この際3時間の無料お試し期間を適用する。にチェックを入れると、 サーバを作成から三時間まで、無料でお試しすることができます。

で、サーバの作成が終わると、今度はサーバのダッシュボードにリダイレクトされ、 そのダッシュボードから、サーバの起動/停止/再起動や、 Rackの公開鍵の再設定/Rackの初期化/Rackの削除等が行えるようになります。

で、サーバにログインするには、RackhubにSSHの公開鍵を登録した状態で、 ダッシュボードに表示される、SSH 接続方法に表示されるコマンドを、 各種端末等で実行すれば、そのまま接続できます。

……と、言いたいところなんですが、このSSH接続も含め、 Rackへの接続は、Rackhub側のDNSの自動設定が終わるまで、 実行してはなりません

というのも、Rackhub側のDNS設定は、大体1分ぐらいで終わるそうなんですが、 コレが終わる前にRackへアクセスしてしまうと、DNSレコードが無い、という、 DNSのネガティブキャッシュが残ってしまい、待てど暮らせどもアクセスできない、 というコトになります。というか、俺がそれにハマって、 @keikuboさんにアドバイスもらうまで、 にっちもさっちも行かない、という自体になってました>_<;

ちなみにこのDNS関連の問題ですが、 たぶんRackを作ってから5分ぐらい待ってからアクセスすると、 よろしいのではないかと思います。

Dropbox ドリブンな環境の構築

さて、Rackにつながらねーというトラブルも有ったものの、 今回は無事アクセスできたので、今度はDropbox Drivenな、 コマンド実行環境を整えたいと思います。

Dropboxのインスコと自動起動の設定

まずはともあれDropbox CLIのインスコをします。

Dropbox for Linux のCLIは、

  1. 32bit
  2. 64bit

の二種類ありますが、RackhubのrackはCustomizedなDebian 64bitなので、 SSHでつないでから、各種端末で、

$ cd ~ && wget -O - http://www.dropbox.com/download?plat=lnx.x86_64 | tar xzf -

を実行して展開 && インストールした後、

$ ~/.dropbox-dist/dropboxd

を実行します。

dropboxdを実行してしばらくすると、 DropboxのアカウントにリンクさせるURIが表示されるので、 リンクさせたいDropboxのアカウントにログインした状態で、 先ほど表示されたリンクにアクセスし、リンクを承認します。

ちなみに。

このリンクするアカウントですが、普段使いのDropboxアカウントとリンクすると、 サーバにアップロードしたくないファイルも全部ひっくるめて同期しだすので、 サーバと同期する用のDropboxアカウントを用意した方が良いかと思います。

僕の場合、今回Dropboxで同期させたかったファイルはnimの関連ファイルだったので、

  1. 普段使いのDropboxアカウントに、共有用のフォルダを作成
  2. サーバと同期する用アカウントを、さきほどの共有フォルダに招待
  3. サーバと同期する用アカウントで、さきほどの招待を承認

という感じで共有を行いました。

これで、同期周りの設定が終わるので、 今度はdropboxdの自動起動の設定を行います。

Debianでdropboxdを自動実行するのには、 init.dに起動スクリプトを用意するのが作法らしいです。

で、このinit.dに配置する起動スクリプトに関しては、 ゴッゴル先生に問い合わせた所、

というそのまんまな先人の成果があったので、 これをそのまま利用させていただきました。

ちなみ僕が利用してる/etc/init.d/dropboxでは、

  1. DROPBOX_USERSrackhuberを設定
  2. start-stop-daemon/sbin/start-stop-daemonのようにフルパスで指定

という風にしています。

あとはこの/etc/init.d/dropboxをサーバの起動時に読み込むように、

$ cd /etc/init.d
$ sudo update-rc.d dropbox defaults

と指定します。

これでまあ、起動時にDropboxを起動する、というのができます。

Dropboxドリブンにコマンドを実行する

Next!

さて、これでDropboxの設定は終わったわけですが、 Dropboxドリブンにコマンドを実行するには、 何からの形でDropboxの同期終了を検出し、コマンドを実行せねばなりません。

この同期終了の検出に、僕はinotify-toolsパッケージに含まれる、 inotifywaitを使用しました。

inotifywaitはどうやらデフォルトでは入ってないようなので、 SSHでつないだ端末上で、

$ sudo apt-get install inotify-tools

として、inotifywaitを実行できようにしました。

んで、これでinotifywaitを使う準備は出来た訳ですが、 Dropboxの同期検出方法は、

を参考に、下記のような感じで、監視する事にしました。

/usr/bin/inotifywait -e moved_to -mrq ${TARGET} | while [ 1 ]; do
    message=""
    while read -t 5 line; do
        message="${message}${line}@RET@"
    done
    if [ -n "${message}" ]; then
        $EXECUTE_COMMAND
    fi
done

まあ実際には、他にも色々な設定等をしているんですが、 キモとなる部分はこんな感じです。

あとは、この部分を使ったスクリプト等を、 例えばwatchgen-on-serverという風な名前にして、 テケトーなフォルダに保存して、そのスクリプトをバックグラウンドで実行すれば、 大体うまく行くかと思います。

まあ僕の実際に動かしてるスクリプトは、

辺りで公開してるので、良ければ参考にしていただければ。

Dropbox ドリブンコマンド実行スクリプトを、サーバ起動時に起動する

More NEXT!

で上記スクリプトを管理するのに、いちいち端末から起動して云々、 は面倒でやりたくなかったし、スマートのかけらもなかったので、 上記スクリプトも、init.dで管理するようにしました。

もうそろそろ説明も疲れてきた>_<;のでスクリプトをどーんど掲載。 大体こんな感じ:

homedir='/home/rackhuber'
nimdir="${homedir}/Dropbox/nimpub"

SITES='blog.nyarla.net diary.nyarla.net iyh.nyarla.net gadgets.nyadgets.net'

start() {
    echo "Starting nimgen..."
    for site in $SITES; do
        /sbin/start-stop-daemon -b -o -c rackhuber -S -x "${nimdir}/${site}/watchgen-on-server"
    done
}

stop() {
    echo "Stopping nimgen..."
    for site in $SITES; do
        pkill -u rackhuber -f "/${site}/"
    done
}

status() {
    for site in $SITES; do
        PID=`pgrep -u rackhuber -f -o "${site}"`;
        if [ -z $PID ]; then
            echo "nimgen for ${site}: not running"
        else
            echo "nimgen for ${site}: runnning"
        fi
    done
}

case "$1" in

    start)
        start
        ;;

    stop)
        stop
        ;;

    restart|reload|force-reload)
        stop
        start
        ;;

    status)
        status
        ;;

     *)
     echo "Usage: /etc/init.d/nimgen {start|stop|reload|force-reload|restart|status}"
     exit 1

esac

exit 0

やってるコトとしては、

  1. ${nimdir}/${site}/watchgen-on-serverstartで起動
  2. 上記の起動した時の関連プロセスをpkillを使ってstopで停止
  3. 関連プロセスが起動しているかを、pgrep -oを使って一つだけ検出

というぐあい。まあ細かいところは、スクリプト自体と、 あとは各種コマンドのmanを見てください。

で、あとはdropboxの時と同じように、updated-rc.dで起動時の登録をします。

以上が大体の作業

という感じで、 以上がRackhubでDropbox Drivenなコマンド実行環境を整える方法でした。

まあこの他にも、

  1. $ perlbrew install perl-5.14.2
  2. $ perlbrew lib create nim
  3. $ perlbrew switch perl-5.14.2@nim
  4. $ cpanm -v Module::Install
  5. $ cpanm -v Module::Install::AuthorTests
  6. $ cpanm -v Module::Install::Repository
  7. $ cpanm -v Test::Base
  8. $ cpanm -v https://github.com/typester/nim/tarball/master
  9. $ cpanm -v Data::Page Text::MultiMarkdown DateTime::Format::DateManip
  10. $ mkdir -p ~/local/ && cd ~/local/ && git clone git://github.com/nyarla/nimext.git nimext
  11. $ cpanm -v Net::Amazon Cache::FileCache Data::Cloud

という感じのコマンドを実行していますが、これは簡単に説明すると、

  1. perlbrewで静的生成に使うnim用のバンドルを作り
  2. perlbrewでバンドルを切り替え
  3. @typesterさんのnimをインスコするためのモジュールをインスコ
  4. nimをインスコ
  5. nimに必要な追加モジュールをインスコ
  6. 自作のnim拡張をgit clone
  7. 自分のnimによる静的生成サイトで必要なライブラリをインスコ

という感じです。

まあ上記作業で今までMacbook Airに頼っていた、ブログとか日記の記事公開作業が、 なんとDropboxにファイルを追加するたけで行えるようになったので、 僕としてはRackhubイヤッッホォォォオオォオウ! という気分であります。

まあ大分長い記事となりましたが、以上が、最近公開されたRackhubを使った、 Dropbox Drivenなコマンド実行環境の構築の仕方となります。

長い記事ではありましたが、お読みいただいてありがとうございました。

まる。