Кто-нибудь пробовал мониторить kbfs с incrond?

474
Diagon

Хотя я могу запустить 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
Ряд людей пытаются решить эту или параллельную проблему, например [здесь] (https://github.com/keybase/kbfs/issues/1592). Так что я не думаю, что отрицательный голос является уместным. Мой собственный ответ показывает, что не будет простого ответа. Diagon 5 лет назад 0

1 ответ на вопрос

0
Diagon

Оказывается, что / 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.