Как стать автором
Обновить

Собираем deb-пакет. Часть 1

Время на прочтение 4 мин
Количество просмотров 44K
В репозитариях Ubuntu собрано огромное количество программ и библиотек. На сайтах самих программ достаточно часто встречаются deb-пакеты, которые можно скачать и установить. Однако все же бывает ситуация, когда нужного ПО нет в репозитариях или на сайте нельзя скачать пакет для Ubuntu, или, наконец, в репозитарии есть старая версия, но она вас не устраивает тем, что в ней присутствует досадный баг или нет нужной функциональности.


Не спешите качать исходники и делать ./configure && make && make install. Это приведет к тому что у вас возникнет каша из библиотек и софта, установленного вручную и через apt, управляться с которой станет очень тяжело. Гораздо лучше потратить побольше времени и приготовить deb-пакет, который уже потом установить используя apt. Преимущества же apt над ручной установкой очевидны.

Допустим мы находимся в ситуации, когда в следующей версии Ubuntu или Debian есть необходимая нам программа, а в текущей версии в репозитории ее нет.

Например, у меня на рабочем компьютере установлена Ubuntu 7.10 Gutsy и мне хочется установить программу Guake. В репозиториях Gutsy ее нет. На сайте deb-пакета под мою версию Ubuntu нет, потому придется делать его самому.

Отправляемся на сайт packages.ubuntu.com и ищем на нем guake в репозитариях для всех версий Ubuntu; обнаруживаю пакет для Ubuntu 8.10. Чем больше различие в версиях убунты, тем больше вероятность получения неожиданных проблем при бэкпортировании. Но что же, попробуем, судя по зависимостям проблем не должно быть слишком много.

Для бэкпортирования или сборки из исходников нам понадобятся определенные утилиты. Перед началом работы установим минимальный набор, который будет необходим для этого. Это пакеты debhelper, dh-make, devscripts, fakeroot, build-essential, automake, gnupg, lintia. Отмечу что для пакетирования конкретного софта будут требоваться дополнительные комплияторы, dev-версии библиотек, которые видимо лучше устанавливать когда они понадобятся.

После установки софта мы готовы к бэкпортированию guake.



  1. Подготовим директорию в которой будем работать:
    konstantin@konstantin-desktop:~$ mkdir -p /tmp/dev/deb/guake
    konstantin@konstantin-desktop:~$ cd !!:2
    cd /tmp/dev/deb/guake
    konstantin@konstantin-desktop:/tmp/dev/deb/guake$

  2. Заходим на страницу пакета и в колонке справа находим ссылку на dsc-файл (guake_0.3.1-3.dsc). Качаем исходные коды пакета при помощи dget:
    dget archive.ubuntu.com/ubuntu/pool/universe/g/guake/guake_0.3.1-3.dsc
  3. В результате у нас скачаны 3 файла с исходными кодами. Распаковываем командой
    konstantin@konstantin-desktop:/tmp/dev/guake$ dpkg-source -x guake_0.3.1-5.dsc
    gpg: Подпись создана Пнд 01 Сен 2008 08:07:22 VLAST ключом DSA с ID DD899610
    gpg: Не могу проверить подпись: открытый ключ не найден
    dpkg-source: extracting guake in guake-0.3.1
    dpkg-source: unpacking guake_0.3.1.orig.tar.gz
    dpkg-source: applying ./guake_0.3.1-5.diff.gz

  4. Перейдем в новый каталог
    konstantin@konstantin-desktop:/tmp/dev/guake$ cd guake-0.3.1/
  5. Выполняем dhc -i
    konstantin@konstantin-desktop:/tmp/dev/guake/guake-0.3.1$ dch -i
  6. В результате откроется редактор на файле guake-0.3.1/debian/changelog. Там уже будет вставлен необходимый шаблонный текст. останется лишь напротив звёздочки вписать что-нибудь вроде

    Backported from Interpid

    guake (0.3.1-5ubuntu1) gutsy; urgency=low

    * Backported from Interpid

    -- Konstantin Mikhaylov <konstantin@konstantin-desktop> Thu, 18 Sep 2008 15:07:30 +1100


  7. Начинаем процедуру сборки пакета
    konstantin@konstantin-desktop:/tmp/dev/guake/guake-0.3.1$dpkg-buildpackage -rfakeroot


    Скорее всего собрать пакет сходу не удастся из-за отсутствия некоторых библиотек. У меня так и вышло:
    konstantin@konstantin-desktop:/tmp/dev/guake/guake-0.3.1$ dpkg-buildpackage -rfakeroot
    dpkg-buildpackage: source package is guake
    dpkg-buildpackage: source version is 0.3.1-5ubuntu1
    dpkg-buildpackage: source changed by Konstantin Mikhaylov <konstantin@konstantin-desktop>
    dpkg-buildpackage: host architecture i386
    dpkg-buildpackage: source version without epoch 0.3.1-5ubuntu1
    dpkg-checkbuilddeps: Unmet build dependencies: autoconf libgtk2.0-dev intltool python-gtk2-dev
    dpkg-buildpackage: Build dependencies/conflicts unsatisfied; aborting.
    dpkg-buildpackage: (Use -d flag to override.)


    Видим, что для сборки требуются autoconf, libgtk2.0-dev, intltool, python-gtk2-dev (после завершения мы можем их удалить, дабы не засорять систему). Устанавливаем их через apt и снова пытаемся собрать пакет. Если все пакеты необходимые для сборки успешно установлены, то начнется сборка пакета, в том числе выполнится configure, обработается make-файл и собственно скомпилируется сама программа.
  8. Смотрим что получилось
    konstantin@konstantin-desktop:/tmp/dev/guake/guake-0.3.1$ cd ..
    konstantin@konstantin-desktop:/tmp/dev/guake$ ls -l
    итого 702
    drwxr-xr-x 7 konstantin konstantin 984 2008-09-18 15:13 guake-0.3.1
    -rw-r--r-- 1 konstantin konstantin 2584 2008-09-18 15:04 guake_0.3.1-5.diff.gz
    -rw-r--r-- 1 konstantin konstantin 1320 2008-09-18 15:03 guake_0.3.1-5.dsc
    -rw-r--r-- 1 konstantin konstantin 2658 2008-09-18 15:12 guake_0.3.1-5ubuntu1.diff.gz
    -rw-r--r-- 1 konstantin konstantin 552 2008-09-18 15:12 guake_0.3.1-5ubuntu1.dsc
    -rw-r--r-- 1 konstantin konstantin 697 2008-09-18 15:13 guake_0.3.1-5ubuntu1_i386.changes
    -rw-r--r-- 1 konstantin konstantin 212372 2008-09-18 15:13 guake_0.3.1-5ubuntu1_i386.deb
    -rw-r--r-- 1 konstantin konstantin 481572 2008-09-18 15:04 guake_0.3.1.orig.tar.gz

  9. Устанавливаем полученный пакет
    konstantin@konstantin-desktop:/tmp/dev/guake$ sudo dpkg -i guake_0.3.1-5ubuntu1_i386.deb

    и пользуемся программой.


Нужно ли продолжение?
Теги:
Хабы:
+44
Комментарии 45
Комментарии Комментарии 45

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн