Skip to content

Шаг 1. Установите необходимые инструменты

bash
apt-get install alien rpm-build dpkg

Шаг 2. Распакуйте .deb-пакет

bash
mkdir mypackage && cd mypackage
bash
dpkg-deb -x ../package.deb ./data          # файлы, устанавливаемые в систему
bash
dpkg-deb --control ../package.deb ./DEBIAN # служебные файлы (control, postinst и т.д.)

Теперь у вас есть:

  • ./data/ — дерево файлов (как в корне системы: ./data/usr/bin/...)
  • ./DEBIAN/control — метаданные
  • ./DEBIAN/postinst и др. — скрипты

Шаг 3. Внесите изменения

  • Отредактируйте файлы в ./data/ (например, замените пути, содержимое, добавьте/удалите файлы).
  • При необходимости отредактируйте скрипты: переименуйте или адаптируйте их под RPM:
    • DEBIAN/postinst → будет аналогом %post
    • DEBIAN/prerm%preun
    • и т.д.

Скрипты Debian и RPM не полностью совместимы по синтаксису и переменным. Например, в RPM скрипты получают аргументы ($1 = 0 при удалении, 1 при установке), в Debian — нет. Возможно, потребуется переписать логику.

Шаг 4. Соберите изменённый пакет в RPM

Вариант A: Через alien

Сначала создайте новый .deb из изменённых файлов:

bash
dpkg-deb --build data ../package-modified.deb

Для этого нужно, чтобы DEBIAN/control был корректным. Если вы его меняли — проверьте поля Package, Version, Architecture.

Теперь конвертируйте в RPM:

bash
alien --to-rpm --scripts ../package-modified.deb

Флаг --scripts сохраняет скрипты (postinst%post и т.д.).

alien автоматически преобразует скрипты, но не всегда корректно. Проверьте итоговый .spec или поведение RPM.

Вариант B: Вручную через rpmbuild (гибче и надёжнее)

  1. Создайте структуру для RPM:
bash
rpmdev-setuptree
  1. Создайте .spec-файл вручную или на основе метаданных из DEBIAN/control.

  2. Положите изменённые файлы в архив (например, mypackage.tar.gz) и укажите его в Source0.

  3. В .spec опишите:

  • %files — пути из data/
  • %post, %preun — содержимое скриптов
  • зависимости из controlRequires, BuildRequires
  1. Соберите:
bash
rpmbuild -bb mypackage.spec

Контакты: bystrovno@basealt.ru