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
Здесь я представил полный список методов решения вашей проблемы с примерами файлов. Два более эффективных метода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
Я полагаю, что лучше всего будет создать простое выражение nix, которое имеет этот deb в качестве входных данных, распаковывает его и т. д., чтобы вы установили его «как nix» (, например. зависимости не будут удалены до самого пути ). Когда вы это сделаете, добавление autoPatchelfHook
в buildInputs
должно исправить эти отсутствующие ссылки.