■debian bookwormにKVMを入れてみる
以下のときとあまり変わらないみたい
debian stretchにKVMを導入する。
https://labunix.hateblo.jp/entry/20180501/1525182562
$ lsb_release -d
No LSB modules are available.
Description: Debian GNU/Linux 12 (bookworm)
■やり方は基本的に以下と同じ
WheezyにQEMU-KVMを導入
https://labunix.hateblo.jp/entry/20130716/1373901127
■メモリが64GBあるので、少々の融通は効くはず
$ free -g
total used free shared buff/cache available
Mem: 62 2 59 0 1 59
Swap: 0 0 0
■CPUはAMD系の8コア16スレッド
$ grep flags /proc/cpuinfo | awk '{for(a=1;a<=NF;a++){if($a ~ /vmx|svm/){print $a | "sort | uniq -c"}}}'
16 svm
16 svm_lock
■KVMを入れる
$ sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-daemon virtinst bridge-utils libosinfo-bin
$ lsmod | grep kvm
kvm_amd 155648 0
kvm 1146880 1 kvm_amd
irqbypass 16384 1 kvm
ccp 118784 1 kvm_amd
■有線LANをブリッジに変更
$ ls /sys/class/net/
enp2s0 lo
https://orcacore.com/network-bridge-configuration-debian-12-linux/
$ sudo sed -e 's/[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*/X.X.X.X/' /etc/network/interfaces.d/br0
auto br0
iface br0 inet static
address X.X.X.X
broadcast X.X.X.X
netmask X.X.X.X
gateway X.X.X.X
bridge_ports enp2s0
bridge_stp off
bridge_waitport 0
bridge_fd 0
$ sudo systemctl restart networking
$ ls /sys/class/net/
br0 enp2s0 lo
$ sudo brctl show | sed -e 's/\.[0-9a-f]*/.XXXXXXXXXXX/'
bridge name bridge id STP enabled interfaces
br0 8000.XXXXXXXXXXX no enp2s0
$ sudo bridge link
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br0 state forwarding priority 32 cost 5
■システムの再起動を行い、既存のenp2s0の設定がbr0に変わったことを確認
$ virsh list
Id 名前 状態
-------------------
■ネットワーク仮想化のオーバヘッド対応のためにvhost-netを有効化
$ apt-file search vhost_net | grep "$(uname -r)"
linux-image-6.1.0-13-amd64: /lib/modules/6.1.0-13-amd64/kernel/drivers/vhost/vhost_net.ko
linux-image-6.1.0-13-amd64-dbg: /usr/lib/debug/lib/modules/6.1.0-13-amd64/kernel/drivers/vhost/vhost_net.ko
linux-image-6.1.0-13-amd64-unsigned: /lib/modules/6.1.0-13-amd64/kernel/drivers/vhost/vhost_net.ko
$ lsmod | grep vhost
vhost_net 36864 0
tun 61440 1 vhost_net
vhost 57344 1 vhost_net
vhost_iotlb 16384 1 vhost
tap 28672 1 vhost_net
$ echo vhost_net | sudo tee -a /etc/modules >/dev/null
■virshコマンド実行のためにグループ権限を追加
$ sudo gpasswd libvirt -a labunix
$ sudo gpasswd libvirt-qemu -a labunix
$ exit
$ id | awk -F "[ ,]" '{for(a=1;a<=NF;a++){if($a ~ /libvirt/){print $a}}}'
122(libvirt)
64055(libvirt-qemu)
■netinstallのISOイメージファイルを配置
$ wget "http://ftp.jaist.ac.jp/debian-cd/current/amd64/iso-cd/debian-$(cat /etc/debian_version).0-amd64-netinst.iso"
$ sudo mkdir /var/lib/libvirt/images
$ sudo mv -i debian-12.2.0-amd64-netinst.iso /var/lib/libvirt/images/
$ sudo chown -R libvirt-qemu:libvirt /var/lib/libvirt/images/
$ env LANG=C ls -l --time-style='+%Y/%m/%d-%H:%M:%S' /var/lib/libvirt/images/
total 643076
-rw-r--r-- 1 libvirt-qemu libvirt 658505728 2023/10/07-21:04:58 debian-12.2.0-amd64-netinst.iso
■virt-managerを起動して普段どおりにゲストOSをインストール。
4コア、16GBメモリ、ディスク80GBを割り当て
インストールが終わったら今回はシャットダウン
$ apt-file search bin/virt-manager
virt-manager: /usr/bin/virt-manager
$ sudo apt-get install -y virt-manager
$ virt-manager
$ echo $((1024*16))
16384
■xmlファイルを読んで関連を探す。
選択項目をピックアップすると、
4vcpu、16GBメモリ、ホストのブリッジからNWを構成し、ディスクはqcow2で80GB。
$ sudo awk '/vcpu|type arch|memory|device=|source bridge/' /etc/libvirt/qemu/kvm-debian12.xml
<memory unit='KiB'>16777216</memory>
<vcpu placement='static'>4</vcpu>
<type arch='x86_64' machine='pc-q35-7.2'>hvm</type>
<disk type='file' device='disk'>
<disk type='file' device='cdrom'>
<source bridge='br0'/>
$ sudo find /var/lib/libvirt/ -type f -name "*.qcow2" -exec ls -lh --time-style='+%Y/%m/%d-%H:%M:%S' {} +
-rw------- 1 libvirt-qemu libvirt-qemu 81G 2023/11/02-22:52:06 /var/lib/libvirt/images/kvm-debian12.qcow2
■ゲストOSのその他の構成ファイルは以下。
$ sudo find /var/lib/libvirt/ /etc/libvirt -type f
/var/lib/libvirt/images/debian-12.2.0-amd64-netinst.iso
/var/lib/libvirt/images/kvm-debian12.qcow2
/var/lib/libvirt/qemu/domain-2-kvm-debian12/master-key.aes
/etc/libvirt/virtlockd.conf
/etc/libvirt/qemu-lockd.conf
/etc/libvirt/qemu/networks/default.xml
/etc/libvirt/qemu/kvm-debian12.xml
/etc/libvirt/libxl.conf
/etc/libvirt/qemu.conf
/etc/libvirt/virtlogd.conf
/etc/libvirt/nwfilter/no-ipv6-multicast.xml
/etc/libvirt/nwfilter/qemu-announce-self-rarp.xml
/etc/libvirt/nwfilter/no-ip-spoofing.xml
/etc/libvirt/nwfilter/no-ip-multicast.xml
/etc/libvirt/nwfilter/allow-dhcp-server.xml
/etc/libvirt/nwfilter/allow-dhcpv6.xml
/etc/libvirt/nwfilter/allow-ipv6.xml
/etc/libvirt/nwfilter/no-other-rarp-traffic.xml
/etc/libvirt/nwfilter/no-other-l2-traffic.xml
/etc/libvirt/nwfilter/qemu-announce-self.xml
/etc/libvirt/nwfilter/allow-ipv4.xml
/etc/libvirt/nwfilter/allow-incoming-ipv4.xml
/etc/libvirt/nwfilter/clean-traffic.xml
/etc/libvirt/nwfilter/allow-dhcpv6-server.xml
/etc/libvirt/nwfilter/allow-arp.xml
/etc/libvirt/nwfilter/no-mac-spoofing.xml
/etc/libvirt/nwfilter/no-ipv6-spoofing.xml
/etc/libvirt/nwfilter/no-arp-ip-spoofing.xml
/etc/libvirt/nwfilter/allow-incoming-ipv6.xml
/etc/libvirt/nwfilter/no-arp-spoofing.xml
/etc/libvirt/nwfilter/no-arp-mac-spoofing.xml
/etc/libvirt/nwfilter/allow-dhcp.xml
/etc/libvirt/nwfilter/clean-traffic-gateway.xml
/etc/libvirt/nwfilter/no-mac-broadcast.xml
/etc/libvirt/libvirt.conf
/etc/libvirt/qemu-sanlock.conf
/etc/libvirt/storage/default.xml
/etc/libvirt/lxc.conf
/etc/libvirt/libxl-lockd.conf
/etc/libvirt/libxl-sanlock.conf
/etc/libvirt/libvirt-admin.conf
/etc/libvirt/libvirtd.conf
■virshで管理できていることを確認
$ env LANG=C virsh -c qemu:///system list --all
Id Name State
-------------------------------
- kvm-debian12 shut off
$ export LIBVIRT_DEFAULT_URI="qemu:///system"
$ env LANG=C virsh list --all
Id Name State
-------------------------------
- kvm-debian12 shut off
■ログインしたユーザに適用されるように設定
$ echo '#!/bin/bash' | sudo tee /etc/profile.d/kvm.sh > /dev/null
$ echo 'export LIBVIRT_DEFAULT_URI="qemu:///system"' | sudo tee -a /etc/profile.d/kvm.sh > /dev/null
$ grep uri_default /etc/libvirt/libvirt.conf
■今回は下記のコメントアウトの調査をスキップする
$ grep "_r[ow]_\|_group" /etc/libvirt/libvirtd.conf
■シリアルポートがなければvirt-managerから追加
$ virsh dumpxml kvm-debian12 | grep console
<console type='pty' tty='/dev/pts/3'>
</console>
■ssh経由でgrubにシリアルコンソールの設定をして「virsh console」が使えるようにする
$ virsh start kvm-debian12
ドメイン 'kvm-debian12' が開始しました
$ ssh kvm-debian12
$ su
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX="console=pty3 console=ttyS0,115200n8"
$ virsh console kvm-debian12
ドメイン 'kvm-debian12' に接続しました
エスケープ文字は ^] です (Ctrl + ])
Debian GNU/Linux 12 kvm-debian12 ttyS0
kvm-debian12 login:
$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-6.1.0-13-amd64 root=UUID=1068c18a-63f6-4ee4-b75f-d02a675215e8 ro console=tty0 console=ttyS0,115200n8 quiet
■今回は「/var」にあまり空きが無いので、ディスクイメージを「/home」に移動する
$ sudo grep kvm-debian12.qcow2 /etc/libvirt/qemu/kvm-debian12.xml
<source file='/var/lib/libvirt/images/kvm-debian12.qcow2'/>
$ sudo ls -ld /var/lib/libvirt/images/
drwx--x--x 3 root root 4096 11月 2 22:16 /var/lib/libvirt/images/
$ sudo mkdir /home/kvm/kvm-debian12
$ sudo ls -ld /home/kvm/kvm-debian12
drwxr-xr-x 2 root root 4096 11月 2 23:45 /home/kvm/kvm-debian12
$ sudo mv /var/lib/libvirt/images/kvm-debian12.qcow2 /home/kvm/kvm-debian12/
$ sudo virsh edit kvm-debian12
ドメイン 'kvm-debian12' XML 設定が編集されました。
$ sudo grep kvm-debian12.qcow2 /etc/libvirt/qemu/kvm-debian12.xml
<source file='/home/kvm/kvm-debian12/kvm-debian12.qcow2'/>
■そういえばもう一台の物理のCPUってIntelの8コアだった気が。。。
$ grep flags /proc/cpuinfo | awk '{for(a=1;a<=NF;a++){if($a ~ /vmx|svm/){print $a | "sort | uniq -c"}}}'
8 vmx
■8コアに変更する
※仮想マシンは一度shutdownする
debian stretchのKVMで仮想マシンのCPU、メモリ、NICの増設とディスクの拡張をしてみた。
https://labunix.hateblo.jp/entry/20180502/1525262971
$ sudo virsh setvcpus kvm-debian12 8 --config --maximum
$ sudo virsh setvcpus kvm-debian12 8 --config
$ sudo virsh dumpxml kvm-debian12 | awk '/vcpu/'
<vcpu placement='static'>8</vcpu>
$ sudo virsh dominfo kvm-debian12 | awk '/CPU/'
CPU: 8
$ virsh start kvm-debian12
$ virsh console kvm-debian12
$ grep flags /proc/cpuinfo | awk '{for(a=1;a<=NF;a++){if($a ~ /vmx|svm/){print $a | "sort | uniq -c"}}}'down -h now'
8 svm
■ホストが起動したときに自動起動するように設定
$ sudo virsh autostart kvm-debian12
ドメイン 'kvm-debian12' は自動起動としてマークされています
■自動起動を解除するには。。。
$ sudo virsh autostart --disable kvm-debian12
ドメイン 'kvm-debian12' の自動起動マークが解除されました