<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>55043</bug_id>
          
          <creation_ts>2025-07-03 16:31:34 +0300</creation_ts>
          <short_desc>gearlever: Некорректная работа с appimage-extract без наличия 7-zip (/usr/bin/7zz), squashfs-tools (/usr/bin/unsquashfs)</short_desc>
          <delta_ts>2025-07-09 14:20:29 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>gearlever</component>
          <version>unstable</version>
          <rep_platform>x86_64</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugzilla.altlinux.org/show_bug.cgi?id=53225</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Artem Varaksa">varaksaaa</reporter>
          <assigned_to name="oleg@altlinux.org">oleg</assigned_to>
          <cc>oleg</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>268305</commentid>
    <comment_count>0</comment_count>
    <who name="Artem Varaksa">varaksaaa</who>
    <bug_when>2025-07-03 16:31:34 +0300</bug_when>
    <thetext>Шаги
====

1. # apt-get install -y gearlever
2. $ curl \
    --location &quot;https://download.kde.org/Attic/krita/5.2.6/krita-5.2.6-x86_64.appimage&quot; \
    --output &quot;krita-5.2.6-x86_64.appimage&quot;
3. $ gearlever
4. Нажать Открыть (+) &gt; выбрать скачанный файл.
5. Если появится сообщение &quot;Пожалуйста, проверьте источник этого приложения, прежде чем открывать его&quot;, нажать Разблокировать.
6. Нажать Добавить в меню приложений.
6. Выполнить любое действие, которое приведёт к попытке заново прочитать метаданные AppImage (для чего требуется его распаковать), например нажать Обновить метаданные, попробовать открыть другой файл AppImage и т. п.


Фактический результат
=====================

В логе первое извлечение успешно (хотя проваливаются попытки извлечения с помощью 7zz и unsquashfs):

&gt; ==&gt; /home/test/.cache/logs/gearlever.log &lt;==
&gt; DEBUG [AppImageProvider.py:677] Created temporary folder at /tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_xdz2rp51b7

&gt; DEBUG [terminal.py:42] Running [&apos;dwarfsck&apos;, &apos;--input=/home/test/krita-5.2.6-x86_64.appimage&apos;, &apos;-q&apos;, &apos;-detail=0&apos;, &apos;--no-check&apos;]
&gt; INFO [AppImageProvider.py:694] Filesystem is not dwarfsck

&gt; INFO [AppImageProvider.py:702] Exctracting with p7zip to /tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_xdz2rp51b7/squashfs-root
&gt; DEBUG [terminal.py:42] Running [&apos;7zz&apos;, &apos;t&apos;, &apos;/home/test/krita-5.2.6-x86_64.appimage&apos;, &apos;-y&apos;, &apos;-bso0&apos;, &apos;-bsp0&apos;]
&gt; ERROR [AppImageProvider.py:714] Extraction with 7zz failed
&gt; ERROR [AppImageProvider.py:715] [Errno 2] Нет такого файла или каталога: &apos;7zz&apos;

&gt; DEBUG [AppImageProvider.py:719] Testing with unsquashfs
&gt; DEBUG [terminal.py:42] Running [&apos;/usr/lib/gearlever/get_appimage_offset&apos;, &apos;/home/test/krita-5.2.6-x86_64.appimage&apos;]
&gt; DEBUG [terminal.py:60] Done [&apos;/usr/lib/gearlever/get_appimage_offset&apos;, &apos;/home/test/krita-5.2.6-x86_64.appimage&apos;]
&gt; DEBUG [terminal.py:42] Running [&apos;unsquashfs&apos;, &apos;-o&apos;, &apos;2048&apos;, &apos;-l&apos;, &apos;/home/test/krita-5.2.6-x86_64.appimage&apos;]
&gt; ERROR [AppImageProvider.py:726] Extraction with unsquashfs failed
&gt; ERROR [AppImageProvider.py:727] [Errno 2] Нет такого файла или каталога: &apos;unsquashfs&apos;

