LINUX.ORG.RU
ФорумTalks

NixOS и Линус Арвер

 ,


0

5

Оказывается Линус Арвер, окончательно затрахавшись в Arch, ещё в марте прошлого года перешёл на NixOS на своём основном десктопе:

http://funloop.org/post/2015-08-01-why-i-use-nixos.html

Поиски на ЛОР-е дали совсем мало информации об этом дистрибутиве. Неужели никто из местной публики никогда им не пользовался? А ведь дистрибутив действительно интересный, хотя и отходит от принципов классического UNIX. Прежде всего из-за своего пакетного менеджера nix.

Перемещено leave из general

★★★★★

Последнее исправление: Klymedy (всего исправлений: 2)

Неужели никто из местной публики никогда им не пользовался?

ЕМНИП, здесь есть как минимум 2 живых пользователя: Camel и loz.

tailgunner ★★★★★
()

Так этот Линус из когорты хаскелистов.
Торвальдс ни в чем не виноватый.

Deleted
()

Ты шо, дурной?

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

ЕМНИП, здесь есть как минимум 2 живых пользователя: Camel и loz

Интересно их послушать.

bbk123 ★★★★★
() автор топика

Дистрибутив очень ок, это не поделка очередного админа в духе «я дартаньян», за ним стоят PhD thesis по Nix, и Master's thesis по NixOS.

Советую прочитать Introduction в обоих, в нем написано что как и почему сделано, этого достаточно чтобы начать использовать, а дальше в остальных главах подробные детали.

Спрашивай свои ответы.

loz ★★★★★
()
Последнее исправление: loz (всего исправлений: 1)

Оказывается Линус, окончательно затрахавшись в Arch

Ты бы хоть написал, что это никому неизвестный Linus Arver, а не Тот О Ком Все Подумали.

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

это не поделка очередного админа в духе «я дартаньян», за ним стоят PhD thesis по Nix, и Master's thesis по NixOS.

Обычно подобное означает, что продукт неюзабелен.

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

Обычно подобное означает, что продукт неюзабелен

Например?

По-моему наоборот, большая часть того что сегодня существует, работает и проверено временем так или иначе основывается на научных работах.

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

И не просто есть, а есть с августа 2013 :)

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

Дело вкуса это «стандартные» дистрибутивы. В них плюс-минус все происходит одинаково и имеет одинаковые проблемы, разве что названия команд отличаются.

В NixOS два кардинальных отличия:

1) Функциональный пакетный менеджер Nix. Функциональный в том смысле, что проводятся аналогии с функциональным программированием - ФС <-> Память, Пакет <-> Функция (сборки пакета). То есть файловая система (точнее говоря ее часть работающая с пакетами, /nix) неизменяемая (в прямом смысле - она монтируется в read-only), а все пакеты устанавливаются в полностью уникальные пути (sha1 от _всех_ входных данных сборки). Это позволяет иметь в системе любое количество версий/вариантов (всмысле собранных с разными опциями ./configure) любых пакетов, и никаких блокировок, никаких несовместимостей, никакого влияния на что-то вне своей личной папочки. Его, кстати можно использовать отдельно от NixOS, в твоем любимомо дистре (я еще на убунточке начал его юзать активно), и на макоси, и даже для винды были сборочки, но похоже не нужны оказались.

2) Функциональное развертывание системы (это название я только что придумал). Суть в том, что _вся_ конфигурация системы полностью и однозначно выводится из одного файла (/etc/nixos/configuration.nix), в системе будет ровно то что там написано, и не будет ничего из того что там не написано. Не трудно догадаться, что для воспроизведения точной копии системы надо лишь перенести этот файлик на другой комп. Кроме этого, на каждое изменение в этой конфигурации создается запись в истории, позволяющая в случае необходимости откатиться ровно на это состояние (раз вся конфигурация в одном файле, это делается элементарно), сложность отката на любую конфигурацию в истории, кстати, O(1).

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

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

это не поделка очередного админа в духе «я дартаньян», за ним стоят PhD thesis по Nix, и Master's thesis по NixOS.

Обычно подобное означает, что продукт неюзабелен.

хаха +1

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

Это позволяет иметь в системе любое количество версий/вариантов (всмысле собранных с разными опциями ./configure) любых пакетов, и никаких блокировок, никаких несовместимостей, никакого влияния на что-то вне своей личной папочки.

Т.е. можно установить 100500 вариантов gcc и 100500 версий glibc на одной машине? Насколько это просто? Имееются ли готовые средства или как обычно, идея есть, но реализовывай сам.

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

Вот я собираю весь гном из гита и смогу ли я перейти на NixOS? Nix может из гита тянуть исходники? Я могу откатывать пакеты? Мне достаточно установить пакет с помощью Nix или надо писать патчи чтобы программы использовали другие пути? Я могу установить OpenRC?

MLP_Fan ★★
()
Последнее исправление: MLP_Fan (всего исправлений: 1)

Пользовал их пакетник на дэбиане, что бы пару версий крестокомпилятора поставить. Не сказал бы что всё очень удобно (да и я не особо вникал), но работало.

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

асколько это просто? Имееются ли готовые средства или как обычно, идея есть, но реализовывай сам.

Идея и первая реализация были в 2006 году. Сейчас это просто как nix-env -i gcc1 gcc2 gcc3

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

Хм, любопытно. А про конфигурацию можно чуть подробнее? Что собственно из себя представляет configuration.nix как файл? Он хранит тупо все, все установленные пакеты, настройки и тд? Что будет если перенести его на другую машину, он будет тянуть недостающие пакеты из сети? Или я неверно понимаю термин «конфигурация»?

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

Да, я уже глянул. Несколько gcc может сейчас любой дистр. И никаком не может в несколько glibc. Кроме gentoo, с его crosstools. Плюс, я вижу, что musl древний, т.е. дистр надо самому обновлять. Также нету eglibc, а единственный glibc естественно распоследней версии...

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

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

Вот я собираю весь гном из гита и смогу ли я перейти на NixOS? Nix может из гита тянуть исходники?

Может, но тебе надо будет написать nix-«ебилд» для него. Зато будешь иметь все нужные версии а так же

Я могу откатывать пакеты?

Не конкретные пакеты, но так называемые «поколения», т.е. состояния системы. Можешь кататься по ним назад и вперед.

Мне достаточно установить пакет с помощью Nix или надо писать патчи чтобы программы использовали другие пути?

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

Я могу установить OpenRC?

Сейчас нет, из configuration.nix генерируется все, включая конфиги для systemd и его сервисов. OpenRC как бэкенд могут добавить в будущем.

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

А про конфигурацию можно чуть подробнее? Что собственно из себя представляет configuration.nix как файл? Он хранит тупо все, все установленные пакеты, настройки и тд?

Да, так и есть, например вот довольно прокачанный конфиг:

https://github.com/chaoflow/nixos-configurations/blob/master/configuration-ev...

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

Что будет если перенести его на другую машину, он будет тянуть недостающие пакеты из сети? Или я неверно понимаю термин «конфигурация»?

Правильно, будет тянуть из сети. Естественно можно поднять зеркало/кеш локально, настроить каналы получения пакетов и тд и тп.

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

Плюс, я вижу, что musl древний

Ну, 1.1.10 против 1.1.12 я бы не считал древним.

Также нету eglibc, а единственный glibc естественно распоследней версии...

Для ништяков под себя нужно извращаться. В целом же, идея класная, но еще пилить и пилить.

Не надо извращаться, просто начни контрибьютить пакеты ;) Плюсы и тебе и сообществу, тем более пример как собирать glibc есть.

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

Ну, 1.1.10 против 1.1.12 я бы не считал древним.

В случае musl — древность. Там масса багов и недоделок, поэтому каждый релиз это как чудо.

просто начни контрибьютить пакеты

А свой код я когда буду писать? :)

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

А свой код я когда буду писать? :)

Смотри, если тебе по работе - тогда вопрос как ты сейчас справляешься с необходимостью иметь несколько glibc? И насколько nix тебе упростит эту проблему (и другие, если вдруг ты используешь, или в перспективе будешь, много версий других либ и компиляторов тоже)?

Если разница существенна, или, разница небольшая, но ее можно распространить, например, на команду, то я бы качественно описал все эти доводы начальству и попросил бы выделить рабочее время на написание этих пакетов и переход на NixOS.

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

как ты сейчас справляешься с необходимостью иметь несколько glibc?

Gentoo. Виртуалки.

И насколько nix тебе упростит эту проблему?

Видимо никак не упрощает. Я в дебри nix не вникал. Однако, прежде всего его надо поставить на целевые машины. И, если он умеет собирать/ставить пакеты для уже имеющегося на системе glibc, а не пытаться собрать единственный распоследний, то тогда у него есть шансы. ЛИБО вся компания переводит свои сервера на NixOS, что равнозначно ведению разработки под один любой дистр.

Еще раз повторю, что сам способ решения этой проблемы с филосовской точки зрения идеален: решить проблему в корне, вместо велосипедства. Однако, мир устроен так, что у пользователей/серверов разные версии glibc. И тут, NixOS никак не помогает. Она даже не умеет собирать пакеты программ с нужной версией glibc: это надо делать точно также как и в любом другом дистре. Единственный дистр, где это сделано для людей (разработчиков, конкретно) — gentoo. Если знаете, где еще можно собирать хотя бы тулчейн с нужной связкой compiler + libc: назовите. Именно системно, а не прочитай мануал и сделай сам.

Вывод: если дистр не подходит для build-сервера под разные glibc, то его нужно пилить и пилить :)

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

А если я ставлю пакет то он сохраняется в configuration.nix и перенеся его в другую систему у меня он установится при обновлении? И поставлю вопрос по другому: что даст мне кроме отката на предыдущие состояния (уже сильный плюс) переход с арча если я на нем собирал часть системы из своих PKGBUILD'ов из гита? Мне просто также придется содержать свои правила сборки пакетов с патчами?

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

А если я ставлю пакет то он сохраняется в configuration.nix

Нет, туда только руками прописывается. Но там можно подключать файлы, и ты можешь сделать типа packages.nix, и его подключать на разных компах, и держать, например, в гите.

и перенеся его в другую систему у меня он установится при обновлении?

Он установится при nixos-rebuild switch, это команда перехода на новую конфигурацию, пока ее не запустишь - ничего никуда не дернется.

что даст мне кроме отката на предыдущие состояния (уже сильный плюс) переход с арча если я на нем собирал часть системы из своих PKGBUILD'ов из гита?

У тебя не будет проблем с содержанием разных версий твоих пакетов, собранных с разными версиями зависимостей.

Мне просто также придется содержать свои правила сборки пакетов с патчами?

Да, как минимум это будет не сложнее.

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

И, если он умеет собирать/ставить пакеты для уже имеющегося на системе glibc, а не пытаться собрать единственный распоследний, то тогда у него есть шансы. ЛИБО вся компания переводит свои сервера на NixOS, что равнозначно ведению разработки под один любой дистр.

Погоди, давай по порядку. Ты можешь написать nix-файлов для сборки с каждой конкретной версией glibc с которой тебе надо.

Однако, мир устроен так, что у пользователей/серверов разные версии glibc. И тут, NixOS никак не помогает. Она даже не умеет собирать пакеты программ с нужной версией glibc: это надо делать точно также как и в любом другом дистре.

Да нет же - умеет, вот например vala часто ломает совместимость и гном собирается с определенной конкретной версией: https://github.com/NixOS/nixpkgs/blob/7f7569b24cd6444273b5808892225db3e6ece38...

Вывод: если дистр не подходит для build-сервера под разные glibc

Так подходит же!

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

То есть, твои пакеты будут называться типа

glibc-1.nix
glibc-2.nix
glibc-X.nix
они будут собирать конкретную версию glibc. Затем делаешь
my_program_glibc-1.nix
my_prgoram_glibc-2.nix
my_program_glibc-X.nix
внутри которых пишешь pkgs.glibc = glibc-1, и тд, а дальше инструкции по билду, независящие от версии glibc. Их даже можно отдельно вынести.

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

gcc-wrapper-5.2.0

У меня два вопроса.

Что означает wrapper в случае всех версий gcc для этого дистра, что за скрипты? Там какой-то неполноценный gcc? В вики не нашел ответа.

И еще, NixOS — более source или binary package дистрибутив, он похож чем-то на генту, например, или такой же в плане пакетов как деревянный, арч и т.п.?

Спасибо.

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

те же пятокеды, lxqt нет вообще, cinnamon, скорее всего, также не имеется

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

awesome-3.5.6

есть, этого достаточно здоровому и практичному человеку, не курильщику.

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

Что означает wrapper в случае всех версий gcc для этого дистра, что за скрипты? Там какой-то неполноценный gcc? В вики не нашел ответа.

А вот же, в самом скрипте комментарий: https://github.com/NixOS/nixpkgs/blob/release-15.09/pkgs/build-support/cc-wra...

И еще, NixOS — более source или binary package дистрибутив

Прозрачный :) тебя интересует параграф «Transparent source/binary deployment» в http://nixos.org/nix/manual/

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

Я не говорю, что это невозможно :) Исходя из того, что я прочитал здесь выходит много ручной работы... Конечно, тру-разраба это не остановит. Вопрос зачем это надо, если есть gentoo?

Ладно. Я понял, что надо ковырять и изучать. Займусь как-нибудь.

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

А для своих пакетов можно сделать локальный репозиторий и таскать в любую систему со своим package.mix и потом 1 командой делать клон другой системы?

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

Исходя из того, что я прочитал здесь выходит много ручной работы

Там тебя интересуют лишь default.nix и common.nix. И то во втором ты многое можешь просто выкинуть (тебе ведь не нужно учитывать сборку под Hurd?). Остальное это скрипты вспомогательные и патчи. Сможешь по образу и подобию наложить свои, если надо.

loz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.