Mock
Материал из База знаний проекта Russian Fedora
Пример использования: Сборка grub из src.rpm для Centos 6 x86_64
Cначала собираем правильный src.rpm
- качаем src.rpm, распаковываем все в /home/$USER/rpmbuild как положено:
$ cd $ wget ftp://ftp.muug.mb.ca/pub/centos/6.0/os/SRPMS/Packages/grub-0.97-68.el6.src.rpm $ rpm -ivh grub-0.97-68.el6.src.rpm
- кладем патч в ~/rpmbuild/SOURCES/grub-smth.patch
- правим ~/rpmbuild/SPECS/grub.spec соответственно
- собираем новый src.rpm без установки каких-либо зависимостей командой
$ rpmbuild --nodeps -bs ~/rpmbuild/SPECS/grub.spec
Собираем бинарный пакет под нужную систему
У нас есть патченный src.rpm: ~/rpmbuild/SRPMS/grub-0.97-69.fc16.smth.src.rpm и вторым шагом нужно из него получить бинарный пакет.
Если бы это был нормальный пакет команда нужна была бы ровно одна:
$ mock -r epel-6-x86_64 ~/rpmbuild/SRPMS/grub-0.97-69.fc16.smth.src.rpm
mock автоматически создает chroot-окружение и там устанавливает базовый Centos с подключенными стандартными репозиториями. Потом сам скачивает зависимости пакета, выполняет всю сборку, складывает результаты в кучку и чистит за собой весь мусор.
Но есть одно но: 64-битному грубу для сборки нужен пакет glibc-static.i686, которого нет с репозиториях стандартной 64-битной системы. Поэтому автоматически mock его найти и установить не может, ему нужно помочь. Вместо одной команды в итоге получаем три:
$ mock -r epel-6-x86_64 --init $ mock -r epel-6-x86_64 --install http://mirror.its.sfu.ca/mirror/CentOS/6/updates/i386/RPMS/glibc-static-2.12-1.7.el6_0.5.i686.rpm $ mock -r epel-6-x86_64 --no-clean ~/rpmbuild/SRPMS/grub-0.97-69.fc16.smth.src.rpm
Готово.
