虽然我可以运行unison -batch keybase
并且一切正常,但我尝试过因克龙标签:
/run/user/1000/keybase/kbfs/ IN_ALL_EVENTS flock -n /tmp/synclock unison -batch keybase
使用系统日志结果:
Nov 24 03:53:05 ThinkPad incrond[5820]: access denied on /run/user/1000/keybase/kbfs/ - events will be discarded silently
Nov 24 03:53:05 ThinkPad incrond[5820]: cannot create watch for user me: (13) Permission denied
incrond 以 root 身份运行且“不受限制”,我推测这与 selinux 有关(?)
$ ps -eo euser,ruser,suser,fuser,f,comm,label | grep incron
root root root root 5 incrond unconfined
对于可能发生的事情有什么想法吗?
答案1
事实证明,/run/user/1000/keybase/kbfs/ 是一个 FUSE 文件系统,它在挂载时没有使用“allow_root”选项,因此只能通过挂载 FS 的用户访问。将“allow_root”添加到 /etc/fuse.conf 并不能解决问题,因为 kbfs 代码不会通过此选项。要做到这一点,您必须编辑代码并重新编译。
事实证明,即使 kbfs 允许 root 访问(而 incron 或 inotify 确实需要 root 访问),FUSE 也无法报告文件系统事件。虽然它显然可能的,开发人员已经标记为“无法修复”. 这意味着以 root 身份运行 keybase也无法解决问题。
我的解决方案是运行一个 cron 作业,每 60 秒同步一次目录。/keybase 中有一个始终存在的文件,即使它没有出现在ls
/keybase/kbfs.error.txt 下。该文件的内容可用于识别 kbfs 是否已安装。如果已安装,则可以运行批处理作业以使用 unison 同步目录。