add kvm-on-arch.md
This commit is contained in:
parent
7be0624a5c
commit
7219d81468
125
docs/posts/kvm-on-arch.md
Normal file
125
docs/posts/kvm-on-arch.md
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
---
|
||||||
|
title: "KVM On Arch"
|
||||||
|
date: 2021-10-07
|
||||||
|
draft: false
|
||||||
|
tags: ["Arch", "linux", "kvm", "virtualmachine"]
|
||||||
|
authors: ["trent"]
|
||||||
|
post: 24
|
||||||
|
---
|
||||||
|
date: 2021-10-07
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
This is not intended to be a tutorial, but rather a walk-through of
|
||||||
|
how I would install
|
||||||
|
[libvirt/kvm on Arch Linux](https://wiki.archlinux.org/title/Libvirt){target="_blank"}.
|
||||||
|
|
||||||
|
## Packages
|
||||||
|
* iptables-nft
|
||||||
|
* dnsmasq
|
||||||
|
* bridge-utils
|
||||||
|
* openbsd-netcat
|
||||||
|
* libvirt
|
||||||
|
* qemu-headless
|
||||||
|
* virt-install
|
||||||
|
|
||||||
|
`virt-install` is not needed if connecting remotely with virt-manager,
|
||||||
|
but it does provide `virt-clone`.
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
* enable libvirtd service
|
||||||
|
* `systemctl enable libvirtd`
|
||||||
|
* add user to libvirt group
|
||||||
|
* `usermod -a -G libvirt <user>`
|
||||||
|
### environment/bashrc
|
||||||
|
```cfg
|
||||||
|
# ~/.bashrc
|
||||||
|
export LIBVIRT_DEFAULT_URI="qemu:///system"
|
||||||
|
```
|
||||||
|
reboot the machine
|
||||||
|
|
||||||
|
## Network
|
||||||
|
The default network is defined in `/etc/libvirt/qemu/networks/default.xml`.
|
||||||
|
|
||||||
|
* Start the default network `virsh net-start default`.
|
||||||
|
* Permanently enable the default network `virsh net-autostart default`.
|
||||||
|
|
||||||
|
## Jump Host With `virt-manager`
|
||||||
|
Abstract your jump host in `~/.ssh/config`
|
||||||
|
```cfg
|
||||||
|
# ~/.ssh/config
|
||||||
|
Host jumphost
|
||||||
|
Hostname <ip address>
|
||||||
|
Port 22
|
||||||
|
User <user>
|
||||||
|
|
||||||
|
Host kvmhost
|
||||||
|
Hostname <ip address>
|
||||||
|
ProxyJump jumphost
|
||||||
|
Port 22
|
||||||
|
User <user>
|
||||||
|
```
|
||||||
|
Now you can connect `virt-manager` to <user\>@kvmhost
|
||||||
|
|
||||||
|
## Console Access
|
||||||
|
Enable serial console on guest.
|
||||||
|
`systemctl enable serial-getty@ttyS0.service`
|
||||||
|
|
||||||
|
## Nested KVM
|
||||||
|
I was going to try to figure out how to permantly set the cpu mode default
|
||||||
|
such that all virtualmachines will be capable of nested virtualization,
|
||||||
|
but it already is. Perhaps that is the default in `virt-manager` now?
|
||||||
|
|
||||||
|
Anyway, in case you want to make sure
|
||||||
|
[nested virtualization](https://wiki.archlinux.org/title/KVM#Nested_virtualization){target="_blank"}
|
||||||
|
is enabled in the host kernel.
|
||||||
|
|
||||||
|
## Clone Ip Address Conflict
|
||||||
|
I found a great tutorial
|
||||||
|
[for assigning ip addresses](https://bobcares.com/blog/virsh-set-ip-address/){target="_blank"}.
|
||||||
|
|
||||||
|
The problem we need to solve here is that virtual machine clones won't necessarily
|
||||||
|
solicit a unique ip address, although a clone will have a new `mac address`.
|
||||||
|
|
||||||
|
So, you clone a vm:
|
||||||
|
|
||||||
|
* `virt-clone --original arch --name archone --auto-clone`
|
||||||
|
|
||||||
|
Get the clone's mac address:
|
||||||
|
|
||||||
|
* `virsh dumpxml archone | grep mac`
|
||||||
|
|
||||||
|
### Now assign the clone a dhcp reservation:
|
||||||
|
|
||||||
|
* `virsh net-edit default`
|
||||||
|
|
||||||
|
Notice that I tighten up the dhcp range, and add a
|
||||||
|
reservation outside the new dhcp range.
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<network connections='1'>
|
||||||
|
<name>default</name>
|
||||||
|
<uuid>8013c9a5-606f-48a0-a3ec-1cf097e76fb1</uuid>
|
||||||
|
<forward mode='nat'>
|
||||||
|
<nat>
|
||||||
|
<port start='1024' end='65535'/>
|
||||||
|
</nat>
|
||||||
|
</forward>
|
||||||
|
<bridge name='virbr0' stp='on' delay='0'/>
|
||||||
|
<mac address='52:54:00:ef:cb:d2'/>
|
||||||
|
<ip address='192.168.122.1' netmask='255.255.255.0'>
|
||||||
|
<dhcp>
|
||||||
|
<!-- previous dhcp range
|
||||||
|
<range start='192.168.122.2' end='192.168.122.254'/>
|
||||||
|
-->
|
||||||
|
<!-- begin new lines -->
|
||||||
|
<range start='192.168.122.50' end='192.168.122.150'/>
|
||||||
|
<host mac='52:54:00:cd:7d:7f' name='archone' ip='192.168.122.25'/>
|
||||||
|
<!-- end new lines -->
|
||||||
|
</dhcp>
|
||||||
|
</ip>
|
||||||
|
</network>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Restart Default Network
|
||||||
|
* `virsh net-destroy default`
|
||||||
|
* `virsh net-start default`
|
@ -24,6 +24,7 @@ markdown_extensions:
|
|||||||
nav:
|
nav:
|
||||||
- Home:
|
- Home:
|
||||||
- Home: index.md
|
- Home: index.md
|
||||||
|
- "KVM On Arch": posts/kvm-on-arch.md
|
||||||
- "RaspberryPi LTE-Failover Router With DNS Caching": posts/raspberrypi-lte-failover-router-with-dns-caching.md
|
- "RaspberryPi LTE-Failover Router With DNS Caching": posts/raspberrypi-lte-failover-router-with-dns-caching.md
|
||||||
- "Flutter Integration Test Server in Debian 11 Nspawn Container": posts/debian-11-nspawn-flutter-integration-test-server.md
|
- "Flutter Integration Test Server in Debian 11 Nspawn Container": posts/debian-11-nspawn-flutter-integration-test-server.md
|
||||||
- "Debian 11 TT-RSS": posts/debian-11-ttrss.md
|
- "Debian 11 TT-RSS": posts/debian-11-ttrss.md
|
||||||
@ -61,6 +62,7 @@ nav:
|
|||||||
- FreeCodeCampChallenges: https://trentspalmer.github.io/fcc-challenges/
|
- FreeCodeCampChallenges: https://trentspalmer.github.io/fcc-challenges/
|
||||||
- DeviceLayout: https://trentpalmer.work/6a57bbe24d8244289610bf57533d6c6f/
|
- DeviceLayout: https://trentpalmer.work/6a57bbe24d8244289610bf57533d6c6f/
|
||||||
- Posts:
|
- Posts:
|
||||||
|
- "KVM On Arch": posts/kvm-on-arch.md
|
||||||
- "RaspberryPi LTE-Failover Router With DNS Caching": posts/raspberrypi-lte-failover-router-with-dns-caching.md
|
- "RaspberryPi LTE-Failover Router With DNS Caching": posts/raspberrypi-lte-failover-router-with-dns-caching.md
|
||||||
- "Flutter Integration Test Server in Debian 11 Nspawn Container": posts/debian-11-nspawn-flutter-integration-test-server.md
|
- "Flutter Integration Test Server in Debian 11 Nspawn Container": posts/debian-11-nspawn-flutter-integration-test-server.md
|
||||||
- "Debian 11 TT-RSS": posts/debian-11-ttrss.md
|
- "Debian 11 TT-RSS": posts/debian-11-ttrss.md
|
||||||
|
Loading…
Reference in New Issue
Block a user