&gt; INFO [AppImageProvider.py:731] Extracting with appimage-extract
&gt; DEBUG [utils.py:74] Copying /home/test/krita-5.2.6-x86_64.appimage to /tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_xdz2rp51b7/app.appimage
&gt; DEBUG [terminal.py:42] Running [&apos;chmod&apos;, &apos;+x&apos;, &apos;/tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_xdz2rp51b7/app.appimage&apos;]
&gt; DEBUG [terminal.py:60] Done [&apos;chmod&apos;, &apos;+x&apos;, &apos;/tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_xdz2rp51b7/app.appimage&apos;]
&gt; DEBUG [terminal.py:42] Running [&apos;/tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_xdz2rp51b7/app.appimage&apos;, &apos;--appimage-extract&apos;]
&gt; DEBUG [terminal.py:60] Done [&apos;/tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_xdz2rp51b7/app.appimage&apos;, &apos;--appimage-extract&apos;]
&gt; DEBUG [utils.py:74] Copying /tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_xdz2rp51b7/squashfs-root/org.kde.krita.desktop to /tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_appimage_32fd472fdd41b148bad8162182ff82a4/app.desktop
&gt; DEBUG [AppImageProvider.py:808] Looking for icon in: /tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_xdz2rp51b7/squashfs-root/usr/share/icons/hicolor/scalable/apps/krita.svg
&gt; DEBUG [AppImageProvider.py:808] Looking for icon in: /tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_xdz2rp51b7/squashfs-root/usr/share/icons/hicolor/512x512/apps/krita.png
&gt; DEBUG [utils.py:74] Copying /tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_xdz2rp51b7/squashfs-root/usr/share/icons/hicolor/512x512/apps/krita.png to /tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_appimage_32fd472fdd41b148bad8162182ff82a4/icon.png
&gt; DEBUG [terminal.py:42] Running [&apos;arch&apos;]
&gt; DEBUG [terminal.py:60] Done [&apos;arch&apos;]

&gt; INFO [AppImageProvider.py:264] Installing appimage: /home/test/krita-5.2.6-x86_64.appimage
&gt; DEBUG [utils.py:74] Copying /home/test/krita-5.2.6-x86_64.appimage to /home/test/AppImages/krita.appimage
&gt; DEBUG [AppImageProvider.py:339] file copied to /home/test/AppImages
&gt; DEBUG [AppImageProvider.py:65] Chmod file /home/test/AppImages/krita.appimage
&gt; DEBUG [utils.py:74] Copying /tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_appimage_32fd472fdd41b148bad8162182ff82a4/icon.png to /home/test/AppImages/.icons/krita.png
&gt; INFO [AppImageProvider.py:451] Deleting original appimage file from: /home/test/krita-5.2.6-x86_64.appimage
&gt; DEBUG [terminal.py:18] Running [&apos;update-desktop-database&apos;, &apos;/home/test/.local/share/applications&apos;, &apos;-q&apos;]
&gt; DEBUG [terminal.py:35] Done [&apos;update-desktop-database&apos;, &apos;/home/test/.local/share/applications&apos;, &apos;-q&apos;]
&gt; DEBUG [AppImageProvider.py:456]
&gt; DEBUG [terminal.py:42] Running [&apos;arch&apos;]
&gt; DEBUG [terminal.py:60] Done [&apos;arch&apos;]
&gt; DEBUG [json_config.py:16] Reading config from /home/test/.config/apps.json
&gt; DEBUG [json_config.py:16] Reading config from /home/test/.config/apps.json
&gt; DEBUG [json_config.py:16] Reading config from /home/test/.config/apps.json
&gt; DEBUG [terminal.py:42] Running [&apos;readelf&apos;, &apos;--string-dump=.upd_info&apos;, &apos;--wide&apos;, &apos;/home/test/AppImages/krita.appimage&apos;]
&gt; DEBUG [terminal.py:60] Done [&apos;readelf&apos;, &apos;--string-dump=.upd_info&apos;, &apos;--wide&apos;, &apos;/home/test/AppImages/krita.appimage&apos;]

При втором извлечении воспроизводятся те же проблемы, но и appimage-extract уже не работает:

&gt; INFO [AppImageProvider.py:464] Reloading metadata for /home/test/AppImages/krita.appimage
&gt; DEBUG [utils.py:74] Copying /home/test/AppImages/krita.appimage to /tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_3qxd72r9r6/tmp.appimage
&gt; INFO [AppImageProvider.py:203] Removing /home/test/AppImages/krita.appimage
&gt; INFO [AppImageProvider.py:211] Trashing /home/test/AppImages/krita.appimage
&gt; INFO [AppImageProvider.py:219] Removing /home/test/.local/share/applications/krita.desktop
&gt; INFO [AppImageProvider.py:264] Installing appimage: /tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_3qxd72r9r6/tmp.appimage
&gt; DEBUG [AppImageProvider.py:677] Created temporary folder at /tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_28d9q9dca1

