= 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 =

[[https://www.debian.org/distrib/|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 ===

{{attachment:01-Example-OS-Install-Screen.png|Debian Buster Install Screen|align="middle"}}

=== 02) Example Guest OS Grub2 Boot Screen ===

{{attachment:02-Example-Guest-OS-Grub2-Boot-Screen.png|Installed Debian Buster Grub2 Boot Screen|align="middle"}}

== 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:

{{{
#!/bin/sh

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.