Инструменты пользователя

Инструменты сайта


sborka_paketov

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

sborka_paketov [2018/11/18 02:58] (текущий)
Строка 1: Строка 1:
 +====== Сборка пакетов deb пакетов ======
 +
 +~~Title: Примеры сборка deb пакета из исходников ~~
 +{{htmlmetatags>​
 +metatag-description=(Инструкция по сборке deb-пакета для быстрого старта с примерами.)
 +}}
 +{{ ::​installing-deb-linux-apps-package.png |}}
 +
 +===== Введение =====
 +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 (A fast and lightweight IDE) =====
 +[[Geany]] - A fast and lightweight IDE
 +
 +  * [[http://​www.geany.org/​Support/​BuildingFromSource|Geany BuildingFromSource]]
 +  * [[https://​launchpad.net/​~geany-dev/​+archive/​ppa|PPA for Geany Developers]] Неофициальная сборка последних версий [[Geany]] от [[Launchpad]]
 +
 +<​code>​
 +$ 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
 +</​code>​
 +
 +==== configure ====
 +
 +Команда configure запущенная с ключем --help выводит список параметров,​ которые можно передать ей.
 +<​code>​
 +$ ./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.
 +
 +</​code>​
 +
 + ​Просматриваем вывод команды,​ если в конце строки "​no"​ это означает,​ что в системе нет необходимых для компиляции данной программы вспомогательных программ и библиотек. Вывод малоинформативен -нет явного соответствия между ошибкой и пакетом который требуется до установить.
 +Зная, что в Ubuntu часто пакеты с библиотеками бывают разбиты на два типа:
 +  - динамическая библиотека,​ необходимая для работы уже скомпилированных программ;​
 +  - пакет с таким же именем и с суффиксом -dev, в котором находяться файлы требуемые для компиляции программ
 +
 +Устанавливаем требуемые пакеты.
 +
 +<​code>​
 +# 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
 +...
 +</​code>​
 +
 +Проверяем. Снова запускаем ./​configure.
 +<​code>​
 +$ ./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.
 +
 +</​code>​
 +
 +Ошибка. Требует пакет gtk+-2.0. Как показали поиски на английских форумах - пакет все же называется libgtk2.0-dev. Ставим. Как показывает вывод ниже - лучше найти **УЖЕ** скомпилированный DEB пакет - благо на это есть реальные шансы.
 +<​code>​
 +# 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
 +
 +</​code>​
 +
 +Проверяем. Снова запускаем ./​configure. И видим ниже счастье:​) Команда выполнилась успешно!!!
 +
 +<​code>​
 +$ ./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.
 +
 +</​code>​
 +
 +==== make ====
 +
 +Компилируем в бинарные файлы
 +<​code>​
 +$ make
 +</​code>​
 +
 +==== Установка пакета (2 способа)====
 +  * 1 -й способ -стандартный (подходит для любого дистрибутива Unix). Лучше использовать во [[FreeBSD]] при установке из портов. В Ubuntu это приведет к засорению системы,​ так как менеджеры пакетов (apt, aptitude и т.д.) не будут видеть установленной программы. Соответственно удалять ее придется вручную.<​code>​
 +$ make install</​code>​
 +
 +  * 2 -й способ - использование утилиты [[http://​www.asic-linux.com.mx/​~izto/​checkinstall/​|checkinstall]]<​code>​
 +# aptitude install checkinstall
 +# man checkinstall
 +NAME
 +       ​checkinstall —       Track installation of local software, and produce a binary manageable with your package management software.
 +...</​code>​Так как сборку пакета производим под [[Ubuntu]] -нас интересуют ключи:<​code> ​     -D        Create a Debian package.
 +</​code>​Полная последовательность команд:<​code>​
 +$ 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
 +
 +**********************************************************************
 +...
 +</​code>​Пакет geany_0.17-1_i386.deb собран и готов к установке.
 +===== Создание пакета Eric Python IDE =====
 +[[http://​eric-ide.python-projects.org/​|Eric Python IDE]]
 +
 +Создаем пакет Eric IDE с поддержкой русского языка. Скачиваем и распаковываем исходники и русификацию.
 +Перед компиляцией установим необходимые для запуска Eric пакеты.
 +
 +  # aptitude install bicyclerepair libqscintilla2-3 libqt3-i18n libqt4-assistant libqt4-help libqt4-webkit libqt4-xmlpatterns
 +
 +<​code>​
 +$ 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
 +
 +**********************************************************************
 +
 +</​code>​
 +
 +Устанавливаем скомпилированный пакет:
 +  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/​
 +
 +===== Дополнительные ссылки =====
 +  * [[http://​habrahabr.ru/​blogs/​linux/​78086/​|Debian-пакеты с человеческим лицом на примере Zabbix 1.8]]
 +  * [[http://​wiki.debian.org/​DebianRussian/​deb-inside|Deb-пакеты изнутри]]
  
sborka_paketov.txt · Последние изменения: 2018/11/18 02:58 (внешнее изменение)