Кто-нибудь пробовал мониторить kbfs с incrond?
Пока я могу бежать unison -batch keybase
и все отлично работает, я попробовал это на вкладке Incron:
/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 также не решит проблему.
Мое решение - просто запустить задание cron, которое синхронизирует каталоги каждые 60 секунд. В / keybase есть файл, который всегда присутствует, даже если он не отображается в ls
: /keybase/kbfs.error.txt. Содержимое этого может использоваться, чтобы определить, смонтирован ли kbfs. Если это так, пакетное задание может быть запущено для синхронизации каталогов с помощью unison.