Собственно wget с поддержкой шифра ГОСТ, собранный на CentOS 6.4:
- патч: wget-1.12-openssl_gost.patch
- srpm пакет: wget-1.12-1.9.el6.src.rpm
- rpm для x86_64: wget-1.12-1.9.el6.x86_64.rpm
И так, нам понадобятся:
- патч для wget'а от Криптокома
- srpm пакет wget'а из CentOS 6.4 (или откуда-нибудь еще)
$ mkdir ~/pkgs
$ echo '%_topdir %(echo $HOME)/pkgs/rpmbuild' >> ~/.rpmmacros
Теперь загрузим патч от Криптокома и оригинальный srpm пакет в ~/pkgs и распакуем их.
$ cd ~/pkgs
$ wget http://www.cryptocom.ru/opensource/wget.diff.gz
$ gunzip wget.diff.gz
$ wget http://vault.centos.org/6.4/os/Source/SPackages/wget-1.12-1.8.el6.src.rpm
$ rpm -ihv wget-1.12-1.8.el6.src.rpm
После последней команды содержимое пакета будет разложено по подкаталогам ~/pkgs/rpmbuild: исходники с патчами в SOURCES, а spec-файл в SPECS. Прежде чем делать наш патч, давайте сначала посмотрим на патч от Криптокома (хоть он и от старой версии). Он делает следующее:
- добавляет в начало файла src/openssl.c (там, где много include'ов):
#if OPENSSL_VERSION_NUMBER >= 0x00907000
#include<openssl/conf.h>
#endif
- в том же файле в начало функции ssl_init() перед инициализацией SSL, вставляет:
#if OPENSSL_VERSION_NUMBER >= 0x00907000
OPENSSL_config(NULL);
#endif
$ rpm2cpio wget-1.12-1.8.el6.src.rpm | cpio -idmv
В начале спека (строка 10) можно заметить, что во время сборки на исходники накладывается ряд патчей. Среди них есть wget-1.12-openssl_timeout.patch (за номером 3 в spec-файле), который модифицирует интересующий нас src/openssl.c, поэтому первым делом применим его:
$ cd rpmbuild/SOURCES
$ tar -xjf wget-1.12.tar.bz2
$ patch -p0 < wget-1.12-openssl_timeout.patch
patching file wget-1.12/src/openssl.c
Теперь в пропатченный openssl.c добавляем изменения для включения ГОСТ'а, предварительно сделав его копию, чтобы было относительно чего формировать патч. Для удобства можно открыть в vim'е openssl.c и Криптокомовский патч "лицом к лицу", что я и делаю второй командой:
$ cp wget-1.12/src/openssl.c{,.orig}
$ vim -O ~/pkgs/wget.diff wget-1.12/src/openssl.c
Получаем долгожданный патч:
$ diff -u wget-1.12/src/openssl.c{.orig,} > wget-1.12-openssl_gost.patch
Следующий шаг - это исправить spec-файл так, чтобы во время сборки наш патч применялся после wget-1.12-openssl_timeout.patch (я заодно увеличил номер релиза пакета). Переходим в каталог ~/pkgs/rpmbuild/SPECS, а далее можно воспользоваться патчем для wget.spec или внести изменения вручную. При ручном вмешательстве меняем список содержащихся в пакете патчей и порядок их применения следующим образом:
Release: 1.9%{?dist}
...
Patch3: wget-1.12-openssl_timeout.patch
Patch4: wget-1.12-openssl_gost.patch
Patch5: wget-1.12-fuzzed_response_seg_fault.patch
...
%patch3 -p1 -b .ssl_timeout
%patch4 -p1
%patch5 -p1 -b .fuzzed
И так, патч получили, в spec-файле его прописали, можно переходить непосредственно к сборке wget'а: устанавливаем build-зависимости (предполагаю, что gcc сотоварищи уже установлены) и запускаем сборку:
$ sudo yum-builddep wget.spec
$ rpmbuild -ba wget.spec
По завершению сборки, в каталоге ~/pkgs/rpmbuild/SRPMS появится, как следует из названия каталога, srpm-пакет, а в ~/pkgs/rpmbuild/RPMS/<архитектура> будет лежать пакет готовый для установки.
Комментариев нет:
Отправить комментарий