Ubuntu16.04にKVM(qemu-kvm)のインストールで初期ログイン

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'

ポイントとしては、

  1. –extra-args ‘console=tty0 console=ttyS0,115200n8’
    でconsoleをなんだか指定しておかないとインストール画面が表示されない
  2. –location=’******.iso’
    (locationでisoを指定しないと)なんだかうまくいかない。
  3. その他のオプションは
    $ 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をインストールするときはどうするのだか…。

もうちょいサーバをいじいじして解決したいと思う。。。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください