路由器硬件:Netgear wndr4300
路由器系统:OpenWrt Barrier Breaker 14.07正式版
Omnifocus的Mac版从2.0开始不再支持Bonjour同步,迫使我不得不自己在Mac上搭建了一个Webdav服务器。
具体搭建方法这里不详述了,因为我发现这个服务器非常不稳定,经常连不上,导致体验比较差。尝试从路由器ping我的Macbook,发现延迟很高,相当不稳定。于是决定将Webdav服务器搬到我的openwrt路由器上去。
好在openwrt上要支持Webdav也很方便,首先,openwrt自带的uhttpd是不支持Webdav的,因而必须要用支持Wevdav的lighttpd替换它。这个uhttpd原本的任务是做luci配置页面的后台,因而lighttpd需要接管这个任务。
首先,通过如下命令安装lighttpd及相关module。
opkg update
opkg install lighttpd
opkg install lighttpd-mod-webdav
opkg install lighttpd-mod-auth
opkg install lighttpd-mod-cgi
cgi用于替代uhttpd做管理页面的后台。
auth用于Webdav的验证,但并不是必须的。
随后对lighttpd的配置文件/etc/lighttpd/lighttpd.conf
进行修改
首先启用mod:
server.modules = (
# "mod_rewrite",
# "mod_redirect",
# "mod_alias",
# "mod_status",
# "mod_setenv",
# "mod_fastcgi",
# "mod_proxy",
# "mod_simple_vhost",
"mod_cgi",
# "mod_ssi",
# "mod_usertrack",
# "mod_expire",
"mod_webdav",
"mod_auth"
)
注意Webdav在auth前,之所以这样配置主要是lighttpd的文档强调了这个事。我并没有亲自尝试过不这么安排顺序会怎样。
向下找到cgi的配置项,将其改为
cgi.assign = ( "luci" => "/usr/bin/lua")
最后找到Webdav的配置项,改为
$HTTP["url"] =~ "^/omnifocus($|/)" {
webdav.activate = "enable"
# webdav.is-readonly = "enable"
webdav.sqlite-db-name = "/var/run/lighttpd-webdav-lock.db"
}
注意这里is-readonly我并没有启用,因为要作为omnifocus的同步服务器是需要将文件像服务器写入的。这块配置第一行的意思是当访问url中omnifocus子目录时进行大括号内的配置,既启用Webdav并配置数据库。
这个配置是无加密验证的配置,考虑到这个路由器只在自己家庭内使用,暂且配置到这种程度是够用的。
接下来保存配置,并到/www
中建一个目录
cd /www
mkdir omnifocus
未来同步的数据就存储在这个目录中。
禁用uhttpd并启用lighttpd
/etc/init.d/uhttpd stop
/etc/init.d/uhttpd disable
/etc/init.d/lighttpd enable
/etc/init.d/lighttpd start
这之后试着访问路由器ip地址,应该能和之前一样访问路由器后台页面了。同时也可以通过forklift一类的工具尝试一下server地址设置为路由器ip(默认是192.168.1.1
),remote path 设置为/omnifocus
,不出以外即可连接上路由器的Webdav服务器了。
此时将omnifocus的Webdav服务器地址设置为
http://192.168.1.1/omnifocus
即可完成同步了。
我觉得192.168.1.1
这个地址太通用了,当我的设备在其他网络中时,可能会将那个网络的路由器当作Webdav同步服务器,进而尝试进行同步。为了避免这种情况,我想将路由器绑定一个域名,比如openwrt.lan
,这个域名在路由器局域网外无意义,因而设备不会得到对应的ip地址,进而不会尝试同步,而在内网中指向路由器ip,使得同步功能能在内网正常工作。
方法非常简单,在路由器的hosts文件(/etc/hosts
)中加一行:
192.168.1.1 openwrt.lan
保存后重启dnsmasq服务生效
/etc/init.d/dnsmasq restart
注意如果你的设备开启了VPN或自己指定了DNS服务器,则不会向路由器请求域名解析,这种情况需要另外想办法。
如果一切顺利,你可以将omnifocus的Webdav服务器的地址改成
http://openwrt.lan/omnifocus
auth部分待续,因为现在同步体验非常棒,搞得我都懒得弄这个了。