Вики IT-KB

Пошаговые руководства, шпаргалки, полезные ссылки...

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

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


squid:build-deb-packages-squid-3-5-24-and-libecap-1-0-1-in-debian-8-jessie-from-the-source-code-in-debian-9-stretch-repos

Сборка deb-пакетов Squid 3.5.24 и libecap 1.0.1 в Debian 8 из исходных кодов в репозиториях Debian 9

В данной заметке описан порядок действий по подключению репозиториев Debian 9 (Stretch) в Debian 8 (Jessie), загрузки исходных кодов пакетов squid3 и libecap3 из этих репозиториев и сборки deb-пакетов Squid 3.5.24 и libecap 1.0.1 для использования в Debian 8.


Подключение репозиториев Debian 9 (Stretch)

Sqiud ветки 3.5.x требует для своей работы библиотеку libecap 1.0. В репозиториях Debian 8 (Jessie) этой версии libecap нет, а доступна версия 0.2 в виде пакета libecap2. Однако в репозиториях следующей разрабатываемой версии Debian 9 (Stretch) интересующая нас версия libecap 1.0 имеется в виде пакета libecap3. Более того, там же имеется собранная версия Squid 3.5.23 в виде пакета squid3. Это даёт нам возможность использовать уже готовые дебианизированные исходники libecap 1.0 и Squid 3.5.23 для сборки 3.5.24 в Debian Jessie.

Чтобы установить интересующие нас пакеты из репозиториев Debian Stretch, придётся внести небольшие изменения в настройки менеджера пакетов apt.

Создадим файл, добавляющий в систему репозиторий Debian Stretch:

# cat > /etc/apt/sources.list.d/debian-9-stretch.list << EOF

# Testing repos for Debian 9 (Stretch)
deb     http://ftp.ru.debian.org/debian stretch main
deb-src http://ftp.ru.debian.org/debian stretch main

EOF

Создадим файл, добавляющий в систему правила установки пакетов:

# cat > /etc/apt/preferences.d/debian-9-stretch.pref  << EOF

Package: squid3 libecap3
Pin: release n=stretch
Pin-Priority: 550

Package: *
Pin: release n=jessie
Pin-Priority: 500

Package: *
Pin: release n=stretch
Pin-Priority: -1

EOF

После создания дополнительных конфигурационных файлов apt выполним обновление и убедимся в том, что теперь нам для установки доступна новая версия squid3:

# apt update
# apt-cache policy squid3
squid3:. Installed: (none) Candidate: 3.5.23-1 Package pin: 3.5.23-1 Version table: 3.5.23-1 550 -1 http://ftp.ru.debian.org/debian/ stretch/main amd64 Packages 3.4.8-6+deb8u4 550 500 http://ftp.ru.debian.org/debian/ jessie/main amd64 Packages 500 http://security.debian.org/ jessie/updates/main amd64 Packages

Аналогичным образом проверим доступность новой версии libecap3:

# apt-cache policy libecap3
libecap3: Installed: (none) Candidate: 1.0.1-3.2 Package pin: 1.0.1-3.2 Version table: 1.0.1-3.2 550 -1 http://ftp.ru.debian.org/debian/ stretch/main amd64 Packages

Таким образом, при последующих обновлениях в систему, как и прежде, будут устанавливаться все пакеты из репозитория Debian 8 (Jessie) и не будут устанавливаться пакеты из репозитория Debian 9 (Stretch). А пакеты squid3 и libecap3 из репозитория Debian 9 будет иметь приоритет над пакетами из Debian 8. Однако сами эти пакеты, как таковые, нам не нужны, нам нужны лишь их дебианизированные исходные коды.


Сборка libecap 1.0.1

Устанавливаем пакеты сборочных инструментов:

# apt-get install devscripts quilt

Установка пакетов-зависимостей необходимых для сборки libecap

# apt-get build-dep libecap3
Reading package lists... Done Building dependency tree Reading state information... Done Picking 'libecap' as source package instead of 'libecap3' The following NEW packages will be installed: autoconf automake autopoint autotools-dev binutils build-essential cdbs cpp cpp-4.9 debhelper dh-autoreconf dpkg-dev g++ g++-4.9 gcc gcc-4.9 gettext intltool-debian libasan1 libatomic1 libc-dev-bin libc6-dev libcilkrts5 libcloog-isl4 libcroco3 libdpkg-perl libgcc-4.9-dev libgomp1 libisl10 libitm1 liblsan0 libmpc3 libmpfr4 libstdc++-4.9-dev libtool libtsan0 libubsan0 libunistring0 linux-libc-dev make po-debconf 0 upgraded, 41 newly installed, 0 to remove and 0 not upgraded. Need to get 51.2 MB of archives. After this operation, 154 MB of additional disk space will be used. Do you want to continue? [Y/n] Y

