dropbox で windows機からlinuxサーバ機 にファイル共有してwebで公開しよう。
みんな大好き dropbox 。
webサーバにdropbox経由で同期をかけられれば、ファイル公開が非常に楽になるのではなイカということで、
dropbox を利用してサーバにファイル同期できないか試してみる。
ふつーサーバにファイルをアップロードするには、 ssh や sftp などを利用しなくてはいけない。
これは非常に手間だ。
もっと簡単にファイルを同期できないものか。
できるよ、 dropboxならね。
dropboxの 非GUI版をインストールして、勝手にファイル同期させてみよう。
注意!!
これをやる前にかならず dropbox のバックアップをローカルにとることをお勧めします。
逆に同期されてファイルがすべて消されて泣いても知らないんだから。
(いろいろ設定を書き換えて遊んでいたら、ファイルがどんどん消えて行って冷や汗ものを味わった。。。)
環境整備
python2.5 以上 + sqlite(sqlite-devel) が必要なんので入れる。
sqliteインストール。簡単!
yum install sqlite sqlite-devel sqlite3
python2.6は少しめんどい。
python2.6 yumを利用して入れる。
yum 追加先に epel を追加
wget http://dl.iuscommunity.org/pub/ius/stable/Redhat/5/i386/epel-release-1-1.ius.el5.noarch.rpm rpm -i http://dl.iuscommunity.org/pub/ius/stable/Redhat/5/i386/epel-release-1-1.ius.el5.noarch.rpm
mod python が入っているとうまくいかないらしい
yum erase mod_python
一気にインストール
yum install python26 python26-setuptools python26-devel mod_python26
dropbox を入れる
dropbox の非 GUIバージョンをインストールします。
wget -O dropbox.tar.gz http://www.getdropbox.com/download?plat=lnx.x86 tar zxof dropbox.tar.gz wget http://dl.getdropbox.com/u/6995/dbmakefakelib.py wget http://dl.getdropbox.com/u/6995/dbreadconfig.py wget http://www.getdropbox.com/download?dl=packages/dropbox.py
dropbox の環境整備
python26 ~/dbmakefakelib.py //実行してしばらく待っていると、以下のメッセージが表示される。 >dropboxd ran for 15 seconds without quitting - success? //ここでこれ以上何も起きない、、、これでいいのかどうか知らないけど、 //Ctrl + C で強制終了させる。 //一応、dropbox関係のファイルは展開されているので、これでいいんだろうけど、、、
アカウントリンク
手順では python26 ~/dbreadconfig.py を実行して、アカウント情報を取得するらしいんだけど、実行してもうまくいきません。
python26 ~/dbreadconfig.py //エラーになる Traceback (most recent call last): File "/root/dbreadconfig.py", line 22, in <module> cur.execute('select key, value from config order by key') sqlite3.OperationalError: no such table: config
エラーメッセージで検索していくと、掲示板がヒットして、、いいから ~/.dropbox-dist/dropboxd を実行してみろとある。
http://forums.dropbox.com/topic.php?id=25642&replies=1
よくわからないので、とりあえず実行してみる。
~/.dropbox-dist/dropboxd & //メッセージが表示される。 This client is not linked to any account... Please visit https://www.dropbox.com/cli_link?host_id=XXXXXexpamleXXXXXX to link this machine.
ここで、すでに dropbox を動作させているwindowsマシンとかで、表示された https://www.dropbox.com/cli_link?host_id=XXXXXexpamleXXXXXX を開く。
そしたら、アカウントがリンクされる。
Client successfully linked, Welcome YOURNAME!
この時点から、この linux マシンに dropboxのフォルダが同期される。
//おなじみのファイルがあるはず。 ll ~/Dropbox/
自動起動スクリプトとか
vi /etc/init.d/dropboxd ------- /etc/init.d/dropboxd ---- #!/bin/sh # # chkconfig: - 91 35 # description: Starts and stops the dropbox # RETVAL=0 case "$1" in start) /root/.dropbox-dist/dropboxd & ;; stop) killall dropbox ;; restart) $0 stop $0 start ;; *) echo $"Usage: $0 {start|stop|restart}" exit 2 esac exit $? --------------------------------- //実行属性をフル chmod +x /etc/init.d/dropboxd //モダンな linux なので chkconfig で. chkconfig dropboxd on
Dropboxディレクトリを変更する
今のままだと、 /root/Dropbox にファイルが作成されるでゲソ。
これだと、 そのほかのユーザ たとえば、 httpd / apache とかがこのディレクトリにアクセスできないぢゃなイカ。
なんで、ディレクトリを変更するでゲソ。
警告:この作業は冷や汗ものでした。dropbox フォルダのバックアップをお勧めします。
まずは dropbox を停止するでゲソ。
/etc/init.d/dropboxd stop or killall dropbox
今回は、 /var/lib/dropbox に持っていくデゲソ。
dropbox ディレクトリをコピーするでゲソ
cp -ra /root/Dropbox /var/lib/dropbox
ちゃんとコピーしたでゲソか?
次に dropbox にフォルダを変更したということを覚えさせるでゲソ。
昔は、 dropboxdir.py というツールで変更できたらしいでゲソが、今は実行しても動かないでゲソ。
//今は動かない。。。 wget http://dl.getdropbox.com/u/119154/permalink/dropboxdir.py python26 dropboxdir.py /var/www/dropbox Traceback (most recent call last): File "dropboxdir.py", line 27, in <module> cursor.execute("select value from config where key='dropbox_path'") sqlite3.OperationalError: no such table: config
なんということでゲソ。おのれ人類。仕様を勝手に変更するとは!!!
仕方ないので、sqlite3 で直接データベースを書き換えるでゲソ。
もうここまでくればやっちゃうしかないんぢゃなイカ。
ちなみに sqlite3 ぢゃないと動作しないでゲソ。
sqlite でやるとエラーが表示されるでゲソ。おのれ人類。仕様を勝手に(ry
//sqlite ではダメ。 sqlite ~/.dropbox/config.db Unable to open database "/root/.dropbox/config.db": file is encrypted or is not a database
sqlite3 の操作方法は、このページがわかりやすいでゲソ。
各データベースでテーブル定義を見る
http://d.hatena.ne.jp/dayflower/20060706/1152154333
//sqlite3 で書き換える。 //この時 dropbox プロセスが終了していることを確認すること。 sqlite3 ~/.dropbox/config.db //今回は、このアップデート文を実行する update config set value='/var/lib/dropbox' where key='dropbox_path'; //終了 Ctrl + D
dropboxを起動しなおす。
/etc/init.d/dropboxd start
ちゃんと同期されれば成功・・・・
そうでなければ、ファイル消されないように、すぐさま killall dropbox を実行して dropbox をたたき殺す。
緊急用のコピペ killall dropbox
ここまでくれば
あとは、適当に /var/lib/dropbox/Public/Hogehoge とかに シンボリックリンクを作成するなりして遊びましょう。
セキュリティには注意してね!!!
私は、 http と同期したかったので、以下のように設定しました。
//web root 以下をすべて dropbox の中に入れる cp -ra /var/www/html /var/lib/dropbox/Public/rtilabs.net //現在の webroot を下げる。 //すぐに消すのは忍びないので、 tmp にでも入れとく。そのうち消す。 mv /var/www/html /tmp //シンボリックリンクを張る ln -s /var/lib/dropbox/Public/rtilabs.net /var/www/html
これで、ディスクトップマシンから、 dropbox/Public/rtilabs.net にファイルをぶち込めば、勝手にサーバのファイルが変更されるされるというお手軽環境ができましたー
やったね。
よくありそうな質問
・rsyncって知ってる?
いちいち rsync を実行しろというのか。それぢゃあ夢がない。
・dropboxの publicフォルダ共有を使えばふつーにファイル公開できない?
dropboxの鯖って海外にあるためかちょっと遅くない?
あと、レスポンスヘッダに x-robots-tag:noindex,nofollow って付くので SEO屋だったら発狂して死ぬんぢゃなイカ?どうでもいけど。
参考
・GUIの無いLinux(CentOS)にDropboxをインストールする
http://www.hyk-home.com/blog/infra/archives/2009/05/05-202601-137.html
・centos-に-python-2-6-をインストール
http://ikkki.co.jp/blog-tech/2010/06/29/
・Headless ubuntu 10.04 Cannot get URL
http://forums.dropbox.com/topic.php?id=25642&replies=1
各データベースでテーブル定義を見る
http://d.hatena.ne.jp/dayflower/20060706/1152154333