Поиск по сайту:

Как преобразовать установочные пакеты Linux в другие форматы


Программа alien преобразует установочные пакеты из одного дистрибутива Linux для использования в другом. Но разве теперь Snap и Flatpak не делают это излишним? Типа, но не все так просто.

Системы упаковки Linux

Чтобы пользователи могли устанавливать программное обеспечение, дистрибутивы Linux нуждаются в системе упаковки программного обеспечения. Если дистрибутив является ответвлением другого установленного дистрибутива, он обычно придерживается системы упаковки старого дистрибутива.

Вот почему Fedora использует пакеты RPM (которые раньше расшифровывались как RedHat Package Manager), а Ubuntu и его многочисленные потомки используют пакеты DEB. DEB — это просто сокращение от «Debian». Другие дистрибутивы предпочитают писать свою собственную систему управления пакетами. Установочные файлы, упакованные для одного менеджера пакетов, не взаимозаменяемы с другими менеджерами пакетов.

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

Проекты Snap и Flatpak пытаются предоставить Святой Грааль распространения пакетов: упакуйте свое приложение один раз и установите его в любом дистрибутиве Linux. Конечно, для приложения, которое вам нужно, может быть или не быть Snap или Flatpak.

Вы можете полностью исключить системы упаковки из уравнения, если вам удобно клонировать репозиторий Git и создавать приложение из исходного кода. Но не все. И не все приложения — даже для Linux — имеют открытый исходный код, поэтому вы все равно не сможете собрать все из исходного кода.

Разработчики некоторых дистрибутивов отлично умеют получать пакеты для других платформ и переупаковывать их для своей собственной системы управления пакетами, включая приложения с закрытым исходным кодом. Но всегда будут случаи, когда приложение предлагает DEB или RPM — два больших формата — и всем остальным нужно разобраться в этом самостоятельно.

Такие программы, как alien, существуют для решения проблемы преобразования файла пакета из другого дистрибутива в нужную вам версию на вашем компьютере с Linux. Это хорошо в теории, но насколько они успешны?

Инопланетный эксперимент

Доказательство пудинга в еде.

Мы взяли три разных RPM и использовали alien для преобразования их в DEB. Затем мы попытались установить только что созданные DEB на Ubuntu.

Во всех наших тестовых случаях также был доступен для загрузки DEB, поэтому то, что мы делали, было фактически избыточным. Но мы подумали, что тестовые приложения — браузер Microsoft Edge, редактор Atom и Slack — станут хорошей проверкой возможностей alien, поэтому мы проигнорировали готовые DEB.

Установка пришельца

Установить Alien на Ubuntu, Fedora и Manjaro было просто.

В Ubuntu вы можете использовать эту команду:

sudo apt install alien

В Fedora вам нужно ввести:

sudo dnf install alien

В Manjaro пакет пришельцев находится в пользовательском репозитории Arch. Это означает, что pacman не сможет его увидеть, поэтому нам нужно использовать вспомогательную программу AUR, например yay. Название пакета тоже немного отличается.

yay -S alien_package_converter

Использование пришельца

Чтобы использовать alien, вы указываете файл, который хотите преобразовать, и формат, в который вы хотите преобразовать. Он создает файл с тем же именем файла — обычно — и с расширением формата, который вы просили.

Использование alien для создания пакета приводит к тому, что alien увеличивает номер версии пакета. Если номер пакета находится в имени файла, имя файла также будет изменено.

Это форматы, из которых и в которые может конвертировать alien.

  • -d: преобразовать в файл DEB для Debian, Ubuntu и всех производных.
  • -r: преобразовать в RPM-файл для RedHat, CentOS и Fedora.
  • -t: преобразовать в файл архива TAR.GZ для Arch и систем на основе Arch, таких как EndeavourOS и Manjaro.
  • -l: преобразовать в файл LSB, стандартный базовый файл Linux. Это была еще одна инициатива по разработке формата пакета для нескольких дистрибутивов.
  • -p: преобразование в файл PKG, формат, используемый, в частности, Solaris.
  • –to-slp: преобразование в пакет SLP, формат, используемый дистрибутивом Stampede Linux, выпуск которого прекращен.

Параметр формата, который мы будем использовать, — -d (DEB), так как мы конвертируем в файл DEB. Мы также будем использовать параметр -c (скрипты) для преобразования любых скриптов, содержащихся в пакете.

Microsoft Edge

Мы загрузили RPM для браузера Microsoft Edge и выполнили на нем следующую команду:

sudo alien -d -c microsoft-edge-beta-97.0.1072.54-1.x86_64.rpm

Без опции -c (скрипты) файл DEB не создавался, сообщалось об ошибке. С опцией -c он создал DEB.

Обратите внимание, что имя файла DEB содержит 54-2, а не 54-1.

Конвертация скриптов вряд ли закончится хорошо. Они вполне могут быть написаны для конкретной ситуации или конфигурации, уникальной для подлинной целевой платформы исходного файла пакета. Из-за этого у нас не было больших надежд. Тем не менее, мы попытались установить DEB с помощью программы dpkg и опции -i (установить).

sudo dpkg -i microsoft-edge-beta_97.0.1072.54-2_amd64.deb

Это не сработало.

Мы также попытались дважды щелкнуть файл DEB и использовать приложение Ubuntu Software для установки DEB. Интересно, что приложение Software знало, что DEB был создан иностранцем.

Это тоже не сработало. Просто чтобы убедиться, что браузер Edge действительно будет установлен на Ubuntu, мы установили официальный файл Microsoft Edge DEB.

sudo dpkg -i microsoft-edge-beta_97.0.1072.54-1_amd64.deb

Это работало без проблем. Вы можете увидеть ниже Microsoft Edge, работающий на Ubuntu.

Редактор атома

Мы скачали установочный пакет RPM для популярного редактора Atom. Мы использовали ту же команду alien, чтобы преобразовать его в DEB.

sudo alien -d -c atom.x86_64.rpm

Это создало файл DEB без каких-либо предупреждений или ошибок. Мы установили его с помощью команды dpkg с опцией -i (установить).

sudo dpkg -i atom_1.58.0-1.1_amd64.deb

Это сработало отлично.

Приложение Slack для обмена бизнес-сообщениями

Наконец, мы попытались преобразовать Slack RPM в DEB.

sudo alien -d -c slack-4.23.0-0.1.fc21.x86_64.rpm

Опять же, это создало DEB без предупреждений и ошибок. Мы использовали эту команду установки:

sudo dpkg -i slack_4.23.0-1.1_amd64.deb

Установка работала безупречно. Slack заработал без проблем.

Смешанные результаты

Такая утилита, как alien, неизбежно ведет тяжелую битву. Вероятность того, что он сможет работать в каждом случае, высока, и это подтверждается нашим небольшим количеством тестов. Сказав это, когда это работало, это было здорово.

Если вы находитесь в ситуации, когда больше ничего не остается, попробуйте alien. Но если вам доступен какой-либо другой метод — Snap, Flatpak или сборка из исходного кода — сначала попробуйте его. Даже авторы alien знают о его ограничениях и помещают это предупреждение на страницу man:

Alien не следует использовать для замены важных системных пакетов, таких как init, libc или других вещей, необходимых для функционирования вашей системы. Многие из этих пакетов настроены по-разному в разных дистрибутивах, и пакеты из разных дистрибутивов нельзя использовать взаимозаменяемо. В общем, если вы не можете удалить пакет без нарушения работы вашей системы, не пытайтесь заменить его чужой версией.

Хотя это может помочь вам выбраться из ямы, убедитесь, что вы исчерпали все другие возможности, прежде чем обращаться к alien.

Но когда нет ничего другого, alien может вас просто удивить.