Сколько раз в жизни ты переустанавливал Linux? А сколько раз устанавливал одинаковый набор пакетов на несколько разных машин? И не приходилось ли тебе начинать все сначала из-за неудачного обновления системы или конфигов? Все это не только утомляет, но и грозит серьезными потерями, если речь идет о бизнесе. Избежать таких проблем поможет NixOS — дистрибутив, который можно в одну команду привести к нужному тебе состоянию.
 

Декларативный и функциональный

NixOS — это дистрибутив Linux, построенный вокруг двух ключевых идей:

  1. Декларативное описание конфигурации (или, лучше сказать, состояния) системы.
  2. Функциональный менеджер пакетов, допускающий откаты и параллельную установку приложений.

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

Вместо этого NixOS предлагает описать необходимое состояние системы в специальном конфигурационном файле, где будет перечислено все, начиная от пакетов и заканчивая возможностью логина по SSH с помощью пароля. Далее достаточно выполнить одну команду, и, в каком бы состоянии система ни находилась в данный момент, пакетный менеджер приведет ее к требуемому.

Другими словами, если тебе нужна система с установленным Apache, PHP, MySQL, SSH и с некоторыми дополнительными настройками, ты просто описываешь все это в одном конфиге, а затем отдаешь команду на развертывание системы. Независимо от того, свежеустановленная это ОС или уже используемая, ты получишь абсолютно идентичную систему с идентичным набором пакетов и конфигов.

Все это возможно благодаря пакетному менеджеру Nix. В классических дистрибутивах Linux пакетный менеджер при установке пакета «размазывает» его содержимое по всей системе: запускаемые файлы в /usr/bin, библиотеки в /usr/lib, остальные компоненты — в /usr/share. В результате ты получаешь проблемы с неудачным обновлением/удалением пакетов (когда могут остаться файлы-сироты), ад зависимостей (когда два приложения требуют разные версии /usr/lib/libjpeg.so, например) и легкий способ уничтожить всю систему, неудачно обновившись.

Пакетный менеджер Nix размещает все установленные пакеты в собственных подкаталогах внутри каталога /nix/store. К примеру, установленный пакет Git будет располагаться в каталоге /nix/store/nawl092prjblbhvv16kxxbk6j9gkgcqm-git-2.14.1, где набор цифр — это хеш, образованный от окружения сборки пакета: файлов исходников, дерева зависимостей, флагов компилятора и другого. Поэтому с помощью Nix можно установить одновременно не только две версии одного приложения, но и даже две разные сборки.

Благодаря возможности устанавливать разные версии и сборки пакетов и тому, что они располагаются отдельно от системных каталогов, NixOS решает почти все проблемы классических пакетных менеджеров — от неконсистентности системы после неудачного обновления до ада зависимостей. Этот же механизм позволяет откатить систему к предыдущему состоянию и создать сразу несколько разных профилей (слепков) системы, переключаться между которыми можно, не перезагружая машину. Хочешь превратить домашний комп в сервер одной командой? В NixOS с этим нет проблем. Ты даже можешь унести конфигурационный файл NixOS на другую машину и развернуть на ней точно такую же систему с абсолютно тем же набором пакетов.

NixOS позволяет устанавливать софт не только root, но и обычным пользователям (в этом случае пакет будет установлен в домашний каталог), а также имеет встроенный сборщик мусора, который автоматически удалит все пакеты-зависимости, если они больше никому не нужны.

 

Устанавливаем

В NixOS нет инсталлятора, но если ты когда-нибудь устанавливал Arch Linux, то у тебя не должно возникнуть проблем. Для начала скачиваем последнюю версию NixOS с официального сайта и записываем ее на флешку:

$ wget https://d3g5gsiof5omrk.cloudfront.net/nixos/18.03/nixos-18.03.133192.45f52f765cd/nixos-graphical-18.03.133192.45f52f765cd-x86_64-linux.iso
$ sudo dd if=nixos-graphical-18.03.133192.45f52f765cd-x86_64-linux.iso of=/dev/sdX

Затем перезагружаем машину и грузимся с флешки. NixOS встретит тебя приветствием командной строки.

Первое, что мы должны сделать, — подготовить диск для установки. Проще всего сделать это с помощью parted (в данном примере мы создаем один большой раздел ext3 на диске с разметкой в стиле DOS):

$ parted /dev/sda
(parted) mklabel msdos
(parted) mkpart primary ext4 0% 100%
(parted) quit

Мы будем ставить систему на зашифрованный диск, поэтому для начала инициализируем шифрование:

$ export NIXOS_NAME="name" # Придумай свое имя
$ cryptsetup luksFormat /dev/sda1
$ cryptsetup luksOpen /dev/sda1  ${NIXOS_NAME}

