Создание простого пакета Deb, совместимого с NixOS (wolframscript Mathematica) [дубликат]

Tuve que verificar los PID iniciados por mi lote, así que tuve que verificar un PID y un PPID, este grep fue más útil para mí:

grep -c $$ /proc/CHILDPID/stat
3
23.05.2019, 20:08
2 ответа

Здесь я представил полный список методов решения вашей проблемы с примерами файлов. Два более эффективных методаautoPatchelfHook(предпочтительнее, как предложил Владимир Чунат ), или, в конечном итоге,steam-run(на основе buildFHSUserEnvс большим количеством библиотек по умолчанию ), когда вам в основном требуется быстро -и -. ] грязный -исправление.

Вот краткий обзор:

Правильный метод сautoPatchelfHook

NixOs сделал для нас специальный "хук" autoPatchelfHook, который автоматически все патчит за вас! Вам просто нужно указать его в (native)BuildInputs, и nix сделает все за вас. Введитеderivation.nix:

{ stdenv, dpkg, glibc, gcc-unwrapped, autoPatchelfHook }:
let

  # Please keep the version x.y.0.z and do not update to x.y.76.z because the
  # source of the latter disappears much faster.
  version = "12.0.0";

  src =./WolframScript_12.0.0_LINUX64_amd64.deb;

in stdenv.mkDerivation {
  name = "wolframscript-${version}";

  system = "x86_64-linux";

  inherit src;

  # Required for compilation
  nativeBuildInputs = [
    autoPatchelfHook # Automatically setup the loader, and do the magic
    dpkg
  ];

  # Required at running time
  buildInputs = [
    glibc
    gcc-unwrapped
  ];

  unpackPhase = "true";

  # Extract and copy executable in $out/bin
  installPhase = ''
    mkdir -p $out
    dpkg -x $src $out
    cp -av $out/opt/Wolfram/WolframScript/* $out
    rm -rf $out/opt
  '';

  meta = with stdenv.lib; {
    description = "Wolframscript";
    homepage = https://www.wolfram.com/wolframscript/;
    license = licenses.mit;
    maintainers = with stdenv.lib.maintainers; [ ];
    platforms = [ "x86_64-linux" ];
  };
}

и вdefault.nix:

{ pkgs ? import <nixpkgs> {} }:

pkgs.callPackage./derivation.nix {}

скомпилируйте и запустите с

nix-build
result/bin/wolframscript

Более быстрый метод сsteam-run

Nix предоставляет buildFHSUserEnv, который имитирует классический Linux. Вы можете использовать его напрямую и добавлять к нему библиотеки, или, если хотите, steam-runуже содержит множество библиотек (, несмотря на то, что имя не зависит от Steam ). Обратите внимание, что этот метод более тяжелый и требует более длительного запуска, поэтому по возможности избегайте его.

Вам просто нужно установитьsteam-run(вам нужно разрешить несвободные программы, с { allowUnfree = true; }в ~/.config/nixpkgs/config.nixили, если вы используете nixos-rebuild, используйте в своем configuration.nixстроку nixpkgs.config.allowUnfree = true;), а затем запустите:

steam-run./wolframscript

Дополнительные сведения см. в разделе Различные способы запуска исполняемого файла, отличного от -nixos, на Nixos

4
27.01.2020, 21:17

Я полагаю, что лучше всего будет создать простое выражение nix, которое имеет этот deb в качестве входных данных, распаковывает его и т. д., чтобы вы установили его «как nix» (, например. зависимости не будут удалены до самого пути ). Когда вы это сделаете, добавление autoPatchelfHookв buildInputsдолжно исправить эти отсутствующие ссылки.

1
27.01.2020, 21:17

Теги

Похожие вопросы