#установить debootstrap
pacman -S debootstrap

#сделать рутфс в директорию rootfs для дистрибутива Devuan Jessie x86_64, включая дополнительные пакеты (devuan-keyring,linux-image-amd64,bash-completion,vim)
sudo debootstrap —arch amd64 —include=devuan-keyring,linux-image-amd64,bash-completion,vim jessie rootfs http://auto.mirror.devuan.org/merged

#некоторые настройки для свеже «забутстрапленной» системы
#монтируем tmfs для того чтобы корректно работал apt-get в rootfs/etc/fstab
tmpfs /tmp tmpfs rw 0 0

#если мы хотим паравиртуализировать дефолтное ядро из дистрибутива, то добавляем модули virtio паравиртуализации в rootfs/etc/initramfs
virtio_console
virtio_ring
virtio
9pnet_virtio
9pnet
9p
# и выполняем chroot в рутфс дистрибутива
chroot rootfs
# настраиваем PATH
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
# обновляем дефолтный инитрд /boot/initrd.img-3.16.0-4-amd64
update-initramfs -u
# выходим из чрута

# в файле rootfs/etc/inittab
#добавляем поддержку для работы по ttyS0 после загрузки самого ядра
T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100 #можно поставить скорость 115200
#или поддержку для работы по virtio-console (более быстрый вариант)
H0:23:respawn:/sbin/getty -L hvc0 9600 vt100

#сборка ведра для гостя

git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
make defconfig
make menuconfig
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO=y
CONFIG_VIRTIO_CONSOLE=y
CONFIG_9P_FS=y
CONFIG_9P_VIRTIO=y
#for debugging from qemu with option ${GDBPORT:+-gdb tcp::$GDBPORT}

CONFIG_GDB_SCRIPTS=y

#готовим qemu
git clone https://github.com/qemu/qemu.git
#смотрим тэги
git tag
# и выбираем стабильный (с созданием ветки), например, v2.8.0 (на момент написания заметки):
git checkout v2.8.0 -b stable_tag_v2.8.0
# build qemu
./configure —target-list=x86_64-softmmu —enable-debug —enable-debug-info —enable-virtfs
make
# run qemu
qemu/x86_64-softmmu/qemu-system-x86_64

#скрипт по запуску qemu
#!/bin/sh

. $PWD/tapm.sh

#installed in system
#QEMU=qemu-system-x86_64

#local build
QEMU=qemu/x86_64-softmmu/qemu-system-x86_64
GDBPORT=1234

# works with initrd only
# ROOTTAG=roottag
# without initrd should start with ‘/dev/…’
ROOTTAG=/dev/root
ROOTFS=»-fsdev local,id=fsdev0,path=$PWD/rootfs,security_model=passthrough
-device virtio-9p-pci,fsdev=fsdev0,mount_tag=$ROOTTAG»

BR=br1
TAP=tap1
MAC=00:02:00:00:01:04
NETWORK=»-device virtio-net-pci,mac=$MAC,netdev=netdev_public
-netdev tap,id=netdev_public,ifname=$TAP,script=no»

#vhost enable:
# -netdev tap,id=netdev_public,ifname=$TAP,script=no,vhost=on»

#defult dist devuan kernel
#KERNEL=$PWD/rootfs/boot/vmlinuz-3.16.0-4-amd64
#my kernel
#KERNEL=/home/er0p/work/kernel4iplir/cl_netfilter_kernel/linux-3.10.92/arch/x86_64/boot/bzImage
KERNEL=$PWD/linux/arch/x86_64/boot/bzImage
#INITRD=$PWD/rootfs/boot/initrd.img-3.16.0-4-amd64
#vitio-console
APPEND=»root=$ROOTTAG rw rootfstype=9p rootflags=trans=virtio,version=9p2000.L,msize=$((128 * 1024)) console=hvc0″
#ttyS0 console
#APPEND=»root=$ROOTTAG rw rootfstype=9p rootflags=trans=virtio,version=9p2000.L,msize=$((128 * 1024)) console=ttyS0″

tapm_up $TAP $BR

#sudo $QEMU \

#sudo gdb —args $QEMU \

######################################
# qemu arg for virtio-console:
# -virtioconsole mon:stdio \
# -serial none \

# qemu arg for ttyS0 console:
# -serial mon:stdio \
######################################

sudo gdb —args $QEMU \
-machine accel=kvm \
-m 4G \
-smp 4 \
-serial mon:stdio \
-nographic \
-vga none \
${GDBPORT:+-gdb tcp::$GDBPORT} \
${KERNEL:+-kernel $KERNEL} \
${INITRD:+-initrd $INITRD} \
${APPEND:+-append «$APPEND»} \
$ROOTFS \
$LINUXFS \
$NETWORK \
«$@»

tapm_down $TAP