* Don Jackson <[EMAIL PROTECTED]> [2008-02-25 07:24:45]: > On Mon, Feb 25, 2008 at 5:35 AM, Travers Buda <[EMAIL PROTECTED]> wrote: > > > Why on earth are you bothering with this? Please don't tell me > > it's for security, because that would be inane. > > I have a heterogeneous collection of machines on which I run OpenBSD, > both amd64 and i386. > I have separate build machines for each architecture. > I would vastly prefer to download the source once, put it on a local > NAS, and have each build machine build the release it needs. > > In my experience, this doesn't work at all if the build processes > writes into the src tree itself, and historically I have had to keep a > "virgin" source tree, and copy to each build machine, which takes a > long time, and it is really kind of a pain to maintain the consistency > of 3 copies. > > While choosing to avoid the use of the (inflammatory) word "inane", I > find it curious that in following the proscribed procedure for > building a release, I have ALREADY built a new kernel for this > architecture (which is basically the first step before building > userland, > and then onto the release itself), (and in my case, I have already > built both the GENERIC and GENERIC.MP kernels), that the Makefile.inc > in /usr/src/etc/etc.amd64 goes ahead and does: > > # $OpenBSD: Makefile.inc,v 1.7 2006/07/27 02:53:55 deraadt Exp $ > > .ifdef DESTDIR > snap_md: bsd bsd.mp bootblocks distrib > cp ${.CURDIR}/../sys/arch/amd64/compile/GENERIC/bsd \ > ${DESTDIR}/snapshot/bsd > cp ${.CURDIR}/../sys/arch/amd64/compile/GENERIC.MP/bsd \ > ${DESTDIR}/snapshot/bsd.mp > > bsd: > cd ${.CURDIR}/../sys/arch/amd64/conf && config GENERIC > cd ${.CURDIR}/../sys/arch/amd64/compile/GENERIC && \ > ${MAKE} clean && ${MAKE} depend && exec ${MAKE} > > bsd.mp: > cd ${.CURDIR}/../sys/arch/amd64/conf && config GENERIC.MP > cd ${.CURDIR}/../sys/arch/amd64/compile/GENERIC.MP && \ > ${MAKE} clean && ${MAKE} depend && exec ${MAKE} > > bootblocks: > cp ${DESTDIR}/usr/mdec/pxeboot ${DESTDIR}/snapshot > cp ${DESTDIR}/usr/mdec/cdboot ${DESTDIR}/snapshot > cp ${DESTDIR}/usr/mdec/cdbr ${DESTDIR}/snapshot > > .PHONY: bsd bsd.mp bootblocks > > .endif # DESTDIR check > > (I discovered this makefile AFTER I had sent my email last night....) > > Anyway, it looks like one possible solution to my question would be to > modify this file so that > the bsd and bsd.mp targets are either no-ops, or perform their make in > the previously generated kernel build directories, > and then to change the snap_md target to copy the resulting bsd files > out of these build directories, and not from the middle > of the source tree. Of course, I'll have to do this again for the the > comparable i386 Makefile.inc. It would be preferable if the makefile > would check an environment variable for the location of where it > should actually compile things (outside of the src tree!) > and do it there. If unset, the Makefile could continue to pollute the > source tree with its builds, if that is what you want. > > Questions: > > Is there any other way (a better way?) to do what I am looking for? > > What other compiles does "make release" perform that involve writing > into the source tree? > > Thanks! > > Don > > > > * Don Jackson <[EMAIL PROTECTED]> [2008-02-24 23:27:31]: > > > > > > > > > The FAQ describes two ways to build the kernel ( > > > http://www.openbsd.org/faq/faq5.html#BldKernel ), > > > > > > # cd /usr/src/sys/arch/i386/conf > > > # config GENERIC > > > # cd ../compile/GENERIC > > > # make clean && make depend && make > > > > > > or > > > Variation on above process: Read-only source tree > > > Sometimes, you may wish to ensure your /usr/src/sys directory > > > remains untouched. This can be done by using the following process: > > > $ cd /somewhere > > > $ cp /usr/src/sys/arch/i386/conf/GENERIC . > > > $ config -s /usr/src/sys -b . GENERIC > > > $ make clean && make depend && make > > > > > > I would like "make release" to use the "read only source tree" variant > > > above, how can I accomplish this? > > > > > > Right now, I see "make release" do: > > > > > > cd /home/4.2/src/etc/../sys/arch/amd64/conf && config GENERIC > > > > > > Which is going to attempt to build the GENERIC kernel right there in > > > my source tree. > > > > > > Also, I am having some other weird problem, due to the following logic > > > in the Makefile.amd64 which contains: > > > > > > # source tree is located via $S relative to the compilation > > directory > > > .ifndef S > > > S!= cd ../../../..; pwd > > > .endif > > > AMD64= $S/arch/amd64 > > > > > > For some reason the above is setting my AMD64 to some weird path that > > > is not correct on my system, namely: > > > > > > cd /home/4.2/src/etc/../sys/arch/amd64/conf && config GENERIC > > > GENERIC:13: cannot open ../../../../arch/amd64/conf/files.amd64 > > > for reading: No such file or directory > > > > > > *** Error code 1 > > > > > > Stop in /home/4.2/src/etc (line 11 of etc.amd64/Makefile.inc). > > > > > > What is the point of the above, and how can I get the path correct for > > > this build? > > > > > > Thanks, > > > > > > Don > > > > > > > > > > Why on earth are you bothering with this? Please don't tell me > > it's for security, because that would be inane. > > > > -- > > Travers Buda > >
Sorry, I just assumed it was for "security." My advice would be to use cvsync to fetch a tree. Syncinc via cvsync is really, really fast. Then just use cvs to update a tree on each machine. Your method is a bit complicated for the job. Keeping the objects etc seperate sounds like a lot of unnecessary work. -- Travers Buda