ある程度のプログラムやスクリプト類をDropbox上に置いていて、『ファイル』からのDropboxアクセス以外にもローカルに同期しておきたいので、chromebrewからcli版のDropboxを導入しました。
それらを動作させるための nginx と php-fpm もchromebrewから導入したので、その記録を残しておきます。
Dropboxの導入
まず、ふつうにchromebrewから導入します。
$ crew install dropbox
Dropboxが /etc/sysctl.conf
を固定で見ていて、CloudReadyにはその場所にそのファイルがないので、シンボリックリンクを作ります。
$ sudo mount -o rw,remount /
$ sudo ln -s /etc/sysctl.d/00-sysctl.conf /etc/sysctl.conf
このファイル内(末尾にでも)に以下の記述を入れておきます。
fs.inotify.max_user_watches=100000
これでDropboxがエラーを吐いて同期を停止させることなく動くようになるはずでをのちほどの工程でいじります。
DropboxをGUIからもいじるためのTips
Dropbox内のファイルをGUIからも弄りたい場合、Dropboxフォルダの実体をDownloadsフォルダの中に置いておくと便利です。
$ dropbox stop
$ mv ~/Dropbox ~/Downloads/
$ ln -s ~/Downloads/Dropbox ~/Dropbox
$ dropbox start
これでDropboxアプリはちゃんとディレクトリがあると認識してくれるので、正しく同期も行えます。そして、『ファイル』アプリが唯一ファイルシステムの実体を覗いている“Downloads”フォルダ内にあるファイルということになるので、GUI上のアプリからいじることができるようになります。
nginx と php-fpm の導入
nginxは同名パッケージの導入で入ります。
$ crew install nginx
php-fpmはphpパッケージの導入で入るようなので、php5を指定してphp 5.6.xxを導入しました。
$ crew install php5
インストール後の設定にはそんな変わったところはないです。 /usr/local/share/nginx/conf/nginx.conf
からのincludeがうまく行かないような気がしたので、それを使わなかったくらい。 /usr/local/etc/php.ini
も一般的にはタイムゾーンを Asia/Tokyo
などにする程度だと思います。
nginxとDropboxの小技
nginx.conf
の server ディレクティブ中で以下のように書いておくと、ApacheのUserDirのようなことができます。
# for UserDir
location ~ ^/~([^/]+?)/(.+\.php)$ {
alias /home/$1/user/public_html/$2;
index index.php;
autoindex on;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ ^/~(.+?)(/.*)?$ {
alias /home/$1/user/public_html/$2;
index index.php index.html;
autoindex on;
}
この記述をしておくと、Chromeからは localhost/~chronos/
で、そしてターミナルからは /home/chronos/user/public_html/
内をいじるとよくなるので便利です。ここにDropboxの同期ディレクトリ /home/chronos/user/Dropbox/
の中からシンボリックリンクを張っておけば、Dropbox上のファイルをいじれば localhost 上を更新できることになります。
sysctl.confの調整
さきほどシンボリックリンクを作った /etc/sysctl.conf
へ、Dropboxが指定してくるコマンドを打って fs.inotify.max_user_watches=100000
という構文を追加してやります。
$ echo fs.inotify.max_user_watches=100000 | sudo tee -a /etc/sysctl.conf; sudo sysctl -p
これでエラーなくDropboxが動くようになる、はず。
あと、これはChrome OSが更新されるたびにやらないといけない気がします(ファイルシステムが書き換えられるので)。
なお、mount の際に / をRWでマウントし直せないことがあります(Chrome/Chromium v66以降)。これは以下のようにしてrootfs verificationを無効化することで回避することができます。
$ sudo disable_verity
$ sudo reboot
2行目でリブートしているので、再起動後からverificationのない状態で使えるようになっているはずです。
(半)自動起動を仕込む
これらを導入しただけだと自動で起動することができないので、ホームディレクトリの .bashrc
に起動スクリプトを仕込みます。
本来であればinit.dやLaunchCtlなどのOS標準の仕組みを利用すべきなのですが、Chrome OSではそこがいじれない(いじっても元に戻される)領域なので、このような変則的な形を取ります。
まず、.bashrc の適切な場所(末尾にでも)に以下を書きます。
# Dropbox
DROPBOX=$(ps ax | grep "dropbox-lnx" | grep -v grep | xargs | cut -d" " -f1 2> /dev/null)
if [ -z "$DROPBOX" ]; then
if [ -f /usr/local/bin/dropbox ]; then
/usr/local/bin/dropbox start
fi
fi
# nginx
NGINX=$(ps ax | grep "nginx: master process" | grep -v grep | xargs | cut -d" " -f1 2> /dev/null)
if [ -z "$NGINX" ]; then
if [ -f /usr/local/bin/startnginx ]; then
/usr/local/bin/startnginx
fi
fi
# php-fpm
FPM=$(ps ax | grep "php-fpm: master process" | grep -v grep | xargs | cut -d" " -f1 2> /dev/null)
if [ -z "$FPM" ]; then
if [ -f /usr/local/bin/php5-fpm ]; then
/usr/local/bin/php5-fpm start
fi
fi
これでDropbox, nginx, php-fpm それぞれの起動スクリプトが仕込まれたので、以降は .bashrc
を読み込むアクションを起こせば自動起動されるはずです。つまり、ctrl-alt-T
を押して shell
コマンドを1回起動する必要があります。ここが半自動の所以。
まとめ
Chrome OS最高ゥ!