Установка QEMU на Debian. Решение проблемы с сетью. Подключение USB.

Про установку QEMU было написано чуть ранее

Создание образа жесткого диска

Современные вычислительные машины, даже виртуальные не могут существовать без жесткого диска. Поэтому создать образ HD совершенно необходимо.

$ qemu-img create 192.168.0.32.img 2048M
Formatting '192.168.0.32.img', fmt=raw, size=2097152 kB

Данная команда создаст «сырой» образ жеского диска размером 2 Гигабайта. Для голой оси без кедов или гнома этого должно хватить.

Подготовка хост-машины

Работа с USB

Пришла на помощь вот эта статья. Тут лишь выжимка для себя.

Выберем свободное usb-гнездо для истязания и воткнём туда флешку.

Узнаем его адрес

#dmesg|tail
...
usb 5-1: new high speed USB device using ehci_hcd and address 10
...

Это 10. Теперь, зная адрес, узнаем его ID

# lsusb
Bus 005 Device 010: ID 3538:0042 Power Quotient International Co., Ltd Cool Drive U339 Flash Disk
Bus 005 Device 006: ID 1307:0330 Transcend Information, Inc.
Bus 005 Device 001: ID 0000:0000
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 004: ID 04e8:3292 Samsung Electronics Co., Ltd
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 005: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem
Bus 001 Device 001: ID 0000:0000

Для адреса 10 ID=3538:0042

Находим его среди /proc/bus/usbю У меня он нашелся тут /proc/bus/usb/005/010. Брутально ставим ему права 777

chmod 777 /proc/bus/usb/005/010

Не менее брутально обеспечиваем выставление прав при загрузке, прописав в эту строчку в /etc/rc.local

Создание сетевого моста

Тут расписано более подробно. Ниже некий готовый и упрощенный алгоритм.

Установим необходимые для работы пакеты

#apt-get install bridge-utils vde2

Поправим файл /etc/network/interfaces чтобы при старте системы создавался необходимый мост

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 0.0.0.0

auto br0
iface br0 inet static
address 192.168.0.1
netmask 255.255.255.0
bridge_ports eth0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off

При загрузке системы на сетевом устройстве eth0 будет создаваться мост с IP 192.168.0.1

Если адреса раздаются по DHCP, то /etc/network/interfaces будет выглядеть так:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 0.0.0.0

auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off

Добавление TAP-интерфейса

/usr/sbin/tapup

#!/bin/sh

#Script for creating new tap interface and appending it to the existing bridge
#Usage: tapup [ UID_of_interface_owner ]
#(c) Evgeniy Shumilov (corpse@permlug.org)

if [ -n "$1" ]; then

if [ -n "$2" ]; then
iface=$( vde_tunctl -b -u $2 )
else
iface=$( vde_tunctl -b )
fi

chown root:qemu /dev/net/tun
/sbin/ifconfig $iface 0.0.0.0 promisc up
brctl addif $1 $iface
echo $iface
sleep 2

fi

/usr/sbin/tapdown

#!/bin/sh

#Script to negate tap interface
#Usage: tapdown

if [ -n "$1" ]; then
vde_tunctl -d $1
fi

Установка прав, создание групп

#addgroup qemu
#adduser $USER qemu
#cd /usr/sbin/
#chown root:qemu tapup tapdown
#chmod 750 tapup tapdown
#chmod +s tapup tapdown

/etc/sudoers

%qemu ALL=NOPASSWD:/usr/sbin/tapup *
%qemu ALL=NOPASSWD:/usr/sbin/tapdown *

/etc/qemu-ifup

#!/bin/sh

Установочный скрипт

Чтобы каждый раз не набирать все параметры запуска qemu создам вспомогательный скрипт install_deb.sh следующего содержания:

#!/bin/sh
IFACE = $(sudo /usr/sbin/tapup br0 $USER);
qemu \
    -localtime                    \
    -usb                          \
    -usbdevice   host:3538:0042   \
    -cpu         pentium3         \
    -M           pc               \
    -m           512              \
    -boot        d                \
    -net         nic              \
    -net         tap,ifname=$IFACE\
    -cdrom       /mnt/storage/iso/debian_lenny.iso \
    -hda         /mnt/storage2/qemu/hd/192.168.0.32.img
sudo /usr/sbin/tapdown $IFACE

Разберём параметры

  • -cdrom /mnt/storage/iso/debian_lenny.iso — в качестве CD-привода будет использоваться образ Debian Etch, который случайно у меня завалялся.
  • -boot d — загружаться с CDROM
  • -hda /mnt/storage2/qemu/hd/192.168.0.64.img — использовать этот обрас в качестве жесткого диска
  • -k ru — язык клавиатуры — русский
  • -localtime — использовать время с часов хост-машины
  • -usb -usbdevice host:3538:0042 — активизировать usb-драйвер и подцепить его к host:3538:0042 usb-устройству хост-машины
  • -cpu pentium3 — тип процессора эмулируемой машины — Pentium3
  • -M pc — системная архитектура — PC
  • -m 512 — выделить под ОЗУ эмулируемой машины 512 мегабайи физической памяти
  • -net tap,ifname=$IFACE — создаём виртуальный сетевой интерфейс и подключаем к TAP-интерфейсу, созданному скриптом tapup

Установка

В установке на QEMU отличий мало. Единственное что, при установке сети я указал 192.168.0.32(DNS — 83.149.19.125 — полюбившийся мне, шлюз — 192.168.0.1, уже настроенный). Установку проведём в самой минимальной конфигурации.

Установка Debian

Установка Debian

Запуск

Настройка после установки

Создание скрипта «первого запуска»

Для запуска этой виртуальной машины состряпаем ещё один вспомогательный скрипт, который отличается от установочного только устройством, с которого будет идти загрузка На «CD-приводе» оставим висеть тот же образ Debian-дистрибутива.

#!/bin/sh
IFACE = $(sudo /usr/sbin/tapup br0 $USER);
qemu \
    -localtime                    \
    -usb                          \
    -usbdevice   host:3538:0042   \
    -cpu         pentium3         \
    -M           pc               \
    -m           512              \
    -boot        d                \
    -net         nic              \
    -net         tap,ifname=$IFACE\
    -cdrom       /mnt/storage/iso/debian_lenny.iso \
    -hda         /mnt/storage2/qemu/hd/192.168.0.32.img
sudo /usr/sbin/tapdown $IFACE

Запускаем этот скрипт и дождаемся появления командной строки

Обновление списка пакетов

Поправим файл списка репозиториев /etc/apt/sources.list, чтобы наш свежеустановленный сервер получал пакеты из сети, раскомментировав следующие строчки (или добавив)

deb http://security.debian.org/ lenny/updates main contrib
deb-src http://security.debian.org/ lenny/updates main contrib
deb http://ftp.de.debian.org/debian lenny main

Обновим спсок пакетов

#apt-get update

Установка софта первой необходимости

Установка локали

#apt-get install locales-all

Установим ssh

#apt-get install ssh

Запускаем ssh-демона

#/etc/init.d/ssh restart

Выключам машину

#halt

Запуск виртуального сервера в безграфическом режиме демона

Для этого сформируем третий запускающий скрип, добавив параметры -nographic и -daemonize

#!/bin/sh
IFACE = $(sudo /usr/sbin/tapup br0 $USER);
qemu \
    -localtime                        \
    -usb                              \
    -usbdevice   host:3538:0042       \
    -cpu         pentium3             \
    -M           pc                   \
    -m           512                  \
    -boot        d                    \
    -net         nic                  \
    -net         tap,ifname=$IFACE    \
    -nographic                        \
    -daemonize                        \
    -cdrom       /mnt/storage/iso/debian_lenny.iso \
    -hda         /mnt/storage2/qemu/hd/192.168.0.32.img
sudo /usr/sbin/tapdown $IFACE

После загрузки системы, к ней можно подключиться по ssh c хост-машины. Да и с любой другой при определённых настройках файрвола ;-).

$ ssh 192.168.0.32
user@192.168.0.32's password:
Linux template 2.6.24-1-686 #1 SMP Sat Apr 19 00:37:55 UTC 2008 i686

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sun Feb 21 01:00:32 2010 from 192.168.0.1
user@template:~$

Настройка

Скопирую получившийся образ жесткого диска в укромное место. Это у меня будет типа «шаблон» ;-)

Я собираюсь сделать на этой виртуальной машине локальный DNS, но это тема для отдельной большой статьи.

Установка и настройка локального DNS на основе bind

Полезные ссылки


Добавить комментарий