xen-create-image
コマンドが含まれます。xen-create-image
コマンドはインストール作業の大部分を自動化します。必須のパラメータは --hostname
だけで、このパラメータは domU の名前を設定します。他のオプションは重要ですが、オプションを /etc/xen-tools/xen-tools.conf
設定ファイルに保存することが可能です。そして、コマンドラインでオプションを指定しなくてもエラーは起きません。このため、イメージを作る前にこのファイルの内容を確認するか、xen-create-image
の実行時に追加的パラメータを使うことが重要です。以下に注目すべき重要なパラメータを示します。
--memory
。新たに作成する domU システム専用の RAM のサイズを指定します。
--size
と --swap
。domU で利用できる「仮想ディスク」のサイズを定義します。
--debootstrap-cmd
, to specify the which debootstrap command is used. The default is debootstrap
if debootstrap and cdebootstrap are installed. In that case, the --dist
option will also most often be used (with a distribution name such as bullseye).
--dhcp
。domU のネットワーク設定を DHCP で取得することを宣言します。対して、--ip
は静的 IP アドレスを定義します。
--dir
オプションを使い、各 domU を格納するデバイス用のファイルを dom0 上に作成する方法です。LVM を使っているシステムでは、--lvm
オプションを使い、VG の名前を指定しても良いでしょう。この場合 xen-create-image
は指定された VG から新しい LV を分割し、この LV をハードディスクドライブとして domU から利用できるようにします。
#
xen-create-image --hostname testxen --dhcp --dir /srv/testxen --size=2G --dist=bullseye --role=udev
General Information -------------------- Hostname : testxen Distribution : bullseye Mirror : http://deb.debian.org/debian Partitions : swap 512M (swap) / 2G (ext4) Image type : sparse Memory size : 256M Bootloader : pygrub [...] Logfile produced at: /var/log/xen-tools/testxen.log Installation Summary --------------------- Hostname : testxen Distribution : bullseye MAC Address : 00:16:3E:C2:07:EE IP Address(es) : dynamic SSH Fingerprint : SHA256:K+0QjpGzZOacLZ3jX4gBwp0mCESt5ceN5HCJZSKWS1A (DSA) SSH Fingerprint : SHA256:9PnovvGRuTw6dUcEVzzPKTITO0+3Ki1Gs7wu4ke+4co (ECDSA) SSH Fingerprint : SHA256:X5z84raKBajUkWBQA6MVuanV1OcV2YIeD0NoCLLo90k (ED25519) SSH Fingerprint : SHA256:VXu6l4tsrCoRsXOqAwvgt57sMRj2qArEbOzHeydvV34 (RSA) Root Password : FS7CUxsY3xkusv7EkbT9yae
vif*
、veth*
、peth*
、xenbr0
などの独特な名前を付けられた数多くのインターフェースと関係を持ちます。Xen ハイパーバイザは定義された配置に従いユーザ空間ツールの制御の下でインターフェースを準備します。NAT と routing モデルは特定の場合にのみ適合します。このためわれわれは bridge モデルを使います。
xend
daemon is configured to integrate virtual network interfaces into any pre-existing network bridge (with xenbr0
taking precedence if several such bridges exist). We must therefore set up a bridge in /etc/network/interfaces
(which requires installing the bridge-utils package, which is why the xen-utils package recommends it) to replace the existing eth0 entry (be careful to use the correct network device name):
auto xenbr0 iface xenbr0 inet dhcp bridge_ports eth0 bridge_maxwait 0
xl
command. This command allows different manipulations on the domains, including listing them and, starting/stopping them. You might need to increase the default memory by editing the variable memory from configuration file (in this case, /etc/xen/testxen.cfg
). Here we have set it to 1024 (megabytes).
#
xl list
Name ID Mem VCPUs State Time(s) Domain-0 0 3918 2 r----- 35.1 #
xl create /etc/xen/testxen.cfg
Parsing config from /etc/xen/testxen.cfg #
xl list
Name ID Mem VCPUs State Time(s) Domain-0 0 2757 2 r----- 45.2 testxen 3 1024 1 r----- 1.3
testxen
domU は仮想メモリではなく RAM から取った物理メモリを使います。このメモリ領域は testxen
domU が起動していなければ dom0 が使えるメモリ領域だったという点に注意してください。このため、サーバを作ることが Xen インスタンスをホストすることを意味する場合、それに応じて十分なサイズの物理 RAM が必要になるという点に注意が必要です。
xl console
コマンドから hvc0
コンソールを使う方法です。ネットワーク設定が正しくない場合にはこれが唯一の方法です。
#
xl console testxen
[...] Debian GNU/Linux 11 testxen hvc0 testxen login:
xl pause
と xl unpause
コマンドを使って domU を一時的に停止したり再開することが可能です。一時的に停止された domU は全くプロセッサを使いませんが、割り当てられたメモリを解放しません。xl save
と xl restore
コマンドを考慮することは興味深いかもしれません。なぜなら xl save
で domU を保存すれば domU の使っていた RAM などの資源が解放されるからです。また、xl restore
で domU を元に戻す時 (ついでに言えば xl unpause
で再開する時)、domU は時間が経過したことに全く気が付きません。dom0 を停止した時に domU が動いていた場合、パッケージに含まれるスクリプトが自動的に xl save
で domU を保存し、dom0 の次回起動時に自動的に xl restore
で domU を再開します。もちろんこれにはラップトップコンピュータをハイバネートする場合と同様の標準的な不便さがあります。特に、domU が長い間一時停止されていた場合、ネットワーク接続が切断される可能性があります。今現在 Xen は ACPI 電源管理のほとんどに互換性がない点にも注意してください。このため、ホスト (dom0) システムを一時停止することは不可能です。
shutdown
コマンドを使って) 行ったり、dom0 から xl shutdown
または xl reboot
を使って行うことも可能です。
xl
サブコマンドのほとんどは domU の名前などの 1 つか複数個の引数を取ります。これらの引数は xl(1) マニュアルページは詳しく説明されています。
init
process, and the resulting set looks very much like a virtual machine. The official name for such a setup is a “container” (hence the LXC moniker: LinuX Containers), but a rather important difference with “real” virtual machines such as provided by Xen or KVM is that there is no second kernel; the container uses the very same kernel as the host system. This has both pros and cons: advantages include excellent performance due to the total lack of overhead, and the fact that the kernel has a global vision of all the processes running on the system, so the scheduling can be more efficient than it would be if two independent kernels were to schedule different task sets. Chief among the inconveniences is the impossibility to run a different kernel in a container (whether a different Linux version or a different operating system altogether).
/sys/fs/cgroup
に仮想ファイルシステムをマウントする必要があります。Debian 8 からは init システムとして systemd が採用されており、systemd は control groups に依存しているため、設定せずとも /sys/fs/cgroup
は起動時に自動でマウントされます。
/etc/network/interfaces
, moving the configuration for the physical interface (for instance, eth0
or enp1s0
) to a bridge interface (usually br0
), and configuring the link between them. For instance, if the network interface configuration file initially contains entries such as the following:
auto eth0 iface eth0 inet dhcp
auto br0 iface br0 inet dhcp bridge-ports eth0
eth0
およびコンテナ用に定義されたインターフェースが含まれます。
/etc/network/interfaces
ファイルは以下のようになります。
# Interface eth0 is unchanged auto eth0 iface eth0 inet dhcp # Virtual interface auto tap0 iface tap0 inet manual vde2-switch -t tap0 # Bridge for containers auto br0 iface br0 inet static bridge-ports tap0 address 10.0.0.1 netmask 255.255.255.0
br0
インターフェースを介した問い合わせに応答するように設定する必要があります。
#
lxc-create -n testlxc -t debian
debootstrap is /usr/sbin/debootstrap Checking cache download in /var/cache/lxc/debian/rootfs-stable-amd64 ... Downloading debian minimal ... I: Retrieving Release I: Retrieving Release.gpg [...] Download complete. Copying rootfs to /var/lib/lxc/testlxc/rootfs... [...] #
/var/cache/lxc
の中に作成され、その後目的のディレクトリに移動されます。こうすることで、同一のコンテナが極めて素早く作成されます。なぜなら、単純にコピーするだけだからです。
--arch
option to specify the architecture of the system to be installed and a --release
option if you want to install something else than the current stable release of Debian. You can also set the MIRROR
environment variable to point to a local Debian mirror.
lxcbr0
, which by default is used by all newly created containers via /etc/lxc/default.conf
and the lxc-net
service:
lxc.net.0.type = veth lxc.net.0.link = lxcbr0 lxc.net.0.flags = up
lxcbr0
bridge on the host. You will find these settings in the created container's configuration (/var/lib/lxc/testlxc/config
), where also the device' MAC address will be specified in lxc.net.0.hwaddr
. Should this last entry be missing or disabled, a random MAC address will be generated.
lxc.uts.name = testlxc
lxc-start --name=testlxc
.
lxc-attach -n testlxc passwd
if we want. We can login with:
#
lxc-console -n testlxc
Connected to tty 1 Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself Debian GNU/Linux 11 testlxc tty1 testlxc login:
root
Password: Linux testlxc 5.10.0-11-amd64 #1 SMP Debian 5.10.92-1 (2022-01-18) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Wed Mar 9 01:45:21 UTC 2022 on console root@testlxc:~#
ps auxwf
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 18964 11464 ? Ss 01:36 0:00 /sbin/init root 45 0.0 0.2 31940 10396 ? Ss 01:37 0:00 /lib/systemd/systemd-journald root 71 0.0 0.1 99800 5724 ? Ssl 01:37 0:00 /sbin/dhclient -4 -v -i -pf /run/dhclient.eth0.pid [..] root 97 0.0 0.1 13276 6980 ? Ss 01:37 0:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups root 160 0.0 0.0 6276 3928 pts/0 Ss 01:46 0:00 /bin/login -p -- root 169 0.0 0.0 7100 3824 pts/0 S 01:51 0:00 \_ -bash root 172 0.0 0.0 9672 3348 pts/0 R+ 01:51 0:00 \_ ps auxwf root 164 0.0 0.0 5416 2128 pts/1 Ss+ 01:49 0:00 /sbin/agetty -o -p -- \u --noclear [...] root@testlxc:~#
/var/lib/lxc/testlxc/rootfs
) に制限されています。コンソールを終了するには Control+a q を使います。
lxc-start
starting using the --daemon
option by default. We can interrupt the container with a command such as lxc-stop --name=testlxc
.
lxc.start.auto
オプションが 1 に設定されているコンテナを起動する lxc-autostart
に依存しています)。起動順序を非常に細かく制御するには lxc.start.order
と lxc.group
を使います。デフォルトの場合、初期化スクリプトは onboot
グループに所属するコンテナを起動し、その後いかなるグループにも所属しないコンテナを起動します。どちらの場合も、グループ内の起動順序を制御するには lxc.start.order
オプションを使います。
qemu-*
コマンドがあっても心配しないでください。なぜならこのコマンドは KVM に関連するものだからです。
/proc/cpuinfo
内の CPU フラグに「vmx」または「svm」が含まれている場合、そのプロセッサは KVM を動かすことができることを意味します。
virt-manager
is a graphical interface that uses libvirt to create and manage virtual machines.
apt-get install libvirt-clients libvirt-daemon-system qemu-kvm virtinst virt-manager virt-viewer
. libvirt-daemon-system provides the libvirtd
daemon, which allows (potentially remote) management of the virtual machines running of the host, and starts the required VMs when the host boots. libvirt-clients provides the virsh
command-line tool, which allows controlling the libvirtd
-managed machines.
virt-install
コマンドが含まれます。virt-install
を使うことで、コマンドラインから仮想マシンを作成することが可能になります。最後に、virt-viewer を使うことで、仮想マシンのグラフィカルコンソールにアクセスすることが可能になります。
eth0
物理インターフェースと br0
ブリッジを備え、eth0
が br0
に接続されていることを仮定します。
libvirtd
where to store the disk images, unless the default location (/var/lib/libvirt/images/
) is fine.
#
mkdir /srv/kvm
#
virsh pool-create-as srv-kvm dir --target /srv/kvm
Pool srv-kvm created #
virt-install
の最も重要なオプションを詳細に見て行きましょう。virt-install
は仮想マシンとそのパラメータを libvirtd に登録し、インストールを進めるために仮想マシンを開始します。
#
virt-install --connect qemu:///system --virt-type kvm --name testkvm --memory 2048 --disk /srv/kvm/testkvm.qcow,format=qcow2,size=10 --cdrom /srv/isos/debian-11.2.0-amd64-netinst.iso --network bridge=virbr0 --graphics vnc --os-type linux --os-variant debiantesting
Starting install... Allocating 'testkvm.qcow'
--connect オプションは使用する「ハイパーバイザ」を指定します。これは仮想システムを表す URL (xen:// 、qemu:// 、lxc:// 、openvz:// 、vbox:// など) と VM をホストするマシン (ローカルホストの場合、空でも構いません) の形をしています。QEMU/KVM の場合、これに加えて各ユーザは制限されたパーミッションで稼働する仮想マシンを管理できます。この場合 URL パスは「システム」マシン (/system ) かその他 (/session ) かで識別されます。
| |
--virt-type kvm を指定することで KVM を使うことが可能です。--connect で指定した URL を一見すると QEMU が使われるように見えますが、これは KVM は QEMU と同じ方法で管理されているためです。
| |
--name オプションは仮想マシンの (一意的な) 名前を定義します。
| |
The --memory option allows specifying the amount of RAM (in MB) to allocate for the virtual machine.
| |
The --disk specifies the location of the image file that is to represent our virtual machine's hard disk; that file is created, unless present, with a size (in GB) specified by the size parameter. The format parameter allows choosing among several ways of storing the image file. The default format (qcow2 ) allows starting with a small file that only grows when the virtual machine starts actually using space.
| |
--cdrom オプションはインストール時に利用する光学ディスクの場所を指定するために使われます。場所には ISO ファイルのローカルパス、ファイル取得先の URL、物理 CD-ROM ドライブのデバイスファイル (例 /dev/cdrom ) のどれか 1 つを使うことが可能です。
| |
--network オプションはホストネットワーク設定の中に仮想ネットワークを統合する方法を指定します。デフォルトは既存のネットワークブリッジに仮想ネットワークを統合する方法です (例では明示的にこの挙動を指定しています)。指定したブリッジが存在しない場合、仮想マシンが到達できるネットワークは NAT を介した物理ネットワークだけに限定されるので、仮想マシンはプライベートサブネット範囲 (192.168.122.0/24) に含まれるアドレスを割り当てられます。
The default network configuration, which contains the definition for a virbr0 bridge interface, can be edited using virsh net-edit default and started via virsh net-start default if not already done automatically during system start.
| |
--graphics vnc states that the graphical console should be made available using VNC. The default behavior for the associated VNC server is to only listen on the local interface; if the VNC client is to be run on a different host, establishing the connection will require setting up an SSH tunnel (see 第 9.2.1.4 節「ポート転送を使った暗号化トンネルの作成」). Alternatively, --graphics vnc,listen=0.0.0.0 can be used so that the VNC server is accessible from all interfaces; note that if you do that, you really should design your firewall accordingly.
| |
--os-type と --os-variant オプションは、指定されたオペレーティングシステムの備える既知の機能に基づいて、仮想マシンのいくつかのパラメータを最適化するためのものです。
The full list of OS types can be shown using the osinfo-query os command from the libosinfo-bin package.
|
virt-install
を実行した時点で仮想マシンが実行されます。インストール作業に進むためには、グラフィカルコンソールに接続する必要があります。上の操作をグラフィカルデスクトップ環境から行った場合、自動的に接続が開始されます。そうでない場合、グラフィカルコンソールを開くために virt-viewer
を任意のグラフィカル環境から実行します (この時にリモートホストの root パスワードが 2 回尋ねられる点に注意してください。なぜなら、この操作には 2 つの SSH 接続を必要とするからです)。
$
virt-viewer --connect qemu+ssh://root@server/system testkvm
root@server's password: root@server's password:
virsh
を使って libvirtd
が管理している仮想マシンのリストを確認します。
#
virsh -c qemu:///system list --all Id Name State ---------------------------------- 8 testkvm shut off
#
virsh -c qemu:///system start testkvm
Domain testkvm started
vncviewer
へのパラメータの形で指定することが可能です)。
#
virsh -c qemu:///system vncdisplay testkvm
127.0.0.1:0
virsh
サブコマンドには以下のものがあります。
reboot
。仮想マシンを再起動します。
shutdown
。仮想マシンを正常にシャットダウンします。
destroy
。仮想マシンを無理やり停止します。
suspend
。仮想マシンを一時停止します。
resume
。一時停止された仮想マシンを再開します。
autostart
。ホスト起動時にこの仮想マシンを自動的に起動することを有効化します (または --disable
オプションを付けて無効化します)。
undefine
。仮想マシンのすべての痕跡を libvirtd
から削除します。