Зачем придумывать проблему обмена данными между современной 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.
Разработчик периодически обновляет пакет, поэтому со временем могут быть отклонения от этого руководства при сборке или иные проблемы при эксплуатации. Все рекомендации можно найти на странице проекта.
Настройка клиентской части AFP
Открываем "Chooser":
Выбираем "AppleShare", нажимаем на "Server IP Address…" и вводим адрес сервера:
Проходим аутентификацию и выбираем доступный общий каталог:
Каталог подключен, на рабочем столе появится иконка с названием общего каталога.
Можем посмотреть свойства каталога из контекстного меню (control+click) или сочетанием клавиш Command+I.
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". Если сервер и клиент находится в одном сегменте сети, сервер будет обнаружен автоматически.
Выбираем общий каталог для монтирования:
Каталог подключен, на рабочем столе появится иконка с названием общего каталога.
Можем посмотреть свойства каталога из контекстного меню (control+click) или сочетанием клавиш Command+I.
Может возникнуть проблема с установкой расширения:
Для решения этой проблемы выполним несколько шагов:
- Запустить поверку файловой системы встроенным инструментом "Applications (Mac OS 9):Utilities:Disk First Aid";
-
Распаковать архив с помощью Stuffit Delux 7.0.3;
-
Переименовать каталог с инсталлятором в "MacNFS 3.0";
-
Крайний вариант не использовать установку, а просто перенести расширение "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".
В открывшемся окне вводим адрес сервера и имя общего каталога:
Проходим аутентификацию:
Если не снять галочку "Ask for volume name", то система предложит отредактировать имя подключаемого тома.
Каталог подключен, на рабочем столе появится иконка с названием подключенного каталога.
При необходимости, можно использовать несколько вариантов одновременно.
С помощью 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)".
Настраиваем и подключаемся:
Подключение выполняется в домашний каталог пользователя.
Может возникнуть ошибка подключения "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
Пропускная способность сети - 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, часть стилей и иконок не загрузится, но это не помешает найти необходимые приложения и скачать их.
Подводим итоги
Несмотря на то, что "классическая" Mac OS устарела более 20 лет назад, возможность подключения к общим сетевым каталогам, которые доступны на современных Mac или альтернативных ОС, ещё сохраняется.
Коротко о перечисленных вариантах:
Серверная часть SMB не может быть использована без старых ОС или сетевых дисковых хранилищ с поддержкой SMBv1 и NTLM. Клиентская часть — коммерческое приложение, которое уже невозможно купить, ключ находится на странице загрузки архива. Встраивается в систему и прозрачно используется "Finder". Используемые протоколы устарели и уязвимы, крайне не рекомендуется к использованию.
FTP требует стороннего решения для сервера и клиента. Клиентская часть — приложение с пробным периодом на 15 дней, купить его уже невозможно, но ключ можно найти. Настраивается быстро и просто. FTP устарел, но всё ещё остаётся популярным. Говорить о безопасности при использовании FTP не приходится вообще.
SFTP сервер уже встроен в macOS, минимум времени на настройку, но нужно иметь ввиду, что настройка представляет из себя включение слабых (устаревших) механизмов шифрования, что понижает безопасность сервера и сети. Клиентская часть — приложение с пробным периодом, купить которое уже невозможно, но ключ можно найти.
Для AFP есть форк Netatalk в стадии активной разработки, но нет готового пакета и необходима сборка и инструменты для этого. Безопасность сервера и сети не понижается. Клиентская часть встроена в ОС. Можно настроить авто-монтирование при старте системы. Иногда могут возникнуть ошибки при чтении клиентом файлов с общего каталога. Опытные пользователи могут воспользоваться оригинальным проектом Netatalk.
NFS уже встроен в macOS, минимум времени на настройку. Безопасность сервера и сети не понижается. Клиентская часть — коммерческое расширение для "Chooser", которое уже невозможно купить, ключ находится в архиве с инсталлятором. Встраивается в систему и прозрачно используется "Finder". Можно настроить авто-монтирование при старте системы.
В этом году у оригинального проекта netatalk появилась инструкция от разработчика для сборки и установки на macOS: https://github.com/Netatalk/netatalk/wiki/Installing-Netatalk-3-on-macOS