воскресенье, 25 апреля 2010 г.

VirtualBox на 32-бит системе с 64-бит ядром

Долго ли, коротко ли, а 64-бит архитектуры развиваются и становятся интересными для практического применения. Ядро ветки 2.6.32 вполне прилично работает на нетбуке, так что возникла мысль попробовать 64-бит ядро. Почему именно такая конфигурация? Да очень просто - всегда можно загрузиться в 32-бит ядро и оказаться в хорошо известной 32-бит конфигурации. Почему на нетбуке? Все просто - мне хватает его производительности, а по размерам он меньше ноутбука и практически бесшумен. Пару дней назад, когда я уже сидел с 64-бит ядром, понадобилось запустить VirtualBox. А он запускаться не хочет. Ну, что поделать, значит, пришло время попробовать 64-бит чрут в 32-бит системе с 64-бит ядром. Поставил sid, хотя можно было и squeeze, это не принципиально, поскольку виртуалбокс все равно для ленни собран в репозитории на оффсайте. Плюс сделал скрипт для запуска VirtualBox в чруте:
$ cat /usr/local/bin/virtualbox 
#!/bin/sh

CHROOT=/srv/chroot_amd64

    if test ! -e $CHROOT/dev/.udev; then
        sudo mount -t none /dev $CHROOT/dev/ -o bind
    fi
    if test `ls $CHROOT/proc | wc -l` = "0"; then
        sudo mount -t proc none $CHROOT/proc
    fi
    if test `ls $CHROOT/sys | wc -l` = "0"; then
        sudo mount -t sysfs none $CHROOT/sys
    fi
    if test `ls $CHROOT/home | wc -l` = "0"; then
        sudo mount --bind /home $CHROOT/home
    fi
#    if test `ls $CHROOT/srv | wc -l` = "0"; then
#        sudo mount --bind /srv $CHROOT/srv
#    fi
    if test `ls $CHROOT/tmp | wc -l` = "0"; then
        sudo mount --bind /tmp $CHROOT/tmp
    fi
    if test `ls $CHROOT/var/run/dbus | wc -l` = "0"; then
        sudo mount --bind /var/run/dbus $CHROOT/var/run/dbus
    fi

    echo "Hello to chroot $CHROOT!"
    sudo chroot $CHROOT sh -c "su - veter VirtualBox"
    sleep 10

    if test `ls $CHROOT/var/run/dbus | wc -l` != "0"; then
        sudo umount $CHROOT/var/run/dbus
    fi
    if test `ls $CHROOT/proc | wc -l` != "0"; then
        sudo umount $CHROOT/proc
    fi
    if test `ls $CHROOT/sys | wc -l` != "0"; then
        sudo umount $CHROOT/sys
    fi
    if test `ls $CHROOT/tmp | wc -l` != "0"; then
        sudo umount $CHROOT/tmp
    fi
    if test -e $CHROOT/dev/.udev; then
        sudo umount $CHROOT/dev/
    fi
    if test `ls $CHROOT/home | wc -l` != "0"; then
        sudo umount $CHROOT/home
    fi
#    if test `ls $CHROOT/srv | wc -l` != "0"; then
#        sudo umount $CHROOT/srv
#    fi

    echo "Chroot $CHROOT is unmounted!"
Замечу, что USB-устройства подключаются (благодаря примонтированному /var/run/dbus). Таймаут нужен для того, чтобы успели остановиться некоторые сервисы, запускаемые VirtualBox - иначе не удастся отмонтировать ФС. Профит :-)

Комментариев нет:


(C) Alexey Pechnikov aka MBG, mobigroup.ru