===== Сборка deb-пакетов Squid 3.5.24 и libecap 1.0.1 в Debian 8 из исходных кодов в репозиториях Debian 9 ===== {{:squid:pasted:20170319-010640.png }} В данной заметке описан порядок действий по подключению репозиториев **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** под наши нужны. Например, как было описано [[https://blog.it-kb.ru/2014/06/30/forward-proxy-squid-3-3-on-ubuntu-server-14-04-lts-part-10-disable-ipv6-and-rebuid-squid3-package/|ранее]], в секции **DEB_CONFIGURE_EXTRA_FLAGS** добавим дополнительную опцию сборки, отключающую поддержку **ipv6**: ... --disable-ipv6 \ ... Здесь же можно, при необходимости, включить дополнительные хелперы. Список всех доступных хелперов есть [[http://www.squid-cache.org/Doc/man/|здесь]]. После того, как файл правил сборки приведён в нужное сотсояние, запускаем процесс сборки пакетов: $ 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**, приведя его к виду: Package: * Pin: release n=jessie Pin-Priority: 500 Package: * Pin: release n=stretch Pin-Priority: -1 ---- ==== Разливка deb-пакетов ==== Осталось закинуть пакеты в [[https://blog.it-kb.ru/2015/10/23/install-deploy-local-apt-repository-packages-on-ubuntu-server-14-04-lts/|локальный 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 ---- {{:user:blogroot.png?50&nolink |}} Автор первичной редакции:\\ [[user:blogroot|Алексей Максимов]] \\ Время публикации: 18.03.2017 23:00 {{tag>Linux Debian "Debian 8" "Debian Jessie" "Debian 9" "Debian Stretch" APT Repository Sources Build deb Package Squid squid3 "Squid 3.5" libecap2 libecap3}} ~~DISCUSSION~~