Затем примонтируем диск к каталогу /mnt:

$ mkfs.ext4 -L ${NIXOS_NAME} /dev/mapper/${NIXOS_NAME}
$ mount /dev/mapper/${NIXOS_NAME} /mnt

Теперь обновляем репозитории:

$ nix-channel --update

И генерируем дефолтовые файлы конфигурации:

$ nixos-generate-config --root /mnt

Команда сохранит на диск два файла: configuration.nix и hardware-configuration.nix. Первый — это и есть тот самый файл описания состояния системы, с которым мы будем работать в дальнейшем. Содержимое второго изменять не надо — оно создается автоматически на основании железа, на которое устанавливается NixOS.

Наконец, устанавливаем систему и перезагружаемся:

$ nixos-install
Устанавливаем NixOS
Устанавливаем NixOS
 

Configuration.nix

Файл configuration.nix — основа дистрибутива. В нем пользователь указывает всю желаемую/необходимую конфигурацию (состояние) системы от пользователей и пакетов до шрифтов и в любой момент может ее изменять. Система будет выглядеть ровно так, как ее опишет пользователь в этом файле.

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

Вариант 1. Оформи подписку на «Хакер», чтобы читать все материалы на сайте

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

Вариант 2. Купи один материал

Заинтересовала информация, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для материалов, опубликованных более двух месяцев назад.


10 комментариев

  1. alexander681

    02.10.2018 at 14:54

    Очень понравилась статья и захотелось использовать ее (NixOS) на десктопе. Валерия, есть десктоп под арчем (точнее под Antegros). В принципе — Antegros очень хороший дистрибутив и все прекрасно работает (он у меня используется для всяких экспериментов). Как мне, не прибегая к флешке и т.д (описанных в статье) безболезненно с сохранением данных в домашней директории установить поверх NixOS. Спасибо за ответ.

  2. alexander681

    02.10.2018 at 15:56

    А вот кстати. «Правильный Linux». Ммм… Имхо, любой линукс правильный, если его правильно готовить. У каждого есть любимый дистрибут. У меня (наверное, как и у многих — это убунта (недавно смотрел англоязычные каналы — они произносят как убунту — с ударением на последнем слоге — никогда бы не подумал 🙂 ) с рабочим окружением XFCE, т.е. XUBUNTU. Я, конечно, подозреваю, что это есть «неправильный Linux». Хотя… И да — для всяких экспериментов у меня есть почти полноценный арч — в виде Antegros. Но, поди, тоже «неправильный». Ваше мнение — что есть «правильный» линукс. Неужто генту?)

    • AgentJordan

      02.10.2018 at 19:22

      У Убунту есть одно правильное произношение: у’бунту. Очень схоже с русским, ударение на «б». Некоторые англоговорящие произносят «юбанту», но это неправильно, так как ubuntu — африканское слово, а не английское.
      https://www.ubuntu.com/about

    • LuckyTiger

      03.10.2018 at 01:28

      Работал с разными дистрами, остановился на Ubuntu. От добра добра не ищут. Всем добра))

    • icoz

      03.10.2018 at 14:35

      Голый Arch наше всё! 🙂

    • sflyer

      12.10.2018 at 08:04

      Нет не правильных линуксов, есть задачи, которые они решают и личные предпочтения устанавливающего.
      Как бы кто не любил арч, например, не будет же человек устанавливать его на сервер? Потому что есть RH, debian, да тот же ubuntu server.

      Но я смотрю со стороны функционала. А если смотреть со стороны какой самый GNU, то тут, конечно, будет «правильный» и «не правильный» linux, но мне не особо это интересно, честно говоря.

  3. SpiritWolf

    03.10.2018 at 12:46

    Может я чего-то не понимаю, но по тексту написан раздел ext3, в примере — ext4, поясните кто, пожалуйста.

  4. ya

    03.10.2018 at 16:20

    только треш, только Slackware. для серверов Centos7

  5. bbq

    08.10.2018 at 09:21

    Это интересно. Но в принципе подтянуть некоторое состояние и накатить окружение можно через docker. Часто использую его именно для этих целей. Можешь все описать в Dockerfile все настройки и потом делать билд . Можешь через docker composer друг за другом поднимать микросервисы или конфигурации. Можешь свой билд запушить в докерхаб. Можешь конфиг билда вообще через IPFS цеплять (децентрализованно) только креды там не храни.

Оставить мнение

Check Also

Пишем стилер. Как вытащить пароли Chrome и Firefox своими руками

Ты наверняка слышал о таком классе зловредных приложений, как стилеры. Их задача — вытащит…