В 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-адрес-сервера/:
После чего выбрать в открывшемся окне все желаемые диски для подключения:
Чтобы сетевые диски автоматически подключались при загрузке системы нужно зайти в Настройки -> Пользователи и группы -> Объекты входа, нажать на «+» и добавить их в открывшемся окне:
Заключение
Таким образом можно настроить сетевой доступ к файлам по протоколу AFP для компьютеров Apple. Для доступа к файлам на одном и том же сервере можно использовать одновременно и AFP, и SMB и NFS, что удобно при наличии в локальной сети устройств, работающих на различных платформах.

Broadcom BCM2711 | 2Gb/4Gb/8Gb RAM | 10/100/1000Mbit Ethernet
Скорость в любом случае 10МБ или это только у меня?
Нет, скорость должна быть существенно выше. Если все не упирается в скорость чтения-записи самого накопителя и используется проводное подключение или 5Ghz Wi-Fi, то возможно проблема в роутере.
У меня, например, на маке сетевой доступ к файлам подлагивал на Xiaomi Mi Router 4, а после переезда на Keenetic Giga проблема исчезла. Причем лаги были только под macOS и вне зависимости от используемого протокола доступа к файлам (SMB / AFP), а на десктопе под Windows все работало отлично.
На 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
Сорри, не увидел, что RPi (
Ошибка ушла, пришла другая))))
Подскажите пожалуйста, возможно ли подключаться по netatalk через внешний ip адрес из другой сети? Если да, то как?)
Я не знаю как именно у вас организована локальная сеть, но универсальный вариант — это настроить VPN-соединение до нужной вам сети и при активном соединении подключаться по внутреннему IP.
Проще всего это реализуется на роутерах Keenetic — на них VPN-сервер поднимается за пару кликов мыши в веб-интерфейсе и работает даже если провайдер выдает «серые» IP (в таком случае соединение идет через кинетиковское облако).