LINUX.ORG.RU
Ответ на: комментарий от shell-script

Банальная переконфигурация и пересборка KDE с отключением всего связанного с kdepim, baloo и прочего умного десктопа потребовала несколько дней вдумчивого чтения документации, экспериментов и неоднократного переделывания. Для отключения ненужных зависимостей и блокировки некоторых утилит на нужных мне версиях ещё пару дней пришлось посидеть, чтобы зафиксировать это не ломая при этом настроенное ранее. Итого, не менее недели только на частичную настройку десктопа.

Открою тебе секрет: на NixOS таким практически никто не страдает кроме бывших гентушников. Это прям какая-то болезнь, обязательно нужно лишние зависимости повыпиливать, иначе внутри не будет гладко и шелковисто. Подозреваю что это из-за неизбежной необходимости конпиляний на генте и нежелания ждать кучу времени из-за вещей которые не сильно-то и нужны. Так вот, в NixOS уже наконпеляно, ждать не нужно.

Большинству любителей кед достаточно трёх строчек:

  services.xserver.enable = true;
  services.xserver.displayManager.sddm.enable = true;
  services.xserver.desktopManager.plasma5.enable = true;

Всё. Кеды стоят. Сколько там недель нужно потратить на копипастинг трех строчек из мануала?

С графическим инсталлятором (никому не рекомендую, но как факт) даже этого делать не нужно, достаточно в списке кеды выбрать.

Tsukasa
()
Ответ на: комментарий от Tsukasa

Я подумал, что nix pills это что-то вроде handbook из gentoo и начал его читать. Так вот там ничего нет про графический инсталлятор, по крайней мере в начале.

Shushundr ★★★★
() автор топика
Ответ на: комментарий от Shushundr

«Хендбук» NixOS лежит здесь: https://nixos.org/manual/nixos/stable

nix pills это про сам nix и приблизительные паттерны используемые в nixpkgs для написания пакетов. Полезно оно в основном для тех, кому интересно как устроен nixpkgs. Написано он конечно не очень хорошо и я бы для начала посоветовал что-то вроде https://zero-to-nix.com. NixOS это больше про модули, там уже чучуть другие паттерны.

Tsukasa
()
Последнее исправление: Tsukasa (всего исправлений: 3)
Ответ на: комментарий от Tsukasa

А ничего, что kdepim ощутимо даёт проседание в производительности? Плюс помимо сборки там ещё и конфиги специфичные надо описать. Ну да ладно. Это опять гентушники гонятся за удобством.

Ну вот тебе другой пример. Чисто рабочий. Понадобился мне так же nginx. С нестандартными модулями для webdav, которых нет в дефолтной сборке. А так же понадобилось для него нагенерить конфигов с подключением ssl с разными параметрами для разных виртхостов. Ну и разумеется с возможностью включать-выключать эти виртхосты и для них давать разные настройки.

Есть два пути для такого в NixOS:

  • Сделать по уму и написать генераторы конфигов.
  • Положить под каждый виртхост шаблон конфига и копипастить его в нужное место.

Второй подход расходится с принципом конфигурации nixos и не даёт возможности гибко добавлять виртхосты одной строкой как задумано, а требует для каждого из них копипастить очередной шаблон(в десятки строк) в конфигурации. Из-за чего настройка становится громоздкой и тяжелой в поддержке. Если не сделать этого, и просто положить конфиги в обычном текстовом виде, это ломает весь принцип повторяемости nixos, ради которого и сделан весь этот язык конфигурации. Т.е. не даёт полностью повторить систему, используя только её описание на языке nix. И что в этом случае накомпилено? Или опять мы гентушники слишком многого хотим, отходя от божественного дефолта?

Блин. Ну вот почему всем надо обозвать оппонента, не ознакомившись даже первыми главами хендбука? Если ты ни разу в жизни не сталкивался ни с чем, кроме дефолта и ни разу не читал документацию на дистрибутив, который пытаешься использовать, то это не значит, что так же и у остальных. Если же ты просто кладёшь файлы с конфигами приложения вместо написания описания конфигурации, то зачем тебе тогда NixOS. Это любой другой дистрибутив умеет.

shell-script ★★★★★
()
Ответ на: комментарий от shell-script

А ничего, что kdepim ощутимо даёт проседание в производительности?

УМВР

Ну вот тебе другой пример. Чисто рабочий. Понадобился мне так же nginx. С нестандартными модулями для webdav, которых нет в дефолтной сборке. А так же понадобилось для него нагенерить конфигов с подключением ssl с разными параметрами для разных виртхостов. Ну и разумеется с возможностью включать-выключать эти виртхосты и для них давать разные настройки.

Пожалуйста, nginx с модулем dav, автоматически обновляемымими сертификатами letsencrypt для двух доменов и настроенным фаерволом:

{ config, pkgs, ... }:
{
  networking.firewall.allowedTCPPorts = [ 80 443 ];

  security.acme.acceptTerms = true;
  security.acme.defaults.email = "admin@myhost.org";

  services.nginx = {
    enable = true;
    additionalModules = [ pkgs.nginxModules.dav ];
    recommendedTlsSettings = true;
    virtualHosts = {  # можно генерить как душе угодно, пример для двух хостов
      "example1.com" =  {
        enableACME = true;
        forceSSL = true;
        locations."/" = {
          proxyPass = "http://127.0.0.1:1234";
        };
      };
      "example2.com" =  {
        enableACME = true;
        forceSSL = true;
        locations."/" = {
          proxyPass = "http://127.0.0.1:1235";
        };
      };
    };
  };
}

Сколько нужно всего сделать чтобы получить аналогичный результат на генте? Мне достаточно одной команды чтобы это раскатить.

Сделать по уму и написать генераторы конфигов

NixOS практически полностью из них и состоит. Можно сказать это и есть вся суть NixOS.

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

Открой для себя функции:

{ config, pkgs, ... }:
let
  makeVhost = port: {
    enableACME = true;
    forceSSL = true;
    locations."/" = {
      proxyPass = "http://127.0.0.1:${toString port}";
    };
  };
in
{
  networking.firewall.allowedTCPPorts = [ 80 443 ];

  security.acme.acceptTerms = true;
  security.acme.defaults.email = "admin@myhost.org";

  services.nginx = {
    enable = true;
    additionalModules = [ pkgs.nginxModules.dav ];
    recommendedTlsSettings = true;
    virtualHosts = {
      "example1.com" = makeVhost 1234;
      "example2.com" = makeVhost 1235;
    };
  };
}

Если не сделать этого, и просто положить конфиги в обычном текстовом виде, это ломает весь принцип повторяемости nixos, ради которого и сделан весь этот язык конфигурации.

Не ломает, если они часть конфига. К примеру

  .......
  locations."/" = {
    proxyPass = "http://127.0.0.1:1234";
    extraConfig = ''
      include ${./my-config-file.conf}; # my-config-file.conf копируется в /nix/store
    '';
  };

Файл my-config-file.conf становится частью системы, все гарантии работают.

Блин. Ну вот почему всем надо обозвать оппонента, не ознакомившись даже первыми главами хендбука? Если ты ни разу в жизни не сталкивался ни с чем, кроме дефолта и ни разу не читал документацию на дистрибутив, который пытаешься использовать, то это не значит, что так же и у остальных. Если же ты просто кладёшь файлы с конфигами приложения вместо написания описания конфигурации, то зачем тебе тогда NixOS. Это любой другой дистрибутив умеет.

Не на того напал. Запустишь на генте кластер из пяти виртуалок Talos в одной сети одним конфигом? Я смогу своим модулем (да, мне нехуй делать):

{ config, pkgs, ... }:
{
  networking.bridges.br0.interfaces = [ "eth1" ];

  networking.interfaces.eth0.useDHCP = true;
  networking.interfaces.br0.useDHCP = false;
  networking.interfaces.br0.ipv4.addresses = [
    { address = "192.168.1.1"; prefixLength = 24; }
  ];

  networking.nat = {
    enable = true;
    externalInterface = "eth0";
    internalInterfaces = [ "br0" ];
    internalIPs = [ "192.168.1.0/24" ];
  };

  services.dhcpd4 = {
    enable = true;
    interfaces = config.networking.nat.internalInterfaces;
    extraConfig = ''
      option domain-name-servers 8.8.8.8, 8.8.4.4;
      option routers 192.168.1.1;
      subnet 192.168.1.0 netmask 255.255.255.0 {
        range 192.168.1.10 192.168.1.254;
      }
    '';
  };

  services.talos = {
    control-plane-1 = {
      smp = "cores=2";
      mem = 2;
      disk = 10;
      bridge = "br0";
    };
    control-plane-2 = {
      smp = "cores=2";
      mem = 2;
      disk = 10;
      bridge = "br0";
    };
    worker-1 = {
      smp = "cores=4";
      mem = 4;
      disk = 50;
      bridge = "br0";
    };
    worker-2 = {
      smp = "cores=4";
      mem = 4;
      disk = 50;
      bridge = "br0";
    };
    worker-3 = {
      smp = "cores=4";
      mem = 4;
      disk = 50;
      bridge = "br0";
    };
  };
}

