вот последние наработки подсмотрел у ivan-hc тут
https://github.com/ivan-hc/AppImaGen ,его скрипт у меня не заработал, скормил скрипт ИИ вытащил нужное мне связанное с использованием реп Debian, и перепаковкой в appimage выбраного пакета. Скрипт не идеален увы, работает удовлетворительно в процентном соотношении не дотягивая до 40, то есть некоторые пакеты перепаковывает некоторые нет, у некоторых может добыть десктоп файл и картинку,у некоторых нет, если добывает все ресурсы то на выходе Appimage, но наличие Appimage на выходе еще не факт что пакет запустится, потому что у некоторых захардкожена линковка с файловой системой, например как у Liferea, единственый выход это компиляция пакета с линковкой либ внутрь пакета, я не знаю если такое потяну, но пробовать буду.
Но некоторые пакеты скрипт делает, условия:
1. Програмный пакет должен быть на Gtk
2. Забываем про приложения на QT
3. Зависимости пакета не должны быть захардкожены на файловую систему
4.Если сталкиваемся всё таки что просит что-то из /~app/usr/lib/x86_64-linux-gnu/-можно использовать каталог портативки, используя скрипт LAUNCH вместо бинарника AppRun, и в LAUNCH экспортировать в PATH запрашиваемые каталоги с библиотеками и схемами, иногда помогает.
5. Наличие десктоп файла и иконки с прописаным в нем именем .
А пока больше идей нет как улучшить ситуацию для ленивого создания самодостаточных пакетов с Appimage, и наверное их и нет, только компиляция.
как использовать
-------------------------------
Для работы программы поместить appimagetool,pkg2appimage в ~/apptool
если скрипт их не найдет то скачает их
поместить скрипт repo2app ~/
пример создания appimage c mate-calc
./repo2app mate-calc
на выходе в ~/portapps каталог с портативкой и mate-calc.Appimage
повторюсь момент важный если десктоп файл не был скопирован скриптом в каталог создаваемой програмы то копируем его вручную из ~/portapps/my_app/usr/share/applications в корень ~/portapps/my_app туда же нужно скопировать иконку в формате png с именем затребованом в секции Icon в десктоп файле после этого , для теста работы портативки запускаем AppRun , далее если заработало запустить из текущего в терминале по пути текущего каталога вводим команду
ARCH=$(arch) ~/apptool/appimagetool -n ./
и Appimage нашей программы будет собран.
------------------------------------------
вот код скрипта
#!/usr/bin/env bash
set -x
mkdir -p ~/apptool
cd ~/apptool
# Проверка наличия инструментов
if [ ! -f appimagetool ]; then
wget -q https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage -O appimagetool
chmod a+x appimagetool
fi
if [ ! -f pkg2appimage ]; then
wget -q https://raw.githubusercontent.com/ivan-hc/AM-application-manager/main/tools/pkg2appimage
chmod a+x pkg2appimage
fi
# Установка необходимых зависимостей
sudo apt install imagemagick binutils
# Создание временной директории
mkdir -p tmp
cd tmp
# Создание файла рецепта
echo "app: $1
ingredients:" > recipe.yml
cat >> recipe.yml <<EOF
dist: debian
arch: $(arch)
sources:
- deb http://deb.debian.org/debian/ stable main contrib non-free
- deb http://deb.debian.org/debian/ stable-updates main contrib non-free
- deb http://security.debian.org/debian-security stable/updates main contrib non-free
packages:
- $1
EOF
# Скачивание пакетов и сборка APPDIR
~/apptool/pkg2appimage ./recipe.yml
# Копируем каталог с ресурсами в ~/portapps
echo "Копируем каталог с ресурсами в ~/portapps "
mkdir -p ~/portapps/$1.AppDir
cp -r ./$1/$1.AppDir ~/portapps/
cd ~/portapps/$1.AppDir
# Имя файла из десктоп-файла
#requested_filename=$(grep -oP '(?<=Icon=).*' ~/portapps/$1.AppDir/usr/share/applications/*.desktop)
#requested_filename=$(grep -m 1 Icon ~/portapps/$1.AppDir/usr/share/applications/*.desktop | cut -d '=' -f 2)
requested_filename=$(grep -m 1 -o '^Icon=.*' *.desktop | cut -d '=' -f 2-)
echo "$requested_filename"
# Переименовываем app.png
#cd ~/portapps/$1.AppDir
image="$(find /usr/share/icons/gnome/48x48/apps/ -name "$requested_filename.png")"
# Добавляем изображение app.png в ~/portapps/$1.AppDir
cp "$image" ~/portapps/$1.AppDir/
# Применяем glib-compile-schemas к каталогу с ресурсами
echo "Применяем glib-compile-schemas к каталогу с ресурсами"
sudo glib-compile-schemas ~/portapps/$1.AppDir/usr/share/glib-2.0/schemas/
# Создаем заглушку png
#touch ~/portapps/$1.AppDir/${1,,}.png
# Сборка AppImage
ARCH=$(arch) ~/apptool/appimagetool -n ~/portapps/$1.AppDir
cd ~/portapps/$1.AppDir
chmod a+x *.AppImage
cd ~/apptool
rm -rf ./tmp
upd: Буду безмерно благодарен если кто подскажет или предложит как решить обозначеные проблемы ( но мне кажется что решения тут нет , тут нужно собирать автомат который собирает исходники и из них компилирует программу с опцией RPATH (run path) - путь поиска разделяемых библиотек, встроенный в исполняемый файл то есть внутрь каталога с портативкой)