Gentoo Logo

1.  Wprowadzenie

Wprowadzenie do 64-bitowego systemu

Przewodnik dla 32-bitowego chroota w Gentoo Linux pomaga ustawić prawdziwy 32-bitowy chroot na systemie Gentoo/AMD64.

Jak wiemy systemy 64-bitowe nie obsługują jeszcze 32-bitowych aplikacji (przynajmniej nie z Portage), więc będziemy musieli skorzystać z bibliotek emulacji by zmusić je do działania, bądź też stworzyć prawdziwy 32-bitowy system wewnątrz chroota, by zainstalować i uruchamiać 32-bitowe aplikacje. Dla zwykłych potrzeb nie musimy budować prawdziwego 32-bitowego systemu wewnątrz chroota. Jednakże, jeżeli chcemy uruchamiać aplikacje, które nie posiadają binariów umożliwiających pracę z 32-bitowymi bibliotekami, musimy skorzystać 32-bitowego chroota. Przewodnik ten uczy jak utworzyć 32-bitowy chroot oraz jak zainstalować i uruchamiać w nim aplikacje.

1.  Instalacja

Instalacja 32-bitowego chroota

By zainstalować 32-bitowy chroot podążamy radami jakimi kierujemy się podczas instalacji Gentoo Linux na systemie x86. W tej chwili potrzebujemy najnowszego stage3, dostępnego na serwerach lustrzanych Gentoo.

Listing 1.1: Ściąganie stage3

$ cd /home/user/downloads
$ wget -c http://distfiles.gentoo.org/releases/x86/2005.0/stages/athlon-xp/stage3-athlon-xp-2005.0.tar.bz2

Uwaga: Należy zwrócić uwagę, że ściągamy wersję stage dla x86, nie dla AMD64.

Po ukończeniu ściągania musimy stworzyć miejsce dla nowego chroota.

Listing 1.1: Tworzenie katalogu dla 32-bitowego chroota

$ su root wprowadzamy hasło root'a
# cd /mnt
# mkdir gentoo32

Następnie przenosimy ściągnięty stage, rozpakowujemy i instalujemy go według przykładu.

Listing 1.1: Instalacja ze stage3

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

W tej chwili mamy gotowy do tworzenia chroot. Kolejny rozdział pokazuje jak to się odbywa.

1.  Tworzenie

Tworzenie 32-bitowego chroota

Jeżeli nie napotkaliśmy żadnych błędów, możemy śmiało rozpocząć tworzenie i sfinalizować instalację 32-bitowego chroota.

Kolejnym krokiem jest utworzenie nowego /mnt/gentoo32/etc/make.conf.

Listing 1.1: Konfiguracja nowego make.conf

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

Teraz montujemy różne fikcyjne systemy plików:

Listing 1.1: Montujemy wirtualne systemy 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

W tym momencie mamy prawdziwy 32-bitowy chroot zainstalowany na 64-bitowym systemie, który jest już praktycznie gotowy do użycia. Następnie musimy stworzyć link z portage dostępnego w 64-bitowym systemie do chroota. Dzięki temu można wykonać aktualizację w jednej instalacji dla obydwu systemów zamiast kopiować wiele danych.

Listing 1.1: Łączymy portage z /usr/portage wewnątrz 32-bitowego chroot'a

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

Uwaga: Za każdym razem gdy wykonamy aktualizację Portage poleceniem emerge sync, uaktualnimy również portage 32-bitowego chrootaa.

Jeżeli chcemy uruchomić 32-bitowe aplikacje wymagające X, musimy zamontować /tmp.

Listing 1.1: Montujemy /tmp dla aplikacji posiadających GUI

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

Teraz możemy przejść do wnętrza chroota.

Listing 1.1: Przechodzimy do środowiska utworzonego chroot'a

# emerge --noreplace sys-apps/util-linux
# linux32 chroot /mnt/gentoo32 /bin/bash
(Upewaniamy się czy nasza konfiguracja to i686)
# uname -m
Linux mysystem 2.6.12-gentoo-r1 #1 Mon Jun 27 02:41:55 GMT 2005 i686 AMD Athlon(tm) 64 Processor 3500+ AuthenticAMD GNU/Linux

Ostrzeżenie: Narzędzie linux32 jest potrzebne do zmiany wartości CHOST. Jeżeli je pominiemy, nie będzie możliwa kompilacja wewnątrz chroota.

W tej chwili mamy w swoich rękach 32-bitowy chroot gotowy do aktualizacji. Kolejne kroki przeprowadzą nas przez update.

Listing 1.1: Update nowego, 32-bitowego chroot'a

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

Po tej czynności mamy praktycznie gotowy 32-bitowy chroot. By dopasować wszystkie opcje, utworzymy nowy plik w 64-bitowym systemie, by udostępnić 32-bitowy chroot podczas uruchamiania systemu.

Listing 1.1: Tworzymy nowy plik w /etc/init.d

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

depend() {
   need localmount
   need bootmisc
}

start() {
    ebegin "Mounting 32bits 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 /mnt/gentoo32/proc >/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 32bits 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 32bits 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 32bits chroot directories"
}

Teraz wystarczy uruchomić rc-update add gentoo32 default by chroot odpalał się przy starcie.

Jeżeli zechcemy przełączyć się do środowiska chroot, wystarczy skorzystać z następującej komendy: linux32 chroot /mnt/gentoo32 /bin/bash.

Nasz 32-bitowy chroot jest w tej chwili przygotowany do instalacji nowych aplikacji.

1.  Aplikacje

Instalowanie nowych aplikacji w chroot'cie

Teraz, kiedy mamy w pełni funkcjonalny 32-bitowy chroot, możemy zainstalować każdą 32-bitową aplikację. Sprawdźmy jak przebiega instalacja nowych pakietów.

Listing 1.1: Instalujemy foo wewnątrz chroot'a

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

Uwaga: Należy pamiętać o wykonaniu source /etc/profile oraz env-update po przełączeniu się na chroota.

Zainstalowaliśmy nowy pakiet na 32-bitowym chroocie. Jeżeli chcemy go uruchomić, musimy zainicjować go wewnątrz chroota. Jeżeli chcemy uruchomić aplikację korzystającą z X, najlepszym rozwiązaniem jest xhost. Za każdym razem gdy chcemy uruchomić aplikację wykorzystującą X, wykonujemy następujące polecenie w naszym 64-bitowym systemie:

Listing 1.1: Xhost

# xhost local:localhost

Po tym przechodzimy z powrotem do chroota i możemy uruchamiać każdą aplikację wymagającą X, wcześniej skompilowaną wewnątrz chroota.

1.  Podsumowanie

Podsumowanie poradnika

Dzięki chrootowi możemy instalować wiele pakietów normalnie dostępnych tylko dla systemów x86. Niektóre pakiety takie jak OpenOffice mogą zostać zainstalowane przy pomocy binariów dostępnych dla Gentoo/AMD64. Niektóre z kodeków dostępnych dla programu MPlayer również wymagają 32-bitowego chroota, więc umożliwia on instalację pakietu win32codecs.

Zaktualizowano 26 grudnia 2008

Donate to support our development efforts.

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