Установка и настройка Netatalk на Raspberry Pi

Raspberry Pi. Организация сетевого доступа к файлам через Netatalk

Дата Автор 6 комментариев 8 715 просмотров

В 2017 году я описывал процесс организации сетевого доступа к файлам на Raspberry Pi (да и, в принципе, на любом другом компьютере с Linux на борту) по SMB-протоколу при помощи утилиты Samba.

Позднее моим основным рабочим инструментом стал макбук, и я решил настроить доступ к файлам на сетевом хранилище по протоколу Apple Filing Protocol или AFP, который является собственным протоколом корпорации Apple для сетевого доступа к файлам. То есть аналогом протоколов SMB и NFS, но только для устройств под управлением macOS.

Для организации сетевого доступа по AFP используется утилита Netatalk, процесс установки и настройки которой описан в данной статье.

Что лучше: AFP или SMB?

Несмотря на наличие собственного сетевого протокола, macOS отлично совместима с SMB, и, в принципе, Apple Filing Protocol использовать не обязательно.

Скорости чтения-записи в macOS протоколу AFP значительно превосходили скорости по SMBv1 и SMBv2, однако после выхода обновленного SMBv3 скорости AFP и SMB сравнялись:

Протокол Версия Скорость чтения Скорость записи
AFP 1105 MB/sec 506 MB/sec
NFS v3 / v4 590 MB/sec 156 MB/sec
SMB v1 75 MB/sec 173 MB/sec
SMB v3 1108 MB/sec 547 MB/sec

Сравнение скоростей при использовании AFP, NFS и SMB разных версий. Взято отсюда.

Преимущества AFP заключаются в совместимости «из коробки» с Time Machine на macOS. В последних версиях макось стала поддерживать SMB для сетевого хранения бэкапов, однако есть нюансы. Я описываю это подробнее в статье про организацию Time Capsule на Raspberry Pi.

Есть еще одно преимущество AFP, сугубо визуальное. При расшаривании сетевого доступа к устройству при помощи Netatalk можно имитировать устройство из линейки Apple — при этом ему будет присвоена соответствующая иконка. Можно научить свое сетевое файловое хранилище притворяться Xserve или Mac mini и оно будет красиво отображаться в Finder.

Не могу однозначно сказать, стоит ли пользоваться AFP вместо SMB. Все индивидуально.

Что нам понадобится

Для осуществления описываемых в этой статье действий понадобится:

  • Raspberry Pi 4
  • Внешний жесткий диск
  • Локальная сеть

Я описываю процесс на примере Raspberry Pi свежего поколения, но инструкции актуальны для любого компьютера на базе Linux. Например, мой домашний сервер работал на базе mini-ATX десктопа на базе Intel Pentium E5300 с корзиной для дисков OImaster MR-6601, а в 2020 году переехал на Rock Pi 4B.

Установка Netatalk

Для добавления поддержки протокола AFP будет использоваться пакет Netatalk, установить который можно двумя способами: из репозитория или сборкой из исходников.

Установка из репозитория более быстрая и простая, однако с большой вероятностью в репозитории будет содержаться старая версия пакета.

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

Вариант 1. Установка из репозитория

При выборе варианта с установкой Netatalk из репозитория понадобится сперва обновить список доступных пакетов и уже установленные в системе пакеты:

sudo apt-get update
sudo apt-get dist-upgrade

А затем запустить установку Netatalk:

sudo apt-get install netatalk

На этом установка завершена. Проверить версию и посмотреть расположение конфигурационных файлов можно путем выполнения следующей команды:

afpd -V

На момент написания этой статьи актуальной версией является 3.1.12, выпущенная в конце 2018 года.

Вариант 2. Сборка из исходников

Сборка Netatalk из исходников займет больше времени, однако это позволит использовать самую свежую версию пакета.

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

sudo apt-get purge netatalk

После этого можно приступать к установке.

Шаг 1. Устанавливаем необходимые для сборки пакеты:

sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install autoconf build-essential libevent-dev libssl-dev libgcrypt-dev libkrb5-dev libpam0g-dev libwrap0-dev libdb-dev libtdb-dev libmysqlclient-dev avahi-daemon libavahi-client-dev libacl1-dev libldap2-dev libcrack2-dev systemtap-sdt-dev libdbus-1-dev libdbus-glib-1-dev libglib2.0-dev libio-socket-inet6-perl tracker libtracker-sparql-2.0-dev libtracker-miner-2.0-dev

Шаг 2. Загрузим и распакуем архив с дистрибутивом:

