Другие пакеты: MacPorts, mas, Nix и App Store

Рейтинг: 61% · 6 голосов
Подробный курс по macOS для разработчиков и админов: архитектура и Apple Silicon, терминал и zsh, Homebrew и пакеты, launchd и автоматизация, APFS и Time Machine, безопасность (SIP, Gatekeeper, TCC, FileVault), сеть, логи и диагностика, MDM и DDM, контейнеры и виртуализация, восстановление. По официальной документации Apple, актуально на 2026 (macOS 26 Tahoe).
Ответить
Аватара пользователя
Artem_MacAdmin
Сообщения: 47
Зарегистрирован: 11 май 2026, 05:31

Другие пакеты: MacPorts, mas, Nix и App Store

Сообщение Artem_MacAdmin »

Оглавление курса (47)
  1. Что такое macOS: Unix под капотом и место в 2026
  2. Архитектура macOS: XNU, тома и Signed System Volume
  3. Apple Silicon: ARM, Rosetta 2 и отличия от Intel
  4. Установка, обновление и восстановление macOS
  5. Finder, рабочий стол и продуктивность
  6. Системные настройки и их управление из CLI (defaults)
  7. Пользователи и группы: учётные записи и управление
  8. Терминал и zsh: командная строка macOS
  9. CLI на macOS: BSD-команды и отличия от Linux
  10. Настройка zsh: .zshrc, prompt, плагины
  11. Файловая система и права: POSIX, ACL, атрибуты, флаги
  12. Homebrew: пакетный менеджер для macOS
  13. Homebrew глубже: tap, Brewfile, services, обслуживание
  14. Другие пакеты: MacPorts, mas, Nix и App Store (вы здесь)
  15. Установка приложений: .app, .dmg, .pkg и Gatekeeper
  16. Управление приложениями и их данные
  17. launchd и launchctl: система запуска macOS
  18. Свои службы и периодические задачи на launchd
  19. Автоматизация: Shortcuts, AppleScript и osascript
  20. Конфигурация как код: defaults, plist и профили
  21. APFS: снапшоты, клоны, контейнеры и шифрование
  22. Управление дисками: diskutil, образы и форматирование
  23. Time Machine и резервное копирование
  24. Внешние диски, форматы и сетевые тома
  25. Модель безопасности macOS: SIP и целостность системы
  26. Gatekeeper, нотаризация и защита от вредоносов
  27. Приватность и TCC: разрешения на доступ
  28. FileVault: полнодисковое шифрование
  29. Связка ключей и управление секретами
  30. Сетевой экран и защита сети
  31. Сеть в macOS: настройка и инструменты
  32. Диагностика сети на Mac
  33. Общий доступ: SSH, экран, файлы, удалённое управление
  34. Процессы и ресурсы: мониторинг производительности
  35. Логи macOS: unified logging и диагностика
  36. Производительность и энергия: powermetrics, диагностика
  37. Энергия, сон и обслуживание системы
  38. Профили конфигурации и основы MDM
  39. Управление парком Mac: MDM, DDM и zero-touch (2026)
  40. Среда разработчика на Mac: Xcode CLT, git, версии
  41. Контейнеры на Mac: Docker Desktop, OrbStack, Apple container
  42. Виртуализация: Virtualization.framework, UTM, Linux и Windows
  43. Режимы загрузки и восстановление (Apple Silicon)
  44. Сброс, NVRAM, Safe Mode и сброс настроек
  45. Траблшутинг macOS: дерево решений по симптомам
  46. Место на диске и обслуживание системы
  47. Сквозной проект: настройка Mac как у профи + куда расти
Homebrew - не единственный пакетный менеджер mac, и не всегда лучший под задачу. Бывает, тебе нужно поставить приложение из Mac App Store без мышки на десяток машин. Бывает, нужна изоляция от системы пожёстче, чем у brew. А бывает, ты хочешь, чтобы новый Mac разворачивался из одного файла в гите, бит в бит, без ручного клацанья. Под каждый из этих сценариев есть свой инструмент: mas, MacPorts, Nix/nix-darwin, mise. В этом уроке разберём, как они устроены, чем отличаются от Homebrew по механике, и - главное - когда хватает brew, а когда нет. Без религиозных войн, по делу.

Сразу зафиксируем расклад на 2026 (macOS 26 Tahoe, Apple Silicon - основная платформа, Intel в Tahoe поддерживается последний раз). Homebrew закрывает 90% бытовых задач: CLI-утилиты и GUI-приложения (cask) в /opt/homebrew. Остальные инструменты не конкуренты, а дополнения для конкретных дыр: App Store, воспроизводимость, версии языков.

