LINUX.ORG.RU

nix для сборки «нечистого» софта

 , ,


0

2

Поддерживает ли nix юзкейс «я хочу использовать nix для формирования build-окружения, но мне не нужна чистота и следование nix-принципам того что я собираю, я не буду результат использовать вместе с nix»?

Собрать пытался это - https://doc.qt.io/qt-5/android-getting-started.html (со старой версией qt - 5.15.0)

При этом

  • Исходники qt5 скачал архивом средствами nix (с формированием деривейшена с этими исходниками, всё как положено).
  • android sdk получил средствами pkgs.androidenv.composeAndroidPackages
  • В nix слабо разбираюсь, пользовался немного для формирования dev-окружения, чтобы dev-тулзы в систему не ставить
  • Пытался решить эту задачу отрывочно читая https://nixos.org/guides/nix-pills/

Дошел до написания builder.sh (уточню - я про скрипт который передаётся в derivation { builder = ./builder.sh; }, или stdenv.mkDerivation, вроде не суть важно).

Получил ошибку из-за того что в configure в исходниках qt захардкожен /bin/pwd. И чёт приуныл.

Посмотрел как это решается в nixpkgs - https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/libraries/qt-5/modules/qtbase.nix#L129 и приуныл ещё сильнее узрев SHEER SIZE AND COMPLEXITY одного этого файла.

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



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

Ответ на: комментарий от Irma

Может, но как я уже сказал

Посмотрел как это решается в nixpkgs - https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/libraries/qt-5/modules/qtbase.nix#L129 и приуныл ещё сильнее узрев SHEER SIZE AND COMPLEXITY одного этого файла.

Я не хочу писать 400 строк, даже копипастить (с разбором, бездумно не получится) не хочу.

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

Ну так ты сообразил использовать софтскиллы, чтобы выпросить готовое решение, осталось только подождать.

Irma ★★
()

Поддерживает ли nix юзкейс «я хочу использовать nix для формирования build-окружения, но мне не нужна чистота и следование nix-принципам того что я собираю, я не буду результат использовать вместе с nix»?

Да.

Дошел до написания builder.sh (уточню - я про скрипт который передаётся в derivation { builder = ./builder.sh; }, или stdenv.mkDerivation, вроде не суть важно).

Тебе это не нужно. Прочитай про mkShell. builder.sh в любом случае почти никто никогда не пишет.

Алсо, зачем тебе исходники Qt?

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

direnv + mkShell

Например, у меня в js проектах валяется довольно простой вариант:

{
  description = "js devshell";
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-24.05";
    flake-utils.url = "github:numtide/flake-utils";
    pre-commit-hooks = {
      url = "github:cachix/pre-commit-hooks.nix";
      inputs = {
        nixpkgs.follows = "nixpkgs";
        nixpkgs-stable.follows = "nixpkgs";
      };
    };
  };
  outputs = {
    self,
    nixpkgs,
    flake-utils,
    pre-commit-hooks,
    ...
  }:
    flake-utils.lib.eachDefaultSystem (
      system: let
        pkgs = import nixpkgs {
          inherit system;
        };
      in {
        devShells.default = pkgs.mkShell {
          inherit (self.checks.${system}.pre-commit-check) shellHook;
          name = "devShell";
          packages = with pkgs; [
            nodejs
            yarn
          ];
        };

        checks = {
          pre-commit-check = pre-commit-hooks.lib.${system}.run {
            src = ./.;
            hooks = {
              typos.enable = true;
              eslint.enable = true;
            };
          };
        };
      }
    );
}

Можно куда более интересные делать, но общая суть - cd в каталог проекта и nix тебе подгружает нужные зависимости сразу в окружение.

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

Хммм. ну, я задачу пока забросил, но к пониманию что nix’овские билд-окружения это не то что мне нужно я пришел.

Уточню кстати задачу (хотя это больше идея-фикс чем задача конечно )

  • Использовать nix для формирования герметичного окружения для билда Qt5 (тулчейн + андроид sdk + скачивание исходников qt)
  • Но сам билд должен проходить не по принципам ограничений nix и результаты его не будут использоваться вместе с nix.

Мой ресёч привёл не к mkShell (которым я ранее пользовался для формирования дев-окружения в других проектах), а к https://ryantm.github.io/nixpkgs/builders/special/fhs-environments/

В targetPkgs указать все нужные для билда деривейшены, а runScript скрипт который будет билдить. И ещё видимо как-то передать этому скрипту директорию которая будет префиксом уже в моей обычной хостовой файлсистеме.

Но пока не пробовал это всё.

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

Польская художница Aleksandra Waliszewska

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

Всё-таки что-то (кажется) работающее накалякал - https://github.com/AloisMisery/nix-qt5-for-android-builder

Если вдруг есть желающие опробовать у себя это творение - можете запустить билдер простой командой (нужен nix с флейками):

nix run github:AloisMisery/nix-qt5-for-android-builder

Накакает оно под себя - в ./_build и ./_dest.

alois
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.