Hi all!

I've spent about a week trying to accomplish a rather simple task: To build kernel and world once for each architecture we have, and distribute this precompiled src and obj tree via NFS to all the systems that need updating. I have combined this with a locally maintained CVS tree, in order to assure coherent releases being installed on all our systems.
However, I am seeing some peculiar issues that I simply don't manage  
to get around.
Scenario:

I've got one server running 6.0-STABLE-i386. On this host I've created a jail for building. We have both i386 and amd64 platforms in- house, so I've created a script that build for both:
 make TARGET_ARCH=i386  MAKEOBJDIRPREFIX=/usr/obj.i386  buildworld
 make TARGET_ARCH=amd64 MAKEOBJDIRPREFIX=/usr/obj.amd64 buildworld
And the same for buildkernel.

Starting out trying to upgrade the amd64 hosts, I export the two obj directories via NFS, and mount them as /usr/obj on the amd64 hosts that need upgrading. This was, at least, my initial approach. I then found out that the /usr/src tree in the build jail is somehow tainted by the build (and by the options I specified), so I need to export that as well (which, I am afraid, means I have to maintain two different build jails). Therefore I also export /usr/src and mount it on the target hosts.
I then realized that I need to use the same objdir on the target  
hosts as in the build jail, so I try mounting to /usr/obj.<arch> on  
the target hosts. This allows me to get somewhat further.  
Installworld now progresses for a while, until it bombs out with the  
following error:
  ===> sys/boot/i386/boot2 (install)
  dd if=/dev/zero of=boot2.ldr bs=276 count=1
  dd: not found
  *** Error code 127

When looking for dd, I find it in the host PATH, and also in the obj dir:
  [EMAIL PROTECTED] /usr/obj.amd64# find . -name dd -type f
  ./amd64/usr/src/bin/dd/dd

At this point, I get rid of the MAKEOBJDIRPREFIX option and rebuild everything with just TARGET_ARCH, only exporting /usr/obj from the build jail. I notice that when using TARGET_ARCH with something else than the architecture the build is running on (i.e. amd64 on an i386 host), the resulting build is NOT to be found in /usr/obj, but in / usr/obj/amd64. Thus I need to specify MAKEOBJDIRPREFIX=/usr/obj/amd64 on the target host for installworld to get anything done at all.
I'm still getting the dd: not found error, and I do believe I've  
tried every combination and variation I can think of. Clocks are in  
sync between all the systems, so that is not the problem. Is the  
build system partially broken in 6.0? Have I missed something? Do I  
actually need an amd64 host to be able to build for amd64 systems, or  
are there other ways to accomplish what I'm trying to do? Should I  
prehaps try doing centralized binary upgrades instead?
Any help would be appreciated.
With best regards,
/Eirik

_______________________________________________
freebsd-stable@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to