Входим в систему с правами рядового непривилегированного пользователя и создаем в домашнем каталоге временный подкаталог для последующих манипуляций по сборке, затем переходим в этот подкаталог:

$ mkdir ~/libecap3-build
$ cd ~/libecap3-build

Скачиваем и разворачиваем исходные файлы libecap в текущем каталоге

$ apt-get source libecap3

Переходим в каталог с новыми исходными файлами

$ cd ~/libecap3-build/libecap-1.0.1

Экспортируем путь к каталогу с патчами для quilt:

$ export QUILT_PATCHES=debian/patches

Применяем к исходным файлам патчи:

$ while quilt push; do quilt refresh; done
File series fully applied, ends at patch debian/patches/arch-indep-autoconf-header.diff

Удалим файл libecap3.symbols, который справедлив в окружении Debian 9, но будет нам мешать в сборке под Debian 8

$ rm -f debian/libecap3.symbols

Запускаем сборку пакета в текущем каталоге:

$ debuild -us -uc

После окончания сборки пакетов, выходим из каталога сборки и устанавливаем новые пакеты:

$ cd ..
$ sudo dpkg -i libecap3_1.0.1-3.2_amd64.deb  libecap3-dev_1.0.1-3.2_amd64.deb

Итак, мы имеем установленные пакеты libecap3, которые пригодятся нам при последующей сборке squid3

$ dpkg --list | grep libecap
ii libecap3:amd64 1.0.1-3.2 amd64 eCAP library ii libecap3-dev:amd64 1.0.1-3.2 amd64 eCAP development libraries

Сборка Squid 3.5.24

По прежнему используем окружение рядового непривилегированного пользователя. Создаем в домашнем каталоге временный подкаталог для сборки и переходим в этот подкаталог:

$ mkdir ~/squid3-build
$ cd ~/squid3-build

Скачиваем и разворачиваем исходные коды пакета в текущий каталог (будут загружены исходники 3.5.23 из репозитория Debian 9):

$ apt-get source squid3

Скачиваем исходные коды последней стабильной версии Squid 3.5.24 с официального сайта в текущий каталог:

$ wget http://www.squid-cache.org/Versions/v3/3.5/squid-3.5.24.tar.gz

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

$ cd squid3-3.5.23
$ uupdate -v 3.5.24 ../squid-3.5.24.tar.gz
New Release will be 3.5.24-1. Symlinking to pristine source from squid3_3.5.24.orig.tar.gz... -- Untarring the new sourcecode archive ../squid-3.5.24.tar.gz Unpacking the debian/ directory from version 3.5.23-1 worked fine. Remember: Your current directory is the OLD sourcearchive! Do a "cd ../squid3-3.5.24" to see the new package

Переходим в каталог с обновлёнными исходниками

$ cd ~/squid3-build/squid3-3.5.24

Тепeрь нам нужно заполучить в систему пакеты-зависимости, которые потребуются для сборки текущей версии squid3. Однако привычная нам команда «apt-get build-dep squid3» выдаст ошибку, так как пакета debhelper нужной версии, которая прописана в сборочных зависимостях в исходниках squid3 из репозитория Debian 9 в системе не хватает.

$ sudo apt-get build-dep squid3
Reading package lists... Done Building dependency tree Reading state information... Done E: Build-Depends dependency for squid3 cannot be satisfied because candidate version of package debhelper can't satisfy version requirements

Заглянем в файл debian/control и выясним какие пакеты-зависимости нужны для сборки данной версии squid3

$ cat debian/control | grep Build-Depends
Build-Depends: libldap2-dev, libpam0g-dev, libdb-dev, cdbs, libsasl2-dev, debhelper (>=10), libcppunit-dev, libkrb5-dev, comerr-dev, libcap2-dev [linux-any], libecap3-dev (>= 1.0.1-2), libexpat1-dev, libxml2-dev, autotools-dev, libltdl-dev, dpkg-dev (>= 1.16.1~), pkg-config, libnetfilter-conntrack-dev [linux-any], nettle-dev, libgnutls28-dev, lsb-release

Как видим, требуется пакет debhelper версии 10 и выше. Однако в Debian 8 установлен debhelper 9.2

$ dpkg --list | grep debhelper
ii debhelper 9.20150101+deb8u2 all helper programs for debian/rules ...

Уберём в файле debian/control требование к новой версии debhelper.

sed -i 's/debhelper (>=10)/debhelper/' debian/control

Проверим, что ссылка на номер версии debhelper из файла debian/control удалилась:

$ cat debian/control | grep Build-Depends
Build-Depends: libldap2-dev, libpam0g-dev, libdb-dev, cdbs, libsasl2-dev, debhelper, libcppunit-dev, libkrb5-dev, comerr-dev, libcap2-dev [linux-any], libecap3-dev (>= 1.0.1-2), libexpat1-dev, libxml2-dev, autotools-dev, libltdl-dev, dpkg-dev (>= 1.16.1~), pkg-config, libnetfilter-conntrack-dev [linux-any], nettle-dev, libgnutls28-dev, lsb-release

Выполним установку пакетов-зависимостей (пакет libecap3-dev не ставим, так как уже поставили его ранее):

$ sudo apt-get install libldap2-dev libpam0g-dev libdb-dev cdbs libsasl2-dev \
 debhelper libcppunit-dev libkrb5-dev comerr-dev libcap2-dev libexpat1-dev \
 libxml2-dev autotools-dev libltdl-dev dpkg-dev pkg-config libnetfilter-conntrack-dev \
 nettle-dev libgnutls28-dev lsb-release

Приступаем к работе с патчами.
Напомню, что мы находимся в каталоге ~/squid3-build/squid3-3.5.24

Экспортируем путь к каталогу с патчами для quilt:

$ export QUILT_PATCHES=debian/patches

Применяем имеющиеся в исходниках патчи:

$ while quilt push; do quilt refresh; done
Applying patch debian/patches/0001-Default-configuration-file-for-debian.patch patching file src/cf.data.pre Hunk #1 succeeded at 1213 (offset 3 lines). Hunk #2 succeeded at 1466 (offset 3 lines). Hunk #3 succeeded at 4604 (offset 1 line). Hunk #4 succeeded at 4623 (offset 1 line). Hunk #5 succeeded at 8982 (offset 1 line). Now at patch debian/patches/0001-Default-configuration-file-for-debian.patch Refreshed patch debian/patches/0001-Default-configuration-file-for-debian.patch Applying patch debian/patches/0002-Change-default-file-locations-for-debian.patch patching file src/Makefile.am patching file src/Makefile.in Hunk #1 succeeded at 3260 (offset 2 lines). Now at patch debian/patches/0002-Change-default-file-locations-for-debian.patch Refreshed patch debian/patches/0002-Change-default-file-locations-for-debian.patch File series fully applied, ends at patch debian/patches/0002-Change-default-file-locations-for-debian.patch

Теперь одна из самых важных частей. Правка файла правил сборки squid3 - debian/rules под наши нужны. Например, как было описано ранее, в секции DEB_CONFIGURE_EXTRA_FLAGS добавим дополнительную опцию сборки, отключающую поддержку ipv6:

rules
...
--disable-ipv6 \
...

Здесь же можно, при необходимости, включить дополнительные хелперы. Список всех доступных хелперов есть здесь.

После того, как файл правил сборки приведён в нужное сотсояние, запускаем процесс сборки пакетов:

$ debuild -us -uc

После успешного окончания сборки выходим из каталога сборки на уровень выше и можем лицезреть собранные пакеты.

$ cd ..
$ ls -la | grep .deb$
-rw-r--r-- 1 -- 138760 Mar 14 17:15 squid3_3.5.24-1_all.deb -rw-r--r-- 1 -- 2312054 Mar 14 17:16 squid_3.5.24-1_amd64.deb -rw-r--r-- 1 -- 166114 Mar 14 17:16 squid-cgi_3.5.24-1_amd64.deb -rw-r--r-- 1 -- 167540 Mar 14 17:16 squidclient_3.5.24-1_amd64.deb -rw-r--r-- 1 -- 284600 Mar 14 17:15 squid-common_3.5.24-1_all.deb -rw-r--r-- 1 -- 19247346 Mar 14 17:16 squid-dbg_3.5.24-1_amd64.deb -rw-r--r-- 1 -- 157684 Mar 14 17:16 squid-purge_3.5.24-1_amd64.deb

Не забываем отключить настройки APT, связанные с получением пакетов из репозитория Debian 9 в файле, который мы сделали ранее - /etc/apt/preferences.d/debian-9-stretch.pref, приведя его к виду:

debian-9-stretch.pref
Package: *
Pin: release n=jessie
Pin-Priority: 500

Package: *
Pin: release n=stretch
Pin-Priority: -1

Разливка deb-пакетов

Осталось закинуть пакеты в локальный apt-репозиторий, если такой имеется для разливки собранных deb-пакетов на серверы.

# reprepro -b /srv/reprepro/debian -C main includedeb jessie \
 /home/user/libecap3-build/libecap3*.deb
# reprepro -b /srv/reprepro/debian -C main includedeb jessie \
 /home/user/squid3-build/squid*.deb

Автор первичной редакции:
Алексей Максимов
Время публикации: 18.03.2017 23:00

Обсуждение

solidsolid, 26.10.2017 17:48
У меня есть пролема. Делаю по Вашей инструкции, а именно:
Пытаюсь собрать пакет htmlparser.
Узнаю зависимости пакета. Прописываю их в debian/control:
Source: htmlparser1
Section: web
Priority: optional
Maintainer: solid <solid@5498745.ml>
Build-Depends: debhelper (>= 9), locales, perl, liblocale-gettext-perl, perl-modules, libdpkg-perl, dpkg-dev
Standards-Version: 3.9.5

Homepage: www.5498745.ml
#Vcs-Git: git://anonscm.debian.org/collab-maint/htmlparser1.git
#Vcs-Browser: http://anonscm.debian.org/?p=collab-maint/htmlparser1.git;a=summary
Package: htmlparser1
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: HTML Parser is a Java library used to parse HTML

В итоге после выполнения следующего шага, а именно:
solid#fuji:(/media/files/tmp/srcdeb/htmlparser/htmlparser1-6)debuild -us -uc
В дирректории на уровень выше появляются файлы:
solid#fuji:(/media/files/tmp/srcdeb/htmlparser/htmlparser1-6)ls ..
total 5.9M
drwxr-xr-x 6 solid solid 4.0K Oct 26 14:13 htmlparser1-6
-rw-r--r-- 1 solid solid 108K Oct 26 14:27 htmlparser1_6-1_amd64.build
-rw-r--r-- 1 solid solid 1.5K Oct 26 14:27 htmlparser1_6-1_amd64.changes
-rw-r--r-- 1 solid solid 29K Oct 26 14:27 htmlparser1_6-1_amd64.deb
-rw-r--r-- 1 solid solid 921 Oct 26 14:27 htmlparser1_6-1.dsc
-rw-r--r-- 1 solid solid 9.1K Oct 26 14:27 htmlparser1_6-1.debian.tar.xz
-rw-r--r-- 1 solid solid 2.9M Oct 26 04:18 htmlparser1_6.orig.tar.xz
-rw-r--r-- 1 solid solid 2.9M Oct 26 04:18 htmlparser1-6.tar.xz

Если ввести команду:
homer#fuji:(/media/files/tmp/srcdeb/htmlparser)dpkg-deb --info htmlparser1_6-1_amd64.deb
new debian package, version 2.0.
size 28894 bytes: control archive=602 bytes.
230 bytes, 9 lines control
446 bytes, 6 lines md5sums
Package: htmlparser1
Version: 6-1
Architecture: amd64
Maintainer: solid <solid@5498745.ml>
Installed-Size: 52
Section: web
Priority: optional
Homepage: http://www.5498745.ml
Description: HTML Parser is a Java library used to parse HTML

То можно заметить, что о зависимостях пакета (Build-Depends: в терминалогии debian/control) не говорится не слова.
В чём может быть причина?
Ваш комментарий:
 
squid/build-deb-packages-squid-3-5-24-and-libecap-1-0-1-in-debian-8-jessie-from-the-source-code-in-debian-9-stretch-repos.txt · Последнее изменение: 19.03.2017 01:07 — Алексей Максимов

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki