Chroot to a 32 bits environment

Astrodog astrodog at gmail.com
Mon Dec 26 08:18:20 PST 2005


On 12/25/05, Flavio Pimentel Silvestrow <bozo at abutre.homeip.net> wrote:
> Hello.
>
> 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:
>
>         devfs_set_rulesets="/usr/32/dev=devfsrules_jail"
>
> 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 127.0.0.1
> [ *** SNIP *** ]
> gettimeofday({1135506828 464440},0x0)            = 0 (0x0)
> sendto(0x3,0x804ee14,0,0x0,{ AF_INET 127.0.0.1:0 },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
> implemented'
> SIGNAL 12 (SIGSYS)
> SIGNAL 12 (SIGSYS)
> 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 abutre.homeip.net>

Within the jail environment, it becomes impossible for the 32-bit
binaries you're trying to run, to get to the libraries FreeBSD uses to
provide 32-bit compat, I suspect. As far as the "Only for i386" stuff
goes, in my experence, ~50% of the ports that show that, actually
compile on amd64 without too much in the way of bug fixing. For the
other 50%, I try to use things like i386 packages, which are, for the
most part, perfectly happy on amd64.


More information about the freebsd-amd64 mailing list