Seafile — расширение FUSE

Thank you for reading this post, don't forget to subscribe!

В Seafile дан­ные не хра­нят­ся в виде фай­лов а раз­би­ты на бло­ки. Это поз­во­ля­ет эффек­тив­но исполь­зо­вать меха­низм деду­пли­ка­ции дан­ных. Но ино­гда адми­ни­стра­то­ру сер­ве­ра необ­хо­ди­мо полу­чить доступ к дан­ным Seafile как в обыч­ной фай­ло­вой систе­ме, для это­го исполь­зу­ет­ся рас­ши­ре­ние seaf-fuse.

Seaf-fuse явля­ет­ся реа­ли­за­ци­ей вир­ту­аль­ной фай­ло­вой систе­мы FUSE. Этот скрипт мон­ти­ру­ет всё содер­жи­мое Seafile в пап­ку (кото­рая назы­ва­ет­ся "mount point"), так что мы полу­ча­ем доступ ко всем фай­лам Seafile так же, как к обыч­ной пап­ке на сервере.

При­ме­ча­ния:

  • Доступ к зашиф­ро­ван­ным пап­кам с помо­щью seaf-fuse не предоставляется.
  • Дан­ные доступ­ны толь­ко для чтения.
  • В debian/centos для мон­ти­ро­ва­ния пап­ки FUSE поль­зо­ва­тель дол­жен быть в груп­пе "fuse".

Что хочет­ся получить:

  • Seafile настро­ен на Ubuntu.
  • Я хочу все дан­ные Seafile смон­ти­ро­вать в дирек­то­рию /opt/seafile-fuse.
  • Все служ­бы Seafile у меня рабо­та­ют под поль­зо­ва­те­лем sf, поэто­му seaf-fuse тоже будет запус­кать­ся под этим же пользователем.
  • Мон­ти­ро­ва­ние дирек­то­рии долж­но про­ис­хо­дить авто­ма­ти­че­ски после пере­за­груз­ки сер­ве­ра (systemd).

Ссылки

https://manual.seafile.com/extension/fuse/

Как использовать seaf-fuse

Созда­ём точ­ку мон­ти­ро­ва­ния, назна­ча­ем вла­дель­цем поль­зо­ва­те­ля, от име­ни кото­ро­го рабо­та­ет seafile:

mkdir /opt/seafile-fuse

chown sf\: /opt/seafile-fuse

У меня Ubuntu, поэто­му для мон­ти­ро­ва­ния дирек­то­рии поль­зо­ва­тель дол­жен быть участ­ни­ком груп­пы fuse. Созда­дим груп­пу и доба­вим в неё пользователя:

groupadd fuse
usermod -aG fuse sf

Для про­вер­ки мож­но запу­стить скрипт seaf-fuse от име­ни поль­зо­ва­те­ля, под кото­рым рабо­та­ет seafile:

/opt/seafile-server-latest/seaf-fuse.sh start /opt/seafile-fuse

Мож­но и под рутом запу­стить, но скрипт создаст лог файл, вла­дель­цем кото­ро­го будет root. После это­го не полу­чит­ся про­сто так запу­стить скрипт под дру­гим поль­зо­ва­те­лем, пой­ма­ем ошибку:

Starting seaf-fuse, please wait …
Failed to init log.
Failed to start seaf-fuse

Нуж­но сна­ча­ла уда­лить лог файл. Или сме­нить вла­дель­ца на поль­зо­ва­те­ля, под кото­рым рабо­та­ет seaf-fuse.

В пап­ке /opt/seafile-fuse появит­ся содер­жи­мое Seafile. При­мер содержимого:

Верх­ний уро­вень биб­лио­тек — пап­ка с име­нем поль­зо­ва­те­ля Seafile. Внут­ри пап­ки поль­зо­ва­те­ля библиотеки:

Внут­ри библиотек :

 

Для оста­нов­ки монтирования:

/opt/seafile-server-latest/seaf-fuse.sh stop

По умол­ча­нию доступ к содер­жи­мо­му име­ет поль­зо­ва­тель root, дадим доступ всем поль­зо­ва­те­лям сер­ве­ра. Редак­ти­ру­ем файл /etc/fuse.conf.
Рас­ком­мен­ти­ру­ем опцию:

user_allow_other

Для про­вер­ки мож­но запу­стить скрипт seaf-fuse от име­ни поль­зо­ва­те­ля, под кото­рым рабо­та­ет seafile, с параметрами:

/opt/seafile-server-latest/seaf-fuse.sh start -o allow_other /opt/seafile-fuse

В пап­ке /opt/seafile-fuse появит­ся содер­жи­мое Seafile. Доступ к содер­жи­мо­му име­ют все пользователи.

Для оста­нов­ки монтирования:

/opt/seafile-server-latest/seaf-fuse.sh stop

Автоматизируем запуск seaf-fuse

Для systemd

Debian 8 и стар­ше, Linux Ubuntu 15.04 и старше

${seafile_dir} — изме­ни­те пере­мен­ную на путь к вашей дирек­то­рии Seafile.

Рабо­та­ем под рутом. Созда­ём сер­вис seafile:

sudo vim /etc/systemd/system/seafile.service

Содер­жи­мое:

Созда­ём сер­вис seahub:

sudo vim /etc/systemd/system/seahub.service
Содержимое:

Если вы исполь­зу­е­те seafile console client, то пона­до­бит­ся ещё один сер­вис seafile-client.

vim /etc/systemd/system/seafile-client.service
Содержимое:

 

 

Доба­вим авто­за­пуск seaf-fuse в systemd.

${seafile_dir} — изме­ни­те пере­мен­ную на путь к вашей дирек­то­рии Seafile. У меня /opt.
User и Group — изме­ни­те на сво­е­го поль­зо­ва­те­ля и группу.

Рабо­та­ем под рутом. Созда­ём сер­вис seafile-fuse:

sudo vim /etc/systemd/system/seafile-fuse.service

Сер­вис будет запус­кать­ся после seafile и seahub. Содер­жи­мое:

Настра­и­ва­ем автозагрузку:

systemctl daemon-reload
systemctl enable seafile-fuse

Про­ве­ря­ем:

systemctl start seafile-fuse
systemctl status seafile-fuse

Теперь после загруз­ки сер­ве­ра пап­ка с содер­жи­мым Seafile будет мон­ти­ро­вать­ся автоматически.