- Что такое AppImage и как запустить файл с таким расширением
- Первый способ запуска программы формата AppImage
- Второй способ запуска программы формата AppImage
- Как установить AppImage
- Что такое AppImage?
- Где взять AppImage?
- Как запустить и установить AppImage?
- Выводы
- Что такое AppImage в Linux. Запуск и установка
- Одна программа — один файл
- Как запустить файл AppImage
- Как устанавливать AppImage-файлы
- А что внутри?
- Достоинства
- Недостатки
- Другие «portable-форматы» в Linux
- Добро пожаловать! Рады приветствовать вас на форуме русскоязычного сообщества пользователей Mageia!
- запустить AppImage
- Сообщений 15
- 1 Тема от Берс 2020-02-06 13:47:47
- 2 Ответ от algri14 2020-02-06 15:32:52 (2020-02-06 20:18:23 отредактировано algri14)
- 3 Ответ от kvv-vp 2020-02-07 07:04:37
- 4 Ответ от Берс 2020-02-07 09:25:58
- 5 Ответ от kvv-vp 2020-02-08 06:45:48
- 6 Ответ от algri14 2020-02-08 12:00:59
- 7 Ответ от kvv-vp 2020-02-09 07:25:49
- 8 Ответ от Берс 2020-02-09 20:42:45
- 9 Ответ от alex_q_2000 2020-02-10 01:51:15 (2020-02-13 09:52:01 отредактировано alex_q_2000)
- Трудности переноса: Или хромая портабельность линуксовых приложений
- Содержание статьи
- Введение
- Что внутри?
- AppImage своими руками
- История вопроса
- Выводы
- AppImage и RISC OS
- Толстый эльф
Что такое AppImage и как запустить файл с таким расширением
AppImage это проект с открытым исходным кодом, созданный для того, чтобы обеспечить простой способ распространения и переноса программного обеспечения.
Первый проект был выпущен в 2004 году под названием Klik, он постоянно развивался и переименовался в 2011 году в PortableLinuxApps, а затем в 2013 — в AppImage.
AppImage является как бы ISO образами со всеми необходимыми библиотеками и зависимостями внутри одного файла, получается одна программа в одном файле. AppImage может работать на любом рабочем столе Linux дистрибутива как портативное приложение.
Для запуска приложения формата AppImage не нужно ничего устанавливать, достаточно скачать программу, а благодаря тому, что все библиотеки находятся внутри образа, ее можно использовать в большинстве дистрибутивов Linux.
Перед тем как скачать AppImage, необходимо знать архитектуру вашего процессора.
Для этого выполните команду:
В результате вы должны увидеть что-то вроде «i686«, «x86_64» или «armv7«:
Теперь вы можете загрузить программу, которая наилучшим образом соответствует вашей архитектуре и операционной системе со страницы разработчика или с хранилища в проекте Jfrog: https://bintray.com/probono/AppImages
В хранилище выберите программу для скачивания, затем перейдите на вкладку Files и укажите подходящую архитектуру и версию программы.
Итак, мы скачали программу в формате AppImage: Audacity-2.1.2.glibc2.15-x86_64.AppImage
Первый способ запуска программы формата AppImage
Запуск программы формата AppImage можно произвести через терминал с помощью команды:
В нашем случае запуск программы происходит командой:
Второй способ запуска программы формата AppImage
На программу с расширением AppImage щелкаем правой кнопкой мыши и в открывшемся окне переходим в раздел права.
Ставим птичку Разрешить запуск этого файла в качестве программы.
Закрываем окно. Запускаем программу стандартно двумя щелчками левой кнопкой мыши.
Как установить AppImage
В операционной системе Windows мы довольно часто используем портативные программы. Это программы которые не требуют установки, сохраняют конфигурационные файлы при себе и запускаются независимо от установленных в системе компонентов. Их возможности могут быть очень полезны при создании флешек восстановления, тестирования нового программного обеспечения или просто установки новых программ, которых пока еще нет в репозиториях.
Для Linux был придуман формат портативных программ AppImage. Одна программа состоит из одного файла образа, в котором находятся все необходимые для ее работы библиотеки, конфиги и сама программа. Конфигурация сохраняется по прежнему в домашней папке пользователя. В этой статье мы рассмотрим как запустить и установить AppImage в Linux.
Что такое AppImage?
Фактически программа AppImage представляет собой ISO образ, содержащий всё необходимое для запуска программы, упакованный специальным способом со включённым битом исполняемости. Для запуска программ не нужно ничего устанавливать достаточно скачать образ, сделать его исполняемой и запускать. А благодаря тому, что все библиотеки находятся внутри образа, программу можно использовать в большинстве дистрибутивов Linux. Также такой способ подходит для запуска тестовых программ, которые требуют особые зависимости, но вы можете не засорять систему и просто скачать программу одним файлом.
Многие разработчики начали использовать AppImage для своих приложений потому что это удобно и больше нет необходимости создавать отдельные пакеты приложений для каждого дистрибутива.
Где взять AppImage?
На официальном сайте AppImage есть список программ, распространяемых таким образом. Небольшую коллекцию программ AppImage можно найти на этом сайте. Здесь находятся программы собранные их разработчиками и сторонними пользователями. Здесь есть популярные браузеры, медиаплееры и текстовые редакторы и другие утилиты:
На сайте есть поиск, поэтому вы можете попытаться найти нужную программу:
Чтобы скачать программу, вам нужно перейти на вкладку Files, затем выбрать подходящую версию и просто кликнуть по ней.
Но не только здесь можно найти программы в формате AppImage, некоторые разработчики сами распространяют свои продукты в этом формате, например известный видеоредактор OpenShot и многие другие.
Как запустить и установить AppImage?
После окончания загрузки файла AppImage осталось сделать файл исполняемым. Чтобы сделать это в терминале, например, для Firefox, выполните:
Аналогично можно всё сделать через графический интерфейс, откройте контекстное меню для файла, выберите Свойства, а затем на вкладке Права установите флажок напротив Разрешить выполнение файла как программы:
И можно запускать выполнение:
Как видите, программа полностью работает, и теперь её можно записать на флешку и пробовать в другом дистрибутиве.
/bin/, а затем просто создать ярлык для удобного запуска. Разместить его можно в
/.local/share/applications/, это папка в которой находятся локальные ярлыки пользователя. Например для Firefox в папке
/bin/ ярлык будет выглядеть так:
[Desktop Entry]
Version=1.0
Name=Firefox
Comment=Start AppImage Firefox Browser
Exec=
/bin/Firefox-x86_64-20200413141725.AppImage
Icon=/usr/share/icons/hicolor/128×128/apps/firefox.png
Terminal=false
Type=Application
Для создания ярлыков в графическом интерфейсе вы можете использовать пакет gnome-panel и утилиту gnome-desktop-item-edit.
Выводы
Что такое AppImage в Linux. Запуск и установка
Большинство современных программ требуют для своей работы дополнительные компоненты (библиотеки, утилиты и так далее). Это значит, что для того, чтобы запустить такую программу в Linux, нужно сначала установить эти компоненты. Без них программа работать не будет. Более того, многие приложения требуют, чтобы эти компоненты были определенной версии. Самые популярные форматы пакетов для Linux это DEB и RPM. В таких пакетах содержится сама программ и сведения о всех зависимостях, которые требуются для корректной работы программы.
Когда вы устанавливаете какую-нибудь программу из DEB или RPM пакета, или через Центр приложений вашего дистрибутива или, например, используя apt-get, то зависимости устанавливаются автоматически. Но это идеальный случай. В реальности можно столкнуться, например, с тем, что программа потребует компоненты, которые конфликтуют с уже установленными. Или с тем, что некоторые компоненты не работают в вашем дистрибутиве. Или с тем, что под ваш дистрибутив вообще нет пакета с программой.
Одна программа — один файл
Чтобы запускать программы без лишних хлопот в любом дистрибутиве, и был разработан формат AppImage.
Ключевая идея AppImage — «одна программа = один файл».
Программы в формате AppImage состоят всего из одного файла с расширением AppImage, например, gimp.AppImage.
Работать с программами в формате AppImage очень просто. Вы просто скачиваете программу, делаете файл программы исполняемым и запускаете. Ничего не нужно устанавливать, программа просто работает.
Это аналог портативных (portable) приложений для Windows, когда исполняемый файл программы не требует установки и работает «из коробки». AppImage работает в большинстве популярных дистрибутивов — Ubuntu, Debian, ArchLinux, CentOS, Fedora, OpenSuse, RedHat и других.
Как запустить файл AppImage
Для запуска файла в формате AppImage его сначала нужно сделать исполняемым. Для этого можно щелкнуть правой кнопкой мыши по файлу и открыть окно Свойства, в окне Свойств установить опцию — Разрешить выполнение (название опции может отличаться). Так же можно воспользоваться командной строкой и выполнить команду chmod:
После этого достаточно просто запустить файл — дважды щелкнуть по файлу или же запустить файл из командной строки, например:
Как устанавливать AppImage-файлы
Устанавливать программы в формате AppImage не нужно. Они работают без установки.
Некоторые программы при первом запуске выводят сообщение с предложением установить, так называемый, desktop-файл. Это своеобразная интеграция с вашим дистрибутивом. Обычно это означает, что программа добавит на себя ссылку и свою иконку в меню запуска приложений вашего дистрибутива.
Советую перемещать AppImage-файлы в какую-нибудь отдельную директорию, а не оставлять их, например, в директории Downloads, куда обычно по умолчанию скачиваются файлы браузером. Во-первых, это позволит сохранить порядок в вашей системе. А во-вторых, если вы установили для программы desktop-файл, а затем переместили в другое место AppImage, то связь между desktop-файлом и программой будет нарушена, и вы не сможете запустить программу из меню приложений.
А что внутри?
На самом деле внутри AppImage файла содержаться все требуемые приложению компоненты, библиотеки и дополнительные файлы. Фактически, это готовый ISO образ, содержащий исполняемый файл программы и все дополнительные компоненты.
Достоинства
Плюсы такого решения очевидны. Как было сказано выше, нет проблем с установкой зависимостей. Все работает «из коробки».
Вы получаете программу именно с теми компонентами, с которыми автор данной программы (или тот, кто формировал AppImage) ее тестировал и гарантирует ее работу.
Вы можете с легкостью запускать программы, которых нет в репозиториях вашего дистрибутива. Или если для какой-нибудь программы вышло обновление, то вам не нужно ждать, когда оно появится (если вообще появится) в репозиториях. Вы можете просто скачать AppImage-версию программы и сразу ее использовать (конечно, если для нее есть AppImage).
AppImage можно запускать и в Live-системах или с флешки.
Чтобы удалить AppImage достаточно удалить AppImage-файл.
Недостатки
К недостаткам можно отнести размер AppImage файлов. Он может быть большим, так как внутри AppImage помимо самой программы находятся дополнительные компоненты.
Смею предположить, что AppImage-приложения могут работать медленнее своих обычных аналогов.
Для кого-то будет недостатком и то, что AppImage-программы нельзя обновить через Центр приложений дистрибутива. Некоторые AppImage-программы могут обновляться самостоятельно, но это зависит от того, добавил разработчик такую возможность или нет.
Другие «portable-форматы» в Linux
Помимо AppImage под Linux существуют другие форматы, в которые могут быть «упакованы» portable-программы, например, это Snap и Flatpak.
Добро пожаловать! Рады приветствовать вас на форуме русскоязычного сообщества пользователей Mageia!
Администрация форума призывает всех пользователей писать правильно названия дистрибутивов, компаний, программ, термины и пр., а так же имена и фамилии.
Это обусловлено настройкой поисковиков по правильным названиям, которые облегчают наши же поиски информации в интернете.
запустить AppImage
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Сообщений 15
1 Тема от Берс 2020-02-06 13:47:47
Приветствую!
Народ, помогите приложение запустить.
Есть программка tsmuxer, у неё на сайте есть загрузчик для линукса. Скачал с сайта AppImage, сделал для неё chmod u+x.
При запуске выдаёт ошибку:
Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, xcb.
Аварийный останов (стек памяти сброшен на диск)
2 Ответ от algri14 2020-02-06 15:32:52 (2020-02-06 20:18:23 отредактировано algri14)
Скачал с сайта AppImage, сделал для неё chmod u+x
Сначала покажите вывод:
3 Ответ от kvv-vp 2020-02-07 07:04:37
Берс, вам запустить AppImage нужно или, все таки, запустить программу? Если второе, то есть готовый пакет https://debian.pkgs.org/sid/multimedia- … 4.deb.html. Конвертируйте его в rpm с помощью alien и установите.
4 Ответ от Берс 2020-02-07 09:25:58
Берс, вам запустить AppImage нужно или, все таки, запустить программу? Если второе, то есть готовый пакет https://debian.pkgs.org/sid/multimedia- … 4.deb.html. Конвертируйте его в rpm с помощью alien и установите.
Это первое, что я сделал. Только полученный rpm не работает. Да и выходят Nightly сборки каждые два дня, deb пакеты так быстро не собираются. А в новых сборках разработчик подключает всё, что связано с нынешними UHD 4K форматами. Так что, чем новее сборка тем лучше.
почему у Вас стоит точка перед слешем?
Если делать как Вы написали, без точки, то опять ошибка:
5 Ответ от kvv-vp 2020-02-08 06:45:48
Если делать как Вы написали, без точки, то опять ошибка:
6 Ответ от algri14 2020-02-08 12:00:59
Если делать как Вы написали, без точки, то опять ошибка:
Берс, мне это как-то не требовалось, но после Вашего случая разобрался, kvv-vp дал ссылку, но там короткий ответ, а я чуть раньше уже прочёл более детальное пояснение — Путь к файлу в Linux
7 Ответ от kvv-vp 2020-02-09 07:25:49
kvv-vp дал ссылку, но там короткий ответ, а я
8 Ответ от Берс 2020-02-09 20:42:45
Ну раз AppImage нет возможности запустить, может поможете попробовать собрать rpm из исходников?
9 Ответ от alex_q_2000 2020-02-10 01:51:15 (2020-02-13 09:52:01 отредактировано alex_q_2000)
Ну раз AppImage нет возможности запустить, может поможете попробовать собрать rpm из исходников?
Пакет (tsmuxer + tsMuxerGUI): https://cloud.mail.ru/public/34mQ/2SgZmERis
После установки возможен запуск tsmuxer в консоли или через гуй tsMuxer (Меню «Приложения»-«Аудио-Видео»-«tsMuxer»)
Список доступных ключей в консоли:
tsMuxeR version 2.6.16-dev. github.com/justdan96/tsMuxer
tsMuxeR is a simple program to mux video to TS/M2TS files or create BD disks.
tsMuxeR does not use external filters (codecs).
Examples:
tsMuxeR
tsMuxeR
tsMuxeR can be run in track detection mode or muxing mode. If tsMuxeR is run
with only one argument, then the program displays track information required to
construct a meta file. When running with two arguments, tsMuxeR starts the
muxing or demuxing process.
Parameters are
separated with commas, with each parameter consisting of a name and a value,
separated with an equals sign.
Example of META file:
In this example one AC3 audio stream and one H264 video stream are multiplexed
into BD disc. The input file name can reference an elementary stream or a track
located inside a container.
Supported input containers:
— TS/M2TS/MTS
— EVO/VOB/MPG/MPEG
— MKV
— MOV/MP4
— MPLS (Blu-ray media play list file)
Names of codecs in the meta file:
— V_MPEGH/ISO/HEVC H.265/HEVC
— V_MPEG4/ISO/AVC H.264/AVC
— V_MPEG4/ISO/MVC H.264/MVC
— V_MS/VFW/WVC1 VC1
— V_MPEG-2 MPEG2
— A_AC3 AC3/AC3+/TRUE-HD
— A_AAC AAC
— A_DTS DTS/DTS-Express/DTS-HD
— A_MP3 MPEG audio layer 1/2/3
— A_LPCM raw pcm data or PCM WAV file
— S_HDMV/PGS Presentation graphic stream (BD subtitle format)
— S_TEXT/UTF8 SRT subtitle format. Encoding MUST be UTF-8/UTF-16/UTF-32
Each track may have additional parameters. Track parameters do not have dashes.
If a parameter’s value consists of several words, it must be enclosed in quotes.
Common additional parameters for any type of track:
— track track number if input file is a container.
— lang track language. MUST contain exactly 3 letters.
Additional parameters for audio tracks:
— timeshift Shift audio track by the given number of milliseconds.
Can be negative.
— down-to-dts Available only for DTS-HD tracks. Filter out HD part.
— down-to-ac3 Available only for TRUE-HD tracks. Filter out HD part.
— secondary Mux as secondary audio. Available for DD+ and DTS-Express.
— default Mark this track as the default when muxing to Blu-ray.
Additional parameters for video tracks:
— fps The number of frames per second. If not defined, the value
is auto detected if available in the source stream. If not,
it defaults to 23.976.
— delPulldown Remove pulldown from the track, if it exists. If the
pulldown is present, the FPS value is changed from 30 to 24.
— ar Override video aspect ratio. 16:9, 4:3 e.t.c.
Additional parameters for H.264 video tracks:
— level Overwrite the level in the H264 stream. Do note that this
option only updates the headers and does not reencode the
stream, which may not meet the requirements for a lower
level.
— insertSEI If the original stream does not contain SEI picture timing,
SEI buffering period or VUI parameters, add this data to
the stream. This option is recommended for BD muxing.
— forceSEI Add SEI picture timing, buffering period and VUI parameters
to the stream and rebuild this data if it already exists.
— contSPS If the original video doesn’t contain repetitive SPS/PPS,
then SPS/PPS will be added to the stream before each key
frame. This option is recommended for BD muxing.
— subTrack Used for combined AVC/MVC tracks only. TsMuxeR always
demultiplexes such tracks to separate AVC and MVC streams.
Setting this to 1 sets the reference to the AVC part, while
2 sets it to the MVC part.
— secondary Mux as secondary video (PIP).
— pipCorner Corner for PIP video. Allowed values: «TopLeft»,»TopRight»,
«BottomRight», «BottomLeft».
— pipHOffset PIP window horizontal offset from the corner in pixels.
— pipVOffset PIP window vertical offset from the corner in pixels.
— pipScale PIP window scale factor. Allowed values: «1», «1/2», «1/4»,
«1.5», «fullScreen».
— pipLumma Allow the PIP window to be transparent. Transparent colors
are lumma colors in range [0..pipLumma].
Additional parameters for PG and SRT tracks:
— video-width The width of the video in pixels.
— video-height The height of the video in pixels.
— default Mark this track as the default when muxing to Blu-ray.
Allowed values are «all» which causes all subtitles to be
shown, and «forced» which shows only elements marked as
«forced» in the subtitle stream.
— fps Video fps. It is recommended to define this parameter in
order to enable more careful timing processing.
— 3d-plane Defines the number of the ‘3D offset track’ which is placed
inside the MVC track. Each message has an individual 3D
offset. This information is stored inside 3D offset track.
Additional parameters for SRT tracks:
— font-name Font name to render.
— font-color Font color, defined as a hexadecimal or decimal number.
24-bit long numbers (for instance 0xFF00FF) define RGB
components, while 32-bit long ones (for instance
0x80FF00FF) define ARGB components.
— font-size Font size in pixels.
— font-italic Italic display text.
— font-bold Bold display text.
— font-underline Underlined text.
— font-strikeout Strikethrough text.
— bottom-offset Distance from the lower edge while displaying text.
— font-border Outline width.
— fadein-time Time in ms for smooth subtitle appearance.
— fadeout-time Time in ms for smooth subtitle disappearance.
— line-spacing Interval between subtitle lines. Default value is 1.0.
Global additional parameters are placed in the first line of the META file,
which must begin with the MUXOPT token.
All parameters in this group start with two dashes:
Похоже, что эта штука работает в присутствии уже предустановленных ffmpeg, x264, x265 и возможно ещё каких кодеров/декодеров, подробно не смотрел и в зависимости пакета их не ставил. В депенденсах находятся пакеты для запуска tsMuxerGUI и tsmuxer (lib64qt5widgets5 lib64qt5multimedia5 zlib freetype2). Так что нужные кодеки ставьте сами. Для установки x264 и x265 требуется подключить репозиторий tainted.
p.s. Честно говоря, понятия не имею, будет ли всё это работать; собралось вроде нормально. Удачи. Пошёл я спать.
Трудности переноса: Или хромая портабельность линуксовых приложений
Содержание статьи
Не так давно участники проекта Elementary Project представили на суд общественности новую технологию упаковки Linux-приложений под названием AppImage, которая позволяет запускать программы из одного файла на любом современном дистрибутиве без необходимости в их установке. Так ли хороша эта технология, как говорят о ней создатели, и нужна ли она Linux, мы постараемся выяснить на следующих страницах.
Введение
На самом деле в Elementary Project (в рамках которого, кстати, готовят свой вариант Ubuntu, www.elementary-project.com) изобрели вещь, известную в кругах пользователей Windows под именем «переносные приложения» (Portable Apps), суть которых сводится к следованию трем простым правилам: не требовать установки на диск (скачал, запустил, работаешь), представлять собой один исполняемый файл (а не установочный архив) и не оставлять после себя следов (держать конфиги и все остальное внутри себя). Проще говоря: «Одна программа — один файл».
Преимущества таких программ виндузятники (а макосовцы — так и подавно) уже успели оценить. Их можно таскать с собой на флешке, выкладывать в Dropbox, хранить на рабочем столе вместо ярлыков, удалять одним нажатием клавиши. Они не требуют установки и не засоряют систему. Хороши со всех сторон, как ни посмотри. Но могут ли линуксоиды получить все это? Проведем эксперимент.
Для продвижения идеи AppImage-приложений был создан сайт Portable Linux Apps (www.portablelinuxapps.org), содержащий более сотни портабельных приложений.
Натравливаем на него команду file и видим «ELF 32-bit LSB executable, Intel 80386 …» — обычный исполняемый файл. Ставим бит исполнения (chmod +x Opera 10.70), запускаем… упс, библиотека libfuse.so.2 не найдена. Приложение не запускается на одном из самых популярных дистрибутивов со всеми стандартными пакетами.
ОК, делаем вид, что ничего не произошло. Для верности запускаем ldd, видим небольшое количество библиотек-зависимостей, среди которых стандартные библиотеки пакета libc — та самая libfuse и libglib-2.0.
С первой все ясно — это часть пакета fuse, используемого для создания файловых систем в пространстве пользователя (позже мы узнаем, зачем она нужна), но что же такое вторая? Это библиотека для работы с данными и их хранения, часть графического тулкита GTK (на котором основан Gnome), но может использоваться и консольным софтом, таким как mc. Она действительно есть по умолчанию в большинстве дистрибутивов, но вполне может и отсутствовать.
В Kubuntu libglib-2.0 имеется, поэтому остается только доустановить libfuse. Набираем «sudo apt-get install libfuse2» и… «Уже установлена самая новая версия libfuse2». Оказывается, либа уже в системе (действительно, она используется в драйвере NTFS-3g, который есть в любом Ubuntu), но почему ее не может найти наша программа?
Ответ на этот вопрос прост: на 64-битном ядре libfuse невозможно собрать в режиме совместимости с 32-битным софтом, коим является наша портабельная Opera 10.70. Вывод: пользуйтесь 32-битным линуксом.
Отлично, берем 32-битный Ubuntu 10.04 и ставим его в виртуалку. Скачиваем все тот же файл «Opera 10.70», делаем исполняемым, запускаем. На этот раз все прошло отлично, программа запустилась почти без задержек и продолжала нормально функционировать на протяжении двух часов. Однако после закрытия приложения на диске был найден каталог «.opera», содержащий конфигурацию браузера, что свидетельствует о достаточно серьезной недоработке технологии (какой прок от такого браузера, если я не могу утащить его вместе со своими настройками и паролями на флешке или через Dropbox).
Короче, первый раунд AppImage с треском проигрывает, так как и работает далеко не везде (64-битные машины сейчас повсеместны), и всем требованиям портабельности не соответствует. На очереди вскрытие.
Что внутри?
Попробовав портативные приложения в деле, постараемся разобраться, как они работают и чем отличаются от обычных дистрибутивных пакетов вроде Deb и RPM. Сами создатели AppImage не особо заботятся о документировании своей технологии, говоря только о том, что приложения упакованы в обычный ISO-образ, который включает в себя программу и все ее зависимости, поэтому дальнейшие изыскания придется проводить самостоятельно.
Упакованная по правилам AppImage программа действительно представляет собой ISO-образ. Это легко проверить, если набрать команду mount сразу после запуска приложения и посмотреть на последнюю строчку. В начало образа (а точнее, прямо перед ним) записана небольшая программа (назовем ее загрузчиком), которая монтирует образ к временному каталогу (с помощью того самого fuse) и запускает содержащийся внутри скрипт AppRun, который запускает саму программу. Именно благодаря загрузчику AppImage-приложение можно запустить сразу после скачивания, необходимости в распаковке нет.
Во всем остальном это самый обычный ISO-образ, который можно смонтировать, чтобы изучить содержимое:
Что мы видим внутри? Во-первых, корневой скрипт AppRun, который запускается загрузчиком сразу после монтирования ISO-образа. Его задача — подготовить приложение к работе и передать ему управление.
В данном случае это файлы LICENSE, install, opera-widget-manager и каталоги share и lib, представляющие собой локальную версию каталогов /usr/share и /usr/lib. Первый содержит все необходимые приложению ресурсы, документацию, man-страницы, второй — библиотеки зависимостей и сам исполняемый файл. У Opera зависимостей мало (разработчики компилируют ее статически, включая в бинарник даже библиотеку Xlib для работы с X Window), поэтому каталог lib почти пуст, только парочка библиотек самой программы и два плагина для Gstreamer. В целом, изнутри все выглядит довольно логично и просто, поэтому можно предположить, что и создавать такие образы будет легко.
AppImage своими руками
Путем вскрытия существующего AppImage-приложения мы узнали, какие компоненты оно может содержать. Обязательными из них являются всего три:
Подыскиваем подходящий пакет и распаковываем его с помощью следующей команды:
Видим три файла: control.tar.gz, data.tar.gz и debian-binary. Первый и последний нам неинтересны, поэтому их можно смело удалять.
Второй файл содержит всю необходимую каталоговую структуру приложения как раз в нужном нам виде. Распаковываем его:
$ mv data пакет.appdir
Копируем файл имя_приложения.desktop из каталога пакет.appdir/usr/share/applications в корень каталога пакет.appdir. Помещаем туда же скрипт AppRun, загруженный с сайта Elementary Project:
$ cd пакет.appdir
$ wget www.elementary-project.com/downloads/AppRun
$ chmod +x AppRun
Запускаем скрипт AppRun, чтобы проверить приложение на работоспособность. Если заработало, значит, теперь у нас есть так называемый AppDir (Application Directory) — приложение, полностью заключенное в один каталог. Осталось только упаковать его в ISOобраз и добавить в начало загрузчик. Это можно сделать с помощью графического приложения AppImageAssistant (www.elementaryproject.com/downloads/apps/AppImageAssistant). Просто запускаем приложение, нажимаем кнопку «Forward», выбираем каталог пакет.appdir и вновь нажимаем «Forward». Все, AppImage готов.
История вопроса
В UNIX-системах же подобные идеи обособления приложений в отдельные файлы и каталоги всегда считались ересью и проваливались в самом начале своего пути. Испокон веков UNIX исповедует собственную философию размещения файлов внутри файловой системы. Бинарные файлы — в одном каталоге, документы — в другом, библиотеки — в третьем. На момент появления UNIX эта идея была замечательной и делала разработчиков и пользователей счастливыми. Для просмотра доступных команд можно было вывести листинг каталога /bin, а для указания местоположения всех библиотек при сборке софта указать каталог /lib. Проблема этой идеи лишь в том, что она не рассчитана на установку дополнительного софта. Когда UNIX и философия открытых исходников стали популярны, количество стороннего ПО возросло в сотни раз, и с ним необходимо было что-то делать (не использовать же метод «make install» всю оставшуюся жизнь). И вот, чтящие традиции юниксоиды вместо того, чтобы действительно решать проблему, пошли по проторенной дорожке и создали пакетные менеджеры, которые встраивают новый софт в уже известную каталоговую структуру, предложенную еще 40 лет назад, а все те, кто двинулся иными путями, были объявлены иноверцами.
Со скрипом и множеством проблем, но такой прием все же прошел, и теперь мы имеем пакетные менеджеры, которые правильно распознают зависимости, легко устанавливают софт из удаленных репозиториев и могут обновить хоть всю ОС за раз. Однако до сих пор остаются нерешенными проблемы dll hell (одна программа требует одну версию либы, другая — другую, третья — третью, пакетный менеджер в шоке), огромного бардака в каталоге /usr (к какому пакету относится этот файл?), невозможности установки нескольких версий одной программы (подходы типа «apt-get install firefox3 firefox4» не в счет) и банальной потери базы пакетов (стерли ее — и пакетный менеджер беспомощен). В некоторых ситуациях этот классический подход к установке ПО оказывается выигрышным. Например, в серверных вариантах ОС он дает UNIX большое преимущество, однако для простого пользователя оказывается жутко неудобным и создает гораздо больше проблем, чем предлагает решений. Именно поэтому в последнее время идее портабельных приложений в Linux уделяют особое внимание. Одним из первых был проект Zero Install (zero-install.sourceforge.net), в свое время претендовавший на роль универсального менеджера пакетов всех времен и народов. Затем был Klick (klik.atekon.de) с лозунгом «Простейший путь загрузки и запуска приложений без установки». Теперь AppImage.
Выводы
AppImage-приложения не такие уж и портабельные, как заявляют их создатели, к тому же их просто делать только на бумаге. Скорее всего, они не займут достойное место в истории Linux, зато в очередной раз доказывают правильность утверждения о том, что домашний Linux должен отличаться от Linux’а серверного.
AppImage и RISC OS
Толстый эльф
Год назад Ryan C. Gordon объявил о создании нового формата исполняемых файлов FatELF, который позволяет выполнять один и тот же бинарный файл на разных архитектурах. Например, без изменений запускать программу на процессорах архитектуры ARM и x86. В совокупности с идеей портабельных приложений FatELF позволил бы создать по-настоящему универсальные программы, которые работают везде и всегда.