wget http://prdownloads.sourceforge.net/netatalk/netatalk-3.1.12.tar.gz
tar xvf netatalk-3.1.12.tar.bz2

Перед загрузкой можно зайти на сайт проекта Netatalk и проверить наличие свежих версий. Если появится версия свежее, чем указанная в стать 3.1.12, то соответственно нужно будет использовать новые ссылки на скачивание.

Шаг 3. Переходим в папку с распакованным дистрибутивом:

cd netatalk-3.1.12

И запускаем скрипт конфигурации со следующими параметрами:

./configure \
        --with-init-style=debian-systemd \
        --without-libevent \
        --without-tdb \
        --with-cracklib \
        --enable-krbV-uam \
        --with-pam-confdir=/etc/pam.d \
        --with-dbus-daemon=/usr/bin/dbus-daemon \
        --with-dbus-sysconf-dir=/etc/dbus-1/system.d \
        --with-tracker-pkgconfig-version=2.0

Параметры нужно указывать обязательно, т.к. выполнить просто ./configure, то собрать пакет потом не получится. Если конфигурация заканчивается ошибкой, значит не хватает каких-то пакетов из числа перечисленных в первом шаге. Нужно установить их и запустить скрипт со всеми параметрами повторно.

Шаг 4. Сборка и установка

Запустим сборку пакета:

make

И дожидаемся окончания процесса. После чего запускаем установку:

sudo make install

Шаг 5. Запуск Netatalk

После завершения установки остается только запустить сервисы:

sudo systemctl enable avahi-daemon
sudo systemctl enable netatalk
sudo systemctl start avahi-daemon
sudo systemctl start netatalk

Настройка Netatalk

После установки Netatalk нужно расшарить ресурсы, доступ к которым планируется иметь с компьютера под управлением macOS.

Для этого нужно отредактировать файл конфигурации:

  • AppleVolumes.default — если используется старая версия пакета (ниже 3.x.x)
  • afp.conf — на свежих версиях пакета (3.x.x)

Путь к файлам конфигурации можно посмотреть, выполнив команду

afpd -V

Скорее всего он будет иметь вид либо /etc/netatalk/afp.conf, либо /usr/local/etc/afp.conf

Добавление сетевых шар — afp.conf

Открываем файл afp.conf:

sudo nano /etc/netatalk/afp.conf

И прописываем расшариваемые ресурсы в его конец по следующему шаблону:

[Желаемое название сетевого ресурса]
  path = /путь/к/расшариваемой/папке

Если нужно создать ресурс, доступный только для чтения:

[Желаемое название сетевого ресурса]
  path = /путь/к/расшариваемой/папке
  read only = true

Если нужно создать ресурс, доступный в качестве сетевого диска для Time Machine:

[Желаемое название сетевого ресурса]
  path = /путь/к/расшариваемой/папке
  time machine = true

После изменения конфигурации нужно перезапустить Netatalk:

sudo systemctl restart netatalk

Добавление сетевых шар — AppleVolumes.default

Открываем файл AppleVolumes.default:

sudo nano /etc/netatalk/AppleVolumes.default

И доходим в нем до этого места:

# By default all users have access to their home directories.
~/          $hHome
# End of File

Ресурсы прописываются до строки #End of File в следующем формате:

/путь/к/расшариваемой/папке	"Желаемое название сетевого ресурса"

Если нужно создать ресурс, доступный только для чтения:

/путь/к/расшариваемой/папке	"Желаемое название сетевого ресурса" options:ro

Если нужно создать ресурс, доступный в качестве сетевого диска для Time Machine:

/путь/к/расшариваемой/папке	"Желаемое название сетевого ресурса" options:tm

После изменения конфигурации нужно перезапустить Netatalk:

sudo systemctl restart netatalk

Настройка иконки для Finder

Для установки иконки под которой наше устройство будет отображаться в Finder, нужно отредактировать afp.conf:

sudo nano /etc/netatalk/afp.conf

И задать в секции [Global] параметр mimic model:

[Global]
mimic model = MacPro

В качестве названия модели можно использовать Model ID от любой модели техники Apple. Полный список можно посмотреть здесь для компьютеров Apple или здесь для всей остальной их электроники.

Если по каким-то причинам после установки mimic model в afp.conf и перезапуска сервиса иконка в Finder не меняется (а такая проблема возникала у меня), то ее можно сменить через редактирование конфига для Avahi:

sudo nano /etc/avahi/services/afpd.service

В открывшемся файле нужно найти строку

<txt-record>model=X</txt-record>

