chrooting in a 32-bit world from a 64-bit kernel+world

Mel fbsd.questions at rachie.is-a-geek.net
Tue Sep 30 20:38:13 UTC 2008


On Tuesday 30 September 2008 21:57:22 Olivier Smedts wrote:
> On Tue, Sep 30, 2008 at 09:28:39PM +0200, Mel wrote:
> > On Tuesday 30 September 2008 20:44:02 Olivier Smedts wrote:
> > > 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
> >
> > It's a guess, but at this point:
> > chroot /mnt /etc/rc.d/ldconfig start
>
> First, thank you for replying so fast !
>
> /etc/rc.d/ldconfig is a /bin/sh script, and I can't run /bin/sh in this
> chroot. Same errors.
>
> > If that don't work:
> > /sbin/ldconfig -32 -s -f /mnt/var/run/ld-elf.so.hints /mnt/lib \
> > 	/mnt/usr/lib
>
> After that command, the shared libraries are found, but ld refers to /mnt :
> # ldconfig -rf /mnt/var/run/ld-elf.so.hints
> /mnt/var/run/ld-elf.so.hints:
>         search directories: /mnt/lib:/mnt/usr/lib
>         0:-lc.7 => /mnt/lib/libc.so.7
>         1:-lcrypt.4 => /mnt/lib/libcrypt.so.4
> [...]

Right.
cd /mnt
rmdir mnt
ln -s . mnt

The old chroot symlink hack.

> And then when trying to chroot, still the same problem. I also can't launch
> ldconfig in the jail :
> # chroot /mnt/ /sbin/ldconfig -32 -s -f /var/run/ld-elf.so.hints /lib
> /usr/lib ELF interpreter /libexec/ld-elf.so.1 not found
> Abandon

If you have /rescue there, maybe chroot /mnt /rescue/ldconfig /lib /usr/lib 
will help you. I'm pretty sure it's the missing hints causing this.

If all this fails, I'd try running /mnt as a jail.
-- 
Mel

Problem with today's modular software: they start with the modules
    and never get to the software part.


More information about the freebsd-questions mailing list