Gentoo Logo

Jak ustawić 32-bitowego chroot'a

Spis treści:

1.  Wprowadzenie

Wprowadzenie do systemów 64-bitowych

Przewodnik Gentoo do instalacji 32-bitowego chroot'a pomaga ustawić prawdziwe 32-bitowe środowisko na systemie Gentoo/AMD64.

Wiemy, że obecnie systemy 64-bitowe nie pozwalają na uruchamianie aplikacji 32-bitowych. Do tego tego potrzebne są biblioteki emulacyjne lub stworzenie prawdziwego 32-bitowego środowiska wewnątrz chroota, by móc uruchamiać 32-bitowe aplikacje. W większości przypadków nie potrzeba budować 32-bitowego systemu wewnątrz chroot. Jednak jeśli chcemy uruchomić aplikację, która nie ma binarki dostępnej dla bibliotek 32-bitowych, trzeba użyć 32-bitowego chroota. W tym tekście pokazujemy jak ustawić 32-bitowe środowisko wewnątrz chroota oraz jak instalować i uruchamiać aplikacje wewnątrz niego.

2.  Instalacja

Instalacja 32-bitowego chroota

Instalacja 32-bitowego chroota jest przeprowadzana tak jak zwykła instalacja Gentoo na architekturę x86. Jest do niej potrzebne archiwum stage3 dostępne na naszych serwerach lustrzanych.

Listing 2.1: Pobieranie archiwum stage3 z serwerów lustrzanych gentoo

$ cd /home/user/downloads
$ wget -c ftp://distfiles.gentoo.org/releases/x86/2006.1/stages/stage3-i686-2006.1.tar.bz2

Uwaga: Należy pobrać archiwum stage3 dla architektury x86, a nie dla AMD64!

Po pobraniu archiwum stage3 należy stworzyć nowy katalog i w nim zbudować nasz 32-bitowy chroot.

Listing 2.2: Tworzenie katalogu dla 32-bitowego chroota

$ su root twoje hasło superużytkownika
# cd /mnt
# mkdir gentoo32

Następnie należy przenieść archiwum, które zostało ściągnięte, rozpakować zainstalować jak w poniższym przykładzie.

Listing 2.3: Instalowanie archiwum stage3

# cd /mnt/gentoo32
# tar -xvjpf /home/user/downloads/stage3-i686-2006.1.tar.bz2
# cp -L /etc/resolv.conf /mnt/gentoo32/etc/
# cp -L /etc/passwd /mnt/gentoo32/etc/

W kolejnym rozdziale dokończymy konfigurację systemu.

3.  Konfiguracja

Konfigurowanie 32-bitowego chroota

Rozpoczynamy konfigurację naszego chroota.

Następnym krokiem jest utworzenie pliku /mnt/gentoo32/etc/make.conf.

Listing 3.1: Konfigurowacja pliku make.conf

CFLAGS="-O2 -march=athlon-xp -msse2 -pipe -fomit-frame-pointer"
CHOST="i686-pc-linux-gnu"
CXXFLAGS="${CFLAGS}"
MAKEOPTS="-j2"

Teraz montujemy wirtualne systemy plików:

Listing 3.2: Montowanie wirtualnych systemów plików

# mount -o bind /dev /mnt/gentoo32/dev
# mount -o bind /dev/pts /mnt/gentoo32/dev/pts
# mount -o bind /dev/shm /mnt/gentoo32/dev/shm
# mount -o bind /proc /mnt/gentoo32/proc
# mount -o bind /proc/bus/usb /mnt/gentoo32/proc/bus/usb
# mount -o bind /sys /mnt/gentoo32/sys

32-bitowe środowisko wewnątrz chroota jest już gotowe. Teraz stworzymy dowiązanie z portage z systemu 64-bitowego do tego wewnątrz chroota. Dzięki temu wystarczy jednorazowa aktualizacja portage zamiast podwójnej.

Listing 3.3: Montowanie portage do /usr/portage wewnątrz 32-bitowego chroota

# mkdir -p /mnt/gentoo32/usr/portage/
# mount -o bind /usr/portage /mnt/gentoo32/usr/portage/

Uwaga: Za każdym razem przy aktualizacji drzewa Portage przez emerge --sync aktualizuje się również portage z 32-bitowego chroota

Zamontowanie /tmp jest konieczne do uruchomienie 32-bitowych aplikacji używających X.

Listing 3.4: Montowanie /tmp dla aplikacji okienkowych

# mount -o bind /tmp /mnt/gentoo32/tmp

Teraz czas na aktualizację środowiska wewnątrz chroota.

Listing 3.5: Zmiany wewnątrz chroota

(Poniższą linię należy wykonać, jeśli nie mamy zainstalowanego pakietu setarch)
# emerge setarch
# linux32 chroot /mnt/gentoo32 /bin/bash
(Należy się upewnić, czy posiadamy wersję dla architektury x86)
# uname -m
i686

Ostrzeżenie: Narzędzie linux32 jest niezbędne do zmiany wartości zmiennej CHOST. Jeśli zapomnimy dodać je przed komendą chroot, najprawdopodobniej nie będzie możliwa kompilacja wewnątrz chroot.

Nowy 32-bitowy chroot jest gotowy do aktualizacji.