И заменить X на желаемый Model ID. После чего перезагрузить Avahi:

sudo systemctl restart avahi-daemon

Скрытие служебных файлов для Samba-подключений

Если параллельно с AFP используется доступ по протоколу SMB, то может создавать неудобства наличие служебных файлов с метаданными, генерируемых macOS на сетевом диске при обращении к файлам.

Их можно скрыть от отображения, отредактировав файл конфигурации Samba:

sudo nano /etc/samba/smb.conf

И вставив в раздел [global] следующую строку:

hide files = /.DS_Store/Network Trash Folder/TheFindByContentFolder/TheVolumeSettingsFolder/Temporary Items/.TemporaryItems/.VolumeIcon.icns/Icon?/.FBCIndex/.FBCLockFolder/

Монтирование сетевых дисков в macOS

Для ручного подключения сетевых дисков нужно открыть Finder, нажать Cmd+K (либо выбрать «Подключение к серверу…» в меню «Переход») и в открывшемся окне ввести afp://ip-адрес-сервера/:

Установка и настройка Netatalk на Raspberry Pi

После чего выбрать в открывшемся окне все желаемые диски для подключения:

Установка и настройка Netatalk на Raspberry Pi

Чтобы сетевые диски автоматически подключались при загрузке системы нужно зайти в Настройки -> Пользователи и группы -> Объекты входа, нажать на «+» и добавить их в открывшемся окне:

Установка и настройка Netatalk на Raspberry Pi

Заключение

Таким образом можно настроить сетевой доступ к файлам по протоколу AFP для компьютеров Apple. Для доступа к файлам на одном и том же сервере можно использовать одновременно и AFP, и SMB и NFS, что удобно при наличии в локальной сети устройств, работающих на различных платформах.

Микрокомпьютер Raspberry Pi 4
Микрокомпьютер Raspberry Pi 4

Broadcom BCM2711 | 2Gb/4Gb/8Gb RAM | 10/100/1000Mbit Ethernet

Купить на AliExpress

Автор статьи:
Дмитрий
Руководитель отдела в IT-компании. Веду этот блог с 2013 года, пишу о гаджетах и домашней автоматизации, обозреваю одноплатные компьютеры, неспешно собираю «умный дом».

6 комментария на «Raspberry Pi. Организация сетевого доступа к файлам через Netatalk»

    • Нет, скорость должна быть существенно выше. Если все не упирается в скорость чтения-записи самого накопителя и используется проводное подключение или 5Ghz Wi-Fi, то возможно проблема в роутере.

      У меня, например, на маке сетевой доступ к файлам подлагивал на Xiaomi Mi Router 4, а после переезда на Keenetic Giga проблема исчезла. Причем лаги были только под macOS и вне зависимости от используемого протокола доступа к файлам (SMB / AFP), а на десктопе под Windows все работало отлично.

  1. На Debian 10 cтопорюсь на этапе make
    Получаю
    /usr/bin/ld: afpd-acls.o:/home/user/netatalk-3.1.12/etc/afpd/directory.h:94: multiple definition of `invalid_dircache_entries’; afpd-afp_dsi.o:/home/evelrus/netatalk-3.1.12/etc/afpd/directory.h:94: first defined here
    collect2: error: ld returned 1 exit status
    make[4]: *** [Makefile:578: afpd] Ошибка 1
    make[4]: выход из каталога «/home/user/netatalk-3.1.12/etc/afpd»
    make[3]: *** [Makefile:493: all] Ошибка 2
    make[3]: выход из каталога «/home/user/netatalk-3.1.12/etc/afpd»
    make[2]: *** [Makefile:473: all-recursive] Ошибка 1
    make[2]: выход из каталога «/home/user/netatalk-3.1.12/etc»
    make[1]: *** [Makefile:524: all-recursive] Ошибка 1
    make[1]: выход из каталога «/home/user/netatalk-3.1.12»
    make: *** [Makefile:456: all] Ошибка 2

  2. Подскажите пожалуйста, возможно ли подключаться по netatalk через внешний ip адрес из другой сети? Если да, то как?)

    • Я не знаю как именно у вас организована локальная сеть, но универсальный вариант — это настроить VPN-соединение до нужной вам сети и при активном соединении подключаться по внутреннему IP.

      Проще всего это реализуется на роутерах Keenetic — на них VPN-сервер поднимается за пару кликов мыши в веб-интерфейсе и работает даже если провайдер выдает «серые» IP (в таком случае соединение идет через кинетиковское облако).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

[Хамство, оскорбления и попытки крауд-маркетинга будут удалены]