На Mac имеется несколько сторонних менеджеров пакетов для установки дополнительного программного обеспечения. Вот как использовать менеджер пакетов Nix с macOS.
Что такое Никс?
Nix — это менеджер пакетов, который предоставляет контейнерную среду разработки для разных платформ. Подобно контейнерным системам, таким как Docker и Kubernetes, Nix позволяет устанавливать настроенные среды разработки на компьютерах и в сетях с меньшими затратами на настройку и устранением проблем.
Традиционно на Mac пользователи использовали MacPorts или Homebrew для установки сторонних пакетов. Обе системы имеют преимущества и недостатки.
Homebrew пользуется популярностью в сообществе Mac из-за простоты использования и установки: пакеты можно установить из приложения «Терминал» в macOS с помощью всего нескольких команд, а обновления выполняются автоматически и так же просто.
Однако и Homebrew, и MacPorts не обеспечивают переносимости между компьютерами. Вы можете написать сценарии терминала (оболочки) для установки пакетов Homebrew или MacPorts в разных системах, но обслуживание сценариев может стать сложным, и часто бывает сложно написать сценарии, учитывающие все возможные конфигурации компьютера.
Nix решает эту проблему, помещая среды разработки в контейнеры и делая их более переносимыми между системами.
Компромисс, который вы платите за Nix, — это немного более сложная конфигурация и более крутая кривая обучения.
Никс-экосистема
NixOS от NixOS Foundation на самом деле представляет собой несколько вещей: это дистрибутив Linux, использующий менеджер пакетов Nix. Nixpkgs — это коллекция из более чем 80 000 пакетов, которые можно установить с помощью менеджера пакетов Nix.
Для Nix существует три отдельных руководства: руководство Nix, руководство Nixpkgs и руководство NixOS.
Существует также справочное руководство по Nix.
Доступна неофициальная Wiki NixOS, поддерживаемая сообществом, а сайт разработки Nix находится по адресу nix.dev. В Wiki NixOS есть информация о менеджере пакетов, языке Nix, Nixpkgs и самой NixOS.
Существует также язык Nix, который вы можете использовать для создания и копирования частей пакетов для новых установок.
Вероятно, вам захочется прочитать все руководство по Nix, по крайней мере, прежде чем начать установку и использование Nix.
Документация Никса.
Определения
Есть несколько новых терминов, которые вам необходимо понять, чтобы использовать Nix.
Nix основан на декларативном программировании — создании программ, основанных на описании того, что часть программного обеспечения должна делать, а не на том, как это делать. Короче говоря, декларативное программирование пытается избежать программного обеспечения, основанного на состоянии и его изменении для достижения определенного результата.
Выражения. Выражения Nix — это, по сути, подкомпоненты устанавливаемого программного обеспечения, которые предопределены для последующего извлечения и установки. Идея выражений заключается в том, что компонент уже определен, поэтому после установки он работает одинаково во всех системах.
Каждое выражение также имеет путь поиска.
Каналы. Канал Nix — это конкретный путь к одному или нескольким предопределенным выражениям Nix, которые можно удаленно получить и установить. Список официальных каналов можно найти на сайте Channels.nixos.org.
У большинства каналов есть версии. На канал также можно подписаться или отказаться от подписки.
Каждый канал имеет загружаемый контент, который устанавливается вместе с каналом.
Магазин. В отличие от Homebrew и самой UNIX, Nix не устанавливает пакеты в стандартные каталоги UNIX, такие как /usr, /bin, /sbin или /opt.
Вместо этого он создает собственное хранилище — специальный каталог и том, используемый для хранения всех установленных пакетов. Используя хранилище, пакеты Nix становятся гораздо более портативными, поскольку весь магазин можно перемещать как единое целое.
Nix устанавливает файл конфигурации в /etc/nixos/configuration.nix, который обычно невидим, если вы не включите функцию скрытых файлов macOS Finder.
Flakes — это экспериментальная функция Nix, представляющая собой файлы, используемые для определения и управления зависимостями между пакетами. Несмотря на свою популярность, флейки Nix все еще являются экспериментальными и не имеют четкой документации, поэтому используйте их на свой страх и риск.
Вывоз мусора. Как и в некоторых средах программирования, когда вы удаляете пакет Nix, он фактически не удаляется сразу. Для этого запустите сборщик мусора Nix.
Думайте о сборщике мусора как о процессе, который выполняется в фоновом режиме и удаляет все неиспользуемые или устаревшие компоненты, которые больше не нужны.
Многие современные системы используют сборщики мусора, включая виртуальную машину Java, а также среды выполнения Swift и Objective-C от Apple.
Вы можете вызвать сборщик мусора Nix в любое время после установки в Терминале с помощью:
Установка Nix включает в себя несколько инструментов командной строки (CLI), которые можно запустить из приложения «Терминал». К ним относятся:
nix-env — используется для управления пользовательскими средами Nix. nix-build — используется для создания выражений Nix. nix-shell — интерактивная командная среда, основанная на выражениях Nix. nix-store — манипулирует или запрашивает хранилище Nix.
Все эти и другие команды подробно описаны в руководстве Nix.
Пользовательская среда Nix — это просто набор программного обеспечения и инструментов, установленных Nix.
Установка Никса
Обычно Nix устанавливается в /nix, но начиная с macOS Catalina корень загрузочного диска macOS доступен только для чтения.
Вместо этого в системах после Catalina Nix создаст новый том для хранения хранилища Nix и смонтирует его как том в скрытой папке macOS Volumes в корне загрузочного диска.
Если у вас есть доступ администратора, установщик запросит у вас разрешение sudo (суперпользователя) при его запуске, чтобы создать новый том.
Чтобы запустить интерактивный установщик Nix в Терминале, введите:
локон -L https://nixos.org/nix/install | ш
Когда программа установки запускается, она выдает вам короткое сообщение о том, что она собирается делать и где что-то будет установлено. Он также создает нового пользователя UNIX и UUID для него, которые используются во время сборки контейнера и пакета Nix.
Установщик Nix сохраняет ссылку на том хранилища Nix в /etc/fstab.
Обратите внимание, что том хранилища Nix монтируется, но не на рабочем столе Finder — вы не увидите его на рабочем столе вашего Mac, но, тем не менее, он все еще там.
Вместо этого Nix монтирует его в корень вашего загрузочного диска в каталоге с именем «Nix Store». Внутри этого каталога есть магазин и папка var.
Папка магазина содержит все пакеты и каналы, загруженные и установленные NIX, папка var содержит папку журнала, а папка nix содержит базу данных, профили, подключение к фоновому демону, пулы пользователей и другие части.
Том хранилища NIX в корне загрузочного диска.
fstab — это файл таблицы файловой системы, который сообщает UNIX, где находятся все файловые системы и их тома.
Когда вы будете готовы продолжить установку, введите пароль администратора в Терминале и нажмите Return.
Вы увидите, как запускается установщик Nix, и при этом он будет описывать, что он создает.
Если установленный Nix имеет доступ sudo, он также попытается добавить некоторые параметры конфигурации к скрытым файлам профиля пользователя на загрузочном диске вашего Mac в папках пользователя и т. д., а именно:
/etc/bashrc /etc/profile.d/nix.sh /etc/zshrc /etc/bash.bashrc /etc/zsh/zshrc
Эти файлы профилей загружаются macOS при входе в систему и содержат переменные среды и пути к установленному программному обеспечению.
Наконец, установщик Nix настраивает фоновый процесс или демон с именем nix-daemon, который в фоновом режиме управляет хранилищем Nix.
После завершения работы установщика вам нужно будет либо выйти из Терминала и снова открыть его, либо открыть новую оболочку Терминала, чтобы Терминал мог загрузить все новые конфигурации Nix.
После завершения работы установщика вы можете инициализировать пакеты Nix по умолчанию и протестировать установку Nix в терминале с помощью:
nix-shell -p nix-info —запустить «nix-info -m»
Вы должны увидеть сообщение о получении путей, а затем список всех пакетов, установленных в локальном хранилище Nix.
В нижней части сообщения вы должны увидеть текущий номер версии Nix и Darwin, имя канала и путь к файлу профиля пакета.
Вы также можете вручную установить любой существующий пакет Nix в Терминале, используя команду nix-env —install, за которой следует имя пакета. Например:
nix-env —установить Firefox
Удаление пакета происходит так же, за исключением того, что вы используете флаг —uninstall для команды nix-env.
Дополнительные ресурсы
Доступно несколько хороших сторонних сайтов Nix — обязательно посетите их.
Zero-to-nix.com — это руководство по использованию Nix, включающее раздел «Быстрый старт» и «Концепции», в которых дается хороший обзор каждой части Nix и того, как они сочетаются друг с другом.
Determinate.systems — это сайт, ориентированный на Nix, который содержит множество учебных пособий по Nix, а также автономный установщик Nix на случай, если вы не хотите использовать установку через терминал.
Книга Nix and Flakes от Райана Ина — это онлайн-руководство и репозиторий GitHub для начинающих, полный полезной информации, связанной с Nix.
Репозиторий nix-darwin содержит все модули, пакеты и документацию для порта Darwin (macOS) менеджера пакетов Nix.
Nixpacks — это утилита, которая может взять любой каталог файлов и поместить его в контейнер для повторного использования.
Никс плюсы и минусы
Как только вы пройдете этап обучения, Nix может оказаться весьма эффективным и полезным. Возможность настраивать и переустанавливать переносимые контейнеры в разных системах очень эффективна.
Вы можете настроить любой набор сред и инструментов, а затем упаковать его для повторного развертывания в большинстве систем.
Возможность создавать собственные пакеты и контейнеры Nix, которые затем можно использовать повторно, экономит много времени, когда вам нужно настроить новую машину.
Основным недостатком Nix как менеджера пакетов является повышенная сложность и необходимость его обучения. Также в настоящее время нет версии для Windows.
Homebrew по-прежнему проще Nix, но, за исключением написания собственных сценариев оболочки для установки, Homebrew не обладает переносимостью. Попытка написать собственные сценарии установки для каждой возможной системы непрактична.
Как только вы изучите и освоите Nix, он станет мощным инструментом в вашем арсенале разработки.