Данная статья родилась совершенно спонтанно, как оно часто и бывает.
Катализатором послужила необходимость в смене штатного системного логгера,
который, по непонятным мне причинам, перестал работать. В поиске альтернатив
стандартому демону журнализации в CentOS, sysklogd, я нашел два других
решения syslog-ng и rsyslog. Выбор был сделан в пользу второго, так как он
обладал более богатыми возможностями и его конфигурационный файл был
совместим со стандартным демоном, который шел вместе с системой.
Так же статья является отчасти ответом на этот тред -
http://forum.lissyara.su/viewtopic.php?p=155156#p155156
в котором высказана крамольная мысль о сборке из исходных кодов,
вместо пересборки имеющегося rpm. Было сломано много копий, прежде
чем мнение автора изменилось. Почему сборка из исходных текстов
плохо написали давно за меня, рекомендую ознакомится:
http://www.linux.kiev.ua/ru/docs/articl ... ysadm-rpm/
В целях экономии времени и поддержания дальнейшей системы в целостном
состоянии и опровержения мнения о том, что сборка пакетов это очень
сложно - написана эта статья.
Первым делом, смотрим в официальный репозиторий - версия старая,
что в общем и не удивительно. Однако, на сайте http://www.rsyslog.com,
доступна последняя stable версия пакета 4 ветки. Я выбрал именно ее.
Теперь, неплохо бы обзавестись spec файлом. Для этого нам необходим
srpm файл (source rpm - это исходный код программы, спек файл и патчи
к программе). Srpm файлы можно и нужно поискать в доступных
репозиториях, указанных в вики CentOS. Я воспользовался гуглом.
Гугл нашел довольно много, я выбрал адрес мейнтейнера
данной программы в Fedora - http://people.redhat.com/pvrabec/rpms/rsyslog/
Последней версией rsyslog, для дистрибутива Fedora, лежащий на сайте
rsyslog-3.12.0-1.fc8.src.rpm. Вполне подходит. Cкачиваем, но установим
данный пакет только после того, как убедимся, что в нашей системе установлены:
Код: Выделить всё
rpm-build-4.4.2.3-9.el5
redhat-rpm-config-8.0.45-29.el5
gcc-c++-4.1.2-44.el5
gcc-4.1.2-44.el5
auto-buildrequires-1.0-3.el5
можно доустановить необходимые программы.
В CentOS не рекомендуется собирать пакеты от рута, поэтому создадим
сборочную директорию у себя со всеми необходимыми поддиректориями.
Код: Выделить всё
[user@host ~]$ mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
[user@host ~]$ echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros
Устанавливаем rpm:
Код: Выделить всё
rpm -iUvh rsyslog-3.12.0-1.fc8.src.rpm
находим spec файл - rsyslog.spec и копируем его к себе в ~/rpmbuild/SPECS.
Не забываем и перенести тарболл.
Код: Выделить всё
cp /usr/src/redhat/SOURCES/rsyslog-4.2.0.tar.gz ~/rpmbuild/SOURCES/
владельца. В моем случае это:
Код: Выделить всё
chown -R andy:andy rpmbuild/
Код: Выделить всё
%define sbindir /sbin
Summary: Enhanced system logging and kernel message trapping daemons
Name: rsyslog
Version: 3.12.0
Release: 1%{?dist}
License: GPLv3+
Group: System Environment/Daemons
URL: http://www.rsyslog.com/
Source0: http://download.rsyslog.com/rsyslog/%{name}-%{version}.tar.gz
Source1: rsyslog.init
Source2: rsyslog.conf
Source3: rsyslog.sysconfig
Patch1: rsyslog-3.11.4-undef.patch
Patch2: rsyslog-3.11.4-gssMake.patch
Patch3: rsyslog-3.11.4-gssMod.patch
BuildRequires: zlib-devel
BuildRequires: autoconf automake
Requires: logrotate >= 3.5.2
Requires: bash >= 2.0
Requires(post): /sbin/chkconfig coreutils
Requires(preun): /sbin/chkconfig /sbin/service
Requires(postun): /sbin/service
Provides: syslog
Conflicts: sysklogd < 1.4.1-43
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%package mysql
Summary: MySQL support for rsyslog
Group: System Environment/Daemons
Requires: %name = %version-%release
BuildRequires: mysql-devel >= 4.0
%package pgsql
Summary: PostgresSQL support for rsyslog
Group: System Environment/Daemons
Requires: %name = %version-%release
BuildRequires: postgresql-devel
%package gssapi
Summary: GSSAPI authentication and encryption support for rsyslog
Group: System Environment/Daemons
Requires: %name = %version-%release
BuildRequires: krb5-devel
%description
Rsyslog is an enhanced multi-threaded syslogd supporting, among others, MySQL,
syslog/tcp, RFC 3195, permitted sender lists, filtering on any message part,
and fine grain output format control. It is quite compatible to stock sysklogd
and can be used as a drop-in replacement. Its advanced features make it
suitable for enterprise-class, encryption protected syslog relay chains while
at the same time being very easy to setup for the novice user.
%description mysql
The rsyslog-mysql package contains a dynamic shared object that will add
MySQL database support to rsyslog.
%description pgsql
The rsyslog-pgsql package contains a dynamic shared object that will add
PostgreSQL database support to rsyslog.
%description gssapi
The rsyslog-gssapi package contains the rsyslog plugins which support GSSAPI
authentication and secure connections. GSSAPI is commonly used for Kerberos
authentication.
%prep
%setup -q
%patch1 -p1 -b .undef
%build
%configure --sbindir=%{sbindir} --disable-static --enable-mysql --enable-pgsql --enable-gssapi-krb5
make %{?_smp_mflags}
%install
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT
install -d -m 755 $RPM_BUILD_ROOT%{_initrddir}
install -d -m 755 $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig
install -d -m 755 $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d
install -p -m 755 %{SOURCE1} $RPM_BUILD_ROOT%{_initrddir}/rsyslog
install -p -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/rsyslog.conf
install -p -m 644 %{SOURCE3} $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/rsyslog
install -p -m 644 redhat/rsyslog.log $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/syslog
#get rid of *.la
rm $RPM_BUILD_ROOT/%{_libdir}/rsyslog/*.la
%clean
rm -rf $RPM_BUILD_ROOT
%post
/sbin/chkconfig --add rsyslog
for n in /var/log/{messages,secure,maillog,spooler}
do
[ -f $n ] && continue
umask 066 && touch $n
done
%preun
if [ $1 = 0 ]; then
service rsyslog stop >/dev/null 2>&1 ||:
/sbin/chkconfig --del rsyslog
fi
%postun
if [ "$1" -ge "1" ]; then
service rsyslog condrestart > /dev/null 2>&1 ||:
fi
%triggerun -- rsyslog < 3.0.0
/bin/kill `cat /var/run/rklogd.pid 2> /dev/null`
%files
%defattr(-,root,root,-)
%doc AUTHORS COPYING NEWS README doc/*html
%dir %{_libdir}/rsyslog
%{_libdir}/rsyslog/imklog.so
%{_libdir}/rsyslog/immark.so
%{_libdir}/rsyslog/imtcp.so
%{_libdir}/rsyslog/imudp.so
%{_libdir}/rsyslog/imuxsock.so
%{_libdir}/rsyslog/omtesting.so
%config %{_sysconfdir}/rsyslog.conf
%config %{_sysconfdir}/sysconfig/rsyslog
%config(noreplace) %{_sysconfdir}/logrotate.d/syslog
%{_initrddir}/rsyslog
%{sbindir}/rsyslogd
%{sbindir}/rfc3195d
%{_mandir}/*/*
%files mysql
%defattr(-,root,root)
%doc plugins/ommysql/createDB.sql
%{_libdir}/rsyslog/ommysql.so
%files pgsql
%defattr(-,root,root)
%doc plugins/ompgsql/createDB.sql
%{_libdir}/rsyslog/ompgsql.so
%files gssapi
%defattr(-,root,root)
%{_libdir}/rsyslog/imgssapi.so
%{_libdir}/rsyslog/omgssapi.so
%changelog
* Wed Mar 05 2008 Peter Vrabec <pvrabec@redhat.com> 3.12.0-1
- upgrade
Первой строкой в данном файле определяется макрос sbindir,
который указывает на директорию /sbin. Забегая вперед - вы можете
поглядеть список макроопределений в файле /usr/lib/rpm/macros.
Если же нужно быстро узнать, какое значение присвоено макроопределению из
стандартной конфигурации макросов - можно выполнить команду
rpm --eval имямакроса. Например:
Код: Выделить всё
[root@unit1 SPECS]# rpm --eval %{_initrddir}
/etc/rc.d/init.d
[root@unit1 SPECS]# rpm --eval %{_sbindir}
/usr/sbin
[root@unit1 SPECS]#
Name: - имя программы
Version: - соответственно, версия программы
Release: - номер версии в рамках дистрибутива.
Мейнтейнер может работать над имеющейся в версией программы,
с целью бекпортирования новых возможностей и новой версии программы в старую,
либо накладывания патчей, добавления скриптов инициализации и т.д. В этом
случае номер апстрим версии остается неизменным, а поле Release изменяется.
Group: - группа к которой принадлежит программа.
URL: - адрес программы по которому ее можно скачать.
Source0: - как правило - точная ссылка на скачивание программы с указанием ее
имени и версии. Сам rpm не будет ничего самостоятельно загружать, однако
воспользуется именем файла.
Source1: rsyslog.init - стартовый скрипт для программы rsyslog
Source2: rsyslog.conf - конфигурационный файл программы.
Индикатор заботы мейнтенера о пользователе. Как правило заточен под общие
случаи, то есть "поставил и забыл". Для более тонкой настройки, разумеется,
требуется доработка.
Source3: rsyslog.sysconfig - в этом файле содержатся опции, c которыми запускается
демон.
Patch1: rsyslog-3.11.4-undef.patch
Patch2: rsyslog-3.11.4-gssMake.patch
Patch3: rsyslog-3.11.4-gssMod.patch
Патчи накладываемые на софт. Один патч - одна запись в спеке.
BuildRequires: zlib-devel
BuildRequires: autoconf automake
Зависимости для сборки. Зачастую информацию о зависимостях для сборки
можно узнать из документации к программе, либо опытным путем, вываливаясь
с ошибками в момент компиляции и поисками этих строчек с названием ошибки, или файла,
в гугле.
Requires: logrotate >= 3.5.2 - установленный софт, необходимый для работы данной программы.
В указанной строке сообщается, что одним из условий работы программы rsyslog, является наличие
установленной программы logrotate версии 3.5.2 или выше.
Provides: syslog - Так называемая виртуальная зависимость. Программе все равно, какой именно
демон журнализации будет вести ее лог файлы. Фактически, данный софт будет "представлятся"
программам как syslog. Собственно, функционал syslog будет предоставлятся демоном rsyslog.
Conflicts: sysklogd < 1.4.1-43 - как следует из названия, наша программа конфликтует
с установленной программой sysklogd версии ниже, чем 1.4.1-43.
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Директория, в которой будет проходить сборка программы.
Как правило, программы пишутся с некоторым спектром возможностей, поэтому
функционал у них может быть весьма разнообразным. Применительно к рассматриваемой
программе это значит, что она может работать с разными базами данных, в нее можно
включить аутентификацию через Kerberos, откомпилировать с отладочными средствами
и так далее. Выбор того или иного функционала, как правило, лежит на мейнтейнере.
Именно он, при сборке программы, включает тот или иной функционал в пакет. Если нам
требуются иные возможности программы, необходимо ее перекомпилировать из srpm файла,
с включением нужных опций. Возникает вопрос - что делать, если среди имеющегося
функционала нам часть возможностей совершенно не нужна? Если я хочу поставить
программу без поддержки баз данных, которыми не собираюсь пользоваться? Для
этого существует дробление программы на субпакеты. С помощью субпакетов
мы установим то, что нужно именно нам. Поэтому, каждый плагин
расширяющий функционал rsyslog, оформляется в отдельный субпакет
с помощью директивы %package.
Директива %description применяется для описания пакета или субпакета.
Описанное выше - всего лишь заголовок, в нем мы указали имя и версию пакета,
сделали небольшое описание, перечислили зависимости для сборки и для запуска.
В секции %prep происходит подготовка к сборке пакета, в ней тарболл
распаковывается %setup, ключ -q говорит о том, что вывод будет минимальным.
Затем идет применение патчей, причем применяется только первый из них
%patch1, -p1 - отрезаем первую директорию, -b - создаем резервную копию.
В секции %build надо определить команды и опции необходимые для сборки программы.
В нашем случае вызывается %configure, с опциями, в который мы определяем
что мы хотим включить в сборку. Затем идет непосредственно команда сборки.
Во что раскрывается %{?_smp_mflags} в Вашей системе, Вы можете поглядеть
самостоятельно, у меня это -j2.
Секция инсталляции:
rm -rf $RPM_BUILD_ROOT - очищаем диркеторию в которой будем собирать нашу программу.
make install DESTDIR=$RPM_BUILD_ROOT - устанавливаем программу в директорию для сборки.
Ниже идут команды создания директорий, с необходимыми правами.
Код: Выделить всё
nstall -d -m 755 $RPM_BUILD_ROOT%{_initrddir}
install -d -m 755 $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig
install -d -m 755 $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d
Затем запись в эти директории файлов, c указанными правами.
install -p -m 755 %{SOURCE1} $RPM_BUILD_ROOT%{_initrddir}/rsyslog
install -p -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/rsyslog.conf
install -p -m 644 %{SOURCE3} $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/rsyslog
install -p -m 644 redhat/rsyslog.log $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/syslog
rm $RPM_BUILD_ROOT/%{_libdir}/rsyslog/*.la - Удаляем la файлы.
Секция %clean
%clean
rm -rf $RPM_BUILD_ROOT - Очищаем каталог сборки
Директива %post необходима для выполенения собственных действий,
после установки. В рассматриваемом случае, rsyslog добавляется
в список запускемых программ, и создаются необходимые файлы и
им присваиваются значения 600 (на чтение и запись только владельцу).
Код: Выделить всё
%post
/sbin/chkconfig --add rsyslog
for n in /var/log/{messages,secure,maillog,spooler}
do
[ -f $n ] && continue
umask 066 && touch $n
done
перед удалением пакета. В нашем случае демон останавливается,
и удаляется из списка программ.
Код: Выделить всё
%preun
if [ $1 = 0 ]; then
service rsyslog stop >/dev/null 2>&1 ||:
/sbin/chkconfig --del rsyslog
fi
после удаления пакета. Перезапускаем сервис, если он был удален.
Код: Выделить всё
%postun
if [ "$1" -ge "1" ]; then
service rsyslog condrestart > /dev/null 2>&1 ||:
fi
удаления или обновления пакета в системе.
В данном примере мы вынуждаем rsyslog завершить свою работу.
Код: Выделить всё
%triggerun -- rsyslog < 3.0.0
/bin/kill `cat /var/run/rklogd.pid 2> /dev/null`
будут установлены в системе, после инсталляции пакета.
Директивой %defattr(-,root,root,-), мы определяем пользователя
и группу, которым принадлежат файлы.
Директива %doc отмечает файлы как файлы с документацией.
Директива %dir %{_libdir}/rsyslog, говорит о том, что упаковывается
вся директория rsyslog. Затем идет перечисление файлов, которые подлежат
упаковке. При помощи директивы %config %{_sysconfdir}/rsyslog.conf,
мы говорим rpm о том, куда следует класть конфигурационные файлы.
Дополнение (noreplace), директивы %config, помогает не затереть уже
имеющийся конфигурационный файл.
%{_mandir}/*/* - эта директива упаковывает man страницы.
Ниже идут списки упаковки для конкретных субпакетов, самостоятельный
разбор которых не должен вызвать трудностей.
Заключительная запись в спек файле - директива %changelog.
После нее указывается дата сборки пакета, мейнтенер, почтовый адрес
мейнтейнера и версия пакета.
Еще ниже идут комментарии - отчет мейнтейнера о проделанной работе.
С форматом spec файла более-менее разобрались. Настал черед изменить
спек под свою версию утилиты rsyslog. Привожу вариант собранный под
собственные нужды, с краткими пояснениями.
Код: Выделить всё
%define sbindir /sbin
Summary: Enhanced system logging and kernel message trapping daemons
Name: rsyslog
Version: 4.2.0 - версия исправлена на нужную
Release: 1%{?dist}
License: GPLv3+
Group: System Environment/Daemons
URL: http://www.rsyslog.com/
Source0: http://download.rsyslog.com/rsyslog/%{name}-%{version}.tar.gz
Source1: rsyslog.init
Source2: rsyslog.conf
Source3: rsyslog.sysconfig
BuildRequires: zlib-devel
BuildRequires: autoconf automake
Requires: logrotate >= 3.5.2
Requires: bash >= 2.0
Requires(post): /sbin/chkconfig coreutils
Requires(preun): /sbin/chkconfig /sbin/service
Requires(postun): /sbin/service
Provides: syslog
Conflicts: sysklogd < 1.4.1-43
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%package mysql
Summary: MySQL support for rsyslog
Group: System Environment/Daemons
Requires: %name = %version-%release
BuildRequires: mysql-devel >= 4.0
%package pgsql
Summary: PostgresSQL support for rsyslog
Group: System Environment/Daemons
Requires: %name = %version-%release
BuildRequires: postgresql-devel
%package gssapi
Summary: GSSAPI authentication and encryption support for rsyslog
Group: System Environment/Daemons
Requires: %name = %version-%release
BuildRequires: krb5-devel
%package rtinst - включил на всякий случай
Summary: Runtime instrumentation mode support for rsyslog
Group: System Environment/Daemons
Requires: %name = %version-%release
%package diagtools - утилиты для диагностики в моем случае могут понадобится
Summary: Diagnostic tools support for rsyslog
Group: System Environment/Daemons
Requires: %name = %version-%release
%package snmp - возможность мониторинга по snmp
Summary: SNMP support for rsyslog
Group: System Environment/Daemons
Requires: %name = %version-%release
BuildRequires: net-snmp-devel
%package mail - поддержка почтовых отправок
Summary: Mail support for rsyslog
Group: System Environment/Daemons
Requires: %name = %version-%release
%description
Rsyslog is an enhanced multi-threaded syslogd supporting, among others, MySQL,
syslog/tcp, RFC 3195, permitted sender lists, filtering on any message part,
and fine grain output format control. It is quite compatible to stock sysklogd
and can be used as a drop-in replacement. Its advanced features make it
suitable for enterprise-class, encryption protected syslog relay chains while
at the same time being very easy to setup for the novice user.
%description mysql
The rsyslog-mysql package contains a dynamic shared object that will add
MySQL database support to rsyslog.
%description pgsql
The rsyslog-pgsql package contains a dynamic shared object that will add
PostgreSQL database support to rsyslog.
%description gssapi
The rsyslog-gssapi package contains the rsyslog plugins which support GSSAPI
authentication and secure connections. GSSAPI is commonly used for Kerberos
authentication.
%description rtinst
The rsyslog-rtinst package contains the rsyslog plugins which support
runtime instrumentation mode
%description diagtools
The rsyslog-diagtools package contains the rsyslog plugins which support
diagnostic
%description snmp
The rsyslog-snmp package contains the rsyslog plugins which support
snmp
%description mail
The rsyslog-snmp package contains the rsyslog plugins which support
mail
%prep
%setup -q
%build
%configure --sbindir=%{sbindir} --enable-mysql \
--enable-pgsql \
--enable-gssapi-krb5 \
--enable-rtinst \
--enable-diagtools \
--enable-snmp \
--enable-mail \
make %{?_smp_mflags}
%install
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT
install -d -m 755 $RPM_BUILD_ROOT%{_initrddir}
install -d -m 755 $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig
install -d -m 755 $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d
install -p -m 755 %{SOURCE1} $RPM_BUILD_ROOT%{_initrddir}/rsyslog
install -p -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/rsyslog.conf
install -p -m 644 %{SOURCE3} $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/rsyslog
#install -p -m 644 redhat/rsyslog.log $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/syslog
с содержищимися в ней: настройками для logrotate, стартовым скриптом, конфигурационным файлом.
В версии rsyslog 4.2.0 данная директория отсутствует, поэтому я решил оставить эти файлы от
предыдущей версии. Ниже идет создание файла для logrotate.
Код: Выделить всё
cat <<EOF>$RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
EOF
хотелось продемонстирровать еще одну возможность добавления собственных файлов в пакет.
В примере мы перенаправляем поток вывода в файл, пока сам поток не закончится. Признаком
окончания потока служит директива EOF.
Код: Выделить всё
#get rid of *.la
rm $RPM_BUILD_ROOT/%{_libdir}/rsyslog/*.la
%clean
rm -rf $RPM_BUILD_ROOT
%post
/sbin/chkconfig --add rsyslog
for n in /var/log/{messages,secure,maillog,spooler}
do
[ -f $n ] && continue
umask 066 && touch $n
done
%preun
if [ $1 = 0 ]; then
service rsyslog stop >/dev/null 2>&1 ||:
/sbin/chkconfig --del rsyslog
fi
%postun
if [ "$1" -ge "1" ]; then
service rsyslog condrestart > /dev/null 2>&1 ||:
fi
%triggerun -- rsyslog < 3.0.0
/bin/kill `cat /var/run/rklogd.pid 2> /dev/null`
%files
%defattr(-,root,root,-)
%doc AUTHORS COPYING NEWS README doc/*html
%dir %{_libdir}/rsyslog
%{_libdir}/rsyslog/imklog.so
%{_libdir}/rsyslog/immark.so
%{_libdir}/rsyslog/imtcp.so
%{_libdir}/rsyslog/imudp.so
%{_libdir}/rsyslog/imuxsock.so
%{_libdir}/rsyslog/omtesting.so
%{_libdir}/rsyslog/lmgssutil.so
%{_libdir}/rsyslog/lmnet.so
%{_libdir}/rsyslog/lmnetstrms.so
%{_libdir}/rsyslog/lmnsd_ptcp.so
%{_libdir}/rsyslog/lmregexp.so
%{_libdir}/rsyslog/lmtcpclt.so
%{_libdir}/rsyslog/lmtcpsrv.so
%config %{_sysconfdir}/rsyslog.conf
%config %{_sysconfdir}/sysconfig/rsyslog
%config(noreplace) %{_sysconfdir}/logrotate.d/syslog
%{_initrddir}/rsyslog
%{sbindir}/rsyslogd
%{_mandir}/*/*
%files mysql
%defattr(-,root,root)
%doc plugins/ommysql/createDB.sql
%{_libdir}/rsyslog/ommysql.so
%files pgsql
%defattr(-,root,root)
%doc plugins/ompgsql/createDB.sql
%{_libdir}/rsyslog/ompgsql.so
%files gssapi
%defattr(-,root,root)
%{_libdir}/rsyslog/imgssapi.so
%{_libdir}/rsyslog/omgssapi.so
%files rtinst
%defattr(-,root,root)
%{_libdir}/rsyslog/omtesting.so
%files diagtools
%defattr(-,root,root)
%{sbindir}/msggen
%{sbindir}/rsyslog_diag_hostname
%files snmp
%defattr(-,root,root)
%{_libdir}/rsyslog/omsnmp.so
%files mail
%defattr(-,root,root)
%{_libdir}/rsyslog/ommail.so
(Внимание, чейндлог приведен не целиком, для удобочитаемости.
При работе со спеком, вы не должны стирать старые записи
в чейнджлоге)
Код: Выделить всё
%changelog
* Thu Jul 9 2009 Andrew Clark <andrewclarkii@gmail.com> 4.2.0-1
- new version
* Wed Mar 05 2008 Peter Vrabec <pvrabec@redhat.com> 3.12.0-1
- upgrade
поместить в директорию ~/rpmbuild/SOURCES/, а spec файл -
в директорию ~/rpmbuild/SPECS/. Для сборки программы
служит утилита rpmbuild. Нам необходимо собрать двоичный пакет,
поэтому вводим такую команду:
Код: Выделить всё
[andy@unit1 ~]$ rpmbuild -bb ~/rpmbuild/SPECS/rsyslog.spec
выполнит только секцию %prep. За более подробной информацией
по имеющимся ключам, обращайтесь к странице документации
man rpmbuild. Если сборка прошла успешно, то мы должны
увидеть в директории ~/rpmbuild/RPMS/i386/ несколько файлов
с расширением rpm.
Код: Выделить всё
[andy@unit1 ~]$ ls -lahi rpmbuild/RPMS/i386/
total 1,5M
17056534 drwxr-xr-x 2 andy andy 4,0K Июл 11 14:23 .
17055470 drwxrwxr-x 9 andy andy 4,0K Июл 11 10:21 ..
17056266 -rw-r--r-- 1 andy andy 422K Июл 11 14:23 rsyslog-4.2.0-1.i386.rpm
17056274 -rw-r--r-- 1 andy andy 970K Июл 11 14:23 rsyslog-debuginfo-4.2.0-1.i386.rpm
17056271 -rw-r--r-- 1 andy andy 8,5K Июл 11 14:23 rsyslog-diagtools-4.2.0-1.i386.rpm
17056269 -rw-r--r-- 1 andy andy 18K Июл 11 14:23 rsyslog-gssapi-4.2.0-1.i386.rpm
17056273 -rw-r--r-- 1 andy andy 13K Июл 11 14:23 rsyslog-mail-4.2.0-1.i386.rpm
17056267 -rw-r--r-- 1 andy andy 12K Июл 11 14:23 rsyslog-mysql-4.2.0-1.i386.rpm
17056268 -rw-r--r-- 1 andy andy 12K Июл 11 14:23 rsyslog-pgsql-4.2.0-1.i386.rpm
17056270 -rw-r--r-- 1 andy andy 9,6K Июл 11 14:23 rsyslog-rtinst-4.2.0-1.i386.rpm
17056272 -rw-r--r-- 1 andy andy 13K Июл 11 14:23 rsyslog-snmp-4.2.0-1.i386.rpm
[andy@unit1 ~]$
если Вы содержите собственный репозиторий, или хотите убедиться в том,
что пакеты будут инсталлироваться без проблем на любой системе, тогда
необходимо произвести сборку в специальной сборочной среде именуемой mock.
Mock - это среда для сборки srpm пакетов в chroot. Содержание этого
самого chroot'а определяется в конфигурационном файле находящимся по адресу
/etc/mock/default.cfg. В нем много конфигурационных файлов, настроенных под разные
дистрибутивы. Нам нужен epel-5-i386.cfg. Его можно либо переименовать в default.cfg,
либо указывать вместе с ключом -r. При сборке в сборочной среде, mock будет
выкачивать пакеты из интернета, если подключение происходит через прокси,
в таком случае, надо добавить следующую строку в секцию [main], в конфигурационном файле:
proxy=http://имяпользователя:пароль@адреспрокси:порт
Поглядим, как собирается наш пакет в сборочной среде.
Для этого нам надо собрать srpm пакет, что мы и делаем:
Код: Выделить всё
[andy@unit1 ~]$ rpmbuild -bs ~/rpmbuild/SPECS/rsyslog.spec
warning: Could not canonicalize hostname: unit1.moskb
Wrote: /home/andy/rpmbuild/SRPMS/rsyslog-4.2.0-1.src.rpm
[andy@unit1 ~]$
Код: Выделить всё
mock -v -r epel-5-i386 --rebuild /home/andy/rpmbuild/SRPMS/rsyslog-4.2.0-1.src.rpm
cat и install. Для пересборки пакета без отчистки сборочной директории,
существует опция --no-clean. Добавим ее к нашей команде:
Код: Выделить всё
mock -v -r epel-5-i386 --no-clean --rebuild /home/andy/rpmbuild/SRPMS/rsyslog-4.2.0-1.src.rpm
При подготовке данной статьи, были использованы следующие материалы:
Red Hat RPM Guide - русский перевод
http://www.lexpr.ru/node/11
Maximum RPM
http://www.rpm.org/max-rpm-snapshot/index.html
CentOS wiki
http://wiki.centos.org/HowTos/SetupRpmBuildEnvironment
Fedora wiki
http://fedoraproject.org/wiki/PackageMa ... MockTricks
ALT Linux wiki
http://www.altlinux.org/%D0%A1%D0%B1%D0 ... 0%BE%D0%B2
А так же, советы Михаила Шигорина (mike@) и Сергея Кандылы (http://paix.org.ua)