Сколько раз в жизни ты переустанавливал 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 — основа дистрибутива. В нем пользователь указывает всю желаемую/необходимую конфигурацию (состояние) системы от пользователей и пакетов до шрифтов и в любой момент может ее изменять. Система будет выглядеть ровно так, как ее опишет пользователь в этом файле.

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

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

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

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

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

Целенаправленная социальная инженерия. Нестандартные техники введения в заблуждение

В предыдущей статье мы разобрали массовые атаки. Но их применимость ограничена: пентестер …