Notebook

これは日々の作業を通して学んだことや毎日の生活で気づいたことをを記録しておく備忘録である。

HTML ファイル生成日時: 2024/11/24 14:07:03.493 (台灣標準時)

Debian GNU/Linux で KVM を使い仮想機械を動かす手順の記録

Debian で KVM を利用するためには、 https://wiki.debian.org/KVM を 読めばよいようでござる。

必要なソフトウェアのインストール

まず、必要なソフトウェアをインストールする必要があるでござる。 qemu と libvirt をインストールするでござる。


# apt install qemu-system
% apt install libvirt-daemon-system

自分が使っているユーザーをグループ libvirt に所属させる

virsh コマンドを root にならずに使うためには、自分が使っているユーザー をグループ libvirt に所属させる必要があるでござる。


# vi /etc/group

仮想機械の一覧を表示させる

自分が用意した仮想機械の一覧は、以下のコマンドで表示できるでござる。


% virsh list --all
 Id   Name   State
--------------------


システム全体の仮想機械の一覧は、以下のコマンドで表示できるでござる。


% virsh --connect qemu:///system list --all
 Id   Name       State
--------------------------
 1    netbsd01   running


環境変数 LIBVIRT_DEFAULT_URI を設定しておけば、以下のコマンドでシステ ム上の全ての仮想機械の一覧を得ることができるでござる。


% setenv LIBVIRT_DEFAULT_URI qemu:///system
% printenv LIBVIRT_DEFAULT_URI
qemu:///system
% virsh list --all
 Id   Name       State
--------------------------
 1    netbsd01   running


仮想機械のためのネットワークの設定

実ハードウェア上で動いている OS と仮想機械上で動いている OS とで通信す るために、また、仮想機械上で動いている OS が外界と通信するために、ブリッ ジインターフェースを作成しておくと便利でござる。

libvirt を使うと、簡便にブリッジインターフェースを作成することができる でござる。あらかじめ、 default という設定ファイルがあるのでござるが、 仮想機械に割り当てる IP アドレスが 192.168.122.0/24 になっているので、 それ以外のネットワークを使いたい場合には、設定ファイルを別途作成する必 要があるでござる。 /usr/share/libvirt/networks/default.xml をコピーし て、編集すればよいでござる。


# mkdir -p /vm/libvirt
# cd /vm/libvirt
# cp -pi /usr/share/libvirt/networks/default.xml vmbridge.xml
# ls -lF
total 4
-rw-r--r-- 1 root root 228 Jan 15  2021 vmbridge.xml
# vi vmbridge.xml
# cat vmbridge.xml 
<network>
  <name>vmbridge</name>
  <bridge name='vmbr0'/>
  <forward/>
  <ip address='10.20.30.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='10.20.30.100' end='10.20.30.199'/>
    </dhcp>
  </ip>
</network>
# diff /usr/share/libvirt/networks/default.xml vmbridge.xml
2,3c2,3
<   <name>default</name>
<   <bridge name='virbr0'/>
---
>   <name>vmbridge</name>
>   <bridge name='vmbr0'/>
5c5
<   <ip address='192.168.122.1' netmask='255.255.255.0'>
---
>   <ip address='10.20.30.1' netmask='255.255.255.0'>
7c7
<       <range start='192.168.122.2' end='192.168.122.254'/>
---
>       <range start='10.20.30.100' end='10.20.30.199'/>

設定ファイルができたら、 virsh コマンドを使って、実際にネットワークを 作成するでござる。


# virsh net-define /vm/libvirt/vmbridge.xml
Network vmbridge defined from /vm/libvirt/vmbridge.xml

# virsh net-list --all
 Name       State      Autostart   Persistent
-----------------------------------------------
 vmbridge   inactive   no          yes

# virsh net-start vmbridge
Network vmbridge started

# virsh net-list --all
 Name       State    Autostart   Persistent
---------------------------------------------
 vmbridge   active   no          yes


autostart を有効にするためには、以下のようにすればよいでござる。


# virsh net-autostart vmbridge
Network vmbridge marked as autostarted

# virsh net-list --all
 Name       State    Autostart   Persistent
---------------------------------------------
 vmbridge   active   yes         yes


新たな仮想機械を作成する

新たな仮想機械を作成するための準備として、 OS インストール用のイメージ をダウンロードしておくでござる。ここでは amd64 用の NetBSD-10.0 beta の ISO イメージをダウンロードするでござる。


