LINUX.ORG.RU

Правильно ли я понимаю функционирование AppImage-приложений?

 


1

3

Здравствуйте! Сегодня я впервые в жизни запилил два AppImage приложения из существующих .deb пакетов (WPS-Office и remmina), причем они даже успешно запустились.

Однако, сразу же всплыл один принципиальный вопрос - правильно ли я понимаю, что хотя при запуске файла AppRun и происходит подмена путей на локальные для .appdir - однако сам исполняемый файл может обращаться к нужным библиотекам и по стандартным (абсолютным) путям (типа /bin, /lib и тому подобным)?

Просто иначе не понимаю: та же remmina, согласно выдаче команды ldd использует тьму разных библиотек - однако в ее appdir вообще нет директории /lib и, соответственно, ни одной из указанных библиотек. Значит, она, даже запускаясь с переписанными путями из .appdir, все равно дергает библиотеки со стандартных мест?

Или у меня каша?

Всем спасибо за внимание к теме!

Для приложений из appimage в переменной LD_LIBRARY_PATH прописывается приоритет директории куда монтируется appimage и далее дополняется старым значением LD_LIBRARY_PATH.

Т.е. при запуске приложения в первую очередь осуществляется поиск библиотек из самого appimage, если их там нет, то используются системные.

infomeh ★★
()

сам можешь посмотерть ./твоё-приложение.appimage .AppImage --appimage-extract там скрипты запуска, сам ааппимаге это просто образ монтируемый. Это тоже самое что взять тарбол с бинарником распаковать в каталог запускать через скрипт подсовывая библиотеки и ресурсы, остальное оно будет тянуть из системы как обычно. Собственное распаковав образ ты можешь запустить просто ./AppRun

Там ещё враппер всегда есть, если я не путаю он и отвечает за запуск прям с образа ибо он в его начале обычный elf.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от infomeh

Предельно просто и ясно объяснили, огромное спасибо!

Но теперь другой вопрос всплыл: правильно ли я понимаю, что для того, чтобы мой .appImage запускался на другой (тот же дистрибутив той же версии, но иное установленное окружение) системе необходимо либо

а) обеспечить в другой системе все нужные зависимости;

либо

б) скопировать нужные зависимости в директорию .appImage, причем так, чтобы пути сохранялись (то есть путь /usr/lib/нужная библиотека превращался в путь мой.appdir/usr/lib/нужная библиотека)?

Или вариант «б» не прокатит?

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

скопировать нужные зависимости в директорию .appImage

Сборщик AppImage же их сам находит и копирует. Ты при помощи чего AppImage создаешь?

James_Holden ★★★★
()

все так, там рекомендуют использовать убунту lts, ибо сейчас центось RIP, и из реальных LTS только debian, ubuntu, opensuse и остались.

но нет 100% гарантии что «не включенная so библиотека» окажется в базовой поставке в системе, также все рантайм зависимости (не прямо слинкованные, типа qt плагинов) нужно добавлять в appimage.

по факту это минимизированные PBI пакеты из старого PCBSD.

bhfq ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

А я, собственно, и запускаю ./AppRun для теста работоспособности - прежде чем паковать уже непосредственно в appimage.

В целом смысл я понял - как используются библиотеки в appimage. Теперь мне бы разобраться как включать нужные библиотеки прямо в тушку AppImage, чтобы он ничего не вынужден был дрегать из системы…

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

Вообще окончательно пакую с помощью AppImageAssistant.

Но сперва проверяю на работоспособность просто запуская ./AppRun из подготовленной директории .appdir.

Потому и возник вопрос - откуда appimage дергает библиотеки, раз в директории .appdir перед окончательной упаковкой в appimage никаких библиотек нет…

То есть в момент упаковки скрипт сам дергает из моей системы нужные библиотеки и включает их в тушку AppImage???

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

То есть в момент упаковки скрипт сам дергает из моей системы нужные библиотеки и включает их в тушку AppImage???

Да, именно так.

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

Выходит, если я подготовил директорию .appdir, кинул туда требуемые .desktop, AppRun и само приложение и, при этом, там нет требуемых библиотек - потом запаковал тем же AppImageAssistant’ом - то затем, если я подмонтирую полученный appimage (в loop режиме, это же, как я понимаю, обычный iso) - я там уже увижу не только то, что было изначально, но и кучу библиотек, правильно?

Простите, что донимаю вопросами вместо того чтобы проверить - просто недоступен до вечера будет комп с сабжем, а прям свербит этот вопрос для себя снять…

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

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

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

Плюс надо учитывать нюансы при упаковке Qt приложений - как уже выше писали, там должны быть еще и плагины Qt упакованы из твоей системы, а упаковщик по умолчанию этого не видит. Для этого у них есть дополнительный AppImage файл, который помимо упаковщика надо скачивать.

Что-то подобное и при упаковке python приложений.

Лично я для сборки Qt приложения использую linuxdeploy-x86_64.AppImage и linuxdeploy-plugin-qt, кладу их в каталог с AppDir и запускаю linuxdeploy.

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

Ну или на целевой (где будет использоваться appimage) системе поставить необходимые среды (Qt, python) - и тогда можно на этот счет не париться и не изголяться с упаковщиком, правильно?

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

По идее да, но это немного не традиционное применение. Все же предполагается что AppImage должен быть максимально автономным.

Но если ты не выкладываешь так софт, а нужно что-то для своих специфических задач, то можно и так.

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

Мне как раз для очень узкоспецифических задач чисто для применения внутри очень маленькой компании))

Спасибо Вам огромное!!! Хорошего дня!!!

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

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

На самом деле это нереально. Неизбежно возникает перекос версий библиотек. Особенно, если используются монстры типа qt. Поэтову не все библиотеки и копируются.

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