Варианты сетевой передачи файлов между современной Apple macOS и устаревшей "классической" Mac OS с использованием протоколов AFP, NFS, SMB, SFTP, FTP

Network file transfer options between modern Apple macOS and legacy "classic" Mac OS using AFP, NFS, SMB, SFTP, FTP protocolsЗачем придумывать проблему обмена данными между современной Apple macOS и устаревшей "классической" Mac OS, которую официально похоронили? Всё просто: желание иногда поиграть в старые игры на реальном "древнем" компьютере. Поэтому возникает вопрос доставки образов на этот компьютер. По USB 1.1 копирование данных занимает вечность, записывать CD/DVD может быть невозможно из-за отсутствия привода, покупать жёсткие диски с портом FireWire нецелесообразно, к тому же, можно столкнуться с проблемой отсутствия портов FW на современных компьютерах. Таким образом, в качестве самого приемлемого варианта, остаётся сетевой обмен с использованием таких протоколов как AFP, NFS, SMB, SFTP, FTP.

В контексте этой шпаргалки под "классической" ОС понимаем Mac OS 9.2, при этом описанные здесь действия должны быть применимы и к более старым Mac OS, вплоть до 7.6, в зависимости от поддержки клиентского ПО. Под macOS понимаем все современные macOS начиная с 10.14.

В рассматриваемых далее примерах, для сетевого обмена по разным протоколам мы будем использовать два компьютера Mac с операционными системами macOS 13.0 и Mac OS 9.2.2.

 

1. Apple Filling Protocol (AFP)

Серверная часть AFP удалена начиная с macOS 11. В предыдущих версиях поддержка есть, но отсутствует поддержка старых версий протокола и AppleTalk, которые необходимы для обнаружения и подключения общих каталогов AFP в "классических" ОС. И встроенными средствами решить это невозможно, так как Apple традиционно избавляется от поддержки старых технологий.

На macOS можно установить аналог удалённого демона AFPD, воспользовавшись форком проекта Netatalk.

Настройка северной части AFP

Устанавливаем инструменты разработчика и репозиторий brew:

sudo xcode-select --install
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Устанавливаем зависимости для сборки пакета:

brew install berkeley-db dgsga/netatalk-dbus/dbus-glib docbook-xsl libevent libgcrypt libressl meson mysql openssl@1.1 pkg-config

Клонируем репозиторий:

mkdir Sources
cd Sources
git clone https://github.com/dgsga/netatalk.git

Сборка и установка:

cd netatalk
chmod +x install.command
./install.command

Создаём конфигурационный файл:

sudo mv /usr/local/etc/afp.conf /usr/local/etc/afp.conf.bak 
sudo nano /usr/local/etc/afp.conf

Содержимое файла:

#Netatalk 3.x configuration file

[Global]
#Global server settings
log file = /var/log/afpd.log
#loglevels: severe, error, warn, note, info, debug, debug6, debug7, debug8, debug9, maxdebug
#log level = default:maxdebug,afpdaemon:maxdebug,logger:maxdebug,uamsdaemon:maxdebug
save password = no
mac charset = MAC_ROMAN
afp listen = 192.168.74.18
#hosts allow = 192.168.73.0/24
#Value for System 7.5.5 - Mac OS 9.2.2 clients that AFAIK do support only that.
uam list = uams_dhx.so
#Use Bonjour for Mac OS X 10.4 - 10.8
#afpstats = yes

[AFP Share]
path = /Users/test001/AFPOS9Share
file perm = 0666
directory perm = 0777
cnid scheme = dbd
#Uncomment the following line to restrict access to specific users
#valid users = test001

Создаём общий каталог:

mkdir ~/AFPOS9Share

Настраиваем Firewall и запускаем демон.

Если включен встроенный Firewall, необходимо добавить разрешающее правило для /usr/local/sbin/afpd из панели управления или терминала:

export PATH=$PATH:/usr/libexec/ApplicationFirewall
sudo socketfilterfw --add /usr/local/sbin/afpd

При использовании pfctl или иных решений так же нужно открыть TCP порт 548.

Включаем демон Netatalk:

sudo launchctl load -w /Library/LaunchDaemons/com.netatalk.daemon.plist

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

export PATH=$PATH:/usr/local/bin/
sudo netatalkd start | restart | stop

Проверяем запущенный демон:

sudo launchctl list | grep netatalk
sudo lsof -iTCP -sTCP:LISTEN -n -P | grep afpd
ps aux | grep -i '/usr/local/sbin/'

