Я сопровождаю Mock, поэтому должен дать вам ответ. Но я действительно не могу, потому что вы не уточнили, в чем собственно проблема.
Я могу только уточнить, как работает Mock, и разрешить некоторые из ваших недоразумений.
Когда вы вызываете mock -r fedora-27-x86_64
, Mock будет делать (, пропуская некоторые скучные детали):
dnf install --installroot /var/lib/mock/fedora-27-x86_64/root @buildsys-build
Это установит минимальную систему в отдельный каталог. Далее в этом ответе я буду называть /var/lib/mock/fedora-27-x86_64/root
$CHROOT.
Mock извлечет ваш example.src.rpm
. В частности, он поместит файл спецификации в $CHROOT/builddir/build/SPECS
и tar-шар в $CHROOT/builddir/build/SOURCES
.
Mock проанализирует ваш файл спецификаций и установит все пакеты, перечисленные в BuildRequires, в $CHROOT. (Это делается как root ).
Затем Mock выполнит chroot ()в $CHROOT и запустится там rpmbuild -ba /builddir/build/SPECS/example.spec
. Это делается как непривилегированный пользователь (с UID, равным вашему UID ). Это сделано потому, что запуск rpmbuild всегда не одобрялся и может привести к серьезным проблемам.
Поэтому, если вы хотите установить какие-то дополнительные пакеты в chroot., вам не следует делать это из файла спецификации, вызывая yum/dnf install (, особенно потому, что rpm не является реентерабельным ). Но вы должны указать эти пакеты в BuildRequires и предоставить репозиторий с этими пакетами.
Вы можете предоставить репозиторий либо с помощьюmockchain -a REPOS
(mockchain — это тонкий слой поверх макета ), либо с помощью:
cp /etc/mock/fedora-27-x86_64.cfg ~/my-custom-fedora-27-x86_64.cfg
#add your repository to ~/my-custom-fedora-27-x86_64.cfg
mock -r ~/my-custom-fedora-27-x86_64.cfg example.src.rpm
Если у вас есть 7 пакетов src.rpm, зависящих друг от друга, то, вероятно, лучший способ — вызвать mockchain 1.src.rpm 2.src.rpm.... 7.src.rpm
, и mockchain создаст временный репозиторий для результатов и попытается собрать эти пакеты наивным способом в while at-least-one-package-build do another loop
.
Если вы уточните, в чем собственно ваша проблема, то я могу дать более конкретный ответ.
В Unix/Linux устройство обрабатывается как обычный файл. Если вы размещаете данные на устройстве с помощью cp (1 ), или dd (1 ), или program > /dev/sdb
, нет никакой реальной разницы. Просто это, например. У dd есть опции для записи фрагментами разного размера, которые могут быть более эффективными, если размер блока соответствует некоторому размеру, определяемому аппаратно.