# mkdir -p /vm/netbsd02
# cd /vm/netbsd02
# wget http://nycdn.netbsd.org/pub/NetBSD-daily/netbsd-10/202212311640Z/images/NetBSD-10.0_BETA-amd64.iso
--2023-01-02 16:42:02--  http://nycdn.netbsd.org/pub/NetBSD-daily/netbsd-10/202212311640Z/images/NetBSD-10.0_BETA-amd64.iso
Resolving nycdn.netbsd.org (nycdn.netbsd.org)... 151.101.1.6, 151.101.65.6, 151.101.129.6, ...
Connecting to nycdn.netbsd.org (nycdn.netbsd.org)|151.101.1.6|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 589686784 (562M) [application/octet-stream]
Saving to: ‘NetBSD-10.0_BETA-amd64.iso’

NetBSD-10.0_BETA-am 100%[===================>] 562.37M  2.53MB/s    in 5m 52s  

2023-01-02 16:47:55 (1.60 MB/s) - ‘NetBSD-10.0_BETA-amd64.iso’ saved [589686784/589686784]

# ls -lF
total 575872
-rw-r--r-- 1 root root 589686784 Jan  1 04:41 NetBSD-10.0_BETA-amd64.iso
# file NetBSD-10.0_BETA-amd64.iso 
NetBSD-10.0_BETA-amd64.iso: ISO 9660 CD-ROM filesystem data 'NETBSD_100_BETA' (bootable)

新たな仮想機械を作成するためには、 virt-install というコマンドを使えば よいでござる。インストール用のシェルスクリプトを用意しておくと便利でご ざる。


# cat /vm/netbsd02/kvm_install_netbsd02.sh 
virt-install --virt-type kvm --name netbsd02 \
--cdrom /vm/netbsd02/NetBSD-10.0_BETA-amd64.iso \
--os-variant netbsd9.0 \
--disk size=64,path=/vm/netbsd02/netbsd02.img \
--memory 4096 \
--vcpus 6 \
--network bridge=vmbr0 

上の例だと、 --os-variant には netbsd9.0 を使っているのでござるが、これ は、 netbsd10.0 という選択肢がないためでござる。 --os-variant に使える OS 名の一覧は、以下のコマンドで得ることができるでござる。


% osinfo-query os

作成したシェルスクリプトを実行して、 OS のインストールを行うでござる。 virt-install コマンドを実行すると、以下のようなメッセージが表示される でござる。


# csh /vm/netbsd02/kvm_install_netbsd02.sh
WARNING  Graphics requested but DISPLAY is not set. Not running virt-viewer.
WARNING  No console to launch for the guest, defaulting to --wait -1

Starting install...
Allocating 'netbsd02.img'                                   |  64 GB  00:01     

Domain is still running. Installation may be in progress.
Waiting for the installation to complete.

別の端末エミュレーターで、 virt-viewer コマンドを実行すれば、 VNC クラ イアントが起動して、そこで、 OS のインストール作業が行えるようになるで ござる。


% virt-viewer

fig_202301/netbsd_install.png

通常通りに、 OS のインストールを行うことができるので、 OS をインストー ルし、インストールが完了したら、 shutdown -p now などとすればよいでご ざる。すると、 virt-install を実行した端末エミュレーターで、以下のメッ セージが表示されるでござる。


# csh kvm_install_netbsd02.sh
WARNING  Graphics requested but DISPLAY is not set. Not running virt-viewer.
WARNING  No console to launch for the guest, defaulting to --wait -1

Starting install...
Allocating 'netbsd02.img'                                   |  64 GB  00:01     

Domain is still running. Installation may be in progress.
Waiting for the installation to complete.
Domain has shutdown. Continuing.
Domain creation completed.
Restarting guest.

ここで、仮想機械の一覧を見てみるでござる。


# virsh list --all
 Id   Name       State
---------------------------
 2    netbsd02   running
 -    netbsd01   shut off


netbsd02 という仮想機械ができているでござる。仮想機械 netbsd02 が再起 動して、動いているので、 virt-viewer を使えば、ログインすることができ るでござる。或いは、 sshd が動いていて、 root 以外のアカウントが作成済 みであれば、 ssh を使ってログインすればよいでござる。ログインして、必 要な設定を行えばよいでござる。

仮想機械 netbsd02 上で、 shutdown -p now などとすれば、仮想機械は終了 するでござる。以下のようにすれば状態を確認することができるでござる。


# virsh list --all
 Id   Name       State
---------------------------
 -    netbsd01   shut off
 -    netbsd02   shut off


仮想機械を起動させるためには、以下のコマンドを実行すればよいでござる。


# virsh start netbsd02
Domain 'netbsd02' started

# virsh list --all
 Id   Name       State
---------------------------
 3    netbsd02   running
 -    netbsd01   shut off


実ハードウェア側で動いている OS から、仮想機械を止めるためには、以下の ようにすればよいでござる。


# virsh shutdown netbsd02
Domain 'netbsd02' is being shutdown

# virsh list --all
 Id   Name       State
---------------------------
 -    netbsd01   shut off
 -    netbsd02   shut off


仮想機械の設定の変更方法

仮想機械に割り当て可能な最大の CPU 数を変更するには以下のようにすれば よいでござる。これは、仮想機械が動いていない状況で実行する必要があるで ござる。


# virsh vcpucount netbsd02
maximum      config         6
current      config         6

# virsh setvcpus netbsd02 4 --maximum --config
# virsh vcpucount netbsd02
maximum      config         4
current      config         4

# virsh setvcpus netbsd02 6 --maximum --config
# virsh vcpucount netbsd02
maximum      config         6
current      config         4


動作中の仮想機械に割り当てている CPU の数を変更するには、以下のように すればよいでござる。


# virsh start netbsd02
Domain 'netbsd02' started

# virsh list --all
 Id   Name       State
---------------------------
 4    netbsd02   running
 -    netbsd01   shut off

# virsh vcpucount netbsd02
maximum      config         6
maximum      live           6
current      config         4
current      live           4

# virsh setvcpus netbsd02 6
# virsh vcpucount netbsd02
maximum      config         6
maximum      live           6
current      config         4
current      live           6


次回の起動時に割り当てたい CPU 数を変更するには、以下のようにすればよ いでござる。


# virsh setvcpus netbsd02 6 --config
# virsh vcpucount netbsd02
maximum      config         6
maximum      live           6
current      config         6
current      live           6


仮想機械に割り当て可能な最大のメモリーを変更するには、以下のようにすれ ばよいでござる。


# virsh dominfo netbsd02
Id:             -
Name:           netbsd02
UUID:           b5d6b13b-a5b8-43de-964e-2491d4ae118f
OS Type:        hvm
State:          shut off
CPU(s):         6
Max memory:     4194304 KiB
Used memory:    4194304 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: apparmor
Security DOI:   0

# virsh setmaxmem netbsd02 8G
# virsh dominfo netbsd02
Id:             -
Name:           netbsd02
UUID:           b5d6b13b-a5b8-43de-964e-2491d4ae118f
OS Type:        hvm
State:          shut off
CPU(s):         6
Max memory:     8388608 KiB
Used memory:    4194304 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: apparmor
Security DOI:   0


次回の起動時のメモリー割り当て量を変更するには、以下のようにすればよい でござる。


# virsh setmem netbsd02 2G --config
# virsh dominfo netbsd02
Id:             -
Name:           netbsd02
UUID:           b5d6b13b-a5b8-43de-964e-2491d4ae118f
OS Type:        hvm
State:          shut off
CPU(s):         6
Max memory:     8388608 KiB
Used memory:    2097152 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: apparmor
Security DOI:   0


参考文献



Frequently accessed files

  1. Computer___Python/20220518_0.html
  2. Computer___Network/20230726_00.html
  3. Misc___Taiwan/20240207_00.html
  4. Computer___Network/20230516_00.html
  5. Computer___FreeBSD/20220621_0.html
  6. Computer___Python/20220715_0.html
  7. Computer___Network/20230508_00.html
  8. Food___Taiwan/20220429_0.html
  9. Computer___NetBSD/20220817_3.html
  10. Computer___Python/20220410_0.html
  11. Computer___Network/20240416_00.html
  12. Computer___Network/20240130_00.html
  13. Computer___Debian/20210223_1.html
  14. Computer___NetBSD/20230119_00.html
  15. Computer___Python/20210124_0.html
  16. Computer___Python/20221013_0.html
  17. Computer___NetBSD/20220818_1.html
  18. Computer___NetBSD/20220428_0.html
  19. Science___Math/20220420_0.html
  20. Computer___NetBSD/20240101_02.html
  21. Computer___NetBSD/20220808_0.html
  22. Computer___TeX/20230503_00.html
  23. Computer___NetBSD/20230515_00.html
  24. Science___Astronomy/20220503_0.html
  25. Computer___NetBSD/20210127_0.html
  26. Computer___Python/20240101_00.html
  27. Computer___Network/20220413_1.html
  28. Computer___Python/20220816_1.html
  29. Computer___NetBSD/20210204_0.html
  30. Travel___Taiwan/20220809_2.html


HTML file generated by Kinoshita Daisuke.