Для изучения лога /var/log/afpd.log можно воспользоваться приложением Console.app или в терминале

sudo tail -f /var/log/afpd.log

Иногда после перегрузки macOS или добавления новых файлов может возникнуть ошибка "-50" при чтении клиентом любых или новых файлов с общего каталога, решается перезапуском демона Netatalk.

Mac OS Netatalk error - Item cannot be read, because an error of type -50 ocurred

Разработчик периодически обновляет пакет, поэтому со временем могут быть отклонения от этого руководства при сборке или иные проблемы при эксплуатации. Все рекомендации можно найти на странице проекта.

 

Настройка клиентской части AFP

Открываем "Chooser":

Mac OS Chooser

Выбираем "AppleShare", нажимаем на "Server IP Address…" и вводим адрес сервера:

Select AppleShare in Mac OS

Проходим аутентификацию и выбираем доступный общий каталог:

Connect to AFP Share from Mac OS to macOS

Connect to AFP Share from Mac OS to macOS

Каталог подключен, на рабочем столе появится иконка с названием общего каталога.

AFP Share Icon

Можем посмотреть свойства каталога из контекстного меню (control+click) или сочетанием клавиш Command+I.

AFP Share Info

 

2. Network File System (NFS)

Демон NFS встроен в macOS. Для работы на стороне клиента необходимо установить расширение.

 

Настройка северной части NFS

Создаём общий каталог NFS в macOS:

mkdir ~/NFSOS9Share

Если есть необходимость копировать что-либо на общий ресурс из "классической" Mac OS, необходимо предоставить права на запись группе everyone. По умолчанию права доступа только на чтение.

Создаём конфигурационный файл с общими каталогами NFS:

sudo nano /etc/exports
/Users/test001/NFSOS9Share

Если необходимо ограничить доступ к каталогу для клиентов сети, то через пробел укажем IP адреса или имена этих клиентов, так же можно разрешить подключение определённому сегменту сети, например: "-network 192.168.73.0 -mask 255.255.255.0".

Проверяем корректность конфигурации:

nfsd checkexports

Настраиваем Firewall

Если включен встроенный Firewall, необходимо добавить разрешающее правило для /sbin/nfsd из панели управления или терминала:

export PATH=$PATH:/usr/libexec/ApplicationFirewall
sudo socketfilterfw --add /sbin/nfsd

При использовании дополнительных решений, типа pfctl или иных, необходимо открыть TCP порты 111 и 2049.

Перезапускаем демона (для остановки | для запуска | для обновления конфигурации):

sudo nfsd restart (stop | start | update)

Проверяем открытый порт и статус демона:

sudo lsof -iTCP -sTCP:LISTEN -n -P | grep nfs 
nfsd status

 

Настройка клиентской части NFS

Скачиваем расширение MacNFS и переносим дистрибутив на "классическую" ОС, распаковываем MacNFS_3.0_installer.sit. Запускаем "Install MacNFS" и следуем указаниям мастера установки. После перезагрузки, распаковываем macnfs_v3.0p3.sea_.hqx, и переносим с заменой расширение MacNFS в "System Folder:Extensions".

Открываем "Chooser", выбираем новый тип соединения "MacNFS". Если сервер и клиент находится в одном сегменте сети, сервер будет обнаружен автоматически.

Select MacNFS in Mac OS Chooser

Выбираем общий каталог для монтирования:

MacNFS Export List

Каталог подключен, на рабочем столе появится иконка с названием общего каталога.

NFSOS9Share Icon

Можем посмотреть свойства каталога из контекстного меню (control+click) или сочетанием клавиш Command+I.

NFSOS9Share Info

Может возникнуть проблема с установкой расширения:

Installing MacNFS 3.0 - files needed for this installation could not be found

Для решения этой проблемы выполним несколько шагов:

  1. Запустить поверку файловой системы встроенным инструментом "Applications (Mac OS 9):Utilities:Disk First Aid";

  2. Распаковать архив с помощью Stuffit Delux 7.0.3;

  3. Переименовать каталог с инсталлятором в "MacNFS 3.0";

  4. Крайний вариант не использовать установку, а просто перенести расширение "MacNFS" из архива "macnfs_v3.0p3.sea_.hqx" в "System Folder:Extension" и перезагрузиться.

 

3. Server Message Block (SMB)

Добавить поддержку клиента и сервера SMB в "классические" Mac OS можно с помощью приложения DAVE. Нужно иметь ввиду, что приложение использует старую и уязвимую версию протокола (SMBv1), поэтому крайне не рекомендуется использовать этот вариант в своей сети.

В реальности SMB может быть полезен в случае необходимости создания сети обмена данными между старыми компьютерами на базе Windows 98/ME/XP и Mac OS 8.6/9.x.

Настройка северной части SMB

С северной частью всё сложнее, чем может показаться на первый взгляд. Клиентская часть поддерживает SMBv1, Netbios и NTLMv2 (по умолчанию LM и NTLM) — с подобным набором технологий к общим каталогам SMB доступных на современной macOS уже не подключиться.

В ходе экспериментов я определил 2 работоспособных варианта:

А. Использовать виртуальные машины для запуска старых версий ОС.

  • Для запуска Mac OS 9.2.1 можно использовать готовый шаблон в UTM;
  • Для запуска Mac OS X 10.4 можно использовать QEMU, например, по этой инструкции;
  • Так же можно использовать и альтернативные ОС, типа Windows XP, которую можно запустить в UTM через шаблон или в случае с использованием Intel-based Mac на VirtualBox или Parallels.

Б. Использовать NAS с поддержкой старых клиентов.

Настройка клиентской части SMB

Скачиваем дистрибутив DAVE и переносим на "классическую" Mac OS. Во время установки DAVE нужно указать имя компьютера, при необходимости рабочую группу и описание. Все введённые параметры можно отредактировать в любое время, открыв меню DAVE из Strip Control -> "Open NetBios".

Открываем "Chooser", выбираем новый тип соединения "DAVE Client" и дважды кликаем на "Mount Manually".

Dave Client in Mac OS Chooser

В открывшемся окне вводим адрес сервера и имя общего каталога:

Mount Volume in Dave Client

Проходим аутентификацию:

Connect to server in Dave Client

Если не снять галочку "Ask for volume name", то система предложит отредактировать имя подключаемого тома.

DAVE Volume name in Dave Client

Каталог подключен, на рабочем столе появится иконка с названием подключенного каталога.

SMB Share Icon

При необходимости, можно использовать несколько вариантов одновременно.

NFS AFP SMB Shares Icons in Mac OS

С помощью Dave так же можно создавать общие каталоги.

 

4. Secure File Transfer Protocol (SFTP)

Как и в случае с NFS, в macOS уже встроен сервер SFTP, его нужно настроить для старого клиента и включить. Для работы на стороне клиента необходимо использовать приложение.

Настройка северной части SFTP

Создадим конфигурационный файл.

sudo nano /etc/ssh/sshd_config.d/classicmacs.conf

Содержимое файла:

Protocol 2
Ciphers +aes256-cbc
KexAlgorithms +diffie-hellman-group1-sha1
HostKeyAlgorithms +ssh-rsa

Запустим демон sshd.

Переключаем тумблер в панели управления (Основные -> Общий доступ -> Удалённый вход) или в терминале:

sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist

Правило Firewall будет включено автоматически, но при использовании pfctl или иных решений необходимо открыть TCP порт 22.

Настройка клиентской части SFTP

Скачиваем дистрибутив MacSFTP, переносим его на "классическую" ОС. Приложение не требует установки, поэтому после распаковки архива каталог с приложением нужно перенести в "Applications (Classic)".

Настраиваем и подключаемся:

SFTP Login

Подключение выполняется в домашний каталог пользователя.

Mount SFTP folder in Mac OS

Может возникнуть ошибка подключения "no hostkey alg":

SFTP Log error - no hostkey alg

Скорее всего SSH Host Key были сгенерированы ранее с парольной фразой или ошибкой. Приложение 2003 года поддерживает ключи RSA и DSA, поэтому можно сгенерировать их заново с помощью ssh-keygen:

sudo ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -q -N ""
sudo ssh-keygen -t dsa -f /etc/ssh/ssh host dsa key -q -N ""

Так же можно удалить все ключи, новые будут сгенерированы автоматически при первом подключении клиента.

sudo rm -f /etc/ssh/ssh_host_*

Если ошибка подключения сохраняется, необходимо увеличить в настройках приложения SSH Log level до 3 и анализировать проблему.

 

5. File Transfer Protocol (FTP)

Если нужен обычный FTP, то его так же быстро можно развернуть с помощью FileZilla на стороне сервера и Fetch на стороне клиента.

При необходимости можно создать общий каталог на стороне "классической" Mac OS с помощью приложения Rumpus.

