Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 30 Sep 2008 20:44:02 +0200
From:      Olivier Smedts <olivier@gid0.org>
To:        questions@freebsd.org
Subject:   chrooting in a 32-bit world from a 64-bit kernel+world
Message-ID:  <20080930184401.GA23783@q.gid0.org>

next in thread | raw e-mail | index | archive | help
Hello hackers,

I'm trying to cross-compile an i386 FreeBSD system (kernel+world+ports) under
my amd64 host :
% uname -srm
FreeBSD 8.0-CURRENT amd64

I updated my CURRENT sources yesterday.

So far I've got a working FreeBSD (kernel+world) in a 512MB image I can dump
on a CompactFlash card :
# cd /usr/src
# make buildworld TARGET=i386
# make buildkernel TARGET=i386
# mount /dev/md0a /mnt
(md0 is a 512MB file backed image I bsdlabel'd and newfs'd before)
# make installworld TARGET=i386 DESTDIR=/mnt
# make distribution TARGET=i386 DESTDIR=/mnt
# make installkernel TARGET=i386 DESTDIR=/mnt

The problem is that I can't chroot in this 32-bit world.
Say I want to install the sysutils/screen port in /mnt :

# mkdir /mnt/usr/ports
# mount -t nullfs /usr/ports /mnt/usr/ports
# mount -t devfs devfs /mnt/dev
# chroot /mnt /bin/sh -c "cd /usr/ports/sysutils/screen && make BATCH=yes \
  install clean"
ELF interpreter /libexec/ld-elf.so.1 not found
Abort trap

Of course it's the same with the new (new since a year or so) ports DESTDIR
since it's based on chroot :
# cd /usr/ports/sysutils/screen
# make DESTDIR=/mnt install clean
===>  Creating some important subdirectories
===>  Starting chrooted make in /mnt...
ELF interpreter /libexec/ld-elf.so.1 not found
Abort trap
===>  Chrooted make in /mnt failed
===>  Cleaning up...

I can directly execute /mnt/bin/sh or any program in /mnt without problems.

As expected, file gives me :
/libexec/ld-elf.so.1:     ELF 64-bit LSB shared object, x86-64, version 1 (FreeBSD), stripped
/mnt/libexec/ld-elf.so.1: ELF 32-bit LSB shared object, Intel 80386, version 1 (FreeBSD), dynamically linked, stripped

Host kernel with COMPAT_IA32 and world without WITHOUT_LIB32 didn't help.
I tried temporarily replacing /mnt/libexec/ld-elf.so.1 with the 64-bit one,
but the same problem occurs.

Using ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-current/ is not an
option because I don't use default OPTIONS.
Is there a way or another to chroot in this i386 world from my amd64 host ?

Olivier

-- 
Olivier Smedts                                              _
                          ASCII ribbon campaign            ( )
e-mail: olivier@gid0.org - against HTML email & vCards      X
www: http://www.gid0.org - against proprietary attachments / \

 "Il y a seulement 10 sortes de gens dans le monde :
 ceux qui comprennent le binaire,
 et ceux qui ne le comprennent pas."



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080930184401.GA23783>