===== Сборка 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
Аналогичным образом проверим доступность новой версии **libecap3**: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
# apt-cache policy libecap3
Таким образом, при последующих обновлениях в систему, как и прежде, будут устанавливаться все пакеты из репозитория **Debian 8 (Jessie)** и не будут устанавливаться пакеты из репозитория **Debian 9 (Stretch)**. А пакеты **squid3** и **libecap3** из репозитория Debian 9 будет иметь приоритет над пакетами из Debian 8. Однако сами эти пакеты, как таковые, нам не нужны, нам нужны лишь их дебианизированные исходные коды. ---- ==== Сборка libecap 1.0.1 ==== Устанавливаем пакеты сборочных инструментов: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
# 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
Удалим файл **libecap3.symbols**, который справедлив в окружении Debian 9, но будет нам мешать в сборке под Debian 8File series fully applied, ends at patch debian/patches/arch-indep-autoconf-header.diff
$ 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
---- ==== Сборка Squid 3.5.24 ==== По прежнему используем окружение рядового непривилегированного пользователя. Создаем в домашнем каталоге временный подкаталог для сборки и переходим в этот подкаталог:ii libecap3:amd64 1.0.1-3.2 amd64 eCAP library ii libecap3-dev:amd64 1.0.1-3.2 amd64 eCAP development libraries
$ 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
Заглянем в файл **debian/control** и выясним какие пакеты-зависимости нужны для сборки данной версии squid3Reading 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
$ cat debian/control | grep Build-Depends
Как видим, требуется пакет **debhelper** версии **10** и выше. Однако в **Debian 8** установлен **debhelper 9.2**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
$ dpkg --list | grep debhelper
Уберём в файле **debian/control** требование к новой версии **debhelper**.ii debhelper 9.20150101+deb8u2 all helper programs for debian/rules ...
sed -i 's/debhelper (>=10)/debhelper/' debian/control
Проверим, что ссылка на номер версии **debhelper** из файла **debian/control** удалилась:
$ cat debian/control | grep Build-Depends
Выполним установку пакетов-зависимостей (пакет **libecap3-dev** не ставим, так как уже поставили его ранее):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
$ 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
Теперь одна из самых важных частей. Правка файла правил сборки **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**: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
$ debuild -us -uc
После успешного окончания сборки выходим из каталога сборки на уровень выше и можем лицезреть собранные пакеты.
$ cd ..
$ ls -la | grep .deb$
Не забываем отключить настройки **APT**, связанные с получением пакетов из репозитория **Debian 9** в файле, который мы сделали ранее - **/etc/apt/preferences.d/debian-9-stretch.pref**, приведя его к виду:-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
# 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~~