Сборка пакетов без лишнего мусора в CentOS

В процессе сборки rpm-пакетов, при разрешения зависимостей, в систему устанавливается большое количество приложений. Чтобы не засорять host-систему rpm-пакеты можно собирать в chroot. Для этих целей в CentOS существует отличные приложения mock, которое значительно упрощает этот процесс.

Для начала необходимо подключить репозиторий EPEL и установить mock

yum install epel-release -y && yum update && yum install mock -y

Далле создадим отдельного пользователя из под которого будет производится сборка пакетов

useradd mockbuild
usermod -a -G mock mockbuild

Сменим текущего пользователя на mockbuild

su mockbuild

Далее перейдем в домашний каталог пользователя mockbuild и создадим дерево каталогов

cd ~/
mkdir -p rpmbuild/{SPECS,SOURCES,SRPMS}

Конфигурации для сборки под разные дистрибутивы и архитектуры хранятся в /etc/mock/

ls -alhrt /etc/mock/

Первоначально необходимо создать chroot окружение, для этого выполним

mock -r epel-7-x86_64 --init

Если в процессе сборки вдруг что-то пошло не так, то отчистить chroot можно выполнив

mock -r epel-7-x86_64 --clean

В самом простом случае, если уже есть готовый src.rpm для сборки rpm-пакет необходимо выполнить

/usr/bin/mock -r epel-7-x86_64 --no-clean --rebuild ~/rpmbuild/SRPMS/package.src.rpm

Если в пакет требуется внести изменения, то для начала необходимо распаковать src.rpm

rpm -ivh package.src.rpm

После чего отредактировать необходимые файлы и заново собрать src.rpm

/usr/bin/mock -r epel-7-x86_64 --spec=~/rpmbuild/SPECS/package.spec --sources=~/rpmbuild/SOURCES/ --resultdir=~/rpmbuild/SRPMS/ --no-clean --buildsrpm

И после этого уже собрать rpm-пакет

/usr/bin/mock -r epel-7-x86_64 --no-clean --rebuild ~/rpmbuild/SRPMS/package.src.rpm

Процесс сборки rpm-пакета с зависимостями которых нет в репозитариях, будет выглядеть следующим образом.

/usr/bin/mock -r epel-7-x86_64 --init
/usr/bin/mock -r epel-7-x86_64 --install ~/rpm/package-1.el7.centos.x86_64.rpm
/usr/bin/mock -r epel-7-x86_64 --install ~/rpm/package-2.el7.centos.x86_64.rpm
/usr/bin/mock -r epel-7-x86_64 --install ~/rpm/package-3.el7.centos.x86_64.rpm
/usr/bin/mock -r epel-7-x86_64 --no-clean ~/main.el7.centos.src.rpm

Более подробную информацию можно найти на странице документации mock.

 2   2017   centos   linux
Популярное