Translate

понеділок, 2 вересня 2013 р.

Compile into deb-package

Не всі розробники пропонують бінарні пакети своїх програм і як результат їх необхідно зібрати. Наприклад, я полюбляю користуватись переглядачем фотографій Viewnior та простим регулятором гучності Volumeicon, але вони не розповсюджуються як deb-пакети. Звісно можна виконати установку make install скриптом, але така установка не завжди бажана, адже можуть з'явитись проблеми під час видалення програми і т.п.

Для початку розберемось як перекомпілювати deb-пакет, що наявний в репозиторію Debian/Ubuntu.

Перевіряємо доступність source-репозиторіїв. Якщо вони відсутні - необхідно їх дозволити:

$ grep deb-src /etc/apt/sources.list
deb-src http://us.archive.ubuntu.com/ubuntu/ raring main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ raring-updates main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ raring universe
deb-src http://us.archive.ubuntu.com/ubuntu/ raring-updates universe
deb-src http://us.archive.ubuntu.com/ubuntu/ raring multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ raring-updates multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ raring-backports main restricted universe multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ raring-security main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ raring-security universe
deb-src http://us.archive.ubuntu.com/ubuntu/ raring-security multiverse
deb-src http://archive.canonical.com/ubuntu raring partner
deb-src http://extras.ubuntu.com/ubuntu raring main

Cкачуємо сирці (вихідний код):

$ apt-get source pidgin
Reading package lists... Done
Building dependency tree       
Reading state information... Done
NOTICE: 'pidgin' packaging is maintained in the 'Git' version control system at:
git://git.debian.org/git/collab-maint/pidgin.git
Need to get 10.1 MB of source archives.
Get:1 http://us.archive.ubuntu.com/ubuntu/ raring/main pidgin 1:2.10.7-0ubuntu4.1 (dsc) [2,590 B]
Get:2 http://us.archive.ubuntu.com/ubuntu/ raring/main pidgin 1:2.10.7-0ubuntu4.1 (tar) [10.1 MB]
Get:3 http://us.archive.ubuntu.com/ubuntu/ raring/main pidgin 1:2.10.7-0ubuntu4.1 (diff) [67.4 kB]                                                                             
Fetched 10.1 MB in 46s (218 kB/s)                                 
gpgv: Signature made Tue 23 Apr 2013 05:41:15 AM EEST using RSA key ID 97D73BA5
gpgv: Can't check signature: public key not found
dpkg-source: warning: failed to verify signature on ./pidgin_2.10.7-0ubuntu4.1.dsc
dpkg-source: info: extracting pidgin in pidgin-2.10.7
dpkg-source: info: unpacking pidgin_2.10.7.orig.tar.bz2
dpkg-source: info: unpacking pidgin_2.10.7-0ubuntu4.1.debian.tar.gz
dpkg-source: info: applying 04_let_crasher_for_apport.patch
...
dpkg-source: info: applying hg_no_cap_segfault.patch
dpkg-source: info: applying hg-remove-SIGCHLD-handler.patch

Сирці було скачано, розпаковано і накладено відповідні патчі. Наразі вміст директорії має виглядати так:

$ ls
pidgin-2.10.7  pidgin_2.10.7-0ubuntu4.1.debian.tar.gz  pidgin_2.10.7-0ubuntu4.1.dsc  pidgin_2.10.7.orig.tar.bz2

Встановлюємо dev-пакети, які необхдні для компіляції:

# apt-get build-dep pidgin

Будемо збирати пакет з деякими опціями, тому перевіримо які опції доступні:

$ cd pidgin-2.10.7
$ ./configure --help
`configure' configures pidgin 2.10.7 to adapt to many kinds of systems.

Usage: ./configure [OPTION]... [VAR=VALUE]...

To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE.  See below for descriptions of some of the useful variables.

Defaults for the options are specified in brackets.
...
Optional Features:
  --disable-option-checking  ignore unrecognized --enable/--with options
  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  --disable-largefile     omit support for large files
  --disable-nls           disable installation of translation files
  --disable-nls           do not use Native Language Support
  --disable-missing-dependencies
                          skip missing dependencies instead of aborting
                          configure
  --disable-gtkui         compile without GTK+ user interface
...
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.

Report bugs to <devel@pidgin.im>.

Наприклад, зберемо пакет із ключем "--disable-gtkui". Для цього додаємо в кінець файлу debian/rules:

$ vim debian/rules

override_dh_auto_configure:
dh_auto_configure -- --disable-gtkui

Зауважу, що перед dh_auto_configure необхідно тиснути табуляцію замість пробілів, інакше під час збирання з'явиться помилка.

Тепер набираємось терпіння і збираємо пакет:

$ dpkg-buildpackage -rfakeroot -b
...
dpkg-deb: building package `pidgin-dbg' in `../pidgin-dbg_2.10.7-0ubuntu4.1_amd64.deb'.
dh_gencontrol -pfinch  
# only call dh_scour for packages in main
if grep -q '^Component:[[:space:]]*main' /CurrentlyBuilding 2>/dev/null; then dh_scour -pfinch ; fi
dh_md5sums -pfinch 
dh_builddeb -pfinch -u-Zxz
dpkg-deb: warning: 'debian/finch/DEBIAN/control' contains user-defined field 'Original-Maintainer'
dpkg-deb: warning: ignoring 1 warning about the control file(s)

dpkg-deb: building package `finch' in `../finch_2.10.7-0ubuntu4.1_amd64.deb'.
 dpkg-genchanges -b >../pidgin_2.10.7-0ubuntu4.1_amd64.changes
dpkg-genchanges: binary-only upload - not including any source code
 dpkg-source --after-build pidgin-2.10.7
dpkg-buildpackage: binary only upload (no source included)

Рівнем вище можна побачити скомпільвані пакети, що власне і є нашою ціллю:

$ ls .. | grep deb$
finch_2.10.7-0ubuntu4.1_amd64.deb
finch-dev_2.10.7-0ubuntu4.1_all.deb
libpurple0_2.10.7-0ubuntu4.1_amd64.deb
libpurple-bin_2.10.7-0ubuntu4.1_all.deb
libpurple-dev_2.10.7-0ubuntu4.1_all.deb
pidgin_2.10.7-0ubuntu4.1_amd64.deb
pidgin-data_2.10.7-0ubuntu4.1_all.deb
pidgin-dbg_2.10.7-0ubuntu4.1_amd64.deb
pidgin-dev_2.10.7-0ubuntu4.1_all.deb

За необхідності встановлюємо:

# dpkg -i *.deb

Тепер зберемо пакет із вихідних кодів, котрі не перебувають в офіційних репозиторіях. Нехай це буде Volumeicon. Цt простий регулятор гучності, що можливо буде корисним юзерам таких WM, як Openbox чи Fluxbox.

Скачуємо:

$ wget http://softwarebakery.com/maato/files/volumeicon/volumeicon-0.5.0.tar.gz

--2013-09-02 02:20:18--  http://softwarebakery.com/maato/files/volumeicon/volumeicon-0.5.0.tar.gz
Resolving softwarebakery.com (softwarebakery.com)... 95.211.63.145
Connecting to softwarebakery.com (softwarebakery.com)|95.211.63.145|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 160089 (156K) [text/plain]
Saving to: ‘volumeicon-0.5.0.tar.gz’

100%[=============================================>] 160,089      352KB/s   in 0.4s   

2013-09-02 02:20:19 (352 KB/s) - ‘volumeicon-0.5.0.tar.gz’ saved [160089/160089]

Встановлюємо пакети, якщо вони відсутні у вашій системі:

$ sudo aptitude install build-essential autoconf automake autotools-dev dh-make debhelper devscripts

Розпаковуємо архів з кодом:

$ tar xvfz volumeicon-0.5.0.tar.gz

Створюємо необхідні додаткові конфігураційні файли для майбутнього deb-пакету:

$ cd volumeicon-0.5.0
$ dh_make -e youremail@address -f ../volumeicon-0.5.0.tar.gz

Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch?
 [s/i/m/l/k/n] s

Maintainer name  : your.username
Email-Address    :  youremail@address.com
Date             : Mon, 02 Sep 2013 02:24:59 +0300
Package Name     : volumeicon
Version          : 0.5.0
License          : blank
Type of Package  : Single
Hit <enter> to confirm: 
Done. Please edit the files in the debian/ subdirectory now. volumeicon
uses a configure script, so you probably don't have to edit the Makefiles.

Перевіряємо які пакети необхідні програмі для задоволення всіх залежностей під час установки:

$ dpkg-depcheck -d ./configure --prefix=/usr
...
/usr/lib/perl/5.14/auto/List/Util/Util.so
/usr/share/perl/5.14/feature.pm
Packages needed:
  x11proto-composite-dev
  hardening-wrapper
  x11proto-randr-dev
  libxfixes-dev
  mime-support
  gettext
  libpcre3:amd64
  intltool
  libcairo2-dev
  libxi-dev
  mawk
  libgdk-pixbuf2.0-dev
  libglib2.0-dev
  libwayland-dev
  libatk1.0-dev
  libxdmcp-dev:amd64
  libxml-parser-perl
  perl-modules
  libharfbuzz-dev
  libpthread-stubs0-dev:amd64
  pkg-config
  libasound2-dev:amd64
  libfreetype6-dev
  x11proto-kb-dev
  x11proto-damage-dev
  libfontconfig1-dev
  x11proto-xinerama-dev
  libpopt0:amd64
  libxml2:amd64
  libxrandr-dev
  libunistring0:amd64
  libxkbcommon-dev
  libpixman-1-dev
  libxcomposite-dev
  libgtk-3-dev
  libpng12-dev
  libcroco3:amd64
  x11proto-render-dev
  libpango1.0-dev
  libxau-dev:amd64
  libxdamage-dev

Правимо файл debian/control. До маніпуляцій він виглядав так:

$ cat -n debian/control
     1 Source: volumeicon
     2 Section: unknown
     3 Priority: extra
     4 Maintainer: yuriy.bichenok <ipeacocks@gmail.com>
     5 Build-Depends: debhelper (>= 8.0.0), autotools-dev
     6 Standards-Version: 3.9.4
     7 Homepage: <insert the upstream URL, if relevant>
     8 #Vcs-Git: git://git.debian.org/collab-maint/volumeicon.git
     9 #Vcs-Browser: http://git.debian.org/?p=collab-maint/volumeicon.git;a=summary
    10
    11 Package: volumeicon
    12 Architecture: any
    13 Depends: ${shlibs:Depends}, ${misc:Depends}
    14 Description: <insert up to 60 chars description>
    15 <insert long description, indented with spaces>

Після заповнення - так:

     1 Source: volumeicon
     2 Section: x11
     3 Priority: extra
     4 Maintainer: yuriy.bichenok <ipeacocks@gmail.com>
     5 Build-Depends: debhelper (>= 8.0.0), autotools-dev, x11proto-composite-dev, hardening-wrapper, x11proto-randr-dev, libxfixes-dev, mime-support, gettext, libpcre3:amd64, intltool, libcairo2-dev, libxi-dev, mawk, libgdk-pixbuf2.0-dev, libglib2.0-dev, libwayland-dev, libatk1.0-dev, libxdmcp-dev:amd64, libxml-parser-perl, perl-modules, libharfbuzz-dev, libpthread-stubs0-dev:amd64, pkg-config, libasound2-dev:amd64, libfreetype6-dev, x11proto-kb-dev, x11proto-damage-dev, libfontconfig1-dev, x11proto-xinerama-dev, libpopt0:amd64, libxml2:amd64, libxrandr-dev, libunistring0:amd64, libxkbcommon-dev, libpixman-1-dev, libxcomposite-dev, libgtk-3-dev, libpng12-dev, libcroco3:amd64, x11proto-render-dev, libpango1.0-dev, libxau-dev:amd64, libxdamage-dev
     6 Standards-Version: 3.9.4
     7 Homepage: http://softwarebakery.com/maato/volumeicon.html
     8 #Vcs-Git: git://git.debian.org/collab-maint/volumeicon.git
     9 #Vcs-Browser: http://git.debian.org/?p=collab-maint/volumeicon.git;a=summary
    10
    11 Package: volumeicon
    12 Architecture: any
    13 Depends: ${shlibs:Depends}, ${misc:Depends}
    14 Description: Volume Icon aims to be a lightweight volume control that sits in your systray.
    15 Volume Icon aims to be a lightweight volume control that sits in your systray. It is often used in conjuction with the lightweight tint2 panel/taskbar.
    16 Features:
    17 -Change volume by scrolling on the systray icon
    18 -Ability to choose which channel to control
    19 -Several icon themes (with gtk theme as default)
    20 -Configurable external mixer
    21 -Volume Slider
    22 -Hotkey support


Тобто п'ятий рядок було доповнено з dpkg-depcheck (що наведено вище), секція в другому рядку було змінено на x11, у Homepage було введено url-сторінки розробника. А Description було взято на сайті сайту розробника. Пронумерував рядки я звісно для наглядності.

Під кінець відредагуємо файл debian/rules, адже, як зазначив автор, він має збиратись з ключем "--prefix=/usr". Тому додамо в кінець опцію:

$ vim debian/rules
override_dh_auto_configure:
dh_auto_configure -- --prefix=/usr

Зберігаємо і компілюємо:

$ dpkg-buildpackage -rfakeroot

Якщо необхідно - встановлюємо. За необхідності також можна підписати пакет своїм ключем.

Посилання:
http://www.debian.org/doc/manuals/maint-guide/maint-guide.ru.pdf
http://www.webupd8.org/2010/01/how-to-create-deb-package-ubuntu-debian.html
http://www.debian.org/doc/manuals/maint-guide/dreq.ru.html#customrules
http://forum.ubuntu.ru/index.php?topic=11609.0
http://www.cyberciti.biz/faq/rebuilding-ubuntu-debian-linux-binary-package/

Немає коментарів:

Дописати коментар