Правильный linux пробуем nixos уникальный странный и очень удобный дистрибутив
NixOS — дистрибутив Linux, созданный поверх менеджера пакетов Nix. Он использует декларативную конфигурацию и позволяет надежно обновлять систему. Предлагаются два основных направления: текущий стабильный выпуск и Unstable после последней разработки.
Любая ОС Linux после установки требует базовой настройки — установки необходимых приложений, настройки базовых служб и безопасности. Обычно для таких целей я создаю текстовый файл и в него копирую базовые команды по настройке ОС и конфигурационные файлы. У каждой версии дистрибутива Linux базовая настройка системы может отличаться.
Несколько лет назад я наткнулся на дистрибутив для Linux под названием NixOS — с декларативным описанием конфигурации системы и функциональным менеджером пакетов nix. Вся конфигурация NixOS описывается в конфигурационном файле /etc/nixos/configuration.nix, в котором указываются настройки системы, устанавливаемые пакеты и сервисы. На основе этого файла командой nixos-rebuild создается конфигурация системы.
Будем ставить NixOS на виртуальную машину. Так как я использую нестабильную ветку, то ее и будем ставить.
Установка NixOS
Для удобства работы запустим openssh сервис:
sudo systemctl start sshd
И зададим пароль для пользователя nixos:
Смотрим текущий IP-адрес виртуальной машины и подключаемся по этому адресу по ssh под пользователем nixos.
После подключения к системе проверяем, какие диски у нас подключены:
Создаем разделы на диске vda (в зависимости от типа виртуальной машины диски могут отличаться) и монтируем их:
sudo parted /dev/vda -- mkpart primary linux-swap 1MiB 4GiBГенерируем первоначальную конфигурацию системы:
После выполнения команды создаются 2 файла:
- /mnt/etc/nixos/configuration.nix
- /mnt/etc/nixos/hardware-configuration.nix
Приведем файл конфигурации /mnt/etc/nixos/configuration.nix к такому виду:
Внимание: указывая параметр —no-root-passwd, мы запрещаем вход в систему пользователю root.
После установки системы установим пароль для нашего пользователя rebrain, чтобы после перезагрузки системы мы смогли подключиться удаленно по ssh:
Размонтируем разделы и выключаем виртуальную машину :Первоначальная установка завершена, переходим к базовой настройке.
Настройка NixOS
В настройках виртуальной машины отключаем ISO образ и загружаем в установленную систему. Заходим по SSH с аутентификацией по паролю, скачиваем и распаковываем архив с конфигурацией в директорию /etc/nixos.
У нас получается такая структура конфигурации:
- основные настройки системы хранятся в директории /etc/nixos/nix-config/generic;
- индивидуальные настройки текущего сервера — в директории /etc/nixos/nix-config/servers/example.
Приводим конфигурацию /etc/nixos/configuration.nix к такому виду:
Генерируем хеш пароля для пользователя rebrain командой:
И вставляем результат в /etc/nixos/nix-config/servers/example/users.nix в hashedPassword, где _generated_hash_pass_ заменяем на наш хеш. В итоге конфигурация будет выглядеть так:
sudo nano /etc/nixos/nix-config/servers/example/users . nix ssh-keys = import . / . . / . . /generic/security/ssh-keys . nix ;Чтобы авторизоваться на сервере по ключу, прописываем в файл generic/security/ssh-keys.nix публичный ключ:
sudo nano /etc/nixos/nix-config/generic/security/ssh-keys . nixСсылка на ключ work.rebrain_example уже прописана в файле servers/example/users.nix:
Внимание! Параметр users.root = < hashedPassword = null; >; запрещает вход в систему пользователю root.
Если необходимо управлять текущей системой c помощью утилиты nixops, добавляем ssh ключ root пользователю:
sudo nano /etc/nixos/nix-config/generic/security/ssh-keys . nix sudo nano /etc/nixos/nix-config/servers/example/users . nixЕсли в системе вместо vda диска используется sda, то в файле /etc/nixos/nix-config/servers/example/configuration.nix меняем /dev/vda на /dev/sda:
sudo nano /etc/nixos/nix-config/servers/example/configuration . nixОбновляем конфигурацию системы и перезагружаемся:
При первом входе zsh предлагает сконфигурировать файл
/.zshrc,так как у нас уже готова для него конфигурация (в файле generic/shell.nix), то пропускаем конфигурацию и создаем пустой файл — вводим 0.
Создадим для нашей конфигурации git-репозиторий:
sudo git config --global user . email "rebrain@NixOS-example" sudo git init & amp ; & amp ; sudo git add -A & amp ; & amp ; sudo git commit -m "first commit"Все команды с git выполняем от имени root, так как права папки /etc/nixos принадлежат root пользователю. Теперь мы можем отслеживать свою конфигурацию.
Первоначальная настройка системы завершена. Пройдемся по основным настройкам:
- nur = import … — здесь добавляем пользовательский репозиторий с программами (полный код в примере).
4. generic/security/ssh-keys.nix — записываем публичные ключи для ssh аутентификации.
5. generic/services/fail2ban.nix — настраиваем работу утилиты fail2ban c файрволом nftables, добавляем, какие IP-адреса игнорировать. Для сервиса sshd задаем агрессивный метод сканирования.
6. generic/services/syslog-ng.nix — сохраняем логи ssh сервера в отдельный файл.
7. generic/services/logrotate.nix — настраиваем ротацию ssh логов.
8. generic/services/sshd.nix
9. generic/services/unbound.nix — ставим локальный ДНС сервер для кэширования запросов.
10. generic/ids.nix — задаем пользователям фиксированный UID .
11. generic/locale.nix — настраиваем шрифт, кодировку, локализацию, синхронизацию с сервером времени и часовой пояс.
12. generic/pkgs.nix — устанавливаем часто используемые программы.
13. generic/shell.nix — настраиваем shell, алиасы, программу nano и ZSH .
14. generic/tweaks.nix — небольшие твики системы.
15. servers/example/configuration.nix — здесь сохраняем индивидуальные настройки для текущей виртуальной машины example.
- boot.loader.grub.device = «/dev/vda»; — загружаемся с диска /dev/vda.
- boot.kernelParams = [ «lockdown=confidentiality» ]; — блокируются возможности, позволяющие вносить изменения в работающее ядро из пространства пользователя, и отключается функциональность, которую можно использовать для извлечения конфиденциальной информации из ядра.
- servers/example/users.nix — настраиваем пользователя rebrain.
- hashedPassword — указываем фиксированный хеш пароля. Опция users.mutableUsers = false; позволяет запретить смену пароля из консоли.
- openssh.authorizedKeys.keys — прописываем открытые указанные в generic/security/ssh-keys.nix публичные ssh ключи, по которым пользователь может авторизоваться на сервере.
- groups.ssh-users.members — прописываем, каким пользователям разрешен вход по ssh.
- services.fail2ban.enable — активируем сервис fail2ban. По умолчанию сервис отключен в generic/services/fail2ban.nix.
- services.fail2ban.jails.sshd — активируем jail sshd.
- servers/example/services/firefall-nft.nix — активируем файрвол nftables, открываем 22 порт.
В итоге, мы закрыли некоторые ветки атаки и подготовили шаблон, который можно использовать на других системах на базе Linux NixOS.
Немного о Linux NixOS
Собственно по мотивам ТЫЦ но про NixOS и на основе моего опыта эксплуатации сабжа в течение как минимум одного года восьми месяцев и двух дней или шестьсот двенадцати дней кому как угодно. Ибо именно столько у меня стоит NixOS основной системой тыц.
Моей предыдущей системой была гента поэтому и свои сравнения я буду проводить непосредственно с ней. Все написанные мною слова выражают мои собственные мысли и не были призваны разжигать какие бы то ни было конфликты и/или жжения в любых частях тела прилегающих к седалищному нерву.
Так вот последние два абзаца написаны собственно только ради того что… Да детки в NixOS таких проблем нет. И быть не может by design. И я скромно умалчиваю про другие архитектуры, контейнера, FHS environment и прочие побочные плюшки.
Немного про установку. Генту можно собрать за время от пары часов до нескольких дней. Развернуть из бинпакетов можно минут за сорок ну плюс минус около того. NixOS бинарный дистрибутив поэтому кампелять тут ничего не нужно.
Дальше сам процесс разработки. Про генту я скромно умолчу. А вот NixOS разрабатывают на гитхабе открыто, свободно и без бюрократии и 1770 запросов на слияние и 3753 проблемы тому доказательство.
Я скажу так в генте для меня всегда была головной болью настроить gnome/kde/plasma. Полные метапакеты натащат столько что ппц а минимальные как правило просто обрезаны по самое немогу и для комфортного существования приходилось искать ту самую золотую середину самостоятельно. В NixOS просто дефолтный выбор мне что называется зашел на ура. Одной проблемой меньше.
Итак вот мы прожили в системе определённое время накопились критические изменения и настало то самое время обновлять. У NixOS считай весь корень тупо набор симлинков поэтому, как не трудно додумать, он чудесно версионируется. Да у вас всегда есть не просто единственное текущее состояние системы но и всё неудалённые прошлые её состояния.
В NixOS пакетный менеджер заведует не просто версией хромиума но и всеми его настройками и да даже его расширениями.
Любые нативные игрушки steam-run спасает и делает не просто хорошо а прям прекрасно.
Ну и покамест на этом всё. Надеюсь мои многобукав помогут кому нибудь сделать свой выбор.
NixOS — это дистрибутив Linux, построенный вокруг двух ключевых идей:
- Декларативное описание конфигурации (или, лучше сказать, состояния) системы.
- Функциональный менеджер пакетов, допускающий откаты и параллельную установку приложений.
Вместо этого 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 с официального сайта и записываем ее на флешку:
Затем перезагружаем машину и грузимся с флешки. NixOS встретит тебя приветствием командной строки.
Первое, что мы должны сделать, — подготовить диск для установки. Проще всего сделать это с помощью parted (в данном примере мы создаем один большой раздел ext3 на диске с разметкой в стиле DOS):
Мы будем ставить систему на зашифрованный диск, поэтому для начала инициализируем шифрование:
Затем примонтируем диск к каталогу /mnt:
Теперь обновляем репозитории:
И генерируем дефолтовые файлы конфигурации:
Команда сохранит на диск два файла: configuration.nix и hardware-configuration.nix . Первый — это и есть тот самый файл описания состояния системы, с которым мы будем работать в дальнейшем. Содержимое второго изменять не надо — оно создается автоматически на основании железа, на которое устанавливается NixOS.
Наконец, устанавливаем систему и перезагружаемся:
Устанавливаем NixOS
Configuration.nix
Файл configuration.nix — основа дистрибутива. В нем пользователь указывает всю желаемую/необходимую конфигурацию (состояние) системы от пользователей и пакетов до шрифтов и в любой момент может ее изменять. Система будет выглядеть ровно так, как ее опишет пользователь в этом файле.
Продолжение доступно только участникам
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
В мире насчитывается несколько сотен дистрибутивов. Некоторые из них похожи как две капли воды, другие представляют собой всё то же самое, но с другой оболочкой рабочего стола. Однако, среди всего многообразия есть такие операционные системы, которые выбиваются на фоне остальных. В этой статье мы собрали самые интересные дистрибутивы Linux.
Какие-то дистрибутивы стремятся быть самыми защищёнными, другие делают упор на отказоустойчивости, третьи так и вовсе требуют особый подход к установке и настройке системы. Иными словами, разнообразие дистрибутивов не ограничивается выбором между DEB и RPM, GNOME и KDE.
Интересные дистрибутивы Linux
1. Puppy Linux
Дистрибутив Puppy Linux предназначен для работы на слабых компьютерах. Для его запуска достаточно иметь 512 МБ оперативной памяти. Конечно, современные ресурсоёмкие приложения вряд ли смогут работать на слабом ПК без подвисаний. Дистрибутиву не под силу поднять производительность компьютера, надо трезво смотреть на вещи. Puppy Linux также можно использовать в качестве переносной ОС, подбирать Flash накопитель особо не придётся. Система будет быстро грузиться даже с USB 2.0, ведь она занимает совсем немного места.
К сожалению, русский язык в дистрибутиве отсутствует. Но не стоит отчаиваться, ведь есть русскоязычный дистрибутив PuppyRus, основывающийся на тех же принципах, что и оригинал.
2. Qubes OS
Дистрибутив Qubes OS – это необычное решение, позволяющее повысить безопасность системы. Для этих целей используется гипервизор Xen. С его помощью для каждого приложения (или группы приложений) создаётся виртуальная машина. Другие приложения не смогут получить доступ к этой машине. Конечно, такой подход похож на паранойю. Прошли те времена, когда целью атак являлись программы и операционная система, да и вирусов на Linux на порядок меньше, чем на Windows.
3. NixOS
Интересный дистрибутив Linux - NixOS обязан своим названием менеджеру пакетов Nix. Именно этот менеджер делает дистрибутив крайне интересным. Всё крутится вокруг конфигурационных файлов. Каждой программе присваивается свой хеш, который используется для наименования папки, у конфигурационных файлов тоже считается хеш. Что это даёт пользователю? А то, что в системе может одновременно существовать несколько версий программы и все изменения прописываются в конфигурационных файлах.
Иными словами, систему сложно сломать и легко перенести на другой компьютер. Дистрибутив не очень дружелюбен к новичкам, даже при установке необходимо дополнить конфигурационные файлы необходимыми записями. Да и сама идея того, что при обновлении приложения его старая версия никуда не пропадает, заставляет проводить регулярные чистки от скопившегося мусора. Если же вам интересна такая идея управления системой, то также можете обратить своё внимание на системы управления конфигурацией Ansible и Puppet.
4. GoboLinux
Продолжая тему хранения нескольких версий программы, нельзя не упомянуть GoboLinux. Эта операционная система также отошла от привычной иерархии хранения файлов. Например, программы хранятся в папке /Programs/ и у одной программы может быть несколько версий, причём у каждой будут свои настройки. На деле привычные папки никуда не делись, но они скрыты от пользователя и являются символическими ссылками на новую структуру хранения файлов. Это позволяет хранить все связанные файлы в одном месте, а не иметь разбросанные по всей системе файлы одной программы.
5. Fedora Silverblue
Fedora Silverblue – это неизменяемая операционная система с атомарными обновлениями. Термин неизменяемая означает то, что системные файлы находятся в режиме «только чтение». Но при этом обновить систему можно, для этого используется система обновления версий OSTree. Вы можете установить новую версию, но при этом старая никуда не денется и в случае чего можно будет откатиться обратно. Для установки приложений в основном используется Flatpak с его системой контейнеров. Если кратко, то разработчики постарались создать неубиваемую систему.
6. Clear Linux
Интересный дистрибутив Linux - Clear Linux не стоит путать с созвучной серверной системой ClearOS. Главной особенностью Clear Linux является то, что дистрибутив собран полностью с использованием компилятора Intel. Казалось бы, ничего необычного, его используют многие разработчики. Но дело в том, что при сборке были использованы флаги для оптимизации работы кода на системах с процессорами Intel. Конечно, это не поднимет производительность до небывалых значений. В среднем прирост составляет 2-5% по сравнению с другими дистрибутивами. Раньше результаты в некоторых программах были выше, но разработчики отказались от использования инструкций AVX2 в угоду лучшей совместимости.
7. Batocera.linux
Дистрибутив Batocera.linux интересен в первую очередь тем, что его можно установить на Flash накопитель и туда же записать ваши любимые игры. Он поддерживает эмуляцию практически всех консолей вплоть до PlayStation 2. Также дистрибутив корректно распознаёт USB и Bluetooth контроллеры. В гости пришли дети и не знаете, чем их занять, или же не хотите давать свою основную систему на растерзание, просто имейте под рукой Flash накопитель с Batocera.linux и пару геймпадов. С таким комплектом можно и самому идти в гости. Тем, кому за 30, будут не прочь поностальгировать вместе с вами в играх NES и MegaDrive.
8. Arch Linux
Ну и куда же без Arch Linux. Этот дистрибутив примечателен в первую очередь тем, что является конструктором (DIY). Изначально в нём нет ничего. И для того, чтобы что-то появилось, необходимо вручную прописывать все команды. По крайней мере до тех пор, пока вы не установите оболочку рабочего стола и менеджер пакетов с графическим интерфейсом. Да, многое из того, что необходимо сделать перед нормальным использованием системы, делается однократно, но всё же позволяет понять структуру операционной системы Linux. К плюсам дистрибутива можно отнести частые обновления.
Для тех, кто не хочет возиться с установкой, можно порекомендовать ответвление Manjaro, которое гораздо более дружелюбно к новичкам.
Выводы
Рассказать про все дистрибутивы невозможно. Например, миниатюрные SliTaz и Tiny Core интересны своим размером, но вряд ли могут стать полноценной заменой «тяжёлых» операционных систем, да и гордиться тем, что дистрибутив занимает десятки мегабайт в то время, когда объёмы накопителей измеряются терабайтами не очень уместно. Тут стоит упомянуть про встраиваемые операционные системы, вроде OpenWRT, но это уже тема отдельного разговора и не затрагивает настольные операционные системы.
Также можно было бы упомянуть дистрибутивы с нестандартной системой инициализации, вроде PCLinuxOS с SysV Init и Void Linux с runit. Но это те изменения, которые сложно оценить при реальном использовании.
А какие интересные дистрибутивы знаете вы? Стоит ли использовать что-то отличное от Debian/Ubuntu на домашнем компьютере? Делитесь своим мнением в комментариях.
Читайте также: