KVM(qemu-kvm)+virshで仮想マシンの構成を作成した際に初回ログインに苦労したので、その時のメモ
環境
- Ubuntu Server 16.04 LTS (ホストOS,ゲストOS)
- qemu-kvm
- virt-install (インストールコマンド)
- 自分の利用しているPC(Mac)からsshでUbuntu(ホスト)に入り、そこでKVM環境を作成・仮想マシン(ゲスト)を作成
解決方法
ブリッジ接続で仮想マシンをインストール後、dhcpサーバのIP払い出し状況などから適当に当たりそうなIPに対してsshする。
当たったらめでたし!
正直、むちゃ強引なやり方だと思いますが、これしか思いつかなかった…。
KVMのインストール
とらりもん – KVMに詳しく解説されていたので、基本的なインストールの説明は省く。
自分の実行したコマンドのみメモ。
sudo -s apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils # (↓動作確認) virsh -c qemu:///system list apt-get install qemu setcap cap_net_admin=ei /usr/bin/qemu-system-x86_64 # (↓動作確認 | はパイプ記号) lsmod | grep kvm
OSのインストール
こちらも同様のサイトにあるインストール方法のうち、2. virt-insta(CUI)を使った方法を参考にインストールを行った。
ubuntuは公式サイトからUbuntu Server 16.04 LTSをwgetでダウンロードした。
(OSはカレントディレクトリにあるとして…)
# 最終的にこのコマンドではうまくいってません!!! sudo virt-install --name=ubuntu1604 --memory=2048 --disk path=/var/lib/libvirt/images/ubuntu1604.img,size=20 --location=./ubuntu-16.04-server-i386.iso --connect qemu:///system --graphics none --vcpus=1 --extra-args 'console=tty0 console=ttyS0,115200n8'
ポイントとしては、
- –extra-args ‘console=tty0 console=ttyS0,115200n8’
でconsoleをなんだか指定しておかないとインストール画面が表示されない - –location=’******.iso’
(locationでisoを指定しないと)なんだかうまくいかない。 - その他のオプションは
$ man virt-install
を参照。
この状態でインストールを進めると、キーボードレイアウトやユーザ名、パスワードなど一通り聞かれてインストール作業が無事に完了する。
最後に再起動をかけると…ログインできない…。
ログインするために
sudo virsh console ryuiki3
などでサーバーにログインしようとするのですが、毎度
sudo virsh # console hogehoge ドメイン hogehoge に接続しました エスケープ文字は ^] です
と表示されるだけで、それ以上操作できません。( Ctrl + ] でコンソールを抜けられます。)
“エスケープ文字は ^] です KVM” とかでググると解決策が、ゲストOS側(ログインする先)のgrubの設定をいじったりしてコンソールログインするための設定が必要だとか。。。
…ログインできない状態でどうやっていじるの…?
(もし、知ってる方がいたら教えてくださると嬉しいです。。。
そんなこんなで、結局OSインストール時にsshdをインストールして最初からssh接続しよう!って結論に辿り着きました。
sshするための設定
ホストOS側のネットワーク設定でブリッジ接続の設定を書きます。ブリッジ設定については(KVMブリッジネットワークの設定 | TsutomuNakamura – Qiita)に書かれている通り行いました。
/etc/network/interfaces のファイルを編集
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto p2p1 iface p2p1 inet manual iface br0 inet static address 192.168.1.200 # network 192.168.1.1 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 192.168.1.1 bridge_ports p2p1 bridge_stp off auto br0 # This is an autoconfigured IPv6 interface # iface p2p1 inet6 auto
上の設定は自分の場合の設定です。ちょっとメモ
- p2p1は環境によって変わるかもしれません。最初に記載されているのを変更しないのが吉
- 環境によって192.168.Z.XXXのZは自分の環境に合わせて。。。
- iface br0…の下の行の192.168.1.200 は自宅内でのホストOSの例。
- networkは以前も設定してなくて動いてたので…コメントアウトのままで。
- inet6はIPv6の設定だと思うのですが、とりあえず使わないのでコメントアウト
そんでもって、OSのインストールからです。
# 最終的にインストールを行ったコマンド virt-install --name=ubuntu1604-2 --memory=2048 --disk path=/var/lib/libvirt/images/ubuntu1604-2.img,size=20 --location=./ubuntu-16.04-server-i386.iso --connect qemu:///system --graphics none --vcpus=1 --extra-args 'console=ttyS0' --network bridge=br0,model=virtio
–network bridge=br0,model=virtio が追加されています。bridgeはさきほどの設定に書いたブリッジの名前、modelはとりあえずこうしておけば間違いがない(らしい)ので、とりあえず。。(ソース)
この設定で先ほどと同様にインストールを進めていきます。
インストール終了後、dhcpサーバの管理画面よりIPの出払い状況を見て後から追加されたっぽいIPに対してsshして当たったらめでたし。
環境によって異なると思うのですが、自分の場合は自宅のIPはモデム兼ルータ兼…が行っており、IPの払い出し状況は192.168.1.1にアクセスしログイン->情報->DHCPv4サーバ払い出し状況 からDHCPによって割り振られたIPのリストが取得できました。
それらに対してIPの大きい順に順番にsshをしていくと…無事にログインできました。デフォルトはパスワード認証が可能でポートも22番から変わっていないので…
ssh username@192.168.Z.XXX
みたいな感じにやっていけば、そのうち当たります。
まとめ
相当ひどい解決策ですが、無事にkvmでの仮想化環境を構築できた。たぶん、もっといい解決策があるのだろうけど…。
一度IPを当てれば、その仮想サーバのIPを固定し、サーバをコピーしてやれば…大変だ…。
さらにさらに、Ubuntu以外(初期でsshdのインストール、起動を行ってくれる)でのOSをインストールするときはどうするのだか…。
もうちょいサーバをいじいじして解決したいと思う。。。