22 дек. 2016 г.

Time Machine server on Linux

Появилась задача: резервировать данные рабочего MacbookPro. У Mac OS существует штатный инструмент для создания резервных копий - Time Machine, который для своей работы требует или внешний диск, подключаемый непосредственно к компьютеру, или устройство от Apple - Time Capsule. Есть и третий вариант, файловый ресурс на linux-сервере, доступный по протоколу AFP.
В случае внешнего HDD его придется отдать под задачу резервного копирования полностью: он будет отформатирован в соответствующем виде. Time Capsule стоит некоторых денег. Для реализации linux-версии нужно какое-то количество времени.
Итак, для доступа к сетевым файловым ресурсам у Apple есть свой протокол - Apple Filling Protocol (AFP), свободная реализация которого называется Netatalk. В текущем стабильном (и предыдущем стабильном) релизе Debian его нет, поэтому придется взять исходники с сайта и собрать. Если предполагается частая (или многочисленная) установка, то впоследствии можно сделать deb-пакет самостоятельно, например, с помощью checkinstall.
Сам процесс установки и настройки довольно прост:
- получаем и распаковываем архив с исходниками
root@mytmserver # wget -O netatalk-3.1.10.tar.bz2 -c "http://prdownloads.sourceforge.net/netatalk/netatalk-3.1.10.tar.bz2?download"
root@mytmserver # tar -xjvf ./netatalk-3.1.10.tar.bz2
root@mytmserver # cd netatalk-3.1.10/
- доустанавливаем необходимые пакеты (средства сборки и заголовки)
root@mytmserver # apt update && apt install build-essential libgcrypt11-dev libdb-dev libacl1-dev
- конфигурируем и собираем (список параметров сборки можно посмотреть с помощью ./configure --help)
root@mytmserver # ./configure --prefix=/usr --sysconfdir=/etc/ --with-init-style=debian-systemd --with-cnid-dbd-backend --with-acls --enable-debug
root@mytmserver # make && make install
- запускаем и ставим в автозагрузку демона
root@mytmserver # systemctl start netatalk.service
root@mytmserver # systemctl status netatalk.service
root@mytmserver # systemctl enable netatalk.service 
- перезапускаем avahi (для автообнаружения макосью)
root@mytmserver # systemctl restart avahi-daemon.service 
В логах видим примерно следующее:
root@mytmserver # journalctl -u netatalk.service
дек 22 07:56:29 mytmserver systemd[1]: Starting Netatalk AFP fileserver for Macintosh clients...
дек 22 07:56:29 mytmserver systemd[1]: Started Netatalk AFP fileserver for Macintosh clients.
дек 22 07:56:30 mytmserver netatalk[1281]: Netatalk AFP server starting
дек 22 07:56:30 mytmserver netatalk[1281]: Registered with Zeroconf
дек 22 07:56:31 mytmserver afpd[1321]: Netatalk AFP/TCP listening on 192.168.1.100:548
дек 22 07:56:31 mytmserver cnid_metad[1322]: CNID Server listening on localhost:4700
Служба работает и готова принимать соединения.
Базовая настройка для целей резервного копирования:
 - добавить общие папки внутри домашних директорий существующих в системе пользователей:
/etc/afp.conf:
 [Homes]
 basedir regex = /home
- или создать отдельную папку, ограничив к ней доступ нужным пользователям
/etc/afp.conf:
[myTMserver Folder]
 path = /data/raid1-media/timemachine
 time machine = yes
 valid users = delayer
Далее перезапустить службу netatalk.
Со стороны Mac OS нужно включить возможность работы с "нелегальными" Time Machine серверами. Для этого в консоли (iterm2, terminal):
$ defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1
В Finder проверяем доступ: 
- Command + K 
- Адрес сервера: afp://192.168.1.100
- учетные данные пользователя delayer

Если каталог по сети доступен и аутентификация пройдена, можно идти  в Системные настройки - Time Machine - Выбрать диск... В окне должен быть доступен созданный ресурс. Добавляем, при необходимости снова аутентифицируемся. Далее служба будет создавать копии автоматически.