Intereting Posts
почему моя ловушка не работает, когда сигнал установлен как «DEBUG» поддельный сигнал? Azure User Defined Endpoint в Ubuntu не работает Настройка прозрачного прокси-сервера перед явным прокси-сервером Как заменить текст в текстовом файле с помощью битового файла сценария? scp дает “не обычный файл” Как запустить консольное приложение, используя учетную запись «Сетевая услуга» Как проверить наличие 32-битного / 64-битного ядра для Linux Откройте порт 3306 в ubuntu 12.04, чтобы разрешить соединения с mysql с любого ip Копирование тома с использованием Java Как создать обратный прокси-сервер за CDN (другой обратный прокси) Как получить остальные аргументы в пакетном файле Windows? Всегда приложение Java заканчивается с «Exit 143» Ubuntu Заголовок Nginx no ‘Access-Control-Allow-Origin’ Linux asm (“int $ 0x0”) против деления на ноль Как избежать размещения переменных окружения в нескольких местах с помощью Django, nginx и uWSGI?

Обзор архитектуры Nix / OS?

Хотя вики и руководства Nix / OS предоставляют много отличной информации, мне все еще не удается получить обзор архитектуры. Извинения за количество и наивность вопросов; не стесняйтесь отвечать на подмножество:


1. Что представляет собой пакет Nix?

Из моего чтения руководства пакет Nix:

я. Выражение Nix, которое извлекает источник и зависимости, необходимые для сборки.

II. Сценарий builder .

III. Список на all-packages.nix .

Источник и двоичный файл вместе с генерируемыми выводами помещаются в nix/store , а каналы автоматизируют обновления, сохраняя их актуально эффективно, используя общий двоичный кеш.

а. Это правильно и полно?

б. Где хранятся выражения .nix?

с. Можно ли просто скопировать папки пакетов между nix/store s разных машин, если они имеют одну и ту же архитектуру?


2. Что представляет собой среду Nix?

а. Где и как определяются среды?

б. Как насчет профилей пользователей?

с. Как работает команда nix-shell ? Связано ли это с командой nix-env ?


3. Какова связь между средами configuration.nix NixOS и Nix?

Из руководства и вики я собираю NixOS – пакет Nix, и Nix создает базовую системную среду на основе configuration.nix .

а. Это правда, и если да, то что делают nixos-rebuild и nixos-install ?

б. Можно ли отменить процесс, т. Е. Создать сжатый пакет или файлы конфигурации из среды?

с. Что я могу сделать с NixOS, что я не могу сделать с Nix?


4. Каковы наилучшие практики при использовании Nix для создания переносимых и воспроизводимых сред для совместной работы с коллегами?

а. Каковы различные подходы к совместному использованию настольных компьютеров, серверов и среды разработки?

б. Каковы варианты использования этих подходов?

с. Каковы их преимущества и недостатки в отношении переносимости и доступности?


5. Откройте вопрос о бонусе: что еще важно для архитектуры Nix / OS?

1.а

Да, вы можете просмотреть Nix также как инструмент сборки, который использует /nix/store в качестве кеша. Nix, являющийся менеджером пакетов, является лишь побочным эффектом этого дизайна.

Где ваши выражения nix зависят от вашей установки. Чтобы понять это, просмотрите переменную $ NIX_PATH, которая указывает на места, где расположены копии репозитория nixpkgs . Эти копии были (иногда по-прежнему) управляются с помощью инструмента nix-channel , но в будущем вы можете указать на nixpkgs:

 export NIX_PATH=nixpkgs=https://github.com/NixOS/nixpkgs/archive/16.03.tar.gz 

Вы можете узнать больше о NIX_PATH в этом сообщении в блоге о путях поиска nix

1.c

Да, пакеты могут быть скопированы между машинами. На самом деле для этого уже есть инструмент: nix-copy-closure .

2.а

Я полагаю, вы говорите здесь о средах Nix, которыми вы управляете с помощью nix-env . Обычно мы рассматриваем их как nix-профили. То, что я сказал о пути поиска nix (переменная NIX_PATH ) в пункте 1, действительно не применимо к nix-env .

Инструмент nix-env использует ~ / .nix-defexpr, который является частью NIX_PATH по умолчанию, но это только совпадение. Если вы очистите NIX_PATH, nix-env все равно сможет найти деривации из-за ~ / .nix-defexpr.

Профиль пользователя – это просто среда nix (описанная в 2.a ), которую вы можете изменить на все, например:

 nix-env --switch-profile ./result 

где ./result – это что-то в /nix/store или что-то, что указывает на /nix/store . Затем вышеуказанная команда переключит символическую ссылку ~/.nix-profile с вашим ./result .

2.c

nix-shell на самом деле ближе к команде nix-build . Поэтому позвольте мне сначала объяснить, что делает nix-build .

nix-build используется для создания .nix файлов (также дериваций, но для этого мне придется объяснить, что такое деривация). Пример использования nix-build :

 nix-build something.nix 

Вышеупомянутая команда ./result символическую ссылку ./result , которая указывает на что-то в /nix/store . Команда Nix реализует сборку и сохраняет вывод в /nix/store .

nix-shell с другой стороны, сделает именно то, что делает nix-build , за исключением того, что не запускает скрипт builder и не добавит вас в эту среду. Таким образом, вы получаете среду, которую вы можете использовать для разработки выражений nix, которые также могут находиться за пределами репозитория nixpkgs (например, ваши частные проекты).

3.a

Nix устанавливает двоичный файл и NixOS создает конфигурацию для этого двоичного файла и подключает его к системе init (в настоящее время systemd).

3.b

Нет. Это то, что делают другие менеджеры конфигурации. Никс работает наоборот. Разница в подходе хорошо описана в этом сообщении блога .

3.С

Как сказано в 3.a , nix установит только двоичные файлы, в то время как nixos также проверит, работает ли двоичный файл.

4.a / б / с

В принципе нет предела, делай, как ты думаешь, подходит тебе. Как только вы поймете основные понятия, вы найдете то, что лучше всего подходит для вас. Посмотрите на дотфайлы / конфигурации других пользователей и получите мнения.

Я использую свою коллекцию конфигураций nixos для управления ноутбуками для своей семьи с помощью службы system.autoUpgrade .

Чтобы создать (встроенную) воспроизводимую среду, я написал сообщение в блоге некоторое время назад.

5.

Мой личный любимый инструмент, который идет (или уже здесь), является vulnix . Это проверит вашу текущую систему / проект на предмет текущих уязвимостей (CVE). И это делает nix отличным от других, тем более, что он настолько прост в использовании (без установки предприятия).

Другой случай, который я нашел для nix, – это создание воспроизводимых изображений dockerов с помощью помощников dockerTools .