LINUX.ORG.RU

Подскажите по сборке .appimage

 ,


1

1

Итак собрал я значится эмулятор Citra. И попалась мне заметка про appimage. Собрал appimage пакетик, но остался ряд вопросов...

«Фабричные» аппимеджи спрашивают при запуске - «добавить ли ярлык в систему?», мои чего-то нет. Как это исправить?

Как бы присобачить к пакету firejail, изнутри? То есть, пакет при запуске - САМ запускает firejail (в идеале сам под себя его и настраивает).

Собирал имидж так:

mkdir Build
cd Build
cmake  .. -DCMAKE_INSTALL_PREFIX=/usr/ \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_FLAGS=-O3 -g -pipe -msse4.1 -stdlib=libc++ ..
make -j5
make DESTDIR=citra.AppDir install

cd citra.AppDir
rm -rf ./usr/bin/citra

sed -i -e 's|/usr|././|g' usr/bin/citra-qt

mkdir -p usr/lib64

cp -a /usr/lib64/libglvnd/libGL.so.* ./usr/lib64
cp -a /usr/lib64/libQt5OpenGL.so.* ./usr/lib64
cp -a /lib64/librt.so.* ./usr/lib64
cp -a /lib64/libdl.so.* ./usr/lib64
cp -a /usr/lib64/libpng16.so.* ./usr/lib64
cp -a /lib64/libz.so.* ./usr/lib64
cp -a /usr/lib64/libSDL2-2.0.so.* ./usr/lib64
cp -a /usr/lib64/libQt5Widgets.so.* ./usr/lib64
cp -a /usr/lib64/libQt5Gui.so.* ./usr/lib64
cp -a /usr/lib64/libQt5Core.so.* ./usr/lib64
cp -a /lib64/libstdc++.so.* ./usr/lib64
cp -a /lib64/libm.so.* ./usr/lib64
cp -a /lib64/libgcc_s.so.* ./usr/lib64
cp -a /lib64/libpthread.so.* ./usr/lib64
cp -a /lib64/libc.so.* ./usr/lib64
cp -a /usr/lib64/libglvnd/libGLX.so.* ./usr/lib64
cp -a /usr/lib64/libX11.so.* ./usr/lib64
cp -a /usr/lib64/libXext.so.* ./usr/lib64
cp -a /usr/lib64/libGLdispatch.so.* ./usr/lib64
cp -a /lib64/ld-linux-x86-64.so.* ./usr/lib64
cp -a /usr/lib64/libharfbuzz.so.* ./usr/lib64
cp -a /usr/lib64/libicui18n.so.* ./usr/lib64
cp -a /usr/lib64/libicuuc.so.* ./usr/lib64
cp -a /usr/lib64/libpcre16.so.* ./usr/lib64
cp -a /lib64/libglib-2.0.so.* ./usr/lib64
cp -a /usr/lib64/libxcb.so.* ./usr/lib64
cp -a /usr/lib64/libfreetype.so.* ./usr/lib64
cp -a /usr/lib64/libgraphite2.so.* ./usr/lib64
cp -a /usr/lib64/libicudata.so.* ./usr/lib64
cp -a /lib64/libpcre.so.* ./usr/lib64
cp -a /usr/lib64/libXau.so.* ./usr/lib64
cp -a /usr/lib64/libXdmcp.so.* ./usr/lib64
cp -a /usr/lib64/libbz2.so.* ./usr/lib64

wget -c "https://github.com/probonopd/AppImageKit/releases/download/6/AppRun_6-x86_64"
mv AppRun_6-x86_64 AppRun
chmod a+x ./AppRun

далее скопировал .desctop файл и иконки

cd ..

wget -c "https://github.com/probonopd/AppImageKit/releases/download/6/AppImageAssistant_6-x86_64.AppImage"

chmod a+x "AppImageAssistant_6-x86_64.AppImage"
./"AppImageAssistant_6-x86_64.AppImage" ./citra.AppDir/ ./citra-$BRANCH-bleeden_age-$VER.AppImage

P.S. Флаги оптимизации так применяют?

P.P.S. Знает кто, как автаматезировать или упростить копирование зависимостей? ldd citra-qt и всобачивать cp -a /что /куда вручную, довольно утомительно...



Последнее исправление: cetjs2 (всего исправлений: 3)

Знает кто, как автаматезировать или упростить копирование зависимостей? ldd citra-qt и всобачивать cp -a /что /куда вручную, довольно утомительно...

Есть скрипт meta recipe, который умеет собирать appimage'ы из мета-описания, вроде такого, с ручной распаковкой, или такого, с выкачиванием из репозитория (Debian или Ubuntu).

ValdikSS ★★★★★
()

Как бы присобачить к пакету firejail, изнутри? То есть, пакет при запуске - САМ запускает firejail (в идеале сам под себя его и настраивает).

Вот это никак. Firejail нужен SUID-бит, внутри SquashFS (внутри AppImage — он) вроде его нельзя установить. Если внутри AppImage, запускаемого от пользователя, могла бы лежать SUID-программа, это лютая была бы дырень в безопасности. А если firejail обычный системный, то вперёд, скрипт пишешь да и всё. А настраивать там нечего особо — profile кладёшь тоже прямо внутрь, firejail'у говоришь его и юзать.

P. S. Научись в LorCode. Хотя бы [code] [/code] вокруг листингов. Нифига же не прочитать.

Psych218 ★★★★★
()
Ответ на: комментарий от Psych218

внутри SquashFS (внутри AppImage — он)

А как управлять сквошем? В смысле, выбрать алгоритм сжатия и т.д. Есть на гитхабе инструкция:

mksquashfs Your.AppDir Your.squashfs -root-owned -noappend
cat runtime >> Your.AppImage
cat Your.squashfs >> Your.AppImage
chmod a+x Your.AppImage

Только это не слишком помогает.

Может кто по порядку объяснить?

  • Вот хочу я запаковать игрушку.
  • Создаю папку.appdir, складываю все в /папка.appdir/usr/bin, кидаю apprun и .desktop в /папка.appdir.
  • После сжимаю в сквош (кстати lzo никак не задействовать?)

А вот дальше то как?

Kapshibergen
() автор топика
Ответ на: комментарий от Kapshibergen

А как управлять сквошем? В смысле, выбрать алгоритм сжатия и т.д. Есть на гитхабе инструкция:

кстати lzo никак не задействовать?

По идее так и управлять:

mksquashfs Your.AppDir Your.squashfs -root-owned -noappend -comp lzo

А вот дальше то как?

Ну по инструкции:

cat runtime Your.squashfs > Your.AppImage

Psych218 ★★★★★
()
Ответ на: комментарий от Psych218

Ну по инструкции

cat КАКОЙ runtime? И в какой Your.AppImage? Он ведь должен образоваться после, из сквоша.

Извиняюсь если туплю, но объясните чуть более развернуто.

P.S.И сразу еще такой вопрос - а как указать, что бы аппимидж пускал не бинарник, а конкретный скрипт?

Kapshibergen
() автор топика
Ответ на: комментарий от Kapshibergen

cat КАКОЙ runtime?

Входящий в состав этого самого appimage и единственный из всего имеющий ценность (в смысле есть код, а не просто идея). Соответствующей архитектуры, конечно же. В инструкции (ты не дал на наё ссылку) явно должна быть ссылка на него. Или их там много? Это бинарник. Можно просто скомпилять из исходников.

И в какой Your.AppImage?

В тот, который ты создаёшь. Этого файла нет, перенаправляя вывод в него ты его создаёшь. Это, собственно, результат, AppImage. Состоит он из склеенных между собой двух частей: аппимейджевского рантайма и твоего только что созданного SquashFS-образа. Именно это ты делаешь командой cat  — объединяешь эти два файла (man cat). Любой AppImage это runtime+образ, runtime всегда один, образ соответственно разный. Рантайм монтирует образ (указывая оффсет в размере своего собственного веса) и запускает оттуда AppRun. В принципе, это всё, что он делает.

а как указать, что бы аппимидж пускал не бинарник, а конкретный скрипт?

Можно указать его в .desktop. Разницы между бинарником и скриптом в этом плане никакой. Если скрипт маленький, то можно просто в AppRun его упихать (AppRun на баше, по крайней мере в той версии, что я использую, и он только лишь задаёт переменные окружения, а потом запускает то, что указано в .desktop).

Psych218 ★★★★★
()
Последнее исправление: Psych218 (всего исправлений: 3)
Ответ на: комментарий от Psych218

Входящий в состав этого самого appimage и единственный из всего имеющий ценность.

А что из этого-то рантайм? https://github.com/probonopd/AppImageKit/releases

  • AppRun-x86_64
  • appimagetool-x86_64.AppImage
  • appimaged-x86_64.AppImage
  • AppImageAssistant_6-x86_64.AppImage

В инструкции (ты не дал на наё ссылку) явно должна быть ссылка на него.

Так, на гите... https://github.com/probonopd/AppImageKit

AppRun на баше, по крайней мере в той версии, что я использую

Вроде бинарник. Во всяком случае, квритом не открывается...

он только лишь задаёт переменные окружения, а потом запускает то, что указано в .desktop

Ясно. Я думал он просто пускает бинарник из ./local/bin.

offtop А как правильно указывать в .desktop пути внутри аппимиджа? ./ и $PWD не принимает.

Kapshibergen
() автор топика
Ответ на: комментарий от Kapshibergen

А что из этого-то рантайм?

Я дал на него ссылку. Из этого есть утилита, которая автоматизирует всё это дело, чтобы не собирать SquashFS руками, не делать cat и т.д.:

appimagetool-x86_64.AppImage Your.AppDir

Вот так вот просто. Рантайм у неё там внутри лежит, или из исходников можно собрать.

Вроде бинарник. Во всяком случае, квритом не открывается...

Видимо есть оба варианта. Я использую тот, что на баше.

А как правильно указывать в .desktop пути внутри аппимиджа? ./ и $PWD не принимает.

Локальные пути от Your.AppDir. Без начального слеша то есть. И без точки.

Psych218 ★★★★★
()
Ответ на: комментарий от Psych218

Я дал на него ссылку.

Извини, проглядел.

Рантайм у неё там внутри лежит

Спасибо, теперь нашел.

Только тут новая напасть: Присобачил рантайм, получил appimage, а он не запускается. Пишет мол нужен fuse, только вот fuse установлен...

Если пакую через AppImageAssistant, все работает. Только судя по надписям про xorriso, создает совсем не сквош (а мне именно сжатие нужно).

appimagetool тоже не слишком помогает. Требует корректный .desktop файл. Пробовал:

  • Icon=./ScreenSelector.png
  • Icon=/ScreenSelector.png
  • Icon=ScreenSelector.png
  • Icon=$PWD=ScreenSelector.png
  • Icon=$HOME=ScreenSelector.png
  • Полный путь до иконки.

    Все-равно говорит

    ./ScreenSelector.png{.png,.svg,.svgz,.xpm} not present but defined in desktop file

    P.S.Система Rosa R9 x64 Plasma5

Kapshibergen
() автор топика
Ответ на: комментарий от Psych218

Спасибо большое, все собралось.

Еще такой вопрос: Если мне нужно, что-бы при запуске копировались определенные папки с файлами (в случае если их нет по указанному пути). Как это сделать?

P.S. А нет какой-нибудь команды вроде cp того что покажет ldd programm.bin куда копировать ?

Kapshibergen
() автор топика
Ответ на: комментарий от Kapshibergen

Еще такой вопрос: Если мне нужно, что-бы при запуске копировались определенные папки с файлами (в случае если их нет по указанному пути). Как это сделать?

Да скрипт просто сделай. «cp того что покажет ldd programm.bin куда копировать» я не знаю, но это легко покрывается cut и for.

Ну а копировать cp. Предварительно проверив, нет ли их по указанному пусти с помощью if [ -f ]…

Но вообще мне кажется, что ты чего-то странного хочешь, и реальная задача может решаться правильнее.

Psych218 ★★★★★
()
Последнее исправление: Psych218 (всего исправлений: 2)
Ответ на: комментарий от Psych218

Но вообще мне кажется, что ты чего-то странного хочешь, и реальная задача может решаться правильнее.

Хочу запаковать несколько софтин в аппимидж. При этом они (по возможности) должны работать на нескольких дистрибутивах. + хочу перетащить проприетарный софт со всеми зависимостями в аппимиджи , дабы не засорять систему. Распихивать библиотеки вручную, слишком муторно. Рецепты (вроде) под проприетарь не годятся.

Так-то все, в принципе работает, просто хочется чуть упростить сборку пакетов...

Kapshibergen
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.