Ads 468x60px

суббота, 10 декабря 2011 г.

Сборка пакетов в Archlinux. Exim с поддержкой Postgresql.

Если по каким либо причинам вы хотите изменить параметры пакета из репозиториев, то такой пакет может быть собран  самостоятельно с использованием системы ABS - The Arch Build System (Система сборки пакетов Arch`a). Как именно это сделать описано достаточно хорошо описано в трех статьях ( информация частично пересекается):
Собираем пакет при помощи ABS
Arch Build System (Русский) 
Creating Packages (Русский) - дополнительная информация по сборке новых пакетов.
Во всех вышеприведенных статьях рассматривается "настройка" пакета при помощи файла PKGBUILD. В данной же заметке я хочу описать немного иной, но на мой взгляд не менее эффективный способ - редактирование файле <pkgname>.Makefile.
В качестве примера рассмотрим сборку MTA exim с поддержкой postgresql.
Для начала установим все необходимые для сборки пакеты:
# pacman -Sy abs make gcc postgresql
после чего получим последнюю версию файлов для сборки exim в archlinux
# abs community/exim/
по умолчанию abs складывает файлы для сборки в /var/abs/<репозиторий>/<имя пакета>, в нашем случае переход в каталог сборки будет следующим:
# cd /var/abs/community/exim/
Теперь запустим сборку пакета как есть, дабы убедиться, что все работает еще до внесения изменений.
# makepkg
однако я получил ошибку, с которой обратился за помощью на русский форум archlinux, в соответствующий раздел Пакетная система ‹ Сборка пакетов, где мне помогли в тот же день (отдельная благодарность kurych).
Ошибка скрывалась в неверной опции в самом конце файла exim.Makefile: строку LOOKUP_LIBS=-lldap, которую необходимо заменить на LOOKUP_LIBS=-lldap -llber. Но так как для сборки exim с поддержкой postgresql необходимо переопределять значения, в том числе, и для LOOKUP_LIBS, то сразу приступим к настройкам.
Всего в нашем случае, необходимо изменить три опции:
1.  LOOKUP_LIBS:
заменим ошибочную на нужный нам вариант и убедимся, что все верно:
#sed -i 's|^LOOKUP_LIBS=.*$|LOOKUP_LIBS=-L /usr/lib/postgresql -lldap -llber -lpq|' exim.Makefile; cat exim.Makefile | grep LOOKUP_LIBS=
правильным будет только одно не комментированное (без # вначале строки) объявление  LOOKUP_LIBS=-L /usr/lib/postgresql -lldap -llber -lpq|
2.LOOKUP_PGSQL
# sed -i 's|^# LOOKUP_PGSQL=yes|LOOKUP_PGSQL=yes|' exim.Makefile; cat exim.Makefile | grep LOOKUP_PGSQL
- одно не комментированное объявление LOOKUP_PGSQL=yes
3. LOOKUP_INCLUDE
# sed -i 's|^# LOOKUP_INCLUDE.*$|LOOKUP_INCLUDE=-I /usr/include/postgresql|' exim.Makefile; cat exim.Makefile | grep LOOKUP_INCLUDE
- одно не комментированное объявление LOOKUP_INCLUDE=-I /usr/include/postgresql
В PKGBUILD есть блок, с контрольными суммами файлов, в том числе и для  <имя пакета>.Makefile (exim.Makefile), который мы редактировали - значит нужно заменить:
Примечание: в сборке пакета от $Id: PKGBUILD 61948 2012-01-11 15:21:46Z stephane изменили проверку контрольных сумм файлов с md5 на sha256 поэтому команда замены контрольной суммы для файла exim.Makefile будет такой:
# sha=`sha256sum exim.Makefile |  sed 's/\(\S*\)\s*\S*/\1/'`; sed -i "s|^\(\s\{12\}'\)\S*\(')\)|\1$sha\2|" PKGBUILD
в то время, когда контрольную сумму проверяли по md5 замена осуществлялась иначе:
# md=`md5sum exim.Makefile |  sed 's/\(\S*\)\s*\S*/\1/'`; sed -i "s|^\(\s\{9\}'\)\S*\(')\)|\1$md\2|" PKGBUILD
Сейчас все готово для сборки - запускаем
# makepkg
Устанавливаем пакет
# pacman -U exim-*-*.pkg.tar.xz
Проверяем
# exim --version | grep --colour pgsql
Lookups (built-in): lsearch wildlsearch nwildlsearch iplsearch dbm dbmnz dnsdb dsearch ldap ldapdn ldapm pgsql
Во избежания случайной переустановки пакета из стандартной сборки, добавляем исключение в /etc/pacman.conf
# sed -i "s|^.*\(IgnorePkg\s*=.*\)|\1 exim|" /etc/pacman.conf

Комментариев нет: