OS X Lion TimeMachine сервер на Debian
03 июня 2012 :: 15 комментариев :: 17409 просмотров :: 1341 слово

Поднимать сервер для TimeMachine под Linux - старое доброе занятие всех прыщеблядей, внезапно заработавших денег на мак. Таких как я, например. В интернетах полно манов на эту тематику, даже google при вводе «timemachine» сразу подсказывает «on linux». Есть даже очень крутые, есть даже специально под OS X Lion, но все их объединяет одно - они не работают. Преувеличиваю, конечно, у кого-то они работают, не зря же авторы их писали, но, как обычно, только не у меня. Хотя как выясняется, дело как всегда в 1-2 левых строчках или параметрах, но чтобы полностью понять каких именно приходится много гуглить. Итак. Дано:

Клиент: MacBook Pro mid 2010 с OS X Lion 10.7.4 (конфиг в пикрелейтед)
Сервер: Debian Squeeze 2.6.32 (да-да, я не обновляю сервер, так как «пока работает - не трогай»)
Нужно: бекапиться с клиента на сервер, на котором предварительно выделен и примонтирован (!) раздел на терабайт под ext3 (заметьте, что не на HFS+).

Первым делом хорошие маны, которые помогли мне и помогут вам:
http://kremalicious.com/ubuntu-as-mac-file-server-and-time-machine-volume/
http://www.mikepalmer.net/build-a-netatalk-time-machine-for-osx-lion-using-debian-6-0-squeeze/
http://habrahabr.ru/post/143980/

Остальные в основном повторяют названные и ссылаются на них. Все они разной степени давности, а последний я вообще нашел в самый последний момент (и он-то мне и помог больше всех). Но вы только посмотрите на размер. Это охуеть, народ советует собирать из исходников, компилить какие-то левые библиотеки, плясать на ушах, зажав в анусе вувузелу и наигрывая тему из Battlefield 2. Когда-то это было нужно, но не сейчас.

Нам нужно два сервиса:
avahi - такая хрень, которая в OS X называется Bonjour, умеет сканировать локальную сеть на предмет различных шар и с целью подключения к ним, ну и наоборот - рассказывать о новой шаре в сети. Нас интересует именно последний ее функционал.
netatalk - опенсорсная реализация эппловского протокола AppleTalk. Постоянно обновляется и разработчики истерят, мол «вот в следующий раз сраный аппле точно все сломает и мы ничего не сможем сделать». Но в итоге умеют и могут.

Образованному читателю становится понятно, что вся работа, собственно, реализуется демоном netatalk, а avahi помогает маку быстренько увидеть его в сети и не спрашивать постоянно на какой диск мне бекапиться. Существует так же сказка про то, что кому-то удавалось бекапиться на samba-шару (кто не пробовал, может попробовать сам), однако в реальной жизни такие попытки обычно заканчиваются веселой ошибкой о том, что данный диск не поддерживает функции протокола AFP и идите в пизду, спасибо, пожалуйста.

Первым делом расскажем маку про то, что кроме АППЛЕ есть еще жизнь на земле и не хорошо так не признавать других поцонов. Короче разрешим бекапы на «неподдерживаемые» носители (конечно, неподдерживаемыми считаются все, которые производства не Apple). Делается это волшебной строчкой:

defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1

Теперь на время забываем про мак, логинимся по ssh на сервер (или как вы там получаете к нему доступ) и начинаем. Но не бросаемся на мины сразу, а включаем мозг (в отличии от меня). Мы помним, что у нас стоит Debian Squeeze и если посмотреть какая версия netatalk в репозиториях, мы увидим 2.1.x - что очень плохо. Нет, когда-то это было хорошо, но с OS X Lion это плохо. Нам надо не менее 2.2, а это только в Wheezy и Sid. Если ставить Sid, он потянет за собой еще 500 новых glibc и другого шлака, так что лучше попробовать Wheezy. Нет, еще можно попробовать скачать какой-нибудь бекпорт типа этого, однако у меня и он не заработал постоянно высирая странные «Syntax error: ")" unexpected», так что пришлось рисковать и делать попытку кровосмешения дебаянов. Эта попытка оправдала себя и после изменения в /etc/apt/sources.list squeeze на wheezy он стянул всего-лишь пару левых зависимостей и поставил версию 2.2.2, которая нас вполне устроит. Не забудем только вернуть потом все обратно.

sudo aptitude install netatalk
sudo aptitude install avahi-daemon

На всё соглашаемся, если стояло раньше - сносим к чертям. Я не шучу, там половина конфигов тупо стало не нужна после обновления версии, в них только путаться.

Теперь у нас два пути: либо создать нового пользователя, либо бекапиться от существующего, просто добавив его в группу. Я предпочел создать юзера timemachine с /home/timemachine и бекапиться туда.

useradd timemachine
passwd timemachine
groupadd tmachine
usermod -a -G tmachine timemachine

Для самых маленьких и тупых: первая команда - создает пользователя, вторая - задает ему пароль, третья создает группу, четвертая - добавляет пользователя в эту группу. Можно еще добавить пользователей в группу tmachine, тогда им будет веселее.

Если passwd выдает что-то типа «passwd: Неизвестный модуль passwd: пароль не изменён», значит при таком кровосмешении squeeze+wheezy у вас побился cracklib и надо его тоже установить заново.

Для прикола можно еще сделать вот это, но я не знаю реально ли оно нужно:

touch /home/timemachine/.com.apple.timemachine.supported

Теперь самое интересное: настраиваем netatalk и afp.

Если кто-то вам говорит, что надо писать какой-то XML в файл /etc/avahi/services/afpd.service - харкните ему в лицо. Снесите нахер этот файл и не вспоминайте его, с версии какой-то там он больше не нужен и afp определяет все свои шары сам через dbus.

А что нам действительно надо, так это:

sudo nano /etc/netatalk/AppleVolumes.default

Отмотать в саааамый низ с помощью Ctrl+V и добавить строчку:

/home/timemachine "TimeMachine" cnidscheme:dbd options:tm,upriv,usedots ea:ad
dperm:0776 fperm:0666 allow:@tmachine

По идее это все одна строчка, просто пришлось разбить, не влезало. Разберем по-порядку:
/home/timemachine - папка, куда будем бекапить.
"TimeMachine" - название шары, оно и будет видно в вашем маке.
cnidscheme:dbd - тип базы для хранения... забыл уже, похуй, главное, что там dbd, а не cbd как раньше советовали.
options:tm,upriv,usedots - главное тут - опция tm. Она появилась как раз в последней версии и делает все красиво. Не забудьте ее.
ea:ad - так как OS X любит хранить некоторую информацию в так называемых расширенных правах (xattr), а наша ext3 их не поддерживает, мы говорим хранить эту инфу в отдельной скрытой папочке (емнип, оно само может определить это и включить эту опцию, но мало ли что).
dperm:0776 fperm:0666 - права на создаваемые директории и файлы соответственно.
allow:@tmachine - кому разрешать доступ, если начинается с @ - это группа, если просто - имя пользователя. Можно разделять запятыми, например: allow:user1,user2.

Сохраняем и выходим. Идем в:

sudo nano /etc/netatalk/afpd.conf

И опять же отматываем в самый-самый низ. Там будет закомментированная строчка типа default, но ее не трогаем. Она не работает, потому что там указаны старые библиотеки (спасибо, хабр). Если вы будете использовать ее, то получите сообщение: «Версия сервера, к которому Вы пытаетесь подключиться, не поддерживается. Обратитесь к системному администратору за помощью», а обращаться вам конечно не к кому (если есть - отдайте этот пост ему, а сами продолжайте зарабатывать на жизнь фотографом). Правильная строчка для прописывания туда такая:

- -tcp -noddp -uamlist uams_dhx.so,uams_dhx2_passwd.so -nosavepassword

И да, она начинается с двух дефисов, это не опечатка. Главное отличие от строчки default выделено жирным. Рестартуем оба сервиса:

sudo service netatalk restart
sudo service avahi-daemon restart

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

rm /var/run/avahi-daemon/disabled-for-unicast-local

upd: (спасибо EvilBox в комментариях)

В файле /etc/default/avahi-daemon меняем строку AVAHI_DAEMON_DETECT_LOCAL=1 на AVAHI_DAEMON_DETECT_LOCAL=0 и перезагружаем машину.

И смотрим syslog:

tail -20 /var/log/syslog

Если там все чисто и в строчках с afp только рассказы о том как все круто и охуенно - вам повезло. Если нет - идем в гугл и смотрим почему сраная afp не запустилась.

Если в сислоге все заебись - велика вероятность, что вы везунчик. Бросайте нахуй эти линуксы идите зарабатывать на скачках и в казино, вам прет удача. Если нет - гуглим и чиним, гуглим и чиним. Я управился за час.

Идем в настройки мака -> TimeMachine, жмем ВКЛ. и выбираем диск. Если все видно, то должно быть что-то типа того:

Ого, наша шара видна

Кстати, советую воткнуть свой мак проводом в сетку, по вайфаю это будет очень долго. Далее он спросит пароль от созданного вами пользователя и если он подошел - вы снова везунчик. А если мак всячески сопротивляется, вам нужно потратить пол часа на гугление причины и как я узнать, что в сраном дебаяне сломалась еще одна либа из-за которой он не может обеспечить расшифровку пароля. Надо ее обновить, для чего опять же на сервере:

sudo aptitude install libgcrypt-dev libgcrypt11

После этого проблемы с логином исчезают и мак начинает думать о создании бекапа. Ну а дальше вы представляете как долго будет заливаться 300 гигабайт свежего бекапа (благо остальные инкрементальные) по плохо обжатому вашими кривыми руками патчкорду через старый роутер ДЭ-ЛИНК, который давно пора выкинуть нахуй. Удачи, это будет дооолгая ночь.

Ну вот, работает, даже на ext3

Картинку с «прелестями TimeMachine» добавлю позже, когда мой бекап наконец закончится. Но там будет что-то типа того:

Мопед не мой я просто разместил скриншот

Комментарии ↓
The Master :: 03 июня 2012 в 19:49 из Saint Petersburg, RU #
0

Раньше на шары по NFS спокойно можно было бэкапиться, на 10.6.8 Барсике я так и бэкапился с помощью роутера и подцепленного к нему внешнего харда на террабайт пока Джобс не умер и не пришёл этот в очках и чёрной рубашечке такой, ну как его, ну вы его знаете такой самый деловой ещё у них там в ЭпплЕ. В общем в 10.7 всё мне сломали и приходится за неимением прыщеблядского сервака с дебианом или ещё какой пингвинятины всё делать ручками и на внешний хардец.

Кстати, если не хочешь чтобы каждые 5 минут у тебя делались бэкапчики и мак теребил почём зря твой мегасуперкрутойсервак ставь себе нам мопед TimeMachineEditor (в гугле найдёшь), и будешь как босс сам выставлять время в которое будут делаться бэкапчики. Ну это так на всякий случай, может тебя прикалывает когда ты скачал какую-нить иконку 5 килобайтную а бэкап херачится на 80 гигов через 5 минут.

streetmack :: 04 июня 2012 в 13:59 из Chelyabinsk, RU #
0

> идите зарабатывать на скачках и в казино, вам прет удача Sports Almanac?

vas3k :: 04 июня 2012 в 14:03 из Novosibirsk, RU #
0

streetmack, до 2015 года, ага.

streetmack :: 04 июня 2012 в 17:06 из Chelyabinsk, RU #
0

Серверное мясцо тоже нуждается в обновлении? Ведь эта штука теперь каждый день будет мучать сервер бекапами :P

vas3k :: 05 июня 2012 в 06:10 из Novosibirsk, RU #
0

streetmack, ты его тоже каждый день "мучаешь", заходя сюда :D Так что не думаю, что сильно хуже ему будет. Нет, о большом апгрейде пока не подумываю.

EvilBox :: 13 июля 2012 в 18:21 из Tver, RU #
0

Шеф, что бы avahi не срал кирпичами о зоне local при рестарте сервера: Делаешь раз - sudo nano /etc/default/avahi-daemon Делаешь два - строку AVAHI_DAEMON_DETECT_LOCAL=1 меняем на AVAHI_DAEMON_DETECT_LOCAL=0 Делаешь три - sudo reboot и смотри поднимется ли avahi

EvilBox :: 13 июля 2012 в 18:27 из HU #
0

Кстати к строке - -tcp -noddp -uamlist uams_dhx.so,uams_dhx2_passwd.so -nosavepassword можно добавить параметр -mimicmodel <Значение> для того что бы в finder была иконка. Значений не много, но это лучше чем этот страшный монитор: RackMac Xserve, PowerBook, PowerMac, Macmini, iMac, MacBook, MacBookPro, MacBookAir, MacPro, AppleTV1,1, AirPort Пример: - -tcp -noddp -uamlist uams_dhx.so,uams_dhx2_passwd.so -nosavepassword -mimicmodel Xserve

vas3k :: 14 июля 2012 в 03:56 из Novosibirsk, RU #
0

EvilBox, > что бы avahi не срал кирпичами о зоне local при рестарте сервера Добавил в пост, спасибо. > Значений не много, но это лучше чем этот страшный монитор Ага, слышал про него, но мне нравится страшный монитор :)

EvilBox :: 05 августа 2012 в 10:59 из FR #
0

Шеф вышла стабильная версия netatalk 3 там новый конфиг и собирать из исходников надо. Пора обновляться ;)

streetmack :: 29 августа 2012 в 14:33 из Chelyabinsk, RU #
0

EvilBox, у вас тут своя атмосфера.

EvilBox :: 29 мая 2013 в 20:27 из Khimki, RU #
0

есть немного :-D

xQgLVc :: 12 июля 2014 в 22:11 из Lviv, UA #
0

<a href=http://om4men.com/cfm/#5fq6>adderall for sale</a> adderall xr vs ir dose equivalence - adderall xr buy no prescription

Еще? Тогда вот