Документ создан: 11.02.2010

Установка VirtualBox под Ubuntu 7.xx

Зачем мне это надо?

Я бы не описывал данные действия, если бы всё было просто, как, к примеру, в VMWare. Но начав использовать VirtualBox я столкнулся с тем, что:

  • в гостевой системе нет USB;
  • не очень просто сделать ethernet bridging (не хотелось мне использовать NAT, он у меня в операционной системе).

Как оказалось, при более детальном рассмотрении, в репозитории моей операционной системы Kubuntu 7.10 присутствовал источник VirtualBox Open Source Edition (OSE), который, в отличии от полной версии virtualbox, не имел:

  • Remote Display Protocol (RDP) Server;
  • USB support;
  • USB over RDP;
  • iSCSI initiator.

Поискав решения, поэкспериментировав на двух версиях (7.04 и 7.10), я решился описать действия. Прошу не судить строго, так как эта статья - моё первое творение. Итак, приступим.

Общие действия

  1. Добавляем ключ:
    wget http://www.virtualbox.org/debian/innotek.asc -O- | sudo apt-key add -
  2. Прописываем репозиторий в "/etc/apt/sources.list" (для 7.04):
    deb http://www.virtualbox.org/debian feisty non-free

    или (для 7.10)

    deb http://www.virtualbox.org/debian gutsy non-free



  3. Обновляем базу:
    sudo apt-get update
  4. Ставим virtualbox (и кое-что ещё, нужное и полезное):
    sudo apt-get install virtualbox
    sudo apt-get install bridge-utils uml-utilities libsdl-ttf2.0-0

    Примечание. Если всё сделано правильно, должен поставиться virtualbox, а не virtualbox-ose.

  5. Включаем пользователя user, под которым будем запускать virtualbox, в группу virtualbox:
    sudo usermod -a -G vboxusers user
  6. Входим в систему под пользователем user. Если Вы уже вошли под ним на момент выполнения указанных действий, выйдите из системы и войдите заново.

USB

Для того, чтобы можно было пользоваться USB в virtualbox из-под Ubuntu 7.10 нужно:

  1. в "/etc/init.d/mountdevsubfs.sh" найти и раскомментировать следущие строчки:
    [ -d /dev/bus/usb/.usbfs ] || mkdir -p /dev/bus/usb/.usbfs
    domount usbfs "" /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
    ln -s .usbfs/devices /dev/bus/usb/devices
    mount --rbind /dev/bus/usb /proc/bus/usb

    Ищем по:

        #
        # Magic to make /proc/bus/usb work
        #
  2. отредактировать /etc/udev/rules.d/40-permissions.rules
    # SUBSYSTEM=="usb_device", MODE="0664"
    SUBSYSTEM=="usb_device", GROUP="vboxusers", MODE="0664"
  3. выполнить:
    sudo /etc/init.d/mountdevsubfs.sh stop
    sudo /etc/init.d/mountdevsubfs.sh start

Внимание! Для Ubuntu 7.04 действия этого раздела выполнять не нужно!

Bridge Interface.

Я пробовал разные варианты. Какие-то были лучше, какие-то хуже. Остановился же я на следующем:

  1. создаём исполняемый файл "/etc/init.d/bridge.sh", содержимое которого такое:
    #!/bin/sh
    PATH=/sbin:/usr/bin:/bin:/usr/sbin
    NUM_TAP=2
    NB=1
    IP_ADDR="172.16.255.1/24"
    NET_ADDR="172.16.255.0/24"
    USER="user"
    case "$1" in
        start)
            # create the bridge
        	brctl addbr br0
        	while [ $NB -le $NUM_TAP ]
        	do
        	    # create a tap
        	    INT="tap"$NB
        	    tunctl -t $INT -u $USER
        	    ip link set up dev $INT
        	    brctl addif br0 $INT
        	    let NB=$NB+1
        	done
        	# set the IP address and routing
        	ip link set up dev br0
        	ip addr add  $IP_ADDR dev br0
        	ip route add $NET_ADDR dev br0
        	chmod 777 /dev/net/tun
        	;;
        stop)
       	while [ $NB -le $NUM_TAP ]
        	do
        	    INT="tap"$NB
        	    ip link set down dev $INT
        	    brctl delif br0 $INT
        	    tunctl -d $INT
        	    let NB=$NB+1
        	done
        	ip link set down dev br0
        	brctl delbr br0
        	;;
        restart)
        	$0 stop
        	$0 start
        	;;
        *)
        	echo "Usage $0 {start|stop|restart}"
        	;;
    esac

    В результате выполнения данного скрипта с параметром start, создавалось два tap-интерфейса (NUM_TAP), которые были частью одной инстанции br0, для пользователя (USER). Запуск данного скрипта с параметром stop останавливает интрефейсы, инстанцию и удаляет их.
    Так как я один запускаю virtualbox, меня это устраивает. Можно усовершенствовать скрипт, но мне пока не нужно. :)

  2. Обновляем rc?.d:
    update-rc.d bridge.sh defaults

Вот общем-то и всё. Желаю удачи!

 
Recent changes RSS feed Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki Donate