Chroot to a 32 bits environment

Flavio Pimentel Silvestrow bozo at
Sun Dec 25 03:14:14 PST 2005


I'm trying to setup a 32 bits environment on a amd64 system (6.0-STABLE
as of Dec 18).

My goal is to be able to build (and run!) ports marked as
ONLY_FOR_ARCHS=i386. I'm not sure it's going to work, but I'm willing to
find out.

Anyway, I built the 32 bits world and installed on a different folder,
like this:

	# cd /usr/src
	# make TARGET_ARCH=i386 buildworld
	# make TARGET_ARCH=i386 DESTDIR=/usr/32 installworld

All went fine. I then mount /usr/32/dev adding the line below
to /etc/rc.conf and restarting devd:


Finally, I mount /usr/32/proc and chroot the whole thing:

	# mount -t procfs proc /usr/32/proc
	# chroot /usr/32

First error is:

	cannot stat /var/run/utmp.  Please "unset watch".

Which makes commands like 'who' unhappy. On to a more important test:

	# truss ping
[ *** SNIP *** ]
gettimeofday({1135506828 464440},0x0)            = 0 (0x0)
sendto(0x3,0x804ee14,0,0x0,{ AF_INET },0x10) = 64 (0x40)
gettimeofday({1135506828 468435},0x0)            = 0 (0x0)
gettimeofday({1135506828 470434},0x0)            = 0 (0x0)
select(4,{3},0x0,0x0,{0 998001})                 = 1 (0x1)
recvmsg()                                        ERR#78 'Function not
Process stopped because of:  16
process exit, rval = 12
Bad system call

(Lines might wrap, sorry).

So, recvmsg() not implemented? Something fishy...

Lots of basic commands like netstat and top fail to work also (I can
send the output for those if anybody wants). I have COMPAT_IA32 on my
kernel. Not really sure what to do next...

Sorry for the long post, and happy holidays to all!

Flavio Pimentel Silvestrow <bozo at>

More information about the freebsd-amd64 mailing list