&gt; DEBUG [terminal.py:42] Running [&apos;dwarfsck&apos;, &apos;--input=/tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_3qxd72r9r6/tmp.appimage&apos;, &apos;-q&apos;, &apos;-detail=0&apos;, &apos;--no-check&apos;]
&gt; INFO [AppImageProvider.py:694] Filesystem is not dwarfsck

&gt; INFO [AppImageProvider.py:702] Exctracting with p7zip to /tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_28d9q9dca1/squashfs-root
&gt; DEBUG [terminal.py:42] Running [&apos;7zz&apos;, &apos;t&apos;, &apos;/tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_3qxd72r9r6/tmp.appimage&apos;, &apos;-y&apos;, &apos;-bso0&apos;, &apos;-bsp0&apos;]
&gt; ERROR [AppImageProvider.py:714] Extraction with 7zz failed
&gt; ERROR [AppImageProvider.py:715] [Errno 2] Нет такого файла или каталога: &apos;7zz&apos;

&gt; DEBUG [AppImageProvider.py:719] Testing with unsquashfs
&gt; DEBUG [terminal.py:42] Running [&apos;/usr/lib/gearlever/get_appimage_offset&apos;, &apos;/tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_3qxd72r9r6/tmp.appimage&apos;]
&gt; DEBUG [terminal.py:60] Done [&apos;/usr/lib/gearlever/get_appimage_offset&apos;, &apos;/tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_3qxd72r9r6/tmp.appimage&apos;]
&gt; DEBUG [terminal.py:42] Running [&apos;unsquashfs&apos;, &apos;-o&apos;, &apos;2048&apos;, &apos;-l&apos;, &apos;/tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_3qxd72r9r6/tmp.appimage&apos;]
&gt; ERROR [AppImageProvider.py:726] Extraction with unsquashfs failed
&gt; ERROR [AppImageProvider.py:727] [Errno 2] Нет такого файла или каталога: &apos;unsquashfs&apos;

&gt; INFO [AppImageProvider.py:731] Extracting with appimage-extract
&gt; DEBUG [utils.py:74] Copying /tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_3qxd72r9r6/tmp.appimage to /tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_28d9q9dca1/app.appimage
&gt; ERROR [AppImageProvider.py:446] Appimage installation error: g-io-error-quark: Ошибка выполнения splice для файла: На устройстве не осталось свободного места (12)

В терминале:

&gt; Exception in thread Thread-5 (on_refresh_metadata_btn_clicked):
&gt; Traceback (most recent call last):
&gt;   File &quot;/usr/lib64/python3.12/threading.py&quot;, line 1075, in _bootstrap_inner
&gt;     self.run()
&gt;   File &quot;/usr/lib64/python3.12/threading.py&quot;, line 1012, in run
&gt;     self._target(*self._args, **self._kwargs)
&gt;   File &quot;/usr/share/gearlever/gearlever/AppDetails.py&quot;, line 719, in on_refresh_metadata_btn_clicked
&gt;     self.provider.reload_metadata(self.app_list_element)
&gt;   File &quot;/usr/share/gearlever/gearlever/providers/AppImageProvider.py&quot;, line 481, in reload_metadata
&gt;     self.install_file(el)
&gt;   File &quot;/usr/share/gearlever/gearlever/providers/AppImageProvider.py&quot;, line 447, in install_file
&gt;     raise e
&gt;   File &quot;/usr/share/gearlever/gearlever/providers/AppImageProvider.py&quot;, line 270, in install_file
&gt;     extracted_appimage = self._load_appimage_metadata(el)
&gt;                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
&gt;   File &quot;/usr/share/gearlever/gearlever/providers/AppImageProvider.py&quot;, line 758, in _load_appimage_metadata
&gt;     mounted_appimage_path = self._extract_appimage(el)
&gt;                             ^^^^^^^^^^^^^^^^^^^^^^^^^^
&gt;   File &quot;/usr/share/gearlever/gearlever/providers/AppImageProvider.py&quot;, line 733, in _extract_appimage
&gt;     gio_copy(file, cloned_file)
&gt;   File &quot;/usr/share/gearlever/gearlever/lib/utils.py&quot;, line 75, in gio_copy
&gt;     return file.copy(
&gt;            ^^^^^^^^^^
&gt; gi.repository.GLib.GError: g-io-error-quark: Ошибка выполнения splice для файла: На устройстве не осталось свободного места (12)

При этом на / доступно &gt;15 GB места:

&gt; # lsblk -f
&gt; NAME   FSTYPE  FSVER            LABEL                       UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
&gt; sda
&gt; ├─sda1 swap    1                                            5e3df10b-de36-4d1b-810e-f01406264277                [SWAP]
&gt; └─sda2 ext4    1.0                                          16ad7332-e58d-4e81-9adb-d7b3170b48b8   16,8G    42% /
&gt; sr0    iso9660 Joliet Extension ALT Workstation 11.0 x86_64 2025-04-19-14-59-13-00

Что-то связанное с appimage-extract монтируется неправильно / повторно использует смонтированное расположение, не предназначенное для повторного использования. Исправляется после перезапуска приложения.

Однако эта ошибка приводит к следующим результатам:

* После перезапуска Gear Lever или возврата к главной странице файл AppImage теряется (если, как по умолчанию, стоит опция перемещать AppImage). В ~/AppImages его уже нет.

* Если попробовать установить приложение, метаданные которого не удалось получить, установка зависает; в логе

&gt; ERROR [AppImageProvider.py:446] Appimage installation error: &apos;NoneType&apos; object has no attribute &apos;getExec&apos;
&gt; ERROR [AppDetails.py:275] &apos;NoneType&apos; object has no attribute &apos;getExec&apos;

* Один раз приложение удалось установить (конкретно, параллельно другую версию Krita из https://download.kde.org/stable/krita/5.2.9/krita-5.2.9-x86_64.AppImage по аналогии с https://bugzilla.altlinux.org/54913), однако при попытке запуска приложения с версией из меню упала виртуальная машина в среде Proxmox Virtual Environment. Возможно, было связано с самим PVE. После загрузки системы AppImage оказался испорченный, при попытке запуска выводилось уведомление с ошибкой FUSE.

Ожидаемый результат
===================

Успешное извлечение метаданных неограниченное количество раз.


Дополнительно
=============

Если установить пакеты:

# apt-get install -y 7-zip squashfs-tools

после воспроизведения ошибки с appimage-extract, то 7zz и unsquashfs не работают:

&gt; DEBUG [AppImageProvider.py:677] Created temporary folder at /tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_cbz27zqza3

&gt; DEBUG [terminal.py:42] Running [&apos;dwarfsck&apos;, &apos;--input=/home/test/AppImages/gearlever_krita529x86_64appimage.appimage&apos;, &apos;-q&apos;, &apos;-detail=0&apos;, &apos;--no-check&apos;]
&gt; INFO [AppImageProvider.py:694] Filesystem is not dwarfsck

&gt; INFO [AppImageProvider.py:702] Exctracting with p7zip to /tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_cbz27zqza3/squashfs-root
&gt; DEBUG [terminal.py:42] Running [&apos;7zz&apos;, &apos;t&apos;, &apos;/home/test/AppImages/gearlever_krita529x86_64appimage.appimage&apos;, &apos;-y&apos;, &apos;-bso0&apos;, &apos;-bsp0&apos;]
&gt; DEBUG [terminal.py:60] Done [&apos;7zz&apos;, &apos;t&apos;, &apos;/home/test/AppImages/gearlever_krita529x86_64appimage.appimage&apos;, &apos;-y&apos;, &apos;-bso0&apos;, &apos;-bsp0&apos;]
&gt; DEBUG [terminal.py:42] Running [&apos;7zz&apos;, &apos;x&apos;, &apos;/home/test/AppImages/gearlever_krita529x86_64appimage.appimage&apos;, &apos;-o/tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_cbz27zqza3/squashfs-root&apos;, &apos;-y&apos;, &apos;-bso0&apos;, &apos;-bsp0&apos;, &apos;*.png&apos;, &apos;*.svg&apos;, &apos;*.desktop&apos;, &apos;.DirIcon&apos;, &apos;-r&apos;]
&gt; ERROR [AppImageProvider.py:714] Extraction with 7zz failed
&gt; ERROR [AppImageProvider.py:715] Command &apos;[&apos;7zz&apos;, &apos;x&apos;, &apos;/home/test/AppImages/gearlever_krita529x86_64appimage.appimage&apos;, &apos;-o/tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_cbz27zqza3/squashfs-root&apos;, &apos;-y&apos;, &apos;-bso0&apos;, &apos;-bsp0&apos;, &apos;*.png&apos;, &apos;*.svg&apos;, &apos;*.desktop&apos;, &apos;.DirIcon&apos;, &apos;-r&apos;]&apos; returned non-zero exit status 2.

&gt; DEBUG [AppImageProvider.py:719] Testing with unsquashfs
&gt; DEBUG [terminal.py:42] Running [&apos;/usr/lib/gearlever/get_appimage_offset&apos;, &apos;/home/test/AppImages/gearlever_krita529x86_64appimage.appimage&apos;]
&gt; DEBUG [terminal.py:60] Done [&apos;/usr/lib/gearlever/get_appimage_offset&apos;, &apos;/home/test/AppImages/gearlever_krita529x86_64appimage.appimage&apos;]
&gt; DEBUG [terminal.py:42] Running [&apos;unsquashfs&apos;, &apos;-o&apos;, &apos;2048&apos;, &apos;-l&apos;, &apos;/home/test/AppImages/gearlever_krita529x86_64appimage.appimage&apos;]
&gt; ERROR [AppImageProvider.py:726] Extraction with unsquashfs failed
&gt; ERROR [AppImageProvider.py:727] Command &apos;[&apos;unsquashfs&apos;, &apos;-o&apos;, &apos;2048&apos;, &apos;-l&apos;, &apos;/home/test/AppImages/gearlever_krita529x86_64appimage.appimage&apos;]&apos; returned non-zero exit status 1.

&gt; INFO [AppImageProvider.py:731] Extracting with appimage-extract
&gt; DEBUG [utils.py:74] Copying /home/test/AppImages/gearlever_krita529x86_64appimage.appimage to /tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_cbz27zqza3/app.appimage

Лог 7zz не выводится в файл лога, как происходит при успешном извлечении с помощью него.

И appimage-extract также не завершается из-за ошибки, описанной выше.

При выполнении вручную команд из лога:

&gt; $ 7zz x /home/test/AppImages/gearlever_krita529x86_64appimage.appimage -o/tmp/.private/test/it.mijorus.gearlever/appimages/gearlever_cbz27zqza3/squashfs-root -y -bso0 -bsp0 *.png *.svg *.desktop .DirIcon -r
&gt; System ERROR:
&gt; errno=28 : На устройстве не осталось свободного места

&gt; $ unsquashfs -o 2048 -l /home/test/AppImages/gearlever_krita529x86_64appimage.appimage
&gt; FATAL ERROR: Can&apos;t find a valid SQUASHFS superblock on /home/test/AppImages/gearlever_krita529x86_64appimage.appimage

Только после перезапуска приложения начинает корректно использоваться 7zz (до unsquashfs уже не доходит, видимо предполагается работа с любым из 7zz, unsquashfs, appimage-extract).


Отмечу, что уже добавлялась зависимость на пакет p7zip (https://bugzilla.altlinux.org/53225), однако пакет p7zip не предоставляет /usr/bin/7zz. Его предоставляет только пакет 7-zip.


Воспроизводимость
=================

Воспроизводится на виртуальных машинах:

[sisyphus] ALT Workstation 11.0 x86_64
gearlever-3.3.3-alt1.noarch

[p11+386229.3] ALT Workstation 11.0 x86_64
gearlever-3.3.3-alt1.noarch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268615</commentid>
    <comment_count>1</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2025-07-09 14:20:29 +0300</bug_when>
    <thetext>gearlever-3.3.3-alt2 -&gt; sisyphus:

Wed Jul 09 2025 Semen Fomchenkov &lt;armatik@altlinux&gt; 3.3.3-alt2
- Remove user manual (ALT #55037).
- Added 7-zip dependency (ALT #55043).</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>