Skip to main content

Nix OS

На Mac имеется несколько сторонних менеджеров пакетов для установки дополнительного программного обеспечения. Вот как использовать менеджер пакетов Nix с macOS.

Что такое Nix?

Nix — это менеджер пакетов, который предоставляет контейнерную среду разработки для разных платформ. Подобно контейнерным системам, таким как Docker и Kubernetes, Nix позволяет устанавливать настроенные среды разработки на компьютерах и в сетях с меньшими затратами на настройку и устранением проблем.

Традиционно на Mac пользователи использовали MacPorts или Homebrew для установки сторонних пакетов. Обе системы имеют преимущества и недостатки.

Homebrew пользуется популярностью в сообществе Mac из-за простоты использования и установки: пакеты можно установить из приложения «Терминал» в macOS с помощью всего нескольких команд, а обновления выполняются автоматически и так же просто.

Однако и Homebrew, и MacPorts не обеспечивают переносимости между компьютерами. Вы можете написать сценарии терминала (оболочки) для установки пакетов Homebrew или MacPorts в разных системах, но обслуживание сценариев может стать сложным, и часто бывает сложно написать сценарии, учитывающие все возможные конфигурации компьютера.

Nix решает эту проблему, помещая среды разработки в контейнеры и делая их более переносимыми между системами.

Компромисс, который вы платите за 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», «Nixpkgs» и «NixOS».

 

Определения

Есть несколько новых терминов, которые вам необходимо понять, чтобы использовать 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 устанавливается в /nix, но начиная с macOS Catalina корень загрузочного диска macOS доступен только для чтения.

Вместо этого в системах после Catalina Nix создаст новый том для хранения хранилища Nix и смонтирует его как том в скрытой папке macOS Volumes в корне загрузочного диска.

Если у вас есть доступ администратора, установщик запросит у вас разрешение sudo (суперпользователя) при его запуске, чтобы создать новый том.

Чтобы запустить интерактивный установщик Nix в Терминале, введите:

curl -L https://nixos.org/nix/install | sh

Когда программа установки запускается, она выдает вам короткое сообщение о том, что она собирается делать и где что-то будет установлено. Он также создает нового пользователя UNIX и UUID для него, которые используются во время сборки контейнера и пакета Nix.

Установщик Nix сохраняет ссылку на том хранилища Nix в /etc/fstab.

Обратите внимание, что том хранилища Nix монтируется, но не на рабочем столе Finder — вы не увидите его на рабочем столе вашего Mac, но, тем не менее, он все еще там.

Вместо этого Nix монтирует его в корень вашего загрузочного диска в каталоге с именем «Nix Store». Внутри этого каталога есть магазин и папка var.

Папка магазина содержит все пакеты и каналы, загруженные и установленные NIX, папка var содержит папку журнала, а папка nix содержит базу данных, профили, подключение к фоновому демону, пулы пользователей и другие части.

Том хранилища NIX, смонтированный на загрузочном диске macOS.

Том хранилища 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, он станет мощным инструментом в вашем арсенале разработки.