В macOS до 10.12 FTP-сервер был встроен, но начиная с релизной версии macOS 10.13 — FTP на Mac из коробки уже история.

 

Тестирование копирования файлов

Для тестирования передачи файлов по разным протоколам использовалось несколько пустых файлов "заглушек" разного размера, которые были созданы на macOS 13.

dd if=/dev/zero of=/Users/test001/Test/20MB.blank bs=1 count=0 seek=20M
…
dd if=/dev/zero of=/Users/test001/Test/1GB.blank bs=1 count=0 seek=1G

Generate test files in Mac OS with dd

Пропускная способность сети - 100 Mbps.

Приведу результирующую таблицу замеров скорости передачи файлов с использованием разных протоколов.

Протокол Скачивание Загрузка
1 AFP ~90 Mbps (~11 MB/s) ~90 Mbps (~11 MB/s)
2 FTP ~90 Mbps (~11 MB/s) ~90 Mbps (~11 MB/s)
3 NFS ~56 Mbps (~7 MB/s) ~42 Mbps (~5 MB/s)
4 SMB ~50 Mbps (~6 MB/s) ~57 Mbps (~7 MB/s)
5 SFTP ~3,8 Mbps (~470 KB/s) ~3,8 Mbps (~470 KB/s)

Причина медленного SFTP не выяснена.

В целом копирование проходит штатно, без зависаний и обрывов.

 

Перенос архивов с ПО на "классическую" ОС

Возможна ситуация, когда нет USB-A накопителя или пишущего привода CD/DVD-RW, или на старом Mac нет USB и CD/DVD-ROM, а только какие-нибудь ZIP drive или Jaz drive. В этом случае архивы с приложениями можно скачивать с помощью интернет браузера в "классической" ОС. По умолчанию в Mac OS 9.2.2 встроен Internet Explorer 5.1, с помощью которого можно зайти сайт, где специально для таких случаев до сих пор есть поддержка протокола HTTP. Согласно доброй традиции IE, часть стилей и иконок не загрузится, но это не помешает найти необходимые приложения и скачать их.

Old Mac Software Archive - Macintosh Repository

 

Подводим итоги

Несмотря на то, что "классическая" Mac OS устарела более 20 лет назад, возможность подключения к общим сетевым каталогам, которые доступны на современных Mac или альтернативных ОС, ещё сохраняется.

Коротко о перечисленных вариантах:

Серверная часть SMB не может быть использована без старых ОС или сетевых дисковых хранилищ с поддержкой SMBv1 и NTLM. Клиентская часть — коммерческое приложение, которое уже невозможно купить, ключ находится на странице загрузки архива. Встраивается в систему и прозрачно используется "Finder". Используемые протоколы устарели и уязвимы, крайне не рекомендуется к использованию.

FTP требует стороннего решения для сервера и клиента. Клиентская часть — приложение с пробным периодом на 15 дней, купить его уже невозможно, но ключ можно найти. Настраивается быстро и просто. FTP устарел, но всё ещё остаётся популярным. Говорить о безопасности при использовании FTP не приходится вообще.

SFTP сервер уже встроен в macOS, минимум времени на настройку, но нужно иметь ввиду, что настройка представляет из себя включение слабых (устаревших) механизмов шифрования, что понижает безопасность сервера и сети. Клиентская часть — приложение с пробным периодом, купить которое уже невозможно, но ключ можно найти.

Для AFP есть форк Netatalk в стадии активной разработки, но нет готового пакета и необходима сборка и инструменты для этого. Безопасность сервера и сети не понижается. Клиентская часть встроена в ОС. Можно настроить авто-монтирование при старте системы. Иногда могут возникнуть ошибки при чтении клиентом файлов с общего каталога. Опытные пользователи могут воспользоваться оригинальным проектом Netatalk.

NFS уже встроен в macOS, минимум времени на настройку. Безопасность сервера и сети не понижается. Клиентская часть — коммерческое расширение для "Chooser", которое уже невозможно купить, ключ находится в архиве с инсталлятором. Встраивается в систему и прозрачно используется "Finder". Можно настроить авто-монтирование при старте системы.

Только один комментарий Комментировать

  1. Виталий Якоб / Автор записи

    В этом году у оригинального проекта netatalk появилась инструкция от разработчика для сборки и установки на macOS: https://github.com/Netatalk/netatalk/wiki/Installing-Netatalk-3-on-macOS

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