スケジューラーとしてGoogle Calendarを使う人は多いが、セキュリティーの観点から自前のスケジュール管理環境を使いたいという人もいる。
そういう人向けのCalDAVとして、"Baïkal" がある。Baikalはwebサーバー経由でスケジュール管理機能を提供するアプリケーションである。
参考:https://github.com/jeromeschneider/Baikal/blob/master/INSTALL.md
まず、Baikalのサービスが乗っかるwebサーバーが必要になるが、今回はwebサーバーとしてnginxを使う。
(手元環境はopenSUSE13.1-64bitなので、これを前提に記述 #はrootコンソール)
Baikalはphpで書かれているので、phpのモジュールが必要
php5-iconv-5.4.20-4.1.x86_64 php5-tokenizer-5.4.20-4.1.x86_64 php5-sqlite-5.4.20-4.1.x86_64 php5-ctype-5.4.20-4.1.x86_64 php5-json-5.4.20-4.1.x86_64 php5-fpm-5.4.20-4.1.x86_64 <--これが重要 php5-5.4.20-4.1.x86_64 php5-xmlreader-5.4.20-4.1.x86_64 php5-dom-5.4.20-4.1.x86_64 php5-xmlwriter-5.4.20-4.1.x86_64 php5-pdo-5.4.20-4.1.x86_64 php5-mbstring ※ これが大事 これでハマった
Baikaはデータベースとしてsqliteを使えるので、今回はsqlite3を利用
libsqlite3-0-32bit-3.7.17-2.1.2.x86_64 sqlite3-3.7.17-2.1.2.x86_64 libsqlite3-0-3.7.17-2.1.2.x86_64
/etc/php5/fpm/php-fpm.conf を編集
nginxが動かすので稼働ユーザーをnginxに変更 #user = nobody #group = nobody user = nginx group = nginx
listenは以下の2つから択一 稼働条件を指定 9000ポートで稼働 listen = 127.0.0.1:9000
unixドメインでやる場合は、必ず/var/run 以下に作らないとダメ listen = /var/run/cal.sock <--ソケットファイルの場所※重要 listen.owner = nginx <-- ソケットファイルのオーナーユーザ listen.group = nginx <-- ソケットファイルのオーナーグループ listen.mode = 0660
※unixドメインを使う場合、何も考えずに /tmp/cal.sock などとやると永遠に接続できずハマる。
sysvinitからsystemdになって、PrivateTmp という機能が設けられており、nginxにも適用されている。
/usr/lib/systemd/system/nginx.service には PrivateTmp=true の記述がある。
nginxから/tmp に書き込んだとしても、/tmp/systemd-private-Nx4I0K みたいなところに
書き込まれる事になる。
もしphp-fpmの設定に、/tmp/cal.sock と指定した場合、ソケットファイルは /tmp 以下に作成されるが、
nginxからは、永遠に見えない事になる。
http://baikal-server.com/ からダウンロードするが、Flat packageの方はローカルサーバーしか使えないので、
必ずRegular package の方をダウンロードする。
ダウンロードされたファイルは、baikal-regular-0.2.7.tgz のようなファイルになっている。
# gunzip baikal-regular-0.2.7.tgz ----->baikal-regular-0.2.7.tar 出現 # tar xvf baikal-regular-0.2.7.tar ----->baikal-regula 出現
ChangeLog.md INSTALL.md LICENSE.txt README.md TROUBLESHOOTING.md UPGRADE.md +Core +html +vendor +Specific <=== こいつが重要なフォルダになる! .htaccess config.php config.system.php +db +virtualhosts baikal.apache2 baikal.nginx
Baikalの説明では、解凍したフォルダを、利用したいドメインに変更するように説明されている。(何故だ?)
今回は、cal.example.com というvirtualhostで運用することにして、同名にフォルダを変名する。
また、解凍したフォルダは、webサーバーの管理下に置くために移動させる。
# mv baikal-regular /srv/www/ # cd /srv/www # mv baikal-regular cal.example.com # cd cal.example.com
Specific へは、webサーバーの稼働ユーザーがアクセスできる必要がある。
今回はnginxを使うので、オーナーをnginxへ変更する
# chown -Rf nginx:nginx Specific
Baikalは、Specific 以下に ENABLE_INSTALL というファイルを発見すると
初期設定を行うモードになるので、最初にこれを作成しておく。
# touch /srv/www/cal.example.com/Specific/ENABLE_INSTALL
Specific/virtualhosts 以下に、baikal.nginx のサンプルがあるので、これを参考にする。
(今回は、cal.example.com という仮想サーバーとして利用する前提)
nginxの設定ファイル /etc/nginx/nginx.conf を編集
http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 80 default_server; server_name _; return 444; } server { listen 80; #server_name localhost; server_name localhost host.example.com; root /srv/www/htdocs; index index.html index.htm; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location /* { root /srv/www/htdocs/; index index.html index.htm; autoindex on; allow 127.0.0.1; allow 192.168.1.2; <=== 接続許可したい内部クライアントなど指定 allow 192.168.1.3; deny all; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /srv/www/htdocs/; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } } include vhosts.d/*.conf; <=== これが重要 }
server { listen 80; server_name cal.example.com; <=== 改名したフォルダを指定 root /srv/www/cal.example.com/html; <=== baikaiパッケージフォルダのhtmlフォルダが、仮想ホストのrootになる index index.php; rewrite ^/.well-known/caldav /cal.php redirect; rewrite ^/.well-known/carddav /card.php redirect; charset utf-8; location ~ /(\.ht|Core|Specific) { deny all; return 404; } location ~ ^(.+\.php)(.*)$ { try_files $fastcgi_script_name =404; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_pass 127.0.0.1:9000; <=== ここのポートはnginxとbaikalの橋渡しをするポートになる tcpを使うので注意!! fastcgi_pass unix:/var/run/cal.sock; <==unixのドメインソケットの場合 (※注意) fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; include /etc/nginx/fastcgi_params; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /srv/www/htdocs/; } location /* { allow 127.0.0.1; allow 192.168.1.2; <=== 接続許可したい内部クライアントなど指定 allow 192.168.1.3; deny all; } }
最初に、nginxを稼働させる
# systemctl start nginx.service
次に、 php-fpm.service を稼働させる。
(nginxの稼働は忘れることはないが、こいつは忘れやすいので注意!!)
# systemctl start php-fpm.service
ここからは、Baikalの初期設定(管理者や利用ユーザーの作成)を行う。
http://cal.example.com/admin/ へブラウザ経由でアクセス
Server Time zone: Asia/Tokyo Enable CalDAV : check! Enable CardDAV : check! Admin password : pasword confirmation : password Enable Web Interface : check!
そのまま [Save changes] を押す
画面が切り替わり、[Strt using Baikal] ボタンが出たら 押す
再ログイン後、利用ユーザーの追加とカレンダー作成を行う。(ここでは省略)
設定したユーザー名: user0
※ 以下のクライアント設定では、user0で説明するので置き換え必要
Baikalは、Thunderbirのlightningプラグインで使うことができる。
Thunderbirdであれば、WindowsでもopenSUSEでも、MacOSXでも使えた。
カレンダー名:好きな名前をつけて良いみたいだ 場所:http://cal.example.com/cal.php/calendars/user0/default 更新:好きな時間 アラーム通知:オン オフラインサポート:オン(よくわからない)
アカウントを新規作成
説明:好きな名前 ユーザー:user0 パスワード:パスワード 更新:好きな時間
アドレス:cal.example.com パス:/cal.php/principals/user0/ ポート:80
※macの場合は、calendarsのところがprincipalsになる点と、defaultの指定がいらないことがポイント
androidの場合、Caldav Sync Free Adapter という無料のアプリがあるので、これを使う
https://play.google.com/store/apps/details?id=org.gege.caldavsyncadapter&hl=ja
https://github.com/gggard/AndroidCaldavSyncAdapater
https://github.com/gggard/AndroidCaldavSyncAdapater/wiki/Installation-and-configuration
カレンダーのメニューから、新規アカウントを作成する
メニュー/システム/アカウント/追加
この時、どのタイプのアカウントを作成するか効かれるので、 CalDav Sync Adapter を選択する。
ユーザー定義では
user:user0 pssword: パスワード URL http://cal.example.com/cal.php/principals/user0
と、macと同じように、principals/usr0 を使ってセットする。
(もしかしたら、ユーザー名で弾かれるかもしれないので、その時は、user0@example.com とメールアドレス風に設定する)
カテゴリ: サーバ