You are here: Home / Projects / EVE / Развертывание ВМ для запуска stage1-xen rkt

Развертывание ВМ для запуска stage1-xen rkt

by Petr Fedchenkov last modified Feb 03, 2020 10:49 AM

Установка выполняется с использованием virt-manager (apt install virt-manager) на хостовой ОС Ubuntu 18.04 Desktop.

  • Скачать iso Ubuntu 18.04 Server.
  • Создать ВМ с использованием virt-manager, установить RAM не менее 3 ГБ, создать диск не менее 20ГБ, активировать опцию "Customize configuration before install" на последнем шаге создания
  • В появившемся окне дополнительных настроек выбрать чипсет i440FX (вместо Q35), нажать кнопку "Apply", в разделе "Video QXL" выбрать Model "VGA" (вместо QXL), нажать кнопку "Apply", удалить устройства "Channel spice", "Channel qemu-ga", в разделе "Display Spice" выбрать Type "VNC server" (вместо Spice server), нажать кнопку "Apply", нажать кнопку "Begin Installation"
  • Произвести штатную установку (записать выданный по DHCP адрес для дальнейшего подключения, включить Open SSH, остальное без изменений)
  • Подключиться через ssh с хостовой машины (ssh имя_созданного_при_установке_пользователя@ip_полученный_при_установке). Все дальнейшие дествия производить от пользователя root (sudo -i).
  • Выполнить (для скачивания нужных проектов и сбоки xen):
apt update
apt upgrade -y
snap install --classic go 
apt-get install -y git build-essential python-dev gettext uuid-dev libncurses5-dev libyajl-dev libaio-dev pkg-config libglib2.0-dev libssl-dev libpixman-1-dev bridge-utils wget libfdt-dev bin86 bcc liblzma-dev iasl libc6-dev-i386 libglib2.0-dev libpixman-1-dev libcap-dev libattr1-dev automake libacl1-dev libsystemd-dev busybox-static jq libcap-ng-dev libelf-dev
cd /root
git clone -b stable-4.13 git://xenbits.xen.org/xen.git
git clone git://git.qemu.org/qemu.git
git clone https://github.com/rkt/rkt.git
git clone https://github.com/rkt/stage1-xen.git
cd xen
./configure --prefix=/usr --with-system-qemu=/usr/lib/xen/bin/qemu-system-i386 --disable-stubdom --disable-qemu-traditional --disable-rombios
make -j4 PYTHON_PREFIX_ARG=
make install PYTHON_PREFIX_ARG=
update-rc.d xencommons defaults
echo 'GRUB_CMDLINE_XEN_DEFAULT="dom0_mem=1024M,max:1024M"'>>/etc/default/grub
sed -i 's/GRUB_DEFAULT=[0-9]*/GRUB_DEFAULT=2/g' /etc/default/grub
sed -i 's/GRUB_TIMEOUT_STYLE=.*/GRUB_TIMEOUT_STYLE=menu/g' /etc/default/grub
sed -i 's/GRUB_TIMEOUT=[0-9]*/GRUB_TIMEOUT=10/g' /etc/default/grub
update-grub
reboot now
  • Дождаться завершения перезагрузки, подключиться по SSH и выполнить (для сборки qemu):
cd /root/qemu
export DIR=/root/xen
./configure --enable-xen --target-list=i386-softmmu \
                --extra-cflags="-I$DIR/tools/include \
                -I$DIR/tools/libs/toollog/include \
                -I$DIR/tools/libs/evtchn/include \
                -I$DIR/tools/libs/gnttab/include \
                -I$DIR/tools/libs/foreignmemory/include \
                -I$DIR/tools/libs/devicemodel/include \
                -I$DIR/tools/libxc/include \
                -I$DIR/tools/xenstore/include \
                -I$DIR/tools/xenstore/compat/include" \
                --extra-ldflags="-L$DIR/tools/libxc \
                -L$DIR/tools/xenstore \
                -L$DIR/tools/libs/evtchn \
                -L$DIR/tools/libs/gnttab \
                -L$DIR/tools/libs/foreignmemory \
                -L$DIR/tools/libs/call \
                -L$DIR/tools/libs/devicemodel \
                -Wl,-rpath-link=$DIR/tools/libs/toollog \
                -Wl,-rpath-link=$DIR/tools/libs/evtchn \
                -Wl,-rpath-link=$DIR/tools/libs/gnttab \
                -Wl,-rpath-link=$DIR/tools/libs/call \
                -Wl,-rpath-link=$DIR/tools/libs/foreignmemory \
                -Wl,-rpath-link=$DIR/tools/libs/call \
                -Wl,-rpath-link=$DIR/tools/libs/devicemodel" \
                --disable-kvm --enable-virtfs
make -j4
make install
cp i386-softmmu/qemu-system-i386 /usr/lib/xen/bin/
update-rc.d xencommons defaults
  • Выполнить (для сборки rkt):
cd /root/rkt
./autogen.sh
./configure --enable-sdjournal=no --disable-tpm --with-stage1-flavors=host
make
cp build-rkt*/target/bin/rkt /usr/sbin
  • Выполнить (для сборки stage1-xen):
cd /root/stage1-xen
wget https://raw.githubusercontent.com/lf-edge/eve/master/pkg/rkt-stage1/0001-Go-12-upgrade.patch
wget https://raw.githubusercontent.com/lf-edge/eve/master/pkg/rkt-stage1/0003-rkt-seed-xl.patch
wget https://raw.githubusercontent.com/lf-edge/eve/master/pkg/rkt-stage1/0004-Adding-STAGE1_XL_OPTS-and-fixing-one-nit.patch
wget https://raw.githubusercontent.com/lf-edge/eve/master/pkg/rkt-stage1/0006-Enable-local-networking-in-containers.patch
wget https://raw.githubusercontent.com/lf-edge/eve/master/pkg/rkt-stage1/0007-Set-up-environment-for-the-stage2-container.patch
wget https://gist.githubusercontent.com/giggsoff/9a6e57265279bce158ebbc2f60c29577/raw/9448cf52259b79d4ce53b21599be36357136e0bd/0008-Fix-dir-for-stage1.patch
for p in *.patch ; do patch -p1 < "$p" ; done
cp /bin/busybox /bin/busybox.static
export GOPATH=/root/go
mkdir -p /root/go/src
bash build.sh
cp stage1-xen.aci /root/
cp stage1-xen.aci /usr/sbin/
  • Перезагрузить ВМ, подключиться по ssh
  • Выполнить (для проверки работоспособности):
STAGE1_XL_OPTS=-p rkt --insecure-options=image run docker://alpine --stage1-path=/root/stage1-xen.aci
xl list