CentOS 7 は Dropbox デーモンの動作対象外に
2018 年 10 月のアップデートで動作対象が Ubuntu / Debian / Fedora のみになった。
CentOS で使いたいので、動かすためのメモ
追記(2019/05/25)
アップデートにより、ここに掲載している方法では Dropbox デーモンの起動ができなくなりました。
今後は、Dropbox デーモン用にバージョンが新しい glibc を自前で用意する必要があります。
詳しくはdn225さんのコメントを参照してください。
セットアップ
まずはクライアントのソースコードをダウンロードする。
$ cd ~
$ mkdir bin
$ cd bin
$ wget -O dropbox "http://www.dropbox.com/download?dl=packages/dropbox.py"
$ chmod +x dropbox
~/bin
にまだパスを通していない場合はパスを通しておく。
$ export PATH=~/bin:$PATH
クライアントのコードは Python 2 で書かれているのと、dbus
セッションを用いてデーモンと通信を行うため、Python 2.7 と dbus-x11 を入れる。
$ sudo yum install -y python2.7 dbus-x11
dropbox
と叩いて動くことを確認する。Dropbox command-line interface
と出れば良い。
$ dropbox
Dropbox command-line interface
(以下略)
ちなみに、同期されたファイル等を収めた Dropbox 関連のディレクトリはデフォルトだとホーム直下に置かれる。具体的には以下の三つのディレクトリがホームディレクトリに作成される。
-
Dropbox
: 同期されるディレクトリ -
.dropbox-dist
: デーモンの実行ファイルの置き場 -
.dropbox
: 認証の情報とかPIDとかランタイム情報
ホームではなく別のディレクトリにこれらのディレクトリを置きたい場合は、環境変数 HOME
を設定することで変えられる。
よって、dropbox
コマンドの alias を設定することで対応する。例えば /data/dropbox
に置きたければ次のようにする。
$ alias dropbox='HOME=/data/dropbox dropbox'
ちなみに ext4 ファイルシステムでないと動かないらしいので注意してほしい。
ext4 でない場合はフォーマットする。
これで準備はできた。早速 Dropbox を起動しようと dropbox start
を叩くと、まだデーモンがインストールされていないとして怒られる。
$ dropbox start
Starting Dropbox...
The Dropbox daemon is not installed!
Run "dropbox start -i" to install the daemon
言う通りに dropbox start -i
を実行する。
$ dropbox start -i
Starting Dropbox...
Dropbox is the easiest way to share and store your files online. Want to learn more? Head to https://www.dropbox.com/
In order to use Dropbox, you must download the proprietary daemon. [y/n]
プロンプトが出てきたので y
を入力して続行する。これでデーモンをインストールした後に起動してくれる。Done!
と出れば成功だ。
デーモンの起動に成功したら、次は自分のアカウントと紐付けるために認証を行う必要がある。
dropbox status
を叩くと次のような表示が出るはずだ。
$ dropbox status
開始中...
To link this computer to a dropbox account, visit the following url:
https://www.dropbox.com/cli_link_nonce?nonce=hogefuga
表示された URL が認証用の URL なので、これをブラウザに貼り付けて認証を済ませれば良い……と思いきやページに飛んでみるとこんな表示がされている。
Dropbox デーモンは動作要件に glibc 2.19 を要求しているようである。しかし CentOS 7 は glibc 2.17 が標準で入っている。
流石に glibc のリプレースメントを行うのは危険が想定される。
なので、デーモンでバージョン確認に使われている関数を自前のもので上書きすることで、あたかも glibc のバージョンが 2.19 であるかのように振る舞わせることにする。
以下のようにライブラリファイルを置くためのディレクトリを適当に用意する。
$ cd ~
$ mkdir lib
$ cd lib
ハックのための関数を作る。
const char* gnu_get_libc_version(void)
{
return "2.19";
}
共有ライブラリとしてコンパイルする。
$ gcc -fPIC -shared -o dropbox-glibcfix.so dropbox-glibcfix.c
dropbox
コマンドを叩いた時に毎回ファイルを preload してほしいので、alias を設定する。
$ alias dropbox='LD_PRELOAD=~/lib/dropbox-glibcfix.so dropbox'
(Dropboxのディレクトリを変更している場合)
$ alias dropbox='LD_PRELOAD=~/lib/dropbox-glibcfix.so HOME=/data/dropbox dropbox'
ここまでやれば、dropbox stop
→ dropbox start
→ dropbox status
を実行することで認証画面まで行けるようになるはずだ。
認証が完了すると、すぐに同期が開始される。
もし、サイズが大きかったりで同期したくないディレクトリがある場合は dropbox exclude add
を使って除外する。
$ dropbox exclude add /data/dropbox/hoge