|
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
# 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
# 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.
|