* 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

Reply via email to