Jak ustawić 32-bitowego chroot'a
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
# 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 |
# emerge util-linux
# linux32 chroot /mnt/gentoo32 /bin/bash
# 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.
Materiał udostępniany na podstawie licencji Creative Commons -
Attribution / Share Alike.
|