Сборка пакетов deb пакетов

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

  • Архив control.tar.gz, содержащий скрипты, написанные майнтенером пакета, использующиеся при установке/удалении пакета, а так же другие служебные файлы;
  • Архив data.tar.gz, содержащий двоичные файлы программы, ради которой создан пакет;
  • Файл debian-binary.

Поскольку содержимое пакета может в будущем измениться (будет новый номер версии в debian-binary), то собирать deb-пакет при помощи программ tar, gzip, ar не рекомендуется и этот вариант в статье рассматриваться не будет.

Собирается пакет программой dpkg из специально подготовленной структуры каталогов:

  • DEBIAN/
  • .. path/to/dir/file1
  • .. path/to/dirX/fileX

то есть:

  • Файлы и каталоги, предназначенные для установки в систему. Их расположение в архиве соответствует положению их в файловой системе если считать от корня. Например файл usr/share/doc/package/copyright в deb-архиве после установки будет находиться в /usr/share/doc/package/copyright (все они будут упакованы в архив data.tar.gz);
  • Каталог DEBIAN/, содержащий служебную информацию о пакете. Содержимое этого каталога при сборке будет упаковано в архив control.tar.gz;

Geany IDE - A fast and lightweight IDE

$ mkdir -p /home/darkfire/deb/geany
$ cd /home/darkfire/deb/geany
$ wget http://download.geany.org/geany-0.17.tar.gz
$ tar -zxvf geany-0.17.tar.gz
$ cd /home/darkfire/deb/geany/geany-0.17

Команда configure запущенная с ключем –help выводит список параметров, которые можно передать ей.

$ ./configure
...
checking dependency style of gcc... (cached) gcc3
checking for g++... no
checking for c++... no
checking for gpp... no
checking for aCC... no
checking for CC... no
checking for cxx... no
checking for cc++... no
checking for cl.exe... no
checking for FCC... no
checking for KCC... no
checking for RCC... no
checking for xlC_r... no
checking for xlC... no
checking whether we are using the GNU C++ compiler... no
checking whether g++ accepts -g... no
checking dependency style of g++... none
configure: error: No C++ compiler not found. Please install a C++ compiler.

Просматриваем вывод команды, если в конце строки "no" это означает, что в системе нет необходимых для компиляции данной программы вспомогательных программ и библиотек. Вывод малоинформативен -нет явного соответствия между ошибкой и пакетом который требуется до установить. Зная, что в Ubuntu часто пакеты с библиотеками бывают разбиты на два типа:

  1. динамическая библиотека, необходимая для работы уже скомпилированных программ;
  2. пакет с таким же именем и с суффиксом -dev, в котором находяться файлы требуемые для компиляции программ

Устанавливаем требуемые пакеты.

# aptitude install autoconf automake libtool autotools-dev dpkg-dev fakeroot intltool-debian intltool
...          
Следующие НОВЫЕ пакеты будут установлены:
  autoconf automake autotools-dev build-essential{a} dpkg-dev g++{a} g++-4.3{a} gettext{a} intltool intltool-debian libltdl7-dev{a} 
  libstdc++6-4.3-dev{a} libtool m4{a} 
0 пакетов обновлено, 14 установлено новых, 0 пакетов отмечено для удаления, и 0 пакетов не обновлено.
Необходимо получить 10,2MБ архивов. После распаковки 35,9MБ будет занято.
Хотите продолжить? [Y/n/?] Y
...

Проверяем. Снова запускаем ./configure.

$ ./configure
...
checking pkg-config is at least version 0.9.0... yes
checking for GTK... configure: error: Package requirements (gtk+-2.0 >= 2.8.0) were not met:

No package 'gtk+-2.0' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables GTK_CFLAGS
and GTK_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

Ошибка. Требует пакет gtk+-2.0. Как показали поиски на английских форумах - пакет все же называется libgtk2.0-dev. Ставим. Как показывает вывод ниже - лучше найти УЖЕ скомпилированный DEB пакет - благо на это есть реальные шансы.

