HOWTO Настройка 32-х битного режима под AMD64

Материал из Gentoo Linux Wiki

Перейти к: навигация, поиск
Вернуться в раздел руководства

Содержание

[править] А зачем оно надо?

Потребность в 32-х битном режиме возникла из-за того, что далеко не все программы под Gentoo могут работать в 64-ом режиме. Особенно это ощущается, когда пытаешься установить серверы игр и прочие не GPL-пакеты.

Поскольку руководства на эту тему я не нашел, то решил его написать сам, дабы не забыть ;)

[править] Установка 32-х битной системы

[править] Распаковка Stage3 для AMD Athlon

Будем считать, что 64-ех битная система установлена и мы уже в ней ;)

Для начала нам необходимо установить в какой-либо каталог слепок 32-х битного образа для AMD Athlon (не AMD64).

Для этого создадим какой-нибудь каталог для нее (в моем случаем /mnt/gentoo32) и распакуем туда образ системы:

Code: /bin/bash
 $ cd /home/users/downloads
 $ wget -c http://distfiles.gentoo.org/releases/x86/2005.0/stages/athlon-xp/stage3-athlon-xp-2005.0.tar.bz2
 $ su
 # mkdir /mnt/gentoo32
 # 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/

ВАЖНО: Еще раз обращаю внимание: на этом этапе мы распаковываем для 32-х битного AMD Athlon (не AMD64).

После этого этапа у нас будет распакованный Stage3 для AMD Athlon в необходимом нам каталоге.

[править] Установка необходимых пакетов

Для входа в систему в 32-х битном режиме необходимо установить соответствующий пакет: emerge setarch

Войти в 32-х битный режим можно командой: linux32 chroot /mnt/gentoo32

[править] Установка и запуск 32-х битных демонов

[править] Скрипт для запуска 32-х битных демонов

Для запуска демонов в 32-х битном режиме при загрузке системы, удобно использовать следующий скрипт:

Файл: /etc/init.d/gentoo32
 #!/sbin/runscript
 
 ROOT32=/mnt/gentoo32
 MOUNT="home tmp sys usr/portage dev dev/pts dev/shm"
 RUNLEVEL=gentoo32
 
 depend() {
       use net
       use dns
       need localmount
       need bootmisc
 }
 
 start() {
       ebegin "Mounting 32bits chroot dirs"
       mount none -t proc $ROOT32/proc
       for DIR in $MOUNT; do
           mount /$DIR $ROOT32/$DIR -o bind
       done
       eend $? "An error occured while attempting to mount 32bit chroot directories"

       ebegin "Remove old 32bits init.d files"
       rm -fR $ROOT32/var/lib/init.d/softscripts/*
       rm -fR $ROOT32/var/lib/init.d/started/*
       eend $?

       ebegin "Remove old pid files"
       find $ROOT32/var/run/* -not -type d -print0 | xargs -0 rm -f
       eend $?

       ebegin "Update 32bits config files"
       cp -pf /etc/resolv.conf $ROOT32/etc/
       cp -pf /etc/passwd  $ROOT32/etc/
       cp -pf /etc/shadow  $ROOT32/etc/
       cp -pf /etc/group   $ROOT32/etc/
       cp -pf /etc/gshadow $ROOT32/etc/
       cp -pf /etc/hosts   $ROOT32/etc/
       cp -Ppf /etc/localtime $ROOT32/etc/
       eend $?
 
       ebegin "Starting 32bits daemons"
       eend $?
       linux32 chroot $ROOT32 rc $RUNLEVEL
       eend $? "An error occured while attempting to run 32bit daemons"
 }
 
 stop() {
       ebegin "Stopping Gentoo32"
       linux32 chroot $ROOT32 rc $RUNLEVEL stop
       eend $?
 
       ebegin "Unmounting 32bits chroot dirs"
       UMOUNT=""
       for DIR in $MOUNT; do UMOUNT="$DIR $UMOUNT"; done
       for DIR in $UMOUNT; do
           umount -f $ROOT32/$DIR
       done
       umount -f $ROOT32/proc
       eend $?
 }

Этот скрипт монтирует общие каталоги, очищает перечень ранее запущенных сервисов и выполняет запуск загрузочных скриптов.

[править] Подготовка 32-х битной системы

Чтобы он запускался при старте системы, необходимо выполнить команду:

Code: /bin/bash
 # rc-update add gentoo32 default
Примечание: Здесь и далее предполагается, что каталог 32-х битной системы: /mnt/gentoo32, а ее runlevel: gentoo32

Так же необходимо создать каталог для runlevel-а 32-х битной системы: /mnt/gentoo32/etc/runlevels/gentoo32/

[править] Добавление 32-х битного демона в автозапуск

Для добавления скрипта в автоматическую загрузку, его необходимо добавить под 32-х битным режимом коммандой вида:

Code: linux32 chroot /mnt/gentoo32
 # rc-update add distccd gentoo32

[править] Резюме

В результате должна получиться система в системе, работавющая в 32-х битном режиме на AMD64.

Так же стоит отметить, что у них будет общий каталог /usr/portage, поэтому emerge sync достаточно выполнить только на одной из них, несмотря на то, что установка/удаление/обновление пакетов на кажной из них необходимо выполнить по отдельности.

[править] Ссылки

Основа для данного руководства http://www.gentoo.org/proj/en/base/amd64/howtos/index.xml?part=1&chap=2

Личные инструменты