mas: ставим приложения из Mac App Store cli

Главная боль: часть софта живёт ТОЛЬКО в Mac App Store - Xcode, Keynote, Pages, многие платные утилиты с лицензией, привязанной к Apple Account. Homebrew cask их не тянет, потому что это не свободно скачиваемые .dmg, а покупки, привязанные к аккаунту с DRM. Тут и нужен mas (mac app store cli) - тонкая обёртка над приватным API App Store.

Ставится сам через brew:

Код: Выделить всё

brew install mas
Логика работы: у каждого приложения в Store есть числовой product ID. Сначала находим ID поиском, потом ставим по нему. Поиск:

Код: Выделить всё

mas search Xcode

Код: Выделить всё

   497799835  Xcode                  (16.4)
  1480068240  Apple Configurator     (2.18)
Левая колонка - тот самый ID. Установка - по нему:

Код: Выделить всё

mas install 497799835
Если лень копировать ID, есть mas lucky - ставит первый результат поиска (аналог I'm Feeling Lucky):

Код: Выделить всё

mas lucky Keynote
Список того, что уже установлено из Store, с их ID и версиями:

Код: Выделить всё

mas list

Код: Выделить всё

409183694  Keynote     (14.2)
409201541  Pages       (14.2)
1295203466 Microsoft Remote Desktop (10.9.9)
Грабли номер один - авторизация. Раньше был mas signin с логином и паролем, но Apple закрутила 2FA, и из терминала пароль с кодом ввести нормально нельзя. Поэтому на современной macOS правило такое: сначала вручную залогинься в приложении App Store (открой App Store -> меню Магазин -> Войти), и только потом mas работает поверх уже авторизованной сессии. Без входа в GUI-приложение App Store команды install/upgrade молча упрутся в ошибку аккаунта. Это не баг mas, это политика Apple - учитывай в скриптах автонастройки: шаг "залогинься в App Store руками" из пайплайна не убрать.

Грабли номер два - покупка должна уже быть в аккаунте. mas install не покупает приложение и не жмёт за тебя Get. Платный софт ставится, только если он уже привязан к этому Apple Account (когда-то "куплен", пусть и бесплатно). Иначе - отказ. mas - это автоматизация скачивания уже принадлежащего тебе, а не магазин в терминале.

Обновить всё разом:

Код: Выделить всё

mas upgrade
Самое полезное - интеграция в Brewfile. Если mas установлен, то brew bundle dump запишет в Brewfile и приложения из App Store строками вида mas "Keynote", id: 409183694. А brew bundle при развёртывании сначала поставит сам mas, потом дёрнет его для App Store-приложений. То есть один Brewfile описывает и CLI, и cask, и Store-софт - удобно для воспроизводимой настройки парка машин:

Код: Выделить всё

brew "git"
cask "iterm2"
mas "Xcode", id: 497799835
mas "Keynote", id: 409183694
Изображение

MacPorts: другая философия и /opt/local

macports - старейший пакетный менеджер mac (растёт из проекта NeXT/BSD-портов). Идеология противоположна Homebrew по двум пунктам.

Первое - изоляция. Homebrew по-человечески тащит готовые бинарники (bottles) и не любит зависеть от системных библиотек. MacPorts идёт дальше: ставит ВСЁ в свой префикс /opt/local, включая собственные копии зависимостей вплоть до низкоуровневых библиотек, и старается не трогать систему вообще. Сборки идут в песочнице под отдельным пользователем macports, где доступ к файлам вне каталога сборки перехватывается и блокируется - так MacPorts защищается от случайного захвата системных tool'ов. Это даёт повторяемость и предсказуемость ценой объёма на диске и времени.

Второе - сборка из исходников по умолчанию. MacPorts чаще компилирует port локально (хотя есть и предсобранные archives), тащит зависимости целиком, и потому занимает больше места. Homebrew наоборот - сперва пытается налить bottle.

Базовые команды (обрати внимание - тут нужен sudo, потому что /opt/local общий для всех пользователей машины):

Код: Выделить всё

sudo port selfupdate
port search wget
sudo port install wget
sudo port upgrade outdated
Узнать, что установлено и кто что притащил:

Код: Выделить всё

port installed
port dependents wget
Грабли с PATH. MacPorts кладёт бинарники в /opt/local/bin и /opt/local/sbin. Установщик дописывает это в PATH, но если ты потом руками правил профиль или используешь нестандартный шелл - проверь, что /opt/local/bin реально в начале PATH, иначе будет запускаться системная версия утилиты вместо портовой:

Код: Выделить всё

echo $PATH
which wget
Если в выводе which wget видишь /usr/bin/wget или /opt/homebrew/bin/wget вместо /opt/local/bin/wget - порядок путей сбит.

Когда выбирают MacPorts. Нужна максимальная изоляция от системы; нужен пакет, которого нет в brew, но есть порт; нужны редкие варианты сборки с конкретными флагами (variants - фишка MacPorts: sudo port install ffmpeg +nonfree); работаешь в среде, где принято от source собирать. Важно: не держи MacPorts и Homebrew одновременно "горячими" в одном PATH без понимания, что делаешь - две копии одной библиотеки в /opt/local и /opt/homebrew плюс системная это классический источник плавающих сбоев линковки. Технически уживаются, но дисциплина PATH обязательна.

Nix и nix-darwin: декларативное воспроизводимое окружение

Это другой класс инструмента, не "ещё один brew". Nix - функциональный пакетный менеджер: пакеты лежат в /nix/store по хешу от всех входных данных (исходники, флаги, зависимости). Два пакета с разными зависимостями физически не пересекаются, версии сосуществуют, откат мгновенный. На вершине - nix darwin: описываешь ВСЮ систему (пакеты, дефолты macOS, шелл, даже launchd-сервисы) в одном Nix-flake, а потом разворачиваешь командой.

Идея на пальцах: вместо "ставлю руками brew install это, defaults write то, скачиваю сё" ты пишешь файл-конфигурацию, коммитишь в гит, и на любой машине darwin-rebuild switch приводит систему ровно к описанному состоянию. Стёр Mac начисто - прогнал rebuild - вернулся к тому же окружению бит в бит.

Кусок flake.nix (упрощённо), где видно дух подхода - декларативный список пакетов и системных настроек:

Код: Выделить всё

{
  environment.systemPackages = [
    pkgs.git
    pkgs.ripgrep
    pkgs.jq
  ];
  system.defaults.dock.autohide = true;
  system.defaults.finder.AppleShowAllExtensions = true;
  programs.zsh.enable = true;
}
Применение конфигурации:

Код: Выделить всё

darwin-rebuild switch --flake ~/.config/nix-darwin
Откат на предыдущее поколение, если что-то сломалось - одно из главных преимуществ перед brew, где отката "всей системы" просто нет:

Код: Выделить всё

darwin-rebuild switch --rollback
Где это сильно. Команды разработки, где у всех должно быть идентичное окружение; машины, которые надо разворачивать с нуля одинаково; проекты, где нужна полная воспроизводимость (shell.nix/flake даёт изолированную dev-среду на проект). На практике многие держат гибрид: системные пакеты и dev-окружение через Nix, а GUI-приложения (cask) и App Store - всё равно через Homebrew/mas, потому что Nix с macOS-овыми .app-бандлами и DRM-софтом дружит хуже. nix-darwin это прямо поддерживает - умеет вызывать brew bundle из своей конфигурации.

Грабли. Порог входа высокий - Nix-язык непривычный, ошибки криптовые. На Apple Silicon следи за архитектурой (aarch64-darwin против x86_64). Установка тащит том /nix и демона nix-daemon - на корпоративных машинах с жёстким MDM это иногда упирается в политики. Для одного человека на одном ноуте Nix чаще оверкилл; его ценность раскрывается на масштабе и в команде.

asdf и mise: версии языков, а не пакеты

Отдельная ниша, которую путают с пакетными менеджерами. asdf и mise (наследник, на Rust, быстрее) решают одну задачу: держать несколько версий языков и переключать их по проекту. Тебе нужно Node 18 в одном проекте и Node 22 в другом, Python 3.11 тут и 3.13 там - системный brew install node ставит ОДНУ глобальную версию и для этого не годится.

mise читает файл в каталоге проекта и автоматически подставляет нужные версии, когда ты в него заходишь:

Код: Выделить всё

brew install mise
mise use node@22
mise use python@3.13
mise install
Это создаёт в проекте файл с фиксацией версий (.mise.toml / .tool-versions), который коммитится в гит - и у всей команды одинаковые рантаймы. mise умеет ещё переменные окружения и таски, фактически замещая комбо asdf + direnv + make. asdf - тот же принцип, старше, на shell-скриптах, медленнее, конфиг в .tool-versions.

Ключевое различие в голове держи так: brew/MacPorts/Nix управляют ПАКЕТАМИ (что установлено в систему), а mise/asdf управляют ВЕРСИЯМИ рантаймов на проект (что активно прямо сейчас в этом каталоге). Они не конкуренты, а слои - mise обычно ставят через brew и используют поверх.

Сравнение: что под что выбирать

Коротко по сценариям, без воды:
  • CLI-утилиты и GUI-приложения, один человек, быстро - Homebrew (formula + cask). Дефолт, хватает почти всегда.
  • Софт только из Mac App Store (Xcode, Keynote, платные лицензии) - mas, поверх входа в App Store, в идеале через Brewfile.
  • Максимальная изоляция от системы, кастомные сборки с флагами, редкий порт - MacPorts (/opt/local, sudo, variants).
  • Воспроизводимое окружение для команды/парка, развёртывание из гита, откаты - Nix/nix-darwin (часто в гибриде с brew для GUI).
  • Несколько версий языков по проектам - mise (или asdf), поверх brew, не вместо него.
Правило большого пальца: начинай с Homebrew. Добавляй mas, когда упёрся в App Store. Добавляй mise, когда упёрся в версии языков. Тянись к Nix, только когда боль воспроизводимости на команде/парке реально жжёт - не раньше.
Мини-лаба: собрать стек руками

Повтори по шагам, это 10 минут:
  • Установи mas: brew install mas. Затем mas list - убедись, что видишь установленные App Store-приложения с их ID. Если список пуст, открой App Store и проверь, что ты залогинен.
  • Сделай mas search Telegram и найди ID. Не ставь, просто разбери вывод - где ID, где версия.
  • Сделай brew bundle dump в пустом каталоге и посмотри, попали ли в Brewfile строки mas "...". Открой файл, найди секции brew/cask/mas.
  • Установи mise: brew install mise. Создай тестовый каталог, зайди в него, выполни mise use node@22, потом node --version. Выйди в родительский каталог и проверь, что версия node сменилась (или исчезла).
  • Только если интересен Nix и не жалко песочницу: глянь nix-darwin на github (nix-darwin/nix-darwin), прочитай пример flake.nix. Ставить на рабочую машину без понимания не стоит - сначала теория.
Контрольные вопросы
  • Почему mas не может авторизоваться паролем из терминала и что нужно сделать ДО запуска mas install?
  • Чем философия MacPorts (/opt/local, песочница, source) отличается от Homebrew по части изоляции от системы, и какой ценой?
  • В чём принципиальная разница задач у Homebrew и у mise/asdf - почему это не конкуренты, а разные слои?
  • Какую боль закрывает nix-darwin, которую не закрывает ни brew, ни mas, и почему его обычно держат в гибриде с Homebrew?
Итог

Homebrew - твой дефолт и центр тяжести. mas прикручивает к нему Mac App Store через числовые ID и Brewfile, но требует ручного входа в App Store. MacPorts - выбор под жёсткую изоляцию в /opt/local и кастомные сборки. Nix/nix-darwin - тяжёлая артиллерия декларативной воспроизводимости для команд и парка машин. mise/asdf - не про пакеты, а про версии языков по проектам. Не ищи один менеджер на всё: правильный ответ - Homebrew плюс точечно то, что закрывает конкретную дыру.
👍5 ❤️3 🔥3 😄 🤔
Аватара пользователя
vlad3
Сообщения: 1
Зарегистрирован: 22 май 2026, 14:51

Re: Другие пакеты: MacPorts, mas, Nix и App Store

Сообщение vlad3 »

Долго не мог понять почему mas install падает с ошибкой аккаунта, а оказалось надо просто в само приложение App Store сначала залогиниться. Спасибо, в брифе это прямо выделено.
👍1 ❤️1 🔥 😄 🤔
Аватара пользователя
larimerj
Сообщения: 1
Зарегистрирован: 15 май 2026, 04:42

Re: Другие пакеты: MacPorts, mas, Nix и App Store

Сообщение larimerj »

А mise реально шустрее asdf на старте шелла? Сидел на asdf, тормозило открытие новых вкладок терминала, теперь думаю переехать. Кто перешёл - стоило?
👍 ❤️1 🔥 😄 🤔
Ответить
← Предыдущая глава
Homebrew глубже: tap, Brewfile, services, обслуживание
Следующая глава →
Установка приложений: .app, .dmg, .pkg и Gatekeeper

Все главы курса «macOS для профи: администрирование, терминал и Homebrew»

Поделиться темой: ✈ Telegram VK
Похожие запросы: Homebrew для macOS: установка и пакеты

Вернуться в «macOS для профи: администрирование, терминал и Homebrew»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость