суббота, 28 октября 2017 г.

Больше одного Я.Диска на Linux.



У Яндекс.Диск есть вполне хороший консольный клиент для Linux. Устанавливается он по инструкции из справки. Всё своё добро хранит в домашнем каталоге, может работать в фоне и получать свои настройки из параметров командной строки.
Последний пункт меня как раз и заинтересовал.

В самом клиенте нет жестко прописанных путей, по которым он ищет свои конфиги. А это значит, что можно попробовать запустить несколько клиентов параллельно.

Делал я подобное с помощью юнитов-шаблонов в systemd.

Юнит имеет такой вид:

$ systemctl cat [email protected]
# /lib/systemd/system/[email protected]
[Unit]
Description=Yandex Disk console client for %i
Requires=network.target

[Service]
Type=forking
# От имени этого пользователя будет работать сервис
User=share
Group=share
# %i будет заменено на название экземпляра
ExecStart=/usr/bin/yandex-disk start -c /var/lib/yandex-disk/%i/config.cfg
RestartSec=60
Restart=always

[Install]
WantedBy=multi-user.target

Чтобы всё это заработало, надо проделать следующие шаги:

Создать каталог внутри "/var/lib/yandex-disk/" с названием будущего экземпляра, например, "yandex-test".

Создать каталог, который будет синхронизироваться с облаком, например, "/media/hdd/yandex".

Проследить, чтобы у пользователя, который указан в юните, были права на чтение первого каталога и на запись во второй.

Получить токен для авторизации:

$ sudo -u share yandex-disk token --dir /media/hdd/yandex your-username /var/lib/yandex-disk/yandex-test/passwd
# your-username - имя пользователя без @yandex.ru
# Пароль будет запрошен в процессе

Создать файл "config.cfg" внутри каталога "/var/lib/yandex-disk/yandex-test/" такого содержания:

auth="/var/lib/yandex-disk/yandex-test/passwd"
dir="/media/hdd/yandex"
proxy="no"

Теперь можно запустить сервис и добавить его в автозапуск:

sudo systemctl start [email protected]
sudo systemctl start [email protected]

Если в каталоге начали появляться файлы, то память меня не подвела, и я написал инструкцию правильно.

Несколько примечаний.

Каталог для синхронизации нужно создавать до получения токена и указывать его в параметрах обязательно. Похоже, что клиент записывает не только файл с ключом, но и что-то делает с каталогом при этом.

По команде "yandex-disk status" будет отображаться информации только о первом запущенном экземпляре.