Fix passing explicit stage files
authorkn <kn@openbsd.org>
Sat, 3 Sep 2022 15:46:20 +0000 (15:46 +0000)
committerkn <kn@openbsd.org>
Sat, 3 Sep 2022 15:46:20 +0000 (15:46 +0000)
commitd5142bb915074fc23db8c54d652b6bfa1e3c19bc
tree4b19563e57821fa7f65bf2ffa19b01dba496ff7c
parent3119f858d97ff996617c24554c4c4f6a0a47ac0c
Fix passing explicit stage files

Every platform ought to set `stages', `stage1' and optionally `stage2'
in md_init(), otherwise passing explicit files results won't work as
`stages' is zero-initialised and no default path is set:

# installboot -nv wd0 ./ofwboot
usage: installboot [-nv] [-r root] disk [stage1]
installboot [-nv] -p disk

This is correct synopsis and ought to work, but macppc_installboot.c
(others, too) has an empty md_init().  Set stage bits to fix this:

# ./obj/installboot -nv wd0 ./ofwboot
Using / as root
would install bootstrap on /dev/rwd0c
using first-stage ./ofwboot
would copy ./ofwboot to /tmp/installboot.Ymmm6QU8OJ/ofwboot

Using `stage1' leads to a bit more cleanup since early MI installboot.c
handles `-r', i.e. write_filesystem() no longer has needs to do the
fileprefix() dance itself.

This makes regress/usr.sbin/installboot pass on macppc (while being lucky
or carrying miod's fix for the kernel disklabel race manifesting on vnd).

OK gkoehler
usr.sbin/installboot/macppc_installboot.c