Следующая новость
Предыдущая новость

Погружение в NixOS. Осваиваем фичи одного из самых необычных дистрибутивов GNU/Linux

02.04.2019 16:14

Содержание статьи

  • Готовые конфигурации
  • Сборка пакета из исходников
  • Бинарные пакеты и FHS
  • Приятные мелочи
  • Hardened
  • Хранение секретов для публичных конфигураций
  • Декларативные контейнеры
  • Декларативная генерация виртуальных машин
  • Стабильность
  • Более радикальное решение проблем с FHS
  • Home manager
  • Чем ты можешь помочь NixOS?
  • Где получить помощь?
  • Вместо заключения

Ранее мы уже рассказывали о NixOS, весьма необычном и удобном дистрибутиве GNU/Linux, позволяющем описать всю конфигурацию системы в одном файле и развернуть ее на любой машине в любой момент. Тогда мы дали лишь краткое введение в особенности системы и примеры ее использования. Сегодня я расскажу о том, как с помощью NixOS решать повседневные задачи и выходить из трудных ситуаций.

Упомяну, что значит NixOS для меня. Долгие годы я использовал Gentoo, и NixOS стал для меня Gentoo done right, когда, несмотря на гибкость системы и возможность простой сборки всего нужного из исходных кодов, я получил глобальный бинарный кеш для аналогичных базовым пакетов, а также простоту развертывания.

NixOS также служит отличным примером того, как нужно работать с комьюнити, — запросы на слияние (pull request) рассматриваются значительно быстрее и качественнее всех существующих на данный момент дистрибутивов. Даже если ты не занимаешься непосредственно разработкой, ты не столкнешься со старыми бюрократами из таких проектов, как Debian и Gentoo.

Из последнего следует один немаловажный и крайне приятный факт: ни оверлеи (overlay — сторонние репозитории, содержащие сценарии сборки ebuild для пакетов), ни их аналоги из других дистрибутивов больше не являются необходимостью. Отправляй свои патчи сразу в апстрим!

Готовые конфигурации

Так как NixOS предоставляет простую возможность распространять настройки своих машин так же, как и уже ставшая обычной традиция делиться своими конфигурациями для GNU Emacs, мы можем использовать подготовленные другими пользователями конфигурации в качестве базы для своей, тем самым не решая те проблемы, которые уже кто-то решал.

Для NixOS существует проект Simple Nixos Mailserver, который предоставляет готовую конфигурацию для почтового сервера. Автор этой статьи использует этот проект, а полный пример конфигурации можно посмотреть на моем Git-сервере.

Мы можем включить чужую конфигурацию, забрав ее с любого ресурса (добавь эти строки в configuration.nix):

imports = [   ...   (builtins.fetchTarball {     url = "https://gitlab.com/simple-nixos-mailserver/nixos-mailserver/-/archive/v2.2.0/nixos-mailserver-v2.2.0.tar.gz";     sha256 = "0gqzgy50hgb5zmdjiffaqp277a68564vflfpjvk1gv6079zahksc";   }) ]; 

SHA-256 позволяет быть уверенным в аутентичности используемого архива.

Также вместо fetchTarball можно использовать fetchGit. Далее мы уже работаем с конфигурацией mailserver таким же образом, как если бы это было просто локальное включение файлов:

mailserver = {   enable = true;   fqdn = "mail.dumpstack.io";   ... }; 

Далее нам остается только (тут я намеренно опускаю настройку DNS, она не касается непосредственно настроек системы, и подобным придется заниматься что на NixOS, что на Ubuntu, что на других дистрибутивах) указать пользователей, alias’ы et cetera.

Таким же образом мы можем распространять что угодно, например управлять базовым слоем конфигурации для компании — настройкой домена, стандартных плагинов для браузера и так далее. Весомый плюс данного подхода — он не ограничивает свободу людей, работающих в компании, так как нет чувства, что твоим компьютером управляет кто-то другой: человек может посмотреть на обновленную конфигурацию, изменив URL «перейти на нее», и продолжать работать.

Или, быть может, тебе нужно работать со звуком и понадобилось реалтайм-аудио? Просто воспользуйся готовой конфигурацией от musnix.

Сборка пакета из исходников

Система сборки пакетов Nix чем-то напоминает систему ebuild для Gentoo, когда большую часть работы выполняет сам пакетный менеджер, который содержит информацию о том, как собирать при наличии Makefile, CMakeLists et cetera.

Сборочный файл для GNU Hello совсем не будет содержать указаний на то, как собирать:

{ stdenv, fetchurl }:  stdenv.mkDerivation rec {   name = "hello-${version}";   version = "2.10";    src = fetchurl {     url = "mirror://gnu/hello/${name}.tar.gz";     sha256 = "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i";   };    doCheck = true;    meta = with stdenv.lib; {     description = "A program that produces a familiar, friendly greeting";     longDescription = ''       GNU Hello is a program that prints "Hello, world!" when you run it.       It is fully customizable.     '';     homepage = https://www.gnu.org/software/hello/manual/;     license = licenses.gpl3Plus;     maintainers = [ maintainers.eelco ];     platforms = platforms.all;   }; } 

Для сборки и установки достаточно записать эти строки в файл (hello.nix, например) и выполнить следующую команду:

# nix-env -r -f ./hello.nix -i 

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

Мы не будем подробно рассматривать все случаи сборки различных приложений, ибо вариантов бесчисленное множество. Тем не менее я советую посмотреть своими глазами на то, каким образом составляются описания для сборки различного ПО в репозитории nixpkgs. Я крайне редко (буду честным — никогда) пишу описания сборки с нуля, в nixpkgs легко найти пример для разных систем сборки, а также великолепный набор костылей на все случаи жизни.

Продолжение доступно только подписчикам

Материалы из последних выпусков можно покупать отдельно только через два месяца после публикации. Чтобы продолжить чтение, необходимо купить подписку.

Подпишись на «Хакер» по выгодной цене!

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

1 год

7490 р.

Экономия 1400 рублей!

1 месяц

720 р.

25-30 статей в месяц

Уже подписан?

Источник

Последние новости