Ещё вопросы?

Tsukasa
()
Последнее исправление: Tsukasa (всего исправлений: 1)
Ответ на: комментарий от Tsukasa

Ну неужели кто-то наконец попробовал что-то конкретное настроить.

А теперь берём различающиеся конфиги для каждого виртхоста. И если их несколько десятков, конфигурация разрастается. С разными proxypass-параметрами, с разными локейшенами(по несколько на каждый виртхост) и прочим. Плюс, у некоторых виртхостов может быть несколько server_name. У разных виртхостов могут быть разные параметры ssl вплоть до различий в CHIPERS или подключении нескольких сертификатов. В предложенной тобой схеме уже неудобно, нужно иерархию строить иначе. Да, я понимаю, что ты сейчас скажешь, что можно переделать. И я не спорю, можно. Я как раз и делал. И в этом-то и заключается сложность. Возможно, ты родился со знанием языка описания nix, но не каждому так повезло. После того, как я повозился с настройкой этого, я понял, что оно того не стоит. Да, после того, как всё настроил и поставил, выглядит красиво. Но на написание и отладку, уходит непозволительно много времени.

Сколько нужно всего сделать чтобы получить аналогичный результат на генте?

Установить голую gentoo, раскатать ansible-role(здесь заменить на удобную систему управления), которая выполнит сборку, притянет и сделает конфиги. Не нравится gentoo, какой-нибудь playbook nginx-common этой роли минимальными правками затачивается под любой другой дистрибутив. С автоопределением. По сути - то же самое, только вместо nix используем ansible. Плюсы - под ansible больше написано готового, для типовых задач описание проще(те же генерации конфигов под разные серверы зачастую уже есть). Минусы. Ну, возможно ansible медленнее работает на несколько секунд.

shell-script ★★★★★
()
Ответ на: комментарий от Tsukasa

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

grem ★★★★★
()
Ответ на: комментарий от shell-script

А теперь берём различающиеся конфиги для каждого виртхоста.

Я тебе гарантирую, это будет выглядеть куда проще и понятнее на nix чем на любом другом инструменте конфигурации (ну кроме guix), про поддержку я вообще молчу.

У меня есть проектик где на десятках серверов (замечу, конфигурация у них специально разная и просто раскатывать сервер из готового образа не вариант) в зависимости от хостнейма не только разные домены, но и полностью разные локейшны которые автоматически генерятся нажатием кнопки в вебморде. Для всех серверов в проекте также автоматически генерятся правила фаервола, чтобы доступ к серверу был только у других серверов, автоматически подключается zabbix и прочее-прочее. Когда я добавляю или убираю сервер из конфига, необходимые правила у остальных серверов сами добавляются/убираются. Всё это делает один и тот же код на nix.

родился со знанием языка описания nix

Господи, он простой как пробка. Я потратил один час чтобы пройти туториал по языку и мне этого в принципе было достаточно.

ansible

NixOS - congruent, а ansible - convergent и поэтому вообще несравнимые вещи в плане сложности поддержки и надёжности: https://flyingcircus.io/blog/thoughts-on-systems-management-methods/ (авторы статьи кстати мигрировали свой сервис с Gentoo на NixOS, где-то там же есть пост про причины)

Минусы. Ну, возможно ansible медленнее работает на несколько секунд.

Без репровижинга оно неюзабельно, с репровижингом там уже далеко не десятки секунд и даже не минут

Tsukasa
()
Последнее исправление: Tsukasa (всего исправлений: 2)
Ответ на: комментарий от grem

факта существования Gentoo

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

Tsukasa
()
Ответ на: комментарий от Tsukasa

Можно подробнее зачем им это понимание в общем случае? И зачем их вообще тэгом кастуют постоянно?

grem ★★★★★
()
Ответ на: комментарий от grem

Гентушники хотят выпиливать лишнее и меньше конпелять (моё впечатление), никсосовцы хотят чтобы всё всегда, везде и у всех работало одинаково и надёжно обновлялось (в идеале автоматически)

Tsukasa
()
Ответ на: комментарий от Tsukasa

У меня есть проектик [...]

Я могу аналогично похвастаться своими проектиками, где ансиблом раскатывается конфигурация по нажатию кнопочки в вебморде. Самой большой на данный момент - 3531 машина в kvm на ~700 гипервизорах, где конфигурятся как гипервизоры, так и виртмашины, с фаером и различными сервисами на разных портах; вместо zabbix'а prometheus-exporter'ы автоматически подбираемые под конкретную установку. И я далеко не уверен, что переписывание всего этого на nix было бы проще. Собственно, я для того и ставил себе и использовал активно NixOS, чтобы понять, нужно мне оно или нет. Уж больно красиво всё звучит по описанию и документашкам.

Я потратил один час чтобы пройти туториал по языку и мне этого в принципе было достаточно.

Ну, значит ты сильно умнее меня. Мне понадобилась неделя, чтобы установить и настроить так как я хочу с нуля(в том числе раскатать кеды), потом ещё полгода активного использования с разными сценариями, чтобы в итоге отказаться от установки NixOS в качестве основной системы для себя и уж тем более для внедрения на проектах, где ещё нужно было бы коллегам убедительно доказать, что оно того стоит. А я даже себя в этом не смог убедить.

Без репровижинга оно неюзабельно

Если я правильно понял тебя, при раскатке чистой системы с нуля, не имеет значения. В остальных случаях время на приведение к предыдущим состояниям решается средствами дистрибутива/виртуальной машины/файловой системы/системы бекапа, а ансибл только даёт команду. У каждого своя задача.

shell-script ★★★★★
()
Ответ на: комментарий от Tsukasa

Гентушники хотят выпиливать лишнее и меньше конпелять (моё впечатление)

Ошибочное впечатление. Гентушники хотят тратить как можно меньше времени на настройку системы, не отказываясь от гибкости этой настройки. Это я тебе как дебианщик говорю(на серверах у меня везде debian/ubuntu в данный момент).

Но почему в каждом треде про NixOS кастуют гентушников, для меня тоже загадка.

shell-script ★★★★★
()
Ответ на: комментарий от Tsukasa

Открой для себя бинхосты. Это прям болезнь какая то - приписывать генту какую то странную хрень. У меня 99% софта ставится бинарно.

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

LightDiver ★★★★★
()
Ответ на: комментарий от Tsukasa

Бинго! У меня все обновляется автоматически через крон с 2014 года. За эти годы было 3 или 4 проблемы, которые решались так же автоматически. Никсовцы ведь тоже обновляются автоматически через крон, ведь правда?

LightDiver ★★★★★
()
Ответ на: комментарий от shell-script

И я далеко не уверен, что переписывание всего этого на nix было бы проще

Без хорошего опыта с nix и NixOS уже существующие проекты переделывать идея самоубийственна. Нужно чётко понимать какие задачи это решит

Ну, значит ты сильно умнее меня

Сомневаюсь. Первый раз NixOS мне попался в 2015-м, не стал его основательно тыкать из-за непонимания как оно работает и своих предубеждений (ОГОСПОДИ, ПОЛТОРА ГИГА НА ДИСКЕ ПОСЛЕ УСТАНОВКИ). Года через четыре, когда получил немного опыта с функциональщиной (нет, не хаскель), снова решил попробовать из-за своих болей с дебианом (вотети вот репозитори кастомные держать, у меня где-то до сих пор на гитлабе валяется пайплайн, чтоб автоматически собирать пакеты и сервить их как дебианорепу через gitlab pages) и за четыре для ленивых экспериментов в виртуалке поднял всё что мне нужно было (всякие dwm и прочая кастомная лабуда) и перенёс готовый конфиг на рабочий ноут. После этого в течении недели перенёс на остальные свои личные машины и серваки и дебиан для меня умер

В остальных случаях время на приведение к предыдущим состояниям решается средствами дистрибутива/виртуальной машины/файловой системы/системы бекапа, а ансибл только даёт команду

Всё можно решить добавляя инструменты, в NixOS они к счастью не нужны

Tsukasa
()
Ответ на: комментарий от Shushundr

https://www.talos.dev

Мне было интересно, насколько сильно можно натянуть сову на глобус, оказалось что натягивать можно ещё дальше, но мне уже было лень

Tsukasa
()
Ответ на: комментарий от LightDiver

Открой для себя бинхосты.

А бинхосты твои? Мне не нужно держать никакие бинхосты.

Это прям болезнь какая то - приписывать генту какую то странную хрень. У меня 99% софта ставится бинарно.

Буквально выше по треду человек плазму пересобирал. Как по мне это та самая странная хрень.

в генту при установке указываешь один раз флаги и оно все само работает

В NixOS указываешь готовый конфиг и оно всё само качает, конпелирует, устанавливает, и настраивает вплоть до htoprc в хомяке. И что теперь?

Tsukasa
()
Ответ на: комментарий от Tsukasa

А бинхосты твои? Мне не нужно держать никакие бинхосты.

Ой, да ладно, бинарный репозиторий это директория на диске. У тебя это кешем называется и ты его тоже «держишь».

Shushundr ★★★★
() автор топика
Ответ на: комментарий от LightDiver

Никсовцы ведь тоже обновляются автоматически через крон, ведь правда?

Нет, опция system.autoUpgrade.enable запускает не крон, а systemd таймер. Есть ещё опция для автоматической перезагрузки после обновления ядра или модулей.

NyXzOr ★★★★
()
Ответ на: комментарий от NyXzOr

Да я понимаю, что оно легко добавляется везде. Так сколько лет опыта такого обновления непрерывного? Практического, а не теоретического. У тебя ведь эта функция включена?

LightDiver ★★★★★
()
Ответ на: комментарий от LightDiver

Я пока не использую Nixos, тестирую на виртуалке. Эти настройки из виртуальной машины зато можно потом просто перенести, скопировав один файл.

Тестировать gentoo на виртуалке (и не только) тоже пробовал, долго компилируется.

Да я понимаю, что оно легко добавляется везде.

Вот это всё в крон? https://wiki.gentoo.org/wiki/Kernel/Upgrade

NyXzOr ★★★★
()
Ответ на: комментарий от NyXzOr

Ох уж эти виртуалочки. Справедливости ради, я на генту так же пытался перейти. Планировал виртуалочку, все такое. Но не сложилось. Когда в очередной раз сдохла убунта при обновлении, у меня остался на диске каталог с гентой недоставленной. Был чрут в заготовку на генту, и доступ в инет. Не было даже флэшки загрузочной.

Пришлось вертеться. Просидел двое суток, установил. Добрался до графики. В итоге оказалось, что не только работает лучше остальных (а перепробовал я дохрена и больше дистрибутивов), но и удобнее остальных. Так на ней и остался. В итоге на ноутах перебрался на кальку, а тут все в единой утилите все в бинарниках доступно.

С 2011 был скрипт самописный, в котором учитывались все недоделки генты в плане обновления - а их дохрена. Разработчики почему то не хотят автоматизировать однообразные ежедневные по сути действия. Все на совести пользователя. С 2014 разработчики кальки запилили обновлятор, который сам все это учитывал, обновлял, испралял. С тех пор собственно работа с осью закончилась.

С 2014 года пропала надобность копаться, чинить, изучать, накапливать опыт и прочее прочее. Ось просто перестала ломаться и работает сама где то там в глубинах своей компьютерной души. Меняются ноуты, ось переносится и работает.

Последнее что добавлял и менял - год или два назад узнал про вулкан и dxvk, да добавил флаг вулкановский. А так - даже стал забывать стандартные команды. Стыдно сказать - eselect команду гугглил на днях. Забыл как пишется.

LightDiver ★★★★★
()
1 июня 2023 г.
Ответ на: комментарий от shell-script

С каких это пор арч стал Ъ? Дистрибутив, ничем особо не выделяющийся, но при этом удобный. Если уж пытаться быть Ъ, то гента подходит куда лучше.

Werenter ★★☆
()
Ответ на: комментарий от Werenter

А ты точно весь комментарий прочитал? Я не говорил, что арч Ъ. Я говорил, что среди школьниковцелевой аудитории он считается Ъ.

shell-script ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)