# aptitude install libgtk2.0-dev
...          
Следующие НОВЫЕ пакеты будут установлены:
  debhelper{a} html2text{a} libatk1.0-dev{a} libcairo2-dev{a} libdirectfb-dev{a} libdirectfb-extra{a} libexpat1-dev{a} libfontconfig1-dev{a} 
  libfreetype6-dev{a} libglib2.0-dev{a} libgtk2.0-dev libice-dev{a} libjpeg62-dev{a} libmail-sendmail-perl{a} libpango1.0-dev{a} libpixman-1-dev{a} 
  libpng12-dev{a} libpthread-stubs0{a} libpthread-stubs0-dev{a} libsm-dev{a} libsys-hostname-long-perl{a} libsysfs-dev{a} libx11-dev{a} libxau-dev{a} 
  libxcb-render-util0-dev{a} libxcb-render0-dev{a} libxcb1-dev{a} libxcomposite-dev{a} libxcursor-dev{a} libxdamage-dev{a} libxdmcp-dev{a} 
  libxext-dev{a} libxfixes-dev{a} libxft-dev{a} libxi-dev{a} libxinerama-dev{a} libxrandr-dev{a} libxrender-dev{a} po-debconf{a} 
  x11proto-composite-dev{a} x11proto-core-dev{a} x11proto-damage-dev{a} x11proto-fixes-dev{a} x11proto-input-dev{a} x11proto-kb-dev{a} 
  x11proto-randr-dev{a} x11proto-render-dev{a} x11proto-xext-dev{a} x11proto-xinerama-dev{a} xtrans-dev{a} zlib1g-dev{a} 
0 пакетов обновлено, 51 установлено новых, 0 пакетов отмечено для удаления, и 0 пакетов не обновлено.
Необходимо получить 11,4MБ архивов. После распаковки 39,4MБ будет занято.
Хотите продолжить? [Y/n/?] Y

Проверяем. Снова запускаем ./configure. И видим ниже счастье:) Команда выполнилась успешно!!!

$ ./configure
...
Install Geany in                   : /usr/local
Using GTK version                  : 2.16.1
Build with GTK printing support    : yes
Build with plugin support          : yes
Use virtual terminal support       : yes
Use (UNIX domain) socket support   : yes

Configuration is done OK.

Компилируем в бинарные файлы

$ make
  • 1 -й способ -стандартный (подходит для любого дистрибутива Unix). Лучше использовать во FreeBSD при установке из портов. В Ubuntu это приведет к засорению системы, так как менеджеры пакетов (apt, aptitude и т.д.) не будут видеть установленной программы. Соответственно удалять ее придется вручную.
    $ make install
  • 2 -й способ - использование утилиты checkinstall
    # aptitude install checkinstall
    # man checkinstall
    NAME
           checkinstall —       Track installation of local software, and produce a binary manageable with your package management software.
    ...

    Так как сборку пакета производим под Хостинг VPS/VDS на Ubuntu -нас интересуют ключи:

          -D        Create a Debian package.

    Полная последовательность команд:

    $ cd /home/darkfire/deb/geany/geany-0.17
    $ ./configure
    $ make
    $ sudo bash # дальнейшие команды должны выполняться от root
    # checkinstall -D
    ...
    **********************************************************************
    
     Done. The new package has been installed and saved to
    
     /home/darkfire/deb/geany/geany-0.17/geany_0.17-1_i386.deb
    
     You can remove it from your system anytime using:
    
          dpkg -r geany
    
    **********************************************************************
    ...

    Пакет geany_0.17-1_i386.deb собран и готов к установке.

Eric Python IDE

Создаем пакет Eric IDE с поддержкой русского языка. Скачиваем и распаковываем исходники и русификацию. Перед компиляцией установим необходимые для запуска Eric пакеты.

# aptitude install bicyclerepair libqscintilla2-3 libqt3-i18n libqt4-assistant libqt4-help libqt4-webkit libqt4-xmlpatterns
$ mkdir -p /home/darkfire/deb/eric4ide
$ cd /home/darkfire/deb/eric4ide
$ wget http://downloads.sourceforge.net/project/eric-ide/eric4/4.3.5/eric4-4.3.5.tar.gz
$ wget http://downloads.sourceforge.net/project/eric-ide/eric4/4.3.5/eric4-i18n-ru-4.3.5.tar.gz?use_mirror=sunet
$ tar -xzvf eric4-4.3.5.tar.gz
$ tar -xzvf eric4-i18n-ru-4.3.5.tar.gz
$ cd /home/darkfire/deb/eric4ide/eric4-4.3.5/
$ sudo bash
# checkinstall python install.py

checkinstall 1.6.1, Copyright 2002 Felipe Eduardo Sanchez Diaz Duran
         Эта программа распространяется на условиях GNU GPL


The package documentation directory ./doc-pak does not exist.
Should I create a default set of package docs?  [y]:

Готовится документация к пакету...OK

Пожалуйста напишите описание пакета.
Закончите ваше описание пустой строкой или EOF.
>> Создаем пакет Eric IDE с поддержкой русского языка.
>>

*****************************************
**** Debian package creation selected ***
*****************************************

Этот пакет был создан с использованием данных значений:

0 -  Maintainer: [ root@ubuntuatom ]
1 -  Summary: [ Создаем пакет Eric IDE с поддержкой русского языка. ]
2 -  Name:    [ eric4 ]
3 -  Version: [ 4.3.5 ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ checkinstall ]
7 -  Architecture: [ i386 ]
8 -  Source location: [ eric4-4.3.5 ]
9 -  Alternate source location: [  ]
10 - Requires: [  ]
11 - Provides: [ eric4 ]

Введите номер для изменения параметра или нажмите ВВОД для продолжения:

...

Compiling eric/uninstall.py ...

Installing eric4 ...

Installation complete.


======================== Установка успешно завершена ======================

Copying documentation directory...
./
./README-i18n.txt
./THANKS
./README
grep: /var/tmp/tmp.hxkpsnHJSB/newfile: No such file or directory

Some of the files created by the installation are inside the build
directory: /home/darkfire/deb/eric4ide/eric4-4.3.5

You probably don't want them to be included in the package,
especially if they are inside your home directory.
Do you want me to list them?  [n]:
Исключить их из пакета? (ответить ДА-хорошая идея)  [y]:

Файлы копируются во временный каталог...OK

Stripping ELF binaries and libraries...OK

Сжимаются страницы руководства...OK

Построение списка файлов...OK

Собирается Debian-пакет...

Удаляются временные файлы...OK

Записывается пакет с резервной копией...OK

Удаляется временный каталог...OK


**********************************************************************

 Done. The new package has been installed and saved to

 /home/darkfire/deb/eric4ide/eric4-4.3.5/eric4_4.3.5-1_i386.deb

 You can remove it from your system anytime using:

      dpkg -r eric4

**********************************************************************

Устанавливаем скомпилированный пакет:

dpkg -i eric4_4.3.5-1_i386.deb

при запуске -возникает ошибка

# eric4 Traceback (most recent call last):

File "/usr/lib/python2.6/dist-packages/eric4/eric4.py", line 20, in <module>
  from PyQt4.QtCore import QTextCodec, SIGNAL, SLOT, qWarning, \

ImportError: No module named PyQt4.QtCore

Успешная компиляция на WWW http://shamansir.wordpress.com/2007/07/22/eric-ide-401-at-ubuntu-704/

PQ VPS сервера в 28+ странах.
  • Friendhosting - Разумные цены на хостинг

    VDS/VPS сервер от 3.49€ в месяц. Много ресурсов. Высокая надежность. Гибкое управление. Удобная оплата. Настройка под вас!

    friendhosting.net
  • Антидетект браузер Dolphin{anty} бесплатно до 10 профилей

    Dolphin разработан для работы с такими сложными ресурсов, как Google, Facebook и Coinlist.

  • Английский для IT‑специалистов по Skype

    Персональные занятия по разумным ценам. 80% разговорной практики. Персональный график!

    skyeng.ru
  • dolphin anty