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

読了まで:約10分


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


こんにちま!

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

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

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

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

[Rackhub.net http://rackhub.net/ とは?]

Rackhub.net とは [[以前に取り上げた /post/50791366232]] 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 のネガティブキャッシュが残ってしまい、待てど暮らせどもアクセスできない、 というコトになります。というか、俺がそれにハマって、

ちなみにこの 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. $n)i)m)d)i)r/$s)i)t)e/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 なコマンド実行環境の構築の仕方となります。

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

まる。

#FIXME

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。
次に備えて待機中。

今は趣味でプログラミングをして
生活しています。