build-pkgs will by default run in parallel mode. This means two things, a different build order than the serial build, and the possibility that earlier packages built in a different mock environment. It likely works in a serial build because an earlier package has a "Require: X" where X is shadow-utils or something that depends on shadow-utils. Since we reuse the mock environment rather than clearing it after each package (faster builds), the shadow-utils package is available for later packages and might allow then to get away with a missing dependency.
The real solution is to add 'Requires: shadow-utils' to the spec file of the package that breaks.
In one round of compilation I saw more than 20 packages failing due to this missing shadow-utils dependency so several changes might be required. Let me add some other packages are failing due to another missing dependency: rpm-build. Only 2 for now so far seen in my setup.
Adding it via modify-build-cfg was based on the theory (unconfirmed) that @buildsys-build macro has been redefined on newer CentOS systems and shadow-utils has been dropped from the set of packages that @buildsys-build maps to. It seems like a quicker way to enable folks, rather than adding 'Requires: shadow-utils' to potemtially a lot of packages.
Agree! Since we are reusing this mock environment, I am in favor to add via modify-build-cfg.