Listing 3.6: Aktualizacja 32-bitowego chroot'a

# source /etc/profile
# env-update
# emerge -au world

32-bitowe środowisko jest gotowe do pracy. Aby ułatwić uruchamianie chroot, napiszmy plik, który będzie montować katalogi i wirtualne systemy plików dla 32-bitowego chroota podczas uruchamiania systemu 64-bitowego.

Listing 3.7: Tworzenie nowego pliku w /etc/init.d

# nano -w /etc/init.d/gentoo32
#!/sbin/runscript

depend() {
   need localmount
   need bootmisc
}

start() {
    ebegin "Mounting 32bit chroot dirs"
    mount -o bind /dev /mnt/gentoo32/dev >/dev/null
    mount -o bind /dev/pts /mnt/gentoo32/dev/pts >/dev/null &
    mount -o bind /dev/shm /mnt/gentoo32/dev/shm >/dev/null &
    mount -o bind /proc /mnt/gentoo32/proc >/dev/null
    mount -o bind /proc/bus/usb /mnt/gentoo32/proc/bus/usb >/dev/null &
    mount -o bind /sys /mnt/gentoo32/sys >/dev/null &
    mount -o bind /tmp /mnt/gentoo32/tmp >/dev/null &
    mount -o bind /usr/portage /mnt/gentoo32/usr/portage/ >/dev/null &
    eend $? "An error occured while attempting to mount 32bit chroot directories"
    ebegin "Copying 32bit chroot files"
    cp -pf /etc/resolv.conf /mnt/gentoo32/etc >/dev/null &
    cp -pf /etc/passwd /mnt/gentoo32/etc >/dev/null &
    cp -pf /etc/shadow /mnt/gentoo32/etc >/dev/null &
    cp -pf /etc/group /mnt/gentoo32/etc >/dev/null &
    cp -pf /etc/gshadow /mnt/gentoo32/etc >/dev/null &
    cp -pf /etc/hosts /mnt/gentoo32/etc > /dev/null &
    cp -Ppf /etc/localtime /mnt/gentoo32/etc >/dev/null &
    eend $? "An error occured while attempting to copy 32 bits chroot files."
}

stop() {
    ebegin "Unmounting 32bit chroot dirs"
    umount -f /mnt/gentoo32/dev/pts >/dev/null
    umount -f /mnt/gentoo32/dev/shm >/dev/null
    umount -f /mnt/gentoo32/dev >/dev/null &
    umount -f /mnt/gentoo32/proc/bus/usb >/dev/null
    umount -f /mnt/gentoo32/proc >/dev/null &
    umount -f /mnt/gentoo32/sys >/dev/null &
    umount -f /mnt/gentoo32/tmp >/dev/null &
    umount -f /mnt/gentoo32/usr/portage/ >/dev/null &
    eend $? "An error occured while attempting to unmount 32bit chroot directories"
}

Teraz wystarczy wykonać polecenie rc-update add gentoo32 default, by skrypt uruchamiał się podczas domyślnego poziomu startowego.

By zmienić środowisko z 64 na 32-bitowe wystarczy wykonać polecenie: linux32 chroot /mnt/gentoo32 /bin/bash.

Teraz 32-bitowe środowisko jest gotowe, by instalować nowe aplikacje.

4.  Aplikacje

Instalacja aplikacji wewnątrz chroota

Teraz chroot jest w pełni funkcjonalny, można w nim zainstalować każdą aplikację w wersji 32-bitowej. Poniższy przykład pokazuje instalację pakietu foo po chroot.

Listing 4.1: Instalowanie foo po chroot

# linux32 chroot /mnt/gentoo32 /bin/bash
# source /etc/profile
# env-update
# emerge foo

Uwaga: Po każdym wejściu do chroota należy wykonać polecenie source /etc/profile && env-update.

Teraz można już instalować i uruchamiać 32-bitowe aplikacje w chroocie. Jeśli są oparte na X, trzeba korzystać z programu xhost. Przed uruchomieniem takiego programu trzeba poza środowiskiem wpisać:

Listing 4.2: Polecenie xhost

# xhost local:localhost

Następnie należy wejść do chroota i uruchomić tam dany program.

5.  Zakończenie

Zakończenie tego podręcznika

Za pomocą chroota można instalować wiele pakietów dostępnych tylko dla architektury x86. Niektóre pakiety, takie jak OpenOffice, można zainstalować używając wersji binarnych dla Gentoo/AMD64. Niektóre kodeki dostępne dla programu MPlayer wymagają użycia 32-bitowego chroota do instalacji, np. win32codecs.



Drukuj

Zaktualizowano 16 września 2006

Podsumowanie: Ten przewodnik opisuje tworzenie 32-bitowego chroota.

Luis Medinas
Autor

Jakub Hudak
Tłumaczenie

Donate to support our development efforts.

Support OSL

Support OSL

Gentoo Centric Hosting: vr.org

VR Hosted

Tek Alchemy

Tek Alchemy

SevenL.net

SevenL.net

Global Netoptex Inc.

Global Netoptex Inc.

Bytemark

Bytemark

Linux World Expo

Linux World Expo

Copyright 2001-2008 Gentoo Foundation, Inc. Questions, Comments? Contact us.