QEMU-KVM
- 第 1 類與第 2 類 Hypervisor - Hypervisor 類型之間的區別 - AWS
- GitHub - 0voice/kernel_awsome_feature: 深入研究 kvm,ceph,fuse特性
- 什麼是 KVM? - 說明 Kernel 虛擬機器 - AWS
- :star:KVM 架構跟原理
- KVM 本身只負責 CPU / memory 層面的虛擬化,加上 QEMU 或其他工具模擬 I/O 與週邊裝置,才能形成完整的虛擬機環境
- QEMU vs KVM: Key Differences in Virtualization | Vinchin Backup
- 了解使用 QEMU 和 Libvirt 實現 KVM 虛擬化
- 有一張簡單的架構圖, 說明proxmax API也是基於QEMU-KVM; libvirt Virtualization AP可以跨多個虛擬化技術,QEMU-KVM, Xen, vSphere, Hype-V
- KVM: Linux 虛擬化基礎建設 - HackMD
- How to Create Virtual Machines in Linux Using KVM (Kernel-based Virtual Machine) - Part 1
- Ubuntu安裝QEMU/KVM和Virt Manager虛擬機管理員 · Ivon的部落格
- Linux KVM啟用巢狀虛擬化,在虛擬機裡面跑虛擬機 · Ivon的部落格
- 免Mac電腦,OSX-KVM讓你在Linux系統安裝macOS的QEMU虛擬機 · Ivon的部落格
KVM QEMU virtio(para virtualization)
KVM/QEMU KVM/virtio (para virtualization)
Intel VT-x AMD AMD-V
three mode - user - kernel - guest
libvirt
# default image dir
/var/lib/libvirt/images
# log
/var/log/libvirt/qemu/Window11-clone1.log
# QEMU driver configuration file
/etc/libvirt/qemu.conf
# config xml
/etc/libvirt/qemu/
# Runtime configurations and snapshots
/var/lib/libvirt/qemu/
# default OVMF_VARS for EFI Variables
/var/lib/libvirt/qemu/nvram/
EDITOR=vim virsh edit Window11-clone1
# Restart services
sudo systemctl restart libvirtd
sudo systemctl restart qemu-kvm
journalctl -u libvirtd
# check what firmware files QEMU can find
/usr/local/bin/qemu-system-x86_64 -L help
# Check libvirt daemon version
libvirtd --version
# Or check client library version
virsh version
# Verify new version
qemu-system-x86_64 --version
QEMU
- Hosts/Linux - QEMU
- System Emulation — QEMU documentation
- Linux系統QEMU/KVM指令教學,安裝UEFI開機的虛擬機 · Ivon的部落格
- Install QEMU on Ubuntu 22.04 - arcsin2's blog
- for self compiled qemu
- UEFI, BIOS & OVMF
sudo apt install ninja-build \
zlib1g zlib1g-dev \
libglib2.0-dev \
libspice-server-dev libspice-protocol-dev \
libusbredirhost-dev libusbredirparser-dev \
libpixman-1-dev
wget https://download.qemu.org/qemu-7.2.0.tar.xz
tar xvJf qemu-7.2.0.tar.xz
cd qemu-7.2.0
./configure --enable-kvm --enable-spice -enable-usb-redir | tee /tmp/qemu_configure.log
grep -i 'usbredir' /tmp/qemu_configure.log
make
make install
Failed to start QEMU binary /usr/local/bin/qemu-system-x86_64 for probing: libvirt: error : cannot execute binary /usr/local/bin/qemu-system-x86_64: Permission denied - libvirt for qemu | Winddoing's Notes
OR stop the apparmor to test
Virt Manager
- libvirt: virsh
- Ubuntu安裝QEMU/KVM和Virt Manager虛擬機管理員 · Ivon的部落格
- 如何備份Linux Virt Manager所建立的QEMU/KVM虛擬機映像檔 · Ivon的部落格
- Linux Virt Manager將網路設定為橋接模式,讓外網可以連線到QEMU/KVM虛擬機 · Ivon的部落格
- Spice Guest Tools用法,QEMU/KVM虛擬機自動縮放解析度、共享資料夾 · Ivon的部落格
Ubuntu
- KVM hypervisor: a beginners’ guide | Ubuntu
- Install KVM On Ubuntu 22.04 Server - OSTechNix
- 鳥哥私房菜 - 第二章、第一個虛擬機器的安裝與調整
- 在 ubuntu 實體機安裝 ubuntu VM 的流程 - HackMD
- Virtual Machine Manager | Ubuntu
- kvm virtualization - How to install Ubuntu 22.04 as GUEST in KVM - Ask Ubuntu
- Web or GUI
- Web-based interface for KVM / QEMU VM management? : r/selfhosted
- How to Install a Desktop (GUI) on an Ubuntu Server
- Managing KVM Virtual Machines with Cockpit Web Console in Linux
- Proxmox VE
if the node is the vmware vm, enable "向客體作業系統公開硬體協助虛擬化" in "硬體虛擬化"
sudo apt-get -y install bridge-utils cpu-checker libvirt-clients libvirt-daemon libvirt-daemon-system qemu qemu-kvm
sudo kvm-ok
lsmod | grep kvm
modinfo kvm
modinfo kvm_amd
systemctl status libvirtd
GUI
Web Console
sudo apt-get install cockpit cockpit-machines
# for error "sscg: command not found"
sudo apt-get install libgnutls-openssl27
sudo systemctl start cockpit
sudo systemctl status cockpit
sudo ufw allow 9090/tcp
sudo ufw reload
For Ubuntu guest
wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img
cp jammy-server-cloudimg-amd64.img /var/lib/libvirt/images/
qemu-img create -F qcow2 -b jammy-server-cloudimg-amd64.img -f qcow2 my-ubuntu-vm.img 10G
cp my-ubuntu-vm.img /var/lib/libvirt/images/
virt-install --name my-first-vm --ram 6144 --vcpus 2 --import --disk path=/var/lib/libvirt/images/my-ubuntu-vm.img,format=qcow2 --cloud-init root-password-generate=on,disable=on,meta-data=/root/meta-data,user-data=/root/user-data --os-variant ubuntu22.04 --network bridge=virbr0 --graphics vnc,listen=0.0.0.0 --console pty,target_type=serial --noautoconsole
virsh net-dhcp-leases default
meta-data
user-data - https://bugs.launchpad.net/cloud-images/+bug/2049860/comments/15
#cloud-config
ssh_pwauth: true
users:
- name: root
lock_passwd: false
hashed_passwd: $6$P2LlhzIYWXC4XyCa$JzSWM6UBQ3BNLtQXO2jKTIhkBQyNl8DuhJ6tx8kovCtiick0mXMWE6z12HGBhTzAPW0EpDglWn7j.W9XZoaBl0
- name: ubuntu
lock_passwd: false
hashed_passwd: $6$P2LlhzIYWXC4XyCa$JzSWM6UBQ3BNLtQXO2jKTIhkBQyNl8DuhJ6tx8kovCtiick0mXMWE6z12HGBhTzAPW0EpDglWn7j.W9XZoaBl0
shell: /bin/bash
sudo: ALL=(ALL) NOPASSWD:ALL
from openssl passwd -6 foo@123 :::
Redhat
- Chapter 8. Preparing and deploying a KVM Guest Image by using RHEL image builder | Red Hat Product Documentation
- 🐧Linux_RH134_09_安裝RHEL - HackMD
For redhat guest
- fetch Red Hat Enterprise Linux x.x KVM Guest Image
- example:
rhel-8.8-x86_64-kvm.qcow2
- example:
- Creating a virtual machine from a KVM guest image
meta-data
user-data
#cloud-config
ssh_pwauth: true
users:
- name: root
lock_passwd: false
hashed_passwd: $6$P2LlhzIYWXC4XyCa$JzSWM6UBQ3BNLtQXO2jKTIhkBQyNl8DuhJ6tx8kovCtiick0mXMWE6z12HGBhTzAPW0EpDglWn7j.W9XZoaBl0
- name: rhel
lock_passwd: false
hashed_passwd: $6$P2LlhzIYWXC4XyCa$JzSWM6UBQ3BNLtQXO2jKTIhkBQyNl8DuhJ6tx8kovCtiick0mXMWE6z12HGBhTzAPW0EpDglWn7j.W9XZoaBl0
shell: /bin/bash
sudo: ALL=(ALL) NOPASSWD:ALL
cp rhel-8.8-x86_64-kvm.qcow2 /var/lib/libvirt/images/
qemu-img create -F qcow2 -b rhel-8.8-x86_64-kvm.qcow2 -f qcow2 my-rhel-vm.img 20G
mv my-rhel-vm.img /var/lib/libvirt/images/
method 1: use cloud-init.iso
genisoimage -output cloud-init.iso -volid cidata -joliet -rock user-data meta-data
cp cloudinitiso/cloud-init.iso /var/lib/libvirt/images/
virt-install \
--memory 4096 \
--vcpus 4 \
--name myvm \
--disk /var/lib/libvirt/images/my-rhel-vm.img,device=disk,bus=virtio,format=qcow2 \
--disk /var/lib/libvirt/images/cloud-init.iso,device=cdrom \
--os-variant rhel8.8 \
--virt-type kvm \
--graphics vnc,listen=0.0.0.0 \
--console pty,target_type=serial \
--noautoconsole \
--import
method 2: use --cloud-init argument
virt-install \
--memory 4096 \
--vcpus 4 \
--name myvm2 \
--disk /var/lib/libvirt/images/my-rhel-vm.img,device=disk,bus=virtio,format=qcow2 \
--cloud-init root-password-generate=on,disable=on,meta-data=/root/cloudinitiso/meta-data,user-data=/root/cloudinitiso/user-data \
--os-variant rhel8.8 \
--virt-type kvm \
--graphics vnc,listen=0.0.0.0 \
--console pty,target_type=serial \
--noautoconsole \
--import
command
- Ubuntu Cloud Images - the official Ubuntu images for public clouds, Openstack, KVM and LXD
- 第 4 章 配置 cloud-init | Red Hat Product Documentation
- Creating a VM using Libvirt, Cloud Image and Cloud-Init | Sumit’s Space
- Use Ubuntu Server Cloud Image to Create a KVM Virtual Machine with Fixed Network Properties | by Yu Ping | Medium
- Cloud Images with KVM (cloud-init) | 夢想家
- How to Install Ubuntu 22.04 Virtual Machine on KVM
- virt-install --cloud-init support | Cole Robinson
network
- libvirt: Virtual Networking
- KVM Host Networking Configuration Choices - IBM Documentation
- kernel_awsome_feature/KVM虚拟机网络管理实战.md
- Bridged network — libvirt Networking Handbook — Jamie Nguyen
- How to set up a network bridge for virtual machine communication | Enable Sysadmin
- 設定 Ubuntu 下 KVM 的 Bridge Networking » j7 碎唸人生
- Set up Network Bridge on Ubuntu 22.04 - Full Guide - OrcaCore
- 將Linux的QEMU/KVM網路設定為橋接模式,讓外網可以連線到虛擬機 · Ivon的部落格
- How to Connect KVM VM to Host Network? – GetLabsDone
- Setting up UEFI HTTP boot with libvirt | Enable Sysadmin