Software Necromancy

The little morsel of delicious brain.

Сборка RPM пакетов и сопутствующие дела

Однажды мне было нужно поставить collectd посвежее на группу CentOS серверов. В репозитории нужной версии, понятное дело, не было. Пришлось собирать пакеты (сам collectd + плагины) самостоятельно и создавать свой репозиторий, чтобы не приходилось вручную ставить и обновлять на каждом отдельном сервере.

В первую очередь был нужен spec файл. Его можно было написать самостоятельно, но к счастью это сделали до меня.

Для сборки я использовал mock, как и предлагали в комментариях spec файла. Mock создаёт chroot-окружения, что позволяет в одном месте собирать пакеты под разные системы: Fedora, RHEL, CentOS и т.п.

yum install -y mock
sudo gpasswd -a $USER mock
mock -r epel-6-x86_64 --buildsrpm --spec ./collectd.spec --sources ./
mock -r epel-6-x86_64 --no-clean --without=log_logstash --rebuild /var/lib/mock/epel-6-x86_64/result/collectd-5.4.0-1.el6.src.rpm

Оставалось создать репозиторий, и перенести туда готовые пакеты:

yum install -y createrepo
mkdir -p /var/www/CentOS/6/local/x86_64/RPMS
mv /var/lib/mock/epel-6-x86_64/result/*.rpm !$
createrepo /var/www/CentOS/6/local

После добавления новых пакетов, необходимо “пересоздать” репозиторий. Если указать опцию --update, процесс завершится гораздо быстрее.

createrepo --update /var/www/CentOS/6/local

Наконец необходимо поднять http-сервер, который будет раздавать файлы этого репозитория, раскидать по серверам .repo-файлы, и поставить пакеты (при помощи Salt либо другой системы управления конфигурацией).