LINUX.ORG.RU

NixOS: dri 32 бит на своем ядре

 


0

1

@t184256 @balsoft

Очередной глобальный затык.

Ядро со своим конфигом меня в прошлой теме собирать научили.

Теперь с этим возникла тотальная проблема - с ним не хотят ставиться 32-битные dri библиотеки!

Суть проблемы:

nixos-rebuild boot 
building Nix...
building the system configuration...
error:
       Failed assertions:
       - Option driSupport32Bit requires a kernel that supports 32bit emulation
(use '--show-trace' to show detailed location information)

В manual-config.nix я вижу что проверяется вот эта опция у пакета ядра

config.boot.kernelPackages.kernel.features.ia32Emulation

Хорошо. Как ее поставить в true? Также в manual-config.nix вижу вот что:

  features ? null,
}:

Поэтому пробую вот так:

custom-kernel-pkgs = pkgs.linuxPackagesFor (pkgs.linuxKernel.manualConfig {
    inherit (pkgs) stdenv lib;
    inherit (pkgs.linuxKernel.kernels.linux_5_15) src; # change here if you want a different version
    version = "${pkgs.linuxKernel.kernels.linux_5_15.version}-custom";
    configfile = ./config;
    features = { efiBootStub = true; ia32Emulation = true; iwlwifi = true; needsCifsUtils = true; netfilterRPFilter = true; };
    allowImportFromDerivation = true;
  });

И ничего, не срабатывает! Почему? Я же определил эту опцию как true?

★★★★

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

Так тоже не срабатывает, как будто этих features нет:

boot.kernelPackages = custom-kernel-pkgs.extend (self: super: {
        kernel = super.kernel.override {
          features = { efiBootStub = true; ia32Emulation = true; iwlwifi = true; needsCifsUtils = true; netfilterRPFilter = true; };
        };

...
James_Holden ★★★★
() автор топика

А «от противного» работает. Ставлю эту опцию в false у обычного ядра, и сборка отваливается

boot.kernelPackages = pkgs.linuxPackages_latest.extend (self: super: {
        kernel = super.kernel.override {
          features = { efiBootStub = true; ia32Emulation = false; iwlwifi = true; needsCifsUtils = true; netfilterRPFilter = true; };
        };

И получаю ту же ошибку

Failed assertions:
       - Option driSupport32Bit requires a kernel that supports 32bit emulation

Я вообще ничего не понимаю… а как это так??? Почему с manual-config это не работает? Как так может быть?

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

Также в manual-config.nix вижу вот что:

  features ? null,
}:

Ты бы ссылки давал, а то три минуты потратил на то, чтобы найти это место в master и в release-21.11 и откопать целую одну опущенную тобой строку контекста:

  # ignored
  features ? null,
}:
t184256 ★★★★★
()
Ответ на: комментарий от James_Holden

Ну понятно вроде почему не могу через оверлей - там получается то же самое, я даю features на вход manualConfig и они игнорируются.

Остается вопрос - как их теперь добавить?

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

В твоём ядерном конфиге поддержка 32-битных бинарников включена? Features стопудов из конфига генерятся.

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

Лень разбираться, поэтому задай вопрос четко. Если в nixpkgs что-то не так в определенном месте, исправь. Если хочется подлезть и сделать эквивалетное изменение снаружи, напиши какое. Приведи хотя бы nix expression от твоего ядра, у которого потом нет .kernel.features.ia32Emulation и релиз/коммит укажи. «Я тут определил свое что-то, не удовлетворяющее моим ожиданиям» тебе только телепат сдиагностирует.

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

Куда уже четче? Выше все исчерпывающе расписано. В nix expression, или как это называется, ядра - нет .kernel.features.ia32Emulation. Как это добавить?

Вот код, который порождает деривацию ядра в итоге

pkgs.linuxKernel.manualConfig {
    inherit (pkgs) stdenv lib;
    inherit (pkgs.linuxKernel.kernels.linux_5_15) src; # change here if you want a different version
    version = "${pkgs.linuxKernel.kernels.linux_5_15.version}-custom";
    configfile = ./config;
    features = { efiBootStub = true; ia32Emulation = true; iwlwifi = true; needsCifsUtils = true; netfilterRPFilter = true; };
    allowImportFromDerivation = true;
  }

features тут игнорируется, как ты выше заметил.

и релиз/коммит укажи

Чего именно?

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

Куда уже четче?.. Вот код

В nix repl твой код не вставить (не приведен config), с результатом не поиграть.

и релиз/коммит укажи

Чего именно?

nixpkgs

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

Не хочется модифицировать хаками nixpkgs, потому что тогда их вручную обновлять придется.

Я думаю лучше скопировать код функции manualConfig и добавить туда эти features в passthrough, сделать customManualConfig)))

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

Я одного не пойму - почему сразу не сделали как положено, толку от manualConfig которая не работает?

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

Поправил функцию manualConfig чтобы добавляла то что нужно.

Пошла сборка.

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