Перейти к содержанию

Как пересобрать deb-пакет

Debian package - это основная система управления пакетами в Debian подобных системах. dpkg используется для установки, удаления и получения информации о .deb пакетах.

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

Требуются права суперпользователя для работы

Установка пакета

sudo dpkg -i имя_пакета.deb Вывод списка установленных пакетов

dpkg -l [маска] Удаление пакета

dpkg -r имя_пакета

Инструменты разработчика

Пакет dpkg-dev содержит серию инструментов, которые вызываются для создания пакета.

  • dpkg-source - архивирует и распаковывает исходные файлы пакета Debian.
  • dpkg-deb - архивирует и распаковывает двоичные пакеты.
  • dpkg-gencontrol - читает информацию из распакованного пакета Debian о дереве исходных файлов и генерирует двоичный пакет.
  • dpkg-shlibdeps - прослеживает зависимости пакета.
  • dpkg-genchanges - читает информацию из распакованного пакета Debian о дереве исходных файлов. которые запущены единожды создают контрольный файл (.changes).
  • dpkg-buildpackage - контрольный скрипт, который может быть использован для автоматического создания пакета.
  • dpkg-distaddfile - добавляет файл в файлы Debian.
  • dpkg-parsechangelog - читает информацию из файла с изменениями распакованного пакета Debian и создаёт удобный файл с этими изменениями для просмотра его пользователем.

Содержание папки DEBIAN/*

  • DEBIAN/control: Основная информация
  • DEBIAN/copyright: © / лицензия
  • DEBIAN/changelog: история изменений
  • DEBIAN/rules: правила компиляции
  • DEBIAN/conffiles: список файлов конфигурации
  • DEBIAN/dirs: список папок для создания
  • DEBIAN/menu: создание пунктов меню
  • DEBIAN/md5sums: контрольные суммы файлов
  • DEBIAN/watch: мониторинг сайта, откуда была скачана прога
  • DEBIAN/cron.d: инсталляция заданий cron
  • DEBIAN/inid.d: init-скрипт
  • DEBIAN/(preinst|postinst|prerm|postrm): скрипты установки
  • DEBIAN/templates: шаблоны для диалогов

Подробнее можно посмотеть тут.

Как пересобрать deb-пакет

  1. Скачиваем непосредственно сам пакет, который хотим установить.(Если, конечно такой есть и не надо всё компилить). Будем полагать что он называется proga-0.1.5.deb.

    apt download proga-0.1.5.deb
    

  2. Создаём папку с произвольным названием и кладём туда наш пакет.

       mkdir /tmp/deb
       mkdir /tmp/deb/DEBIAN/
       # Именно так: папка DEBIAN должна быть написана в верхнем регистре (большими буквами)
    

Таким образом мы создаём папки в которые будем распаковывать наш пакет.

  1. Далее распаковываем пакет:
    dpkg -x /tmp/deb/proga-0.1.5.deb /tmp/deb
    
    И информацию, которую в дальнейшем будет использовать инсталлятор:
dpkg -e /tmp/deb/proga-0.1.5.deb /tmp/deb/DEBIAN/
  1. Переходим при помощи файлового менеджера в папку /tmp/deb/DEBIAN/ и открываем файл с названием control любимым текстовым редактором. При этом терминал не закрываем!

  2. Ищем строку начинающуюся на Depends: - она содержит информацию о зависимостях пакета и именно эту строку мы будем редактировать. Для этого открываем синаптик и сравниваем версии пакетов-зависимостей, указанных в файле с теми что имеются в репозитории. Если есть необходимость, понижаем версию зависимого пакета/тов и сохраняем файл.

  3. Теперь собираем наш пакет:

dpkg -b /tmp/deb /tmp/deb/DEBIAN/proga-0.1.5_new.deb
  1. Устанавливаем пересобранный пакет даблкликом или при помощи
sudo dpkg -i /tmp/deb/DEBIAN/proga-0.1.5_new.deb
  1. PROFIT!!! Или, в некоторых случаях, FAIL! Тут всё зависит от многих факторов.

Удаление пакета

dpkg -r proga-0.1.5_new.deb

# Полное удаление пакета
dpkg -P proga-0.1.5_new.deb

Запросы к базе данных dpkg и анализ файлов .deb

  • --listfiles package (or -L), список файлов, установленных этим пакетом;
  • --search file (or -S), находит пакет(ы), содержащий файл;
  • --status package (or -s), отображает заголовки установленного пакета;
  • --list (or -l), wотображает список пакетов, известных системе, и статус их установки;
  • --contents file.deb (or -c), перечисляет файлы в указанном пакете Debian;
  • --info file.deb (or -I), отображает заголовки этого пакета Debian.

$ dpkg --search /bin/mount
mount: /bin/mount
Подробнее можно посмотеть тут.