デスクトップなしのCentOSにDropboxをインストールして動かす

やわなべです。

中古のLet’sNoteにLinux(CentOS)を乗せて、Wordpressのテスト環境を作ろうとがんばってます。前回のエピソードはこちら。

Windows7にVmwarePlayerとCentOS7を入れたらネットワークを認識しなくて困った話

ただ、めでたくテスト環境ができたとしても、MacのエディタでスタイルシートやPHPスクリプトを編集するたびに、隣のテストサーバーにFTPで送信とか、かったるくてやってらんないわけです。

なんで、Linux版のクライアントもあるDropboxをCentOSに入れて、Macとの間で勝手に同期がとれるようにならないかなー、と考えました。

DropboxにLinux版クライアントがあることは知ってましたが、心配なのは「GUIなデスクトップ環境がなくても動くのか?」という点でした。

結論から言うと、Yes, we can! です。(古い)

スポンサーリンク

CUIなCentOSにDropboxをインストールする

LinuxへのDropboxインストールは公式サイトのここから

Linux マシンに Dropbox をインストール

各種RPMパッケージもここでゲットできますが、私はその下にある「コマンド ラインを使った Dropbox のヘッドレス インストール」ってのでやってみました。

CentOSにユーザーでログインし(id:ywnbというのを作りました)、下のコマンドを叩きます。

cd ~ && wget -O – “https://www.dropbox.com/download?plat=lnx.x86_64” | tar xzf –

すると、ホームディレクトリ以下に「.dropbox-dist」というフォルダができ、その下に、Dropboxの常駐プログラムであるdropboxdというプログラムが作成されます。それをバックグラウンドで実行すればOK。

なんですが、上の公式サイトの一番下で配布されてる、pythonスクリプトのコマンドラインツール「dropbox.py」ってのが便利です。

上のサイトからダウンロードしたdropbox.pyをPATHの通ってる「~/bin」以下とかに入れ、実行権限を付与すると、「dropbox.py start/stop」で、いつでも起動、終了ができるようになります。「dropbox.py help」で、コマンド一覧が確認できます。

ss44099.png

コマンドラインベースでDropboxの認証をクリアする

ちょっと待て、まだDropboxのアカウントとリンクしてないだろ? どうやって同期すんだよ。

ええ、その通り。なんで、上のコマンドでdropboxをスタートさせると、こんなメッセージが出てきます。

This computer isn’t linked to any Dropbox account…
Please vist https://www.dropbox.com/cli_link_nonce?nonce=[認証ID] to link this device.

ここの認証URLにアクセスして、既存のDropboxアカウントで認証しろ」ってことですね。

ブラウザがあれば、文中のリンクをクリックして手続きすればいい話なんですが、悲しいけどこれ、CUIなのよねー。もしかしたら認証のためだけにGNOMEとかのデスクトップ入れないといけないのかと思いましたが、そんなことはないようで。

Install Dropbox In An Entirely Text-Based Linux Environment – The Unofficial Dropbox Wiki

英語ですが、こちらのサイトにDropboxをCUI環境でセットアップする手順が案内されています。CUIでの認証については「NOTE: Windowless Installs」ってとこに書いてますね。

いわく、3つの方法があって、

  1. lynxなどのコマンドラインベースのブラウザを使う
  2. ブラウザが動く別のホストから認証を代行する
  3. ブラウザが動く別のホストからSSHトンネルを使って認証する

とのこと。一番簡単なのは2つ目の「別のホストで認証代行」ってやつだと思います。要はこのURLをコピペして、ブラウザが動く別のホストで代理認証をすればいい。

CentOSの親(ホスト)であるWindowsでやれば早そうなんですが、間をとりもつVMwarePlayerはホストOSとゲストOS間でコピペができません。長い認証URLを手打ちで書きうつすとかイヤすぎるのでMacでやります。

あらかじめ、MacのブラウザでDropboxのサイトにログインしておきます。そして、ターミナル.appからSSHでCentOSにログイン、上のdropbox起動コマンドを叩きます。さっき見た「ここから認証しろURL」が表示されるので、それをコピーして、Macのブラウザにペースト。

ss43808.png

確認画面が出てくるので「リンクする」をクリックするだけ。

ss43814.png

この間、linux側は数秒おきにずっと「認証しろ。認証しろ。認証しろ…」と何かのマントラのようにメッセージを吐きつづけるんですが、ウザいからとプロセス終了とかしてはいけません。このプロセスが動いている状態で、ブラウザ側の認証代行を完了させる必要があります

リンクが完了すると、それを受けたlinux側も、

This computer is now linked to Dropbox. Welcome [Dropboxのユーザー名]

マントラの復唱をやめ、一気にフレンドリーモードに変わります。

ss43887.png

そして、ホームディレクトリ以下に「Dropbox」という見慣れたフォルダができていて、中を見るとすでに同期されたファイル群が。すげー。

同期するフォルダ、ファイルを限定する

ほっとくとDropboxの全ファイルをlinuxにコピーするんですが、写真データをギガ単位で保存してる人とかは困ることもあるでしょう。そんな場合は、linuxへの同期対象を限定するとよいです。

WebのDropboxのマイページでもできますが、前述のdropbox.pyでも可能です。

dropbox.py exclude add [同期対象からはずしたいフォルダ、ファイル]

たとえば「Dropbox/Photo」以下のファイルを同期したくない場合は、

dropbox.py exclude add Photo

でOK。同期対象に戻したい場合はその逆

dropbox.py exclude remove [同期対象に戻したいフォルダ、ファイル]

おわかりのように「これこれを同期対象から除外する」という書き方しかできないんで、フォルダひとつだけ同期させたい場合は、それ他すべてを除外する必要があってちょっと面倒です。(対象ファイルはスペース区切りで羅列できます)

CentOS起動時にDropboxが自動起動するようにする

このCentOSはノートパソコンの上で動いてることもあって常時稼働させるわけではありません。毎回OS起動後にSSHでログインして上の起動コマンドを叩くのは面倒なんで、OS側で勝手に起動するように設定します。

CentOS7ではsystemdというサービスが各サービスの管理をしているので、そこにDropboxをサービスとして登録します。

ROOTユーザーになるか、sudoで、/etc/systemd/system/ 以下に、dropbox.serviceという名前のファイルを追加します。中身はこんな。

[Unit]
Description=Dropbox Daemon

[Service]
ExecStart=/home/ywnb/bin/dropbox.py start
ExecStop=/home/ywnb/bin/dropbox.py stop

Restart=always
Type=forking
User=ywnb
Group=ywnb

[Install]
WantedBy=multi-user.target

「ExecStart」「ExecStop」ってのがそれぞれサービスの起動・終了時に実行するコマンドですね。ユーザー「ywnb」で実行して欲しいので、User、Groupにそれを記述。

以後、

systemctl start dropbox
systemctl stop dropbox

というコマンドで、サービスの起動、終了ができるようになります。

で、このサービスをOS起動時に自動起動したい場合は、

systemctl enable dropbox

でOK。

着々とテストサーバーに必要な環境が整ってきました。

「実践!  CentOS 7 サーバー徹底構築」販売ページヘ

実践! CentOS 7 サーバー徹底構築

  • 作者: 福田 和宏
  • 出版社: ソーテック社