KernelNewbies:

Running Linux in a VM

Hardware Requirements

You need a system with virtualization (VT-d), at least 4GB of RAM, and 40GB of free hard drive space in order to run Linux in a VM. If you want to download and compile the kernel, you may need additional space of up to 20GB.

Download Debian

Download link to Get a recent version of Debian.

Install Qemu Virtualizer

Instructions for Debian OS

sudo apt-get install qemu-kvm qemu-system-x86

Setup Qemu

You need a space for VM either a file image or disk block.

Example with using a file for VM.

Create a 50GB qcow2 format image file for VM Note qcow2 grows in space as needed. In the start it is not 50GB in size.

qemu-img create -f qcow2 debian-vm.img 50G

Simple way to start Qemu

Get a suitable iso image file for distro installation.

qemu-system-x86_64 -enable-kvm -smp 2 -boot menu=on -m 2048m -vga std -cdrom debian-install-iso.img -hda debian-vm.img

Qemu Screenshots

01) Example OS Install Screen

Debian Buster Install Screen

02) Example Guest OS Grub2 Boot Screen

Installed Debian Buster Grub2 Boot Screen

Advanced Qemu

Create a script file qemu.sh with executable permissions:

touch qemu.sh;
chmod +x qemu.sh

Edit the qemu.sh and add lines like this:

MEM="2048m"
BOOT="menu=on"

[ ! -z "$1" ] && MEM="$1"
[ ! -z "$2" ] && BOOT="$2"

MACH="-machine q35"
CPU="-cpu host"

CDROM_IMG="/path/to/debian-install-iso.img"
HDA_IMG="/path/to/debian-vm.img"

CDROM="-cdrom ${CDROM_IMG}"
HDA="-hda ${HDA_IMG}"

VGA="-vga std"

SSH_ENABLE="hostfwd=tcp:127.0.0.1:10101-:22"

NET="-netdev user,id=n1,${SSH_ENABLE} -net nic,netdev=n1,model=virtio-net-pci"

PATH_9P="~/9p/shared"

P9="-fsdev local,id=p9d1,path=${PATH_9P},security_model=none"
P9="${P9} -device virtio-9p-pci,fsdev=p9d1,mount_tag=p9_mnt"

USB="-usb"
USB_MICE="-usbdevice tablet"

SOUNDHW="-device intel-hda,msi=auto -device hda-duplex"

qemu-system-x86_64 -enable-kvm ${MACH} ${CPU} -smp 2 -boot "${BOOT}" \
-m "${MEM}" ${CDROM} ${HDA} ${NET} ${P9} ${USB} ${USB_MICE} ${SOUNDHW} \
${VGA} -rtc base=utc

Put qemu.sh in PATH directory if needed. E.g. ~/bin.

Above script sets up network, usb, sound, video, 9p, and ssh access to Qemu VM Guest OS.

SSH Access

Install ssh (rsync) in both Host and Guest OS

Debian/Ubuntu install instructions:

apt-get install ssh rsync

For SSH access to Guest OS run:

ssh -p 10101 guest_user@127.0.0.1

9P Access for Host and Guest

9p can be used for easy transfer of files to and from host and guest OS.

Create 9p shared directory in host:

mkdir ~/9p/shared

And in guest load the 9p module if neccessary.

modprobe 9p

And run in guest to create 9p shared directory and to mount 9p filesystem on it:

mkdir /tmp/shared
sudo mount -t 9p -o trans=virtio 9p_mnt /tmp/shared

Now put things in host 9p directory and see it in guest 9p directory and vice-versa.

Some Tips

While running Qemu Virtualizer you can press:

Ctrl+Alt+F for Fullscreen view and back.

Ctrl+Alt+G for mouse grab and release.

KernelNewbies: OutreachyfirstpatchAlt_qemu_draft (last edited 2020-04-07 10:16:48 by veera)