Сборка пакетов без лишнего мусора в 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.