Мне все чаще приходится взаимодействовать с дистрибутивами на основе deb пакетов. Долгое время и если была необходимость, всегда собирал rpm пакеты, там все просто и понятно. И вот решил попробовать собрать deb пакет. Так как уже давно есть контейнеры и по моему мнению сборка пакетов, для контроля правильных зависимостей, в изолированном окружении больше не нужна. Берешь пустой контейнер и вперед.
Так как может понадобится пересобрать и другие программы я разделил сборку на два этапа: (все шаги выполняются от пользователя)
1. Подготовка сборочного контейнера (пригодится для других программ).
FROM docker.io/library/debian:forky MAINTAINER user <user@mail.lan> USER root RUN apt-get update && apt-get install -y devscripts quilt USER ${CONTAINER_DEFAULT_USER}
2. Пересборка пакета.
Скачиваем исходники программы, файлов описания пакета и правил сборки с
https://mentors.debian.net/debian/pool/main/libm/libmateweather/
libmateweather_1.28.2-1.dsc
libmateweather_1.28.2-1.debian.tar.xz
libmateweather_1.28.2.orig.tar.xz
делаем в текущей директории директорию app1, помещаем скаченные файлы туда, и там же будут собранные бинарные пакеты.
создаем скрипт для сборки в контейнере vi start_build_binary.sh:
#!/bin/sh APP_NAME="libmateweather1t64" NAME="libmateweather" VERSION="1.28.2" SUB_VERSION="1" podman run --rm \ --volume ./app1:/app/:Z \ --workdir /app/ home.lan/debian14-debuild \ /bin/sh -c "cat /etc/debian_version; \ apt update; \ dpkg-source -x ${NAME}_${VERSION}-${SUB_VERSION}.dsc; \ cd ${NAME}-${VERSION}/; \ apt-get build-dep -y .; \ dpkg-buildpackage -b -uc -us"
запускаем скрипт и наблюдаем как собираются бинарники под тестовый (на сегодня) дистрибутив Debian.
В результате сборки в директории app1 появятся пакеты:
сама программа:
- libmateweather1t64_1.28.2-1_amd64.deb
- libmateweather-common_1.28.2-1_all.deb
заголовочные пакеты, для участия этой программы в сборке других программ:
- libmateweather-dev_1.28.2-1_amd64.deb
и вспомогательный файлы для контроля сборки и отладки:
- libmateweather_1.28.2-1_amd64.buildinfo
- libmateweather_1.28.2-1_amd64.changes
- libmateweather1t64-dbgsym_1.28.2-1_amd64.deb
P.S. Исходники мне указали на одном известном форуме.
Все это я собирал в дистрибутиве Fedora 44 c помощью системы управления контейнерами podman.
Комментарии