# KVM/QEMU

#### 簡介

QEMU為Fabrice Bellard開發的開源硬體模擬器軟體，支援模擬x86、ARM、SPARC、RISC-V、MIPS各種架構的電腦。

Home: [QEMU](https://www.qemu.org/)

#### Installation

- [Ubuntu安裝QEMU/KVM和Virt Manager虛擬機管理員 · Ivon的部落格 (ivonblog.com)](https://ivonblog.com/posts/ubuntu-virt-manager/)
- [How to Install and Use Qemu on Ubuntu (itsfoss.com)](https://itsfoss.com/qemu-ubuntu/)
- [EmuGUI ＋ QEMU，Windows系統安裝虛擬機軟體 · Ivon的部落格 (ivonblog.com)](https://ivonblog.com/posts/qemu-on-windows/)
- [Setting Up Virtual Machines with QEMU, KVM, and Virt-Manager on Debian/Ubuntu - LinuxConfig](https://linuxconfig.org/setting-up-virtual-machines-with-qemu-kvm-and-virt-manager-on-debian-ubuntu)
- [How to run virtual machines with virt-manager - Fedora Magazine](https://fedoramagazine.org/full-virtualization-system-on-fedora-workstation-30/)
- [How to Install KVM on Fedora 37/36 Step-by-Step](https://www.linuxtechi.com/how-to-install-kvm-on-fedora-step-by-step/)
- [Virtualization Deployment and Administration Guide | Red Hat Product Documentation](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/virtualization_deployment_and_administration_guide/index)

##### Fedora

QEMU

```bash
sudo dnf update
sudo dnf install qemu
```

From QEMU's source files

```bash
# Install prerequisite rpms to build the source code
sudo dnf install pixman-devel gcc make git python38

# Download source code
wget https://download.qemu.org/qemu-9.1.0.tar.xz
tar xvJf qemu-9.1.0.tar.xz
cd qemu-9.1.0
mkdir build
cd build
../configure --target-list='ppc64-softmmu ppc-softmmu' --prefix=/opt/qemu
make
sudo make install
/opt/qemu/bin/qemu-system-ppc64 --version
```

> If you don not mentioned the --target-list='ppc64-softmmu ppc-softmmu', it will build more than 50 machines emulator, and will take a longer time to compile. fore more info, type #../configure -h

KVM/QEMU/Virt-Manager

```bash
sudo dnf install -y qemu-kvm libvirt virt-install bridge-utils qemu virt-manager \
  libvirt-devel virt-top libguestfs-tools guestfs-tools libvirt-client libvirt-python

sudo systemctl start libvirtd
sudo systemctl enable libvirtd

sudo usermod -a -G libvirt $(whoami)
sudo usermod -a -G kvm $(whoami)
sudo usermod -a -G input $(whoami)
```

##### RedHat

```bash
# RHEL 7
yum install qemu-kvm libvirt
yum install virt-install libvirt-python virt-manager virt-install libvirt-client

# RHEL 8
yum module install virt
yum install virt-install virt-viewer
systemctl start libvirtd

## Verification
virt-host-validate
```

Ubuntu 22.04

```bash
sudo apt-get install git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev ninja-build
sudo apt-get install libnfs-dev libiscsi-dev python3-tomli

# Download source code
wget https://download.qemu.org/qemu-9.1.0.tar.xz
tar xvJf qemu-9.1.0.tar.xz
cd qemu-9.1.0
mkdir build
cd build
../configure --target-list='ppc64-softmmu ppc-softmmu' --prefix=/opt/qemu
make
sudo make install
/opt/qemu/bin/qemu-system-ppc64 --version
```

#### Command Line

- [How To Use QEMU From the Linux Command-Line | Baeldung on Linux](https://www.baeldung.com/linux/qemu-from-terminal)
- [A Comprehensive Guide to Using QEMU from the Linux Command-Line — nixFAQ](https://nixfaq.org/2024/02/nix-a-comprehensive-guide-to-using-qemu-from-the-linux-command-line.html)
- [Chapter 20. Managing Guest Virtual Machines with virsh | Red Hat Product Documentation](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/virtualization_deployment_and_administration_guide/chap-managing_guest_virtual_machines_with_virsh#chap-Managing_guest_virtual_machines_with_virsh)


##### virsh

Guest CPU Models

```bash
# For x86
virsh cpu-models x86_64

# For PowerPC
virsh cpu-models ppc64
```

List the VMs

```bash
sudo virsh list --all
```

#### FAQ

##### Operation not permitted

> qemu-system-ppc64: -net nic -net tap,script=no,ifname=tap0: could not configure /dev/net/tun (tap): Operation not permitted

Solution:

```bash
sudo setcap CAP_NET_ADMIN=ep /usr/bin/qemu-system-ppc64
```

##### Install Error

> Running postconf script '/home/alang/文件/worktmp/qemu-9.1.0/build/pyvenv/bin/python3 /home/alang/文件/worktmp/qemu-9.1.0/scripts/symlink-install-tree.py'  
> Traceback (most recent call last):  
>  File "/home/alang/文件/worktmp/qemu-9.1.0/scripts/symlink-install-tree.py", line 17, in &lt;module&gt;  
>  out = subprocess.run(\[\*introspect.split(' '), '--installed'\],  
>  File "/usr/lib/python3.10/subprocess.py", line 503, in run  
>  with Popen(\*popenargs, \*\*kwargs) as process:  
>  File "/usr/lib/python3.10/subprocess.py", line 971, in \_\_init\_\_  
>  self.\_execute\_child(args, executable, preexec\_fn, close\_fds,  
>  File "/usr/lib/python3.10/subprocess.py", line 1863, in \_execute\_child  
>  raise child\_exception\_type(errno\_num, err\_msg, err\_filename)  
> FileNotFoundError: \[Errno 2\] No such file or directory: "'/home/alang/文件/worktmp/qemu-9.1.0/build/pyvenv/bin/meson'"

Fix bug: edit `symlink-install-tree.py`

```python
import shlex

out = subprocess.run([*shlex.split(introspect), '--installed'],
```