Jump to content

Appimage/ru: Difference between revisions

From Official NixOS Wiki
Unabomberlive (talk | contribs)
Created page with "== Запуск исполняемых файлов AppImage на NixOS =="
FuzzyBot (talk | contribs)
Updating to match new version of source page
Tags: Mobile edit Mobile web edit
 
(25 intermediate revisions by 3 users not shown)
Line 1: Line 1:
<languages/>
<languages/>
<div lang="en" dir="ltr" class="mw-content-ltr">
<div class="mw-translate-fuzzy">
[https://appimage.org/ AppImage] is a monolithic packaging format for linux applications. It contains all dependencies in one file that is composed of an executable with a tacked on filesystem.
[https://appimage.org/ AppImage] - тип монолитных пакетов для приложений Linux. Содержит все зависимости приложения в одном файле, состоящем из исполняемого файла и встроенной файловой системы.
</div>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Usage"></span>
On most distros, all one has to do is download the <code>.AppImage</code> file, make it executable <code>chmod +x $AppImage</code>, and execute it. This doesn't work in NixOS out of the box though, as AppImage files usually (if not always) depend on certain libraries commonly found on other Linux distributions to exist on certain paths; such as <code>/lib64/ld-linux-x86-64.so.2</code>.
== Использование ==
</div>
 
<span id="Run"></span>
=== Запуск ===


<span id="Running_an_AppImage_file_on_NixOS"></span>
В большинстве дистрибутивов все, что нужно сделать, это загрузить файл <code>.AppImage</code>, сделать его исполняемым <code>chmod +x $AppImage</code> и выполнить его. Однако это не работает в NixOS «из коробки», поскольку файлы AppImage обычно (если не всегда) зависят от определенных библиотек находящихся в жёстко заданных путях.
== Запуск исполняемых файлов AppImage на NixOS ==


<syntaxhighlight lang="shell">
<syntaxhighlight lang="shell">
$ nix-shell -p appimage-run
$ nix-shell -p appimage-run
$ appimage-run $AppImageFile
$ appimage-run path/to/application.AppImage
</syntaxhighlight>
</syntaxhighlight>


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
== Register AppImage files as a binary type to binfmt_misc ==
===== Additional Packages =====
</div>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
You can tell the Linux kernel to use an interpreter (e.g. <code>appimage-run</code>) when executing certain binary files through the use of [https://en.wikipedia.org/wiki/Binfmt_misc#External_links binfmt_misc], either by filename extension or magic number matching. Below NixOS configuration registers AppImage files (ELF files with magic number "AI" + 0x02) to be run with <code>appimage-run</code> as interpreter.
Some appimages still have issues, so you can override for additional pkgs such as
</div>
 
<syntaxhighlight lang="nix">programs.appimage.enable = true;
programs.appimage.binfmt = true;
programs.appimage.package = pkgs.appimage-run.override
{
  extraPkgs = pkgs:
  [
    pkgs.icu
    pkgs.libxcrypt-legacy
    pkgs.python312
    pkgs.python312Packages.torch
  ];
};
</syntaxhighlight>
 
<span id="Packaging"></span>
=== Создание AppImage ===
 
<div class="mw-translate-fuzzy">
См. руководство [https://nixos.org/manual/nixpkgs/stable/#sec-pkgs-appimageTools Nixpkgs manual on wrapping AppImage packages]. Если кратко, AppImage извлекается, а все зависимости добавляются в качестве зависимостей сборки nix. Следующий пример представляет собой производную для программы Quba, которая также распространяется в виде AppImage.
</div>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<syntaxhighlight lang="nix">
Since [https://nixos.org/manual/nixos/stable/release-notes#sec-release-24.05-new-services NixOS 24.05], there is a binfmt option:
{
  lib,
  appimageTools,
  fetchurl,
}:
 
let
  version = "1.4.0";
  pname = "quba";
 
  src = fetchurl {
    url = "https://github.com/ZUGFeRD/quba-viewer/releases/download/v${version}/Quba-${version}.AppImage";
    hash = "sha256-EsTF7W1np5qbQQh3pdqsFe32olvGK3AowGWjqHPEfoM=";
  };
 
  appimageContents = appimageTools.extractType1 { inherit name src; };
in
appimageTools.wrapType2 rec {
  inherit pname version src;
 
  extraInstallCommands = ''
    substituteInPlace $out/share/applications/${pname}.desktop \
      --replace-fail 'Exec=AppRun' 'Exec=${meta.mainProgram}'
  '';
 
  meta = {
    description = "Viewer for electronic invoices";
    homepage = "https://github.com/ZUGFeRD/quba-viewer";
    downloadPage = "https://github.com/ZUGFeRD/quba-viewer/releases";
    license = lib.licenses.asl20;
    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
    maintainers = with lib.maintainers; [ onny ];
    platforms = [ "x86_64-linux" ];
  };
}
</syntaxhighlight>
 
 
<span id="Configuration"></span>
== Настройка ==
 
<span id="Register_AppImage_files_as_a_binary_type_to_binfmt_misc"></span>
== Зарегистрируйте файлы AppImage как исполняемый тип в binfmt_misc ==
 
<div class="mw-translate-fuzzy">
Вы можете указать ядру Linux использовать интерпретатор (например, <code>appimage-run</code>) при выполнении определенных двоичных файлов через использование [https://en.wikipedia.org/wiki/Binfmt_misc#External_links binfmt_misc], либо по расширению имени файла, либо по совпадению магических чисел.
Приведенная ниже конфигурация NixOS регистрирует файлы AppImage (ELF-файлы с магическим числом "AI" + 0x02) для запуска с помощью <code>appimage-run</code> в качестве интерпретатора.
</div>
</div>


Line 35: Line 103:
</syntaxhighlight>
</syntaxhighlight>


<div lang="en" dir="ltr" class="mw-content-ltr">
<div class="mw-translate-fuzzy">
This way AppImage files can be invoked directly as if they were normal programs
Таким образом файлы AppImage могут вызываться напрямую, как если бы они были обычными программами
</div>
 
<div lang="en" dir="ltr" class="mw-content-ltr">
== How AppImage files are packaged by NixOS ==
</div>
 
<div lang="en" dir="ltr" class="mw-content-ltr">
See the [https://nixos.org/manual/nixpkgs/stable/#sec-pkgs-appimageTools nixpkgs manual on wrapping AppImage packages]. In short, the AppImage is extracted and any dependencies are added as nix build dependencies.
</div>
</div>


[[Category:Software{{#translation:}}]]
[[Category:Software]]

Latest revision as of 18:19, 2 August 2026

AppImage - тип монолитных пакетов для приложений Linux. Содержит все зависимости приложения в одном файле, состоящем из исполняемого файла и встроенной файловой системы.

Использование

Запуск

В большинстве дистрибутивов все, что нужно сделать, это загрузить файл .AppImage, сделать его исполняемым chmod +x $AppImage и выполнить его. Однако это не работает в NixOS «из коробки», поскольку файлы AppImage обычно (если не всегда) зависят от определенных библиотек находящихся в жёстко заданных путях.

$ nix-shell -p appimage-run
$ appimage-run path/to/application.AppImage
Additional Packages

Some appimages still have issues, so you can override for additional pkgs such as

programs.appimage.enable = true;
programs.appimage.binfmt = true;
programs.appimage.package = pkgs.appimage-run.override 
{
  extraPkgs = pkgs: 
  [
    pkgs.icu
    pkgs.libxcrypt-legacy
    pkgs.python312
    pkgs.python312Packages.torch
  ]; 
};

Создание AppImage

См. руководство Nixpkgs manual on wrapping AppImage packages. Если кратко, AppImage извлекается, а все зависимости добавляются в качестве зависимостей сборки nix. Следующий пример представляет собой производную для программы Quba, которая также распространяется в виде AppImage.

{
  lib,
  appimageTools,
  fetchurl,
}:

let
  version = "1.4.0";
  pname = "quba";

  src = fetchurl {
    url = "https://github.com/ZUGFeRD/quba-viewer/releases/download/v${version}/Quba-${version}.AppImage";
    hash = "sha256-EsTF7W1np5qbQQh3pdqsFe32olvGK3AowGWjqHPEfoM=";
  };

  appimageContents = appimageTools.extractType1 { inherit name src; };
in
appimageTools.wrapType2 rec {
  inherit pname version src;

  extraInstallCommands = ''
    substituteInPlace $out/share/applications/${pname}.desktop \
      --replace-fail 'Exec=AppRun' 'Exec=${meta.mainProgram}'
  '';

  meta = {
    description = "Viewer for electronic invoices";
    homepage = "https://github.com/ZUGFeRD/quba-viewer";
    downloadPage = "https://github.com/ZUGFeRD/quba-viewer/releases";
    license = lib.licenses.asl20;
    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
    maintainers = with lib.maintainers; [ onny ];
    platforms = [ "x86_64-linux" ];
  };
}


Настройка

Зарегистрируйте файлы AppImage как исполняемый тип в binfmt_misc

Вы можете указать ядру Linux использовать интерпретатор (например, appimage-run) при выполнении определенных двоичных файлов через использование binfmt_misc, либо по расширению имени файла, либо по совпадению магических чисел. Приведенная ниже конфигурация NixOS регистрирует файлы AppImage (ELF-файлы с магическим числом "AI" + 0x02) для запуска с помощью appimage-run в качестве интерпретатора.

programs.appimage = {
  enable = true;
  binfmt = true;
};

Таким образом файлы AppImage могут вызываться напрямую, как если бы они были обычными программами