Original
Перевод: Сгибнев Михаил
Введение
QEMU известен как свободная альтернатива VMware, позволяющая пользователям запускать
виртуальные PC на PC. Для большинства остается неизвестным тот факт, что помимо
эмуляции архитектуры x86, возможна эмуляция архитектур AMD64, Sparc, MIPS, PPC и ARM.
В случае архитектуры ARM, QEMU обеспечивает удобную среду разработки приложений для встраиваемых систем.
В этой статье рассматривается, как настроить Debian/ARM под управлением QEMU, с учетом того, что
корневой системой также является Debian.
Так как QEMU arm не имеет необходимости эмулировать IDE или SCSI,
нужно установить сервер на экспортируемом разделе NFS.
Подготовка корневого сервера
Первым делом установим необходимые пакеты:
host# apt-get qemu vde nfs-kernel-server debootstrap
debootstrap позволяет создавать базовые системы Debian или Ubuntu, а также
является простым способом создания chroot и виртуальных машин.
VDE является эмулятором сети,
также известный как user mode linux uml_net, позволяющий гостевой
QEMU-машине соединиться с корневой системой через интерфейс tap.
Убедитесь, что ядро корневой системы собрано с поддержкой "Universal TUN/TAP device driver",
эта опция конфигурации называется "TUN". Если вы предпочитаете использовать подключаемые модули, то есть хороший шанс
обнаружить необходимый модуль под именем 'tun.o'.
Как только вы убедились в том, что ваше ядро поддерживает tun, внесите следущие изменения в
/etc/network/interfaces, чтобы обеспечить поддержку сети :
auto tap0
iface tap0 inet static
address 10.1.6.1
netmask 255.255.255.0
network 10.1.6.0
broadcast 10.1.6.255
vde-switch vde-net
Убедитесь в том, что и вы и /dev/net/tun являетесь членом группы vde-net, а затем, поднимите интерфейс:
host# ifup tap0
Вам необходимо место для установки дострибутива Debian, так же учтите то, что вам потребуется место для
ваших разработок. В принципе, я считаю достаточным 300 Мб. Я разместил все это хозяйство в каталоге /nfs/share/arm/.
Теперь запустите debootstrap для того, чтобы скачать и установить дестрибутив Debian/arm, а затем
скопируйте несколько недостающих файлов:
host# mkdir /nfs/share/arm
host# debootstrap --foreign --arch arm etch /nfs/share/arm
host# cd /nfs/share/arm
host# cp /etc/passwd etc/passwd
host# cp /etc/shadow etc/shadow
host# cp /etc/group etc/group
host# echo "proc /proc proc defaults 0 0" > etc/fstab
host# echo "10.1.6.1:/nfs/share/arm / nfs defaults 0 1" >> etc/fstab
Опция --foreign команды debootstrap указывает на то, что необходимо выполнить только
первую часть процесса установки. Так как мы загружаем Debian архитектуры отличной от той,
какая установлена на корневой машине, мы не можем запускать в данном chroot сценарии
продолжения установки.
На корневой машине мы также должны настроить и запустить сервер NFS. Хочу сразу предупредить,
что эмулируемая система будет работать очень медленно.
Расшариваем новый каталог через NFS и добавляем соответствующую запись /etc/exports:
/nfs/share/arm 10.1.6.0/24(rw,no_root_squash,sync)
Экспортируем файловую систему:
host# exportfs -a
Скачайте ядро arm-linux, оно поставляется в комплекте arm-test и взять его можно
здесь.
Положите arm-linux zimage в /usr/local/etc/images/zImage.arm
и затем создайте сценарий /usr/local/bin/start-qemu-arm следующего содержания:
#!/bin/sh
console="ttyAMA0" # serial console
nfsserver="10.1.6.1" # address of NFS server
nfsdir="/nfs/share/arm" # exported share where debian/arm is installed
address="10.1.6.50" # address for guest server
gateway="10.1.6.1" # default gateway
netmask="255.255.255.0" # subnet mask
hostname="arm.home" # hostname for guest server
device="eth0" # interface that guest server will use
mem=256 # memory for guest server in Mb
tap="/var/run/vde/tap0.ctl" # vde tap socket
kernel="/usr/local/etc/images/zImage.arm" # arm kernel
nfsopts="rsize=8192,wsize=8192,hard,intr,tcp,nolock" # nfs options
consoleopt="console=$console"
nfsrootopt="nfsroot=$nfsserver:$nfsdir,$nfsopts"
ipopt="ip=$address::$gateway:$netmask:$hostname:$device"
init=""
if [ "x$1" == "xsingle" ]
then
init="init=/bin/bash"
fi
vdeq qemu-system-arm -sock $tap -m $mem \
-kernel $kernel -nographic \
-append "$consoleopt root=/dev/nfs $nfsrootopt $ipopt $init"
Откорректируйте значения согласно вашим данным.
Конфигурирование гостевой системы
Теперь запускаем наш новый сервер arm в однопользовательском режиме,
при этом, не обязательно обладать привилегиями пользователя root:
host$ /usr/local/bin/start-qemu-arm single
Гостевой сервер должен загрузиться и запусить оболочку bash.
Файловая система будет примонтирована в режиме только для чтения и необходимо повторно примонтировать
ее в режиме чтения/записи:
guest# mount -n -o remount,rw /
guest# mount /proc
Теперь запускаем второй этап debootstrap и завершаем установку:
guest# cd /
guest# ./debootstrap/debootstrap --second-stage
Снова повторюсь, этот процесс потребует времени, так как эмулятор не особенно быстр.
После завершения установки отредактируйте такие файлы, как /etc/hostname и /etc/resolv.conf, также установите ssh:
guest# apt-get install ssh
После этого гостевую машину можно отключать. Для этого достаточно воспользоваться командой kill и убить
процесс qemu, так как ее файловая система установлена с сервера NFS, нет никакой необходимости в корректном завершении работы.
Делаем образцово-показательный запуск гостевой машины:
host$ /usr/local/bin/start-qemu-arm
После завершения загрузки гостевая машина будет доступна по протоколу ssh и адресу 10.1.6.50.