はじめに
自由に使えるLinux環境が欲しいなと思いまして。
物理環境は色々やりすぎて壊れると面倒ですし、仮想環境を立てることにしました。
最近は仮想化といえばコンテナ仮想化(特にdocker)の話題が多いですが、端末丸ごと使い潰したい場合や、一から何度も構築の練習をしたい場合は従来からのハイバーバイザ仮想化の方が良いと踏んで始めてみようと思います。
KVMとは
Kernel-based Virtual Machine
Linuxで使われるハイパーバイザ型の仮想化基盤です。
CentOS7などではデフォルトで有効となっています。
今回の環境
ホストOS:CentOS Linux release 7.5.1804(Core)
CPU:Intel Celeron (コア数2) 詳細は忘れてしまった。コア数2以上ないと動かなかったような気も
ゲストOS:CentOS Linux release 7.6.180 (Core)
作成方法
必要なソフトウェア(パッケージ)のインストール
バージョンとかにこだわる必要がある人はソースからインストールする方法をググりましょう。
そうでない人は以下のコマンドを実行します。
$ sudo yum install -y qemu-kvm libvirt libvirt-client virt-install virt-manager bridge-utils
私も調べながらなので全て何に使うのか理解したわけじゃないですが
一応何に使うのか一覧を
qemu-kvm:KVMにおいて仮想マシンのハードウェアをエミュレートするもの
libvirt:仮想化管理用のAPI群
libvirt-client:仮想端末に接続するためのクライアント
virt-install:仮想端末をインストールするためのソフトウェア
virt-manager:仮想端末をGUIで管理するためのソフトウェア。Hyper-Vマネージャーのような存在。試していないがホスト側にGUI環境が存在していないなら不要だと思われる
ネットワーク周りの設定
調べてみると、仮想OSをインストールする前にまずはネットワークの設定が必要らしいです。
多分後からでもできるのですが手戻りが嫌なので先に設定します
ホストOSとゲストOSで通信するためと、ゲストOSがほすとOSのネットワークインターフェースを使用してインターネットに接続するためです。
やること
仮想ブリッジを作成してホストマシンの設定を移し替えます。
ホストマシンは作成した仮想ブリッジにNICを接続して通信をできるようにします。
仮想マシンは作成時にNICを仮想ブリッジに紐づけることになります。(ここは仮想マシンインストール時にやります)
仮想ブリッジの作成
以下のコマンドを実行します。
$ nmcli con add type bridge ifname br0
br0という名前(ifname)の仮想ブリッジを作成します。
以下のコマンドで作成できたかを確認します。
$ nmcli dev
DEVICE列がbr0 、TYPE列がbridge となっているデバイスがあればOKです。
CONNECTION列は上記コマンドでは指定していないのでデフォルト値になります。おそらくbridge-br0 となっていると思います。
仮想ブリッジにホストマシンのネットワーク設定を移し替え
以下のコマンドを、IPアドレスなどを自身のホスト環境のものに当てはめて実行します。
br0ではなく接続名(bridge-br0)を指定することに注意です
$ nmcli con mod bridge-br0 ipv4.method manual ipv4.address "192.168.0.10/24" ipv4.gateway "192.168.0.1" ipv4.dns "192.168.0.1"
書くまでもないレベルですが、
IPv4手動設定
IPアドレス設定
デフォルトゲートウェイ設定
DNSサーバ設定
を設定してます。コマンドの意味を考えながら学習すると、後から別のところで出てきたときに出てきやすくなりますね。
ホストマシンのNICを接続
この手順では一度ネットワークが切断されるので注意です。手順ミスをした時に元のIP設定が使えなくても接続できる方法(例えば物理的にディスプレイとキーボードを使う)があった方が安心です。
仮想ブリッジにNICを紐づける設定を追加します。
$ #仮想ブリッジにホストのNICを紐づける設定を追加
$ nmcli con add type bridge-slave ifname enp3s0 master bridge-br0
$ #次の手順でパスワードを求められて再起動がかからない状態で切断されないようにするために権限昇格
$ su
# #ホストの従来の設定を削除
# nmcli con del [元の設定の接続名] && reboot
再起動されるので、時間をおいて再度ホストに接続してください。
設定確認
$ nmcli dev
$ #DEVEICE: enp3s0 - TYPE: ehernet - CONNECTION: bridge-slave-enp3s0 のデバイスがあればOK
$ brctl show
$ #bridge name: br0 - interface: enp3s0 のブリッジがあればOK
$ ip a
$ #br0に元のホストのIPなどが設定されていればOK
以上でネットワークの設定完了です。
仮想マシンのインストール
ようやくゲストOSのインストールです。
ゲストOSのisoを取得
cURLで取得します。
ダウンロード元のURLはインストールするOSに応じて自分で探すしかないですが、筆者がインストールしたCentOSの場合ここ から適当ものを選びました。(ページが更新されている可能性はありますが)
例だと奈良のサーバです。
$ #iso保存用のディレクトリを作成(今回は/iso)
$ cd /
$ mkdir iso
$ curl -LO http://ftp.nara.wide.ad.jp/pub/Linux/centos/7.6.1810/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso
ゲストOSのインストール
調べると仮想ディスクの作成をしている手順もあるのですが、なくても仮想マシンの作成はできるよう。
コマンド実行
以下のコマンド実行時に自動で作成されている?(.qcow形式のファイルができるがこれがそうな気がする)
ちょっと理解しきれていないですが、今回は試すこと優先で進めたのでそのままインストールへ進みます。
$ sudo virt-install --name=testvm \
--memory=1024 \
--disk size=20 \
--vcpus=1 \
--location='/iso/CentOS-7-x86_64-DVD-1810.iso' \
--network bridge=br0 \
--graphics=none \
--extra-args='console=tty0 console=ttyS0, 115200n8'
オプションは適宜変更してもらえればと思います。
オプション
内容
name
作成する仮想マシンの名前
memory
仮想マシンのメモリ量
disk size
仮想マシンのディスクサイズ(GB単位)
cpus
仮想マシンの仮想CPU数
location
インストールするゲストOSのisoファイルのパス
network
ホストのどのブリッジを使用するかの設定
graphics
GUIを使用するか
(使用する場合はどのように設定するかは調べてません。kdeとかを指定するのかも)
extra-args
ホストマシンからゲストマシンへ接続するための設定
入出力デバイスとホストのコンソールを紐づけている?
最後の115200n8はない場合も見かけたが、ないと接続できなくなるような記述っぽいものもあったのでつけておくと無難。ボーレート、パリティ、データビット数の設定らしい。
コマンドを実行すると、色々と画面が流れて、CentOS7のインストーラanacondaが起動します。(最初Pythonのanacondaかと思って???となりました)
インストール
画面に従って設定していきます。
注意点は2点です。
設定中にqで抜けない
削除操作はdeleteキーで(back spaceではない)
特に1は、押してしまうとインストールが中断されます。動かない仮想マシンが出来上がります。
対処法は調べればあると思いますが、面倒だったので私は仮想マシンを一度削除して作り直しました。
設定を確定して先に進むときはc キーを押すようになっています。
設定が終わったらb キーでインストールを開始します。(全て設定する必要はないですが、全てやっておいた方が後で楽だと思います。)
自動で画面が進みますが、この画面で長期間止まります。筆者の場合は1時間くらい放置して別のことしていたら先に進んでました。調べてみるとBUGのような記述もあったのですが確信はできず
この画面になったらインストール完了です。Enterを押すと仮想マシンへログインできます。(インストーラでパスワードを設定していたらパスワードを求められる)
仮想マシンへの接続と切断
上記手順を実施した直後だと接続している状態ですが、ここは順序立てて説明します。
仮想マシン一覧の確認
以下のコマンドで。管理者権限でインストールした場合は確認時も管理者権限が必要です。(一般ユーザー権限でインストールできるかは未確認)
—all オプションをつけない場合は、起動中の仮想マシンのみを表示します。慣れておくと混乱しません。
$ sudo virsh list --all
接続
IDか名前で仮想マシンを指定して接続します。
$ sudo virsh console testvm
切断
接続時に書いてありますが、^ + ] で切断します。
WindowならCtrl + ] です。
おわりに
以上で、KVMでCentOS7の仮想マシンを使えるようになりました。
OSが起動しなくなるまで弄り倒してあげましょう。(ホストに影響のない範囲で。また、何らかの形でホスト含むOSが起動しなくなっても筆者は責任を取れません。 )
楽しいLinuxライフを!