概要: Rackhub 上で Dropbox のファイル追加をトリガーにごにょごにょする
こんにちま!
いつも心に Web & Tech、悪い意味で脆弱性が恋人(ぉぃ にゃるらこと、岡村 直樹(24)です。皆様ご機嫌麗しゅう。
さて、 疑問符を社名に持つ某企業 のトラッキング問題で、 すっかり影に隠れている間がありますが、ちょうど前々から注目していた、 fluxflex 社の
が、いつのまにやら公開されておりました。
で、公開に気づいてから速攻でアカウントを取り、 昨日と今日あたりでいじり倒して快適な環境を構築できたので、 今回はその辺り書きたいと思います。
[Rackhub.net http://rackhub.net/ とは?]
Rackhub.net とは 以前に取り上げた /post/50791366232 PaaS、
https://www.fluxflex.com/fluxflex
を提供する fluxflex 社の新サービスで、格安のお手軽 VPS みたいなサービスです。
Rackhub が普通の VPS と違う所は、
- さくらのクラウド上に構築されてるらしい
- メジャーなプログラミング言語環境が、モダンにセットアップされている
- 基本的なポート以外は、デフォルトで閉じられている(ポート解放は有料)
- SSH 公開鍵を Web UI から登録するだけで、サーバにログインできる
- 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 のインスコをします。
- 32bit
- 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
の関連ファイルだったので、
- 普段使いの Dropbox アカウントに、共有用のフォルダを作成
- サーバと同期する用アカウントを、さきほどの共有フォルダに招待
- サーバと同期する用アカウントで、さきほどの招待を承認
という感じで共有を行いました。
これで、同期周りの設定が終わるので、
今度はdropboxd
の自動起動の設定を行います。
Debian でdropboxd
を自動実行するのには、
init.d
に起動スクリプトを用意するのが作法らしいです。
で、このinit.d
に配置する起動スクリプトに関しては、
ゴッゴル先生に問い合わせた所、
- etc/init.d/dropbox — Gist https://gist.github.com/592840
というそのまんまな先人の成果があったので、 これをそのまま利用させていただきました。
ちなみ僕が利用してる/etc/init.d/dropbox
では、
DROPBOX_USERS
にrackhuber
を設定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 の同期検出方法は、
Linux で Dropbox ドリブンなシステムを構築する方法 - tyoro.exe inotify でディレクトリを監視してみる - いますぐ実践! Linux システム管理 / Vol.157
を参考に、下記のような感じで、監視する事にしました。
/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
という風な名前にして、
テケトーなフォルダに保存して、そのスクリプトをバックグラウンドで実行すれば、
大体うまく行くかと思います。
まあ僕の実際に動かしてるスクリプトは、
- <https://github.com/nyarla/blog.nyarla.net/blob/master/watchgen-on-server https://github.com/nyarla/blog.nyarla.net/blob/master/watchgen-on-server>
- <https://github.com/nyarla/diary.nyarla.net/blob/master/watchgen-on-server https://github.com/nyarla/diary.nyarla.net/blob/master/watchgen-on-server>
- <https://github.com/nyarla/iyh.nyarla.net/blob/master/watchgen-on-server https://github.com/nyarla/iyh.nyarla.net/blob/master/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
やってるコトとしては、
${nimdir}/${site}/watchgen-on-server
をstart
で起動- 上記の起動した時の関連プロセスを
pkill
を使ってstop
で停止 - 関連プロセスが起動しているかを、
pgrep -o
を使って一つだけ検出
というぐあい。まあ細かいところは、スクリプト自体と、
あとは各種コマンドのman
を見てください。
で、あとはdropbox
の時と同じように、updated-rc.d
で起動時の登録をします。
以上が大体の作業
という感じで、 以上が Rackhub で Dropbox Driven なコマンド実行環境を整える方法でした。
まあこの他にも、
$ perlbrew install perl-5.14.2
$ perlbrew lib create nim
$ perlbrew switch perl-5.14.2@nim
$ cpanm -v Module::Install
$ cpanm -v Module::Install::AuthorTests
$ cpanm -v Module::Install::Repository
$ cpanm -v Test::Base
$ cpanm -v https://github.com/typester/nim/tarball/master
$ cpanm -v Data::Page Text::MultiMarkdown DateTime::Format::DateManip
$ mkdir -p ~/local/ && cd ~/local/ && git clone git://github.com/nyarla/nimext.git nimext
$ cpanm -v Net::Amazon Cache::FileCache Data::Cloud
という感じのコマンドを実行していますが、これは簡単に説明すると、
perlbrew
で静的生成に使うnim
用のバンドルを作りperlbrew
でバンドルを切り替え- @typester さんの
nim
をインスコするためのモジュールをインスコ nim
をインスコnim
に必要な追加モジュールをインスコ- 自作の
nim
拡張を git clone - 自分の
nim
による静的生成サイトで必要なライブラリをインスコ
という感じです。
まあ上記作業で今まで Macbook Air に頼っていた、ブログとか日記の記事公開作業が、 なんと Dropbox にファイルを追加するたけで行えるようになったので、 僕としては Rackhub イヤッッホォォォオオォオウ! という気分であります。
まあ大分長い記事となりましたが、以上が、最近公開された Rackhub を使った、 Dropbox Driven なコマンド実行環境の構築の仕方となります。
長い記事ではありましたが、お読みいただいてありがとうございました。
まる。