вторник, 3 июня 2014 г.

Тарелка, летающая в твоем облаке o_O

Да. Облачное хранилище, это здорово. Доступно отовсюду, где есть сеть. А если нет сети? Но нужно иметь с собой десятка два документов. И вообще, хочется иметь на каждом устройстве синхронизированные копии документов и чтоб никакое облако об этом не знало.
Решение давно известно - BTsync. Однако сегодня пришлось подружить его с Yandex.Disk

Причина проста - есть сеть, из которой BTsync не работает, но работает Я.Диск. Синхронизация документов на Я.Диске между домашним заоблачным NAS и остальными устройствами превращается в рукотворную PITA. НО! "Правильные движения приходят на базе усталости" Ник-Ник

Что делать?

Воспользуемся возможностью подключения к Я.Диску через WebDAV. А именно посредством davfs2, дающим доступ к удаленным ресурсам как через обычную файловую систему, т.к. BTsync работает только с локальными ресурсами. Не надуешь, не поедешь...
Итак, мы запустим на домашнем сервере демона синхронизирующего домашнее облако с облаком на серверах Яндекса.

Процесс

Во-первых, локализуем Я.Диск. Подробно процесс изложен в статье Яндекс.Диск в лапах пингвина. Если коротко, то нужно:
  • установить пакет davfs2 (для openSUSE это в  репозитории filesystems. Команда в консоли: zypper ar http://download.opensuse.org/repositories/filesystems/openSUSE_13.1/ filesystems && zypper in davfs2)
  • прописать в его настроечном файле /etc/davfs2/secrets логин:пароль для доступа к ресурсу (ведь не будет же сервер спрашивать у Вас пароль каждый раз). Доступ к файлу нужно ограничить - chmod 600 ...
  • в настройках монтирования файловых систем /etc/fstab пропишем наш ресурс: https://webdav.yandex.ru /media/webdav/yadisk davfs gid=nogroup,uid=nobody 0 0, где nogroup и nobody, соответственно группа и пользователь, кто будет собственником каталога с примонтированным ресурсом.
  • Если, после монтирования командой mount /media/webdav/yadisk, Вы увидите в этом каталоге знакомые файлы, Вы достигли промежуточной цели.
Во-вторых, подвязать BTsync к синхронизации. Оказывается он не умеет синхронизировать один и тот же ресурс в два разных каталога. То есть демон работает с одной копией секрета. Но и на этот случай есть лайфхак. Демона должно запускать с указанием конфигурационного файла. И запускать их можно ... сколько угодно.
  • сделаем скрипт, выпускащий демонов из бутылки, при загрузке системы (crontab -e --> @reboot /usr/bin/BTsync)
!/bin/bash
mkdir -p /var/run/btsync/
/opt/BTsync/btsync --config /opt/BTsync/btsync.conf
/opt/BTsync/btsync --config /opt/BTsync/btsync.yadisk.conf
  • в настройках Я.Демона пропишем в явном виде ресурсы, которые нужно синхронизировать (при этом отвалится веб-морда этого демона, но мы будем видеть его присутствие через морду первого демона.):

  "device_name": "V.Oz. at YaDisk",
  "listening_port" : 22222,   // 0 - randomize port

  "shared_folders" :
  [
    {
        "secret" : "A47T3UONZLB3GCQGL2ZJMUDM36JGJHZHA",
        "dir"    : "/media/webdav/yadisk/private/BTsync/keepass",
        "use_relay_server" : false,
        "use_tracker" : true, 
        "use_dht" : false,
        "search_lan" : true,
        "use_sync_trash" : true,
        "known_hosts" :
        [
        "192.168.0.3:33333"
        ]
    },
    {
        "secret" : "AORAQEGEICOKLBGERHM27CARVWP4IWGUJ",
        "dir"    : "/media/webdav/yadisk/private/BTsync/BTsync",
        "use_relay_server" : false,
        "use_tracker" : true, 
        "use_dht" : false,
        "search_lan" : true,
        "use_sync_trash" : true,
        "known_hosts" :
        [
        "192.168.0.3:33333"
        ]
    }
  ]
}
Примечание: опция "известные хосты" позволяет напрямую синхронизироваться с ресурсами в локальной (или не очень) сети без поиска их на трекере. При этом указаны конкретные порты, которые следует прописать в настройках соответствующих демонов.

Итого

В итоге получаем автоматическую синхронизацию двух облаков - личного и не очень. 
Причем Яндексом список такого рода сервисов не ограничивается. Мегафон также предлагает доступ к своему МегаДиску небольшого объема, но с бесплатным мобильным трафиком в домашней сети как в рамках специального приложения, так и по WebDAV (специально наводил справки у @MegaFonHelp). То есть, монтируем еще один ресурс, создаем еще один конфиг и выпускаем еще одного демона.