Я бы не описывал данные действия, если бы всё было просто, как, к примеру, в VMWare. Но начав использовать VirtualBox я столкнулся с тем, что:
Как оказалось, при более детальном рассмотрении, в репозитории моей операционной системы Kubuntu 7.10 присутствовал источник VirtualBox Open Source Edition (OSE), который, в отличии от полной версии virtualbox, не имел:
Поискав решения, поэкспериментировав на двух версиях (7.04 и 7.10), я решился описать действия. Прошу не судить строго, так как эта статья - моё первое творение. Итак, приступим.
wget http://www.virtualbox.org/debian/innotek.asc -O- | sudo apt-key add -
deb http://www.virtualbox.org/debian feisty non-free
или (для 7.10)
deb http://www.virtualbox.org/debian gutsy non-free
sudo apt-get update
sudo apt-get install virtualbox sudo apt-get install bridge-utils uml-utilities libsdl-ttf2.0-0
Примечание. Если всё сделано правильно, должен поставиться virtualbox, а не virtualbox-ose.
sudo usermod -a -G vboxusers user
Для того, чтобы можно было пользоваться USB в virtualbox из-под Ubuntu 7.10 нужно:
[ -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
#
# SUBSYSTEM=="usb_device", MODE="0664" SUBSYSTEM=="usb_device", GROUP="vboxusers", MODE="0664"
sudo /etc/init.d/mountdevsubfs.sh stop sudo /etc/init.d/mountdevsubfs.sh start
Внимание! Для Ubuntu 7.04 действия этого раздела выполнять не нужно!
Я пробовал разные варианты. Какие-то были лучше, какие-то хуже. Остановился же я на следующем:
#!/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, меня это устраивает. Можно усовершенствовать скрипт, но мне пока не нужно. :)
update-rc.d bridge.sh defaults
Вот общем-то и всё. Желаю удачи!