## Graphical Installation ## Bellow instructions are for creating a kvm guest OS(Debian) on Debian. Though the examples are based on Debian it should be same for all other distro. * Check if your CPU support virtualization: `grep -E --color=auto 'vmx|svm|0xc0f' /proc/cpuinfo` * Check if the host kernel support KVM: `grep CONFIG_KVM /boot/config-$(uname -r)` * Install necessary packages for QEMU/KVM: `sudo apt install qemu-system` * Create a qcow2 image for the guest: `qemu-img create -f qcow2 virtualdebian.img 50G` * Boot ISO to install the guest OS: (You need to run this as root for networking to work) ``` sudo qemu-system-x86_64 -enable-kvm -m RAM_IN_MB -smp NUM_CPU -drive file=virtualdebian.img -cdrom debian.iso -boot d ``` * Install guest OS. * Now run the guest OS with qemu whenever you want: ``` sudo qemu-system-x86_64 -enable-kvm -m 2048 -cpu host -smp 2 -drive file=virtualdebian.img ``` * If you want to share a folder from host to guest: 1. Run the guest with this command: ``` sudo qemu-system-x86_64 -enable-kvm -m 2048 -cpu host -smp 2 -drive file=virtualdebian.img,if=virtio -fsdev local,security_model=passthrough,id=fsdev0,path=/path/to/host/folder -device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=hostshare ``` 2. In guest mount the host folder: `mount -t 9p -o trans=virtio,version=9p2000.L hostshare /path/to/mount/point` * A better alternative for sharing file would be [virtiofs](https://virtio-fs.gitlab.io/index.html): Needs testing. ## CLI installation (-nographic) ## Debian netinst doesn't show any output if qemu is run with -nographic option while installing from ISO. You have to use `-kernel /path/to/kernel` with `-append "console=ttyS0"`. Other Solutions: * https://sites.google.com/a/palatin.fr/pierre/entries/debian-netinst-qemu * https://superuser.com/a/1311906/460620 * https://levelup.gitconnected.com/probably-the-simplest-way-to-install-debian-ubuntu-in-qemu-2db6afde27ef * https://serverfault.com/questions/976140/how-do-i-boot-the-debian-10-image-with-qemu-kvm Once the installation is done you can start the VM normally. ## ARM ## #### Running Ubuntu on Qemu ### * Download Ubuntu ARM cloud image: http://cloud-images.ubuntu.com/ * Create UEFI image for qemu: ``` sudo apt-get install qemu-efi cp /usr/share/qemu-efi-aarch64/QEMU_EFI.fd flash0.img truncate -s 64M flash0.img truncate -s 64M flash1.img ``` * Run Ubuntu cloud image with QEMU: ``` qemu-system-aarch64 -m 8G -cpu cortex-a57 -M virt,gic-version=max -smp 16 -nographic -drive if=pflash,format=raw,file=flash0.img,readonly -drive if=pflash,format=raw,file=flash1.img -drive if=none,file=focal-server-cloudimg-arm64.img,id=hd0 -device virtio-blk-device,drive=hd0 ``` * [Installing Debian on QEMU’s 64-bit ARM “virt” board](https://web.archive.org/web/20220704230751/https://translatedcode.wordpress.com/2017/07/24/installing-debian-on-qemus-64-bit-arm-virt-board/) * [Build an aarch64 UEFI image for QEMU](http://www.xryan.net/p/212) * [Ubuntu ARM on Qemu](https://wiki.ubuntu.com/ARM64/QEMU) * [How to install Ubuntu Server for Arm in a QEMU aarch64 virtual machine](https://lanyaplab.com/index.php/2020/06/08/how-to-install-ubuntu-server-for-arm-in-a-qemu-aarch64-virtual-machine/) * [QEMU ARM limit of 123 cores ](https://futurewei-cloud.github.io/ARM-Datacenter/qemu/qemu-arm-about-the-123-core-limit/): Use GIC to scale more than 8 processors ## Miscellaneous ## * Audio: -soundhw ac97 * Increase Resolution: `-vga virtio` * Better Graphics Support: https://www.linux-kvm.org/page/SPICE * [How to mount a qcow2 disk image](https://gist.github.com/shamil/62935d9b456a6f9877b5) * [Changing the password Qemu kvm qcow2 ](https://access.redhat.com/discussions/664843): Uses tool `guestfish` but simply mounting the image and editing /etc/shadow directly with a text editor will work too. ## Compiling the kernel ## * https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/README?id=refs/tags/v4.3.3 * https://www.linux.com/topic/desktop/how-compile-linux-kernel-0/ * https://wiki.archlinux.org/title/Kernel/Traditional_compilation * https://unix.stackexchange.com/questions/253245/what-does-make-localmodconfig-do * https://tldp.org/HOWTO/pdf/Modules.pdf * [How to debug kernel using QEMU and aarch64 VM](https://futurewei-cloud.github.io/ARM-Datacenter/qemu/aarch64-debug-kernel/) **Quick Configure, build and install** ``` make olddefconfig make localmodconfig make -j$(nproc) make -j$(nproc) bzImage # If you want to create kernel bzImage make modules make modules_install make install ``` ## Running the compiled kernel and Debugging ## * [Direct Linux Boot](https://qemu-project.gitlab.io/qemu/system/linuxboot.html) * [Prepare the environment for developing Linux kernel with qemu.](https://medium.com/@daeseok.youn/prepare-the-environment-for-developing-linux-kernel-with-qemu-c55e37ba8ade) * [Booting a Custom Linux Kernel in QEMU and Debugging It With GDB](http://nickdesaulniers.github.io/blog/2018/10/24/booting-a-custom-linux-kernel-in-qemu-and-debugging-it-with-gdb/) ## Automating QEMU ### * [qemu guest automation](https://stackoverflow.com/questions/3146013/qemu-guest-automation) * [Is it possible to script qemu?](https://stackoverflow.com/questions/5271647/is-it-possible-to-script-qemu) * [How to Setup QEMU Output to Console and Automate Using Shell Script](https://fadeevab.com/how-to-setup-qemu-output-to-console-and-automate-using-shell-script/#binariesusedinexamples) * [Automating the Creation of QEMU Archlinux Images from Scratch](https://blog.stefan-koch.name/2020/05/31/automation-archlinux-qemu-installation) * [Automating Debian install in QEMU](https://sigmaris.info/blog/2019/04/automating-debian-install-qemu/) ## General References ## 1. https://wiki.debian.org/KVM 2. https://wiki.debian.org/QEMU 3. https://wiki.archlinux.org/index.php/KVM 4. https://wiki.archlinux.org/index.php/QEMU 5. https://wiki.gentoo.org/wiki/QEMU/Options 6. https://www.tauceti.blog/posts/qemu-kvm-share-host-directory-with-vm-with-virtio/ 7. [QEMU Disk Images](https://qemu-project.gitlab.io/qemu/system/images.html)