On 09. 03. 22 8:57, Felix Schwarz wrote:
Hi Kevin,

Am 08.03.22 um 01:33 schrieb Kevin Kofler via devel:
There is actually a "mock shell" command that opens a shell inside the mock
chroot. You can also run arbitrary shell commands (including scripts that
you have previously manually copied in using the "copyin" command) in it.

I knew "mock shell" (via "fedpkg mockbuild --shell") but that only gave me a shell at the very beginning of the build process while (ideally) I wanted to set a kind of "breakpoint"+gdb/pdb at an arbitrary point in the build process. (For example most of the build process works just fine so I want all the %prep/%build steps to run automatically while only fiddling around inside %check.)

After reading your answer + mock manpages I discovered mock's "--no-cleanup-after" which could help inspecting the state after a failed run. That should be pretty helpful, I'll try that next time I need to figure out why some test suite is failing. :-)

When I do iterative changes, I generally always build with:

First build:

 $ mock -r ... clean && fedpkg --release rawhide mockbuild -N

Next build:

 $ fedpkg --release ... mockbuild -N

When the deps are unchanged:

 $ fedpkg --release ... mockbuild -N --disablerepo='*'

There is also the ccache plugin that might make things faster, but it breaks with --disablerepo='*' :(


My commands give me a mock environment where I can shell in an execute commands when failures happen. A good shell commands are

 $ mock -r ... shell --unpriv --cwd /builddir/build/BUILD/
 $ mock -r ... shell --unpriv --cwd /builddir/build/BUILD/foobar-6.6.6/


However, shelling in is useful but sometimes, when %build takes (a) hour(s), it is still tedious to do iterative changes in what is written in %install, %check or %files.


Mock has a --short-circuit option:

  --short-circuit {prep,install,build,binary}
                        Pass short-circuit option to rpmbuild to skip already
                        complete stages. Warning: produced packages are
                        unusable. Implies --no-clean. Valid options: build,
                        install, binary

It passes the following options to rpmbuild:

https://github.com/rpm-software-management/mock/blob/mock-2.16-1/mock/py/mockbuild/backend.py#L705

When the package build (with -N) fails in %check, %install or %files (but you assume the result of %build is correct), you can run:

 $ fedpkg --release rawhide mockbuild -N -- --short-circuit install

(The -- separates options that fedpkg understands from options that it just blindly passes down to mock.)

It will create a new SRPM, install any new deps added as BuildRequires (but I think it's skip %generate_buildrequires), cd to the right directory (no idea how it knows) and executes %install, %check and creates the RPM packages.

It is almost magical.

It can however, sometimes explode miserably. E.g. when %install actually moves files in builddir first and you try to do this twice.

Hope that helps.
--
Miro Hrončok
--
Phone: +420777974800
IRC: mhroncok
_______________________________________________
devel mailing list -- devel@lists.fedoraproject.org
To unsubscribe send an email to devel-le...@lists.fedoraproject.org
Fedora Code of Conduct: 
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: 
https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org
Do not reply to spam on the list, report it: 
https://pagure.io/fedora-infrastructure

Reply via email to