Cross compiling FreeBSD
Sam Leffler
sam at freebsd.org
Wed Jan 14 21:45:05 PST 2009
Brooks Davis wrote:
> On Thu, Jan 15, 2009 at 02:18:47PM +1100, Andrew Reilly wrote:
>> On Thu, Jan 15, 2009 at 08:16:17AM +1100, Peter Jeremy wrote:
>>> This won't work because install{world,kernel} uses programs (under
>>> /usr/obj) that were built to run on the build system (amd64 in
>>> your case) and so won't run on the target (i386) system.
>>>
>>> The supported approach is to NFS mount the target machines onto the
>>> build machine and run "make DESTDIR=/mount/point install{world,kernel}"
>>> on the build machine. Note that this will report errors since NFS
>>> cannot handle UFS flags - you will need to manually remove/add schg flags.
>> Is there any reason (apart from using more space on the build
>> machine) not to install to a DESTDIR (not /) on the build
>> machine, and then tar/pax/cpio that tree across to the client
>> system? Presumably something like that must be done for the
>> distribution builds that go into making the CD and DVD images.
>
> This should work just fine. I use installs to DESTDIR to build images to be
> run at NFS root file systems.
+1
>
>> NetBSD has (had? it's been a while since I looked) a cool
>> mechanism that allowed the whole tree to be built (and
>> "installed" to a DESTDIR) without root permissions, using a
>> variation on install that copied the file as the running user
>> and recorded the intended user/group/mod/flags in an mtree file.
>> Then a subsequent task created a tarball that contained the file
>> contents and the mtree permissions, all as a non-root user. So
>> you don't even need to muck about with root-over-nfs issues for
>> deployment: just log into the client and untar the distribution
>> over the network (as root). Very, very neat, IMO. I used to
>> build embedded i386 NetBSD installations on my amd64 FreeBSD
>> system that way without much in the way of trouble. Haven't had
>> to do it for a while, though, so perhaps it's all changed. I
>> wouldn't hate to discover that FreeBSD can do that too,
>> though...
>
> We don't have this yet, but lots of people would like to see this (just
> not quite enough to do it yet :).
I've used netbsd and didn't find the unprivileged build process as
useful as I expected but I'm certainly a fan of eliminating root use. I
recently added makefs to the base system which simplifies setting up a
cross-devel environment but we still lack bi-endian native filesystem
support. Otherwise the key issues in improving cross-build support are:
ports and requiring freebsd as the build host. With the advent of
virtual machines however the build host issue is less critical.
Sam
More information about the freebsd-arch
mailing list