2013年03月26日

CentOS6.4(minimal) KVMによる仮想環境構築(テキストモード)

●概要
実機PCのCentOS6.4に、KVMによる仮想環境を構築し、
仮想PCに下記OSをインストールする。
 ・CentOS6.4
 ・WindowsXP
尚、すべての操作は、ターミナル(=CUI環境)にて、コマンドにて進める。
(*WindowsXPのインストール時のみ、VNCによるGUIインストールにて進める。
   (Windowsが、CUIによるインストールが不可能なOSのため。)


●仮想環境の構築
1.仮想環境ソフトをインストールする。
yum install qemu-kvm

 *下記もインストールされる。
   alsa-lib、celt051、flac、gnutls、gpxe-roms-qemu、libICE、libSM、libX11、libX11-common、libXau、
   libXext、libXi、libXtst、libaio、libasyncns、libjpeg-turbo、libogg、libsndfile、libtasn1、libusb1、
   libvorbis、libxcb、pixman、pkgconfig、pulseaudio-libs、qemu-img、seabios、sgabios-bin、spice-server、usbredir、
   vgabios
2.仮想化機能のライブラリをインストール。
yum install libvirt

 *下記もインストールされる。
   ConsoleKit、base、ConsoleKit-libs、augeas-libs、avahi-libs、cvs、cyrus-sasl-md5、dbus、dmidecode、dnsmasq、
   ebtables、eggdbus、gettext、gnutls-utils、hal、hal-info、hal-libs、hdparm、keyutils、libcgroup、
   libevent、libgomp、libgssglue、libnl、libpcap、libtirpc、libvirt-client、libxslt、lzo、lzop、
   nc、netcf-libs、nfs-utils、nfs-utils-lib、numactl、numad、parted、pm-utils、polkit、radvd、
   rpcbind、xz、yajl

3.仮想化環境のCUI用コマンドツールをインストール。
yum install python-virtinst

 *下記もインストールされる。
   libselinux-python、libvirt-python、libxml2-python

●ネットワーク設定(ブリッジインタフェース作成)
 <概要>
  ゲストPCを、ホストPCと同一ネットワークに所属させるため、
  ホストPCにて、ブリッジ接続用の、仮想インタフェースを作成する。
1.物理NICの設定ファイルを、コピー。
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-br0


2.物理NICの設定ファイル修正。
vi /etc/sysconfig/network-scripts/ifcfg-eth0

BRIDGE=br0 ←★ファイル内に追記する。

*上記以外の設定値などは、コメントアウト等せずに、そのままでOK。

3.仮想NICの設定ファイル修正。
vi /etc/sysconfig/network-scripts/ifcfg-br0

#DEVICE=eth0 ←★頭に#記号を追記してコメントアウト。
DEVICE=br0 ←★追記。
#TYPE=Ethernet ←★頭に#記号を追記してコメントアウト。
TYPE=Bridge ←★追記。

*上記以外の設定値などは、コメントアウト等せずに、そのままでOK。

4.NetworkManagerサービスを停止&OS起動時の自動起動設定を停止。
*本作業は、ホストPCがGUI環境でインストールされている場合のみ、必須。
 (=NetworkManagerサービスが、ブリッジ接続をサポートしていないため。とのこと。)
service NetworkManager stop

chkconfig NetworkManager off


5.ネットワークサービスの再起動。
/etc/init.d/network restart


6.ネットワークインタフェースの状態確認。
ifconfig

 *br0インタフェースの方に、IPアドレスが割り振られていること。
 *eth0インタフェースの方には、IPアドレスが割り振られていないこと。
 *ホストPCにて、今まで通り、ネットワークに接続できていること。

●ゲストPC用に、OSインストールメディアのイメージファイルの準備。
1.イメージファイルダウンロードのため、wgetをインストール。
yum install wget

2.イメージファイル保存先フォルダを作成。
mkdir -p /var/lib/libvirt/images/

3.イメージファイルをダウンロード
<CentOSをインストールしたい場合>
wget http://ftp.jaist.ac.jp/pub/Linux/CentOS/6.4/isos/x86_64/CentOS-6.4-x86_64-bin-DVD1.iso /var/lib/libvirt/images/

*CentOS-6.4-x86_64-minimal.iso だと、インストール時に失敗するので、
  DVDイメージファイルをダウンロードする。(Disk1のみでOK)
<WindowsXPをインストールしたい場合>
1.インストールCDを用意し、CDメディアからisoファイルを作成する。
dd if=/dev/cdrom of=/var/lib/libvirt/images/WindowsXP.iso


●ゲストPC用に、仮想HDDイメージファイルの作成
例>10GBの場合。
dd if=/dev/zero of=/var/lib/libvirt/images/hdd1.img bs=1M count=10240


●libvirtdサービスを起動。
1.下記コマンドを実行。
/etc/init.d/libvirtd start

*インストール直後は、libvirtdサービスが自動起動していないので、
  上記コマンドにて、libvirtdサービスを起動させる。
*libvirtdサービスは自動起動するようになっているので、(参考:checkconfigコマンド実施。)
  OS再起動でも可。
*libvirtdサービスが起動していない状態で、
  次項目のvit-installコマンドを実施すると、下記エラーが表示されるので注意。
   ERROR Failed to connect socket to '/var/run/libvirt/libvirt-sock': No such file or directory

●仮想PCの設定&OSインストール開始。
<CentOSの場合>
1.下記コマンドを実施し、インストールを開始する。
virt-install \
--virt-type=kvm \
--hvm \
--connect qemu:///system \
--vcpus 1 \
--ram=512 \
--os-type=linux \
--os-variant=rhel6 \
--network bridge=br0 \
--nographics \
--extra-args='console=tty0 console=ttyS0, 115200n8' \
--name pc1 \
--disk=/var/lib/libvirt/images/hdd1.img \
--location='/var/lib/libvirt/images/CentOS-6.4-x86_64-bin-DVD1.iso' \
--accelerate \

*注意:CentOS-6.4-x86_64-minimal.iso は、このインストール方法では使えない。
      <理由>「ERROR No option 'kernel' in section: 'images-x86_64'」とエラー発生するため。
      <原因>CDイメージファイルのルートにある、「.treeinfo」ファイルの内容にて、kernelへのパスが記述されてないため。
            *DVDイメージファイルの方には、記載されていて問題なく動作する。
*注意:CentOS6.4のisoイメージファイルを指定する際には、「--cdrom=」にて指定するのではなく、「--location=」で指定する。
      <理由>「ERROR --extra-args only work if specified with --location.」とエラー発生するため。
*注意:この方法でのインストール(=テキストモードインストール)では、
     GUIインストールとは異なり、パーティション等の編集メニューが出てこない。
     インストール時に指定したい場合には、キックスタートという方法にて、
     別途cfgファイルを用意してインストールすればよい。(詳しくは他サイトにて調べてください。)

<WindowsXPの場合>
1.シリアルポート接続経由にて、CUIでインストール・操作することが不可能なOSなため、
 VNC経由にて、GUIでインストール操作していく。
 そのため、VNC用に、ファイアフォールにて、TCP5900ポートを解放する。
iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 5900 -j ACCEPT

再起動後も、ポート開放状態を維持させるため、ファイアウォール設定を保存。
/etc/init.d/iptables save


2.下記コマンドを実施する。
virt-install \
--virt-type=kvm \
--hvm \
--connect qemu:///system \
--vcpus 1 \
--ram=512 \
--network bridge=br0 \
--os-type=windows \
--os-variant=winxp \
--name pc2 \
--disk=/var/lib/libvirt/images/hdd2.img \
--cdrom='/var/lib/libvirt/images/WindowsXP.iso' \
--noautoconsole \
--accelerate \
--vnc \
--vnclisten=0.0.0.0 \
--vncport 5900 \
--keymap=ja \

*--os-variant=xxxx については、virt-install --os-variant listコマンドにて、一覧表が表示される。


3.下記メッセージが表示され、止まったような状態になったら、VNCにて接続する。
Domain installation still in progress. Waiting for installation to complete.

*CentOSにて、VNCクライアントをインストールするには。
  yum install vnc
   =tigervncがインストールされる。
*CentOS環境での、VNCクライアント起動方法。
  vncviewer xxx.xxx.xxx.xxx:5900
   *xxx.xxx.xxx.xxx: 実機PCのIPアドレス。(仮想PCのアドレスではないので注意!)
*VNCクライアントでの、特殊キーの入力方法。
  例1>F8キー: vncviewer画面にて、F8押下→vncviewerのメニュー内より、F8を選択する。
  例2>Ctrl+Alt+Deleteキー: 同上の方法にて、Ctrl+Alt+Deleteを選択する。
*OSインストール中に、再起動がかかると、VNCの接続も切断されるので、
  再度同じ設定にて、再接続すれば、OSインストールを継続できる。


<VMware ESXiの場合>
1.シリアルポート接続経由にて、CUIでインストール・操作することが不可能なOSなため、
 VNC経由にて、GUIでインストール操作していく。
 そのため、VNC用に、ファイアフォールにて、TCP5900ポートを解放する。
iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 5900 -j ACCEPT

再起動後も、ポート開放状態を維持させるため、ファイアウォール設定を保存。
/etc/init.d/iptables save


2.下記コマンドを実施する。
virt-install \
--virt-type=kvm \
--hvm \
--connect qemu:///system \
--vcpus 1 \
--ram=1024 \
--network bridge=br0 \
--os-type=linux \
--os-variant=rhel6 \
--name pc30 \
--disk=/var/lib/libvirt/images/hdd30.img \
--cdrom='/var/lib/libvirt/images/VMware-VMvisor-Installer-5.1.0-799733.x86_64.iso' \
--noautoconsole \
--accelerate \
--vnc \
--vnclisten=0.0.0.0 \
--vncport 5900 \
--keymap=ja \

*--os-variant=xxxx については、virt-install --os-variant listコマンドにて、一覧表が表示される。


3.下記メッセージが表示され、止まったような状態になったら、VNCにて接続する。
Domain installation still in progress. You can reconnect to the console to complete the installation process.

*CentOSにて、VNCクライアントをインストールするには。
  yum install vnc
   =tigervncがインストールされる。
*CentOS環境での、VNCクライアント起動方法。
  vncviewer xxx.xxx.xxx.xxx:5900
   *xxx.xxx.xxx.xxx: 実機PCのIPアドレス。(仮想PCのアドレスではないので注意!)
*VNCクライアントでの、特殊キーの入力方法。
  例1>F8キー: vncviewer画面にて、F8押下→vncviewerのメニュー内より、F8を選択する。
  例2>Ctrl+Alt+Deleteキー: 同上の方法にて、Ctrl+Alt+Deleteを選択する。
*OSインストール中に、再起動がかかると、VNCの接続も切断されるので、
  再度同じ設定にて、再接続すれば、OSインストールを継続できる。

■■■■■仮想PCの利用手順■■■■■

●仮想PC一覧表示
virsh list --all


●仮想PC起動
virsh start xxxxxxxxxx

 *xxxxxxxxxx:仮想PC名。
 *起動と接続を同時に、バックグランドで、実施する場合には、下記参照。
  ・コンソール接続時。
virsh start xxxxxxxxxx ; console xxxxxxxxxx

 *xxxxxxxxxx:仮想PC名。
  ・VNC接続時。
virsh start xxxxxxxxxx ; vncviewer xxx.xxx.xxx.xxx:yyyyy &

 *xxx.xxx.xxx.xxx:ホストPCのIPアドレス。
 *yyyyy:VNCサーバのポート番号。
      (通常は5900。ゲストPCを2つ起動している場合には、2つ目は、5901。)


●起動中の仮想PCに接続
・コンソール接続
virsh console xxxxxxxxxx

 *xxxxxxxxxx:仮想PC名。
・VNC接続
vncviewer xxx.xxx.xxx.xxx:yyyyy

 *xxx.xxx.xxx.xxx:ホストPCのIPアドレス。
 *yyyyy:VNCサーバのポート番号。
      (通常は5900。ゲストPCを2つ起動している場合には、2つ目は、5901。)

●ホストOSのターミナルに切り替える。
Ctrlキーと]キー押下。

●ゲストOSのターミナルに切り替える。
virsh console xxxxxxxxxx

 *xxxxxxxxxxは、仮想PC名。

●仮想PC強制シャットダウン(=電源ケーブル抜去と同じ)
virsh destroy xxxxxxxxxx/blockquote>
 *xxxxxxxxxxは、仮想PC名。

●CD-ROMドライブの利用。
*ホストPC上の、isoファイルを利用する場合。
ホストPCにて、下記コマンド実施。
virsh attach-disk xxxxxxxxxx /var/lib/libvirt/images/yyyyyyyyyy.iso hdc --type cdrom --mode readonly --shareable
 *xxxxxxxxxx:仮想PC名。
 *yyyyyyyyyy.iso:isoファイル。
ゲストPCにて、下記コマンド実施。(ゲストOSが、CentOSの場合。)
mkdir -p /mnt/cdrom
mount -o ro /dev/sr0 /mnt/cdrom
ls /mnt/cdrom/

■■■■■仮想PCの編集手順■■■■■
●仮想PCの、設定編集方法
virsh edit xxxxxxxxxx

 *xxxxxxxxxxは、仮想PC名。

■■■■■仮想PCの削除手順■■■■■

●仮想PC一覧表示
virsh list --all


●仮想PCの、設定ファイルの内容を見て、HDDイメージファイルの場所を確認する。
cat //etc/libvirt/qemu/xxxxxxxxxx.xml

 *xxxxxxxxxxは、仮想PC名。

●仮想HDDを削除。
rm /xxxxxx.img


●仮想PCを削除。
virsh undefine xxxxxxxxxx

 *xxxxxxxxxxは、仮想PC名。

■■■■■仮想PCの複製手順■■■■■
1.複製元の仮想PCをシャットダウンさせておく。
2.仮想PCを複製
virt-clone -o xxxxx -n yyyyy -f /var/lib/libvirt/images/zzzzz.img

*xxxxx  :複製元の仮想PC名
*yyyyy  :複製先の仮想PC名
*zzzzz.img:複製先の仮想HDDファイル名。*既存で同名ファイルがある場合には削除しておくこと。

3.複製先の仮想PCにて、NIC設定ファイルのMACアドレス値修正。
  <本作業をする理由>
   複製先の仮想PCにて、下記エラーが発生し、ネットワークが利用できなくなるため。
  
インターフェース eth0 を活性化中: デバイス eth0 は存在しないようですので、初期化を遅らせます。
[失敗]

  <原因>
   virt-cloneコマンドによって、複製先の仮想PCには、
   自動で、複製元の仮想PCとは別の、MACアドレスが割り当てられているが、
   /etc/sysconfig/network-scripts/ifcfg-eth*ファイル内の、MACアドレス値までは、
   書き換えてくれていないので、この上記作業をする必要あり。
 3-1.仮想PCにて、認識しているNICを表示する。
 
ifconfig

 3-2.仮想PCにて、認識されていないNICも含めて、全てのNICを表示する。
 
ifconfig -a

 3-3.上記の「3-2.」に表示され、「3-1.」に表示されていないNICの、
   MACアドレス値を、コピーする。(*次項にて、ペーストする)
 3-4.仮想PCにて、NICの設定ファイルを修正する。(=認識していないNICの設定をする。)
 
vi /etc/sysconfig/network-script/ifcfg-eth0

 
#HWADDR=oo:oo:oo:oo:oo:oo ←★コメントアウトする。(複製元PCのNICのMACアドレスと同値なため。)
HWADDR=nn:nn:nn:nn:nn:nn ←★追記。ifconfig -aコマンド結果にてコピーした、新しいMACアドレス値を記載。

 3-5.仮想PCをシャットダウン
    *再起動では、上記修正内容が反映されないので注意!!

-----------
参考:
http://wiki.livedoor.jp/you_hiko/d/Kickstart
http://d.hatena.ne.jp/kenjiskywalker/20121123/1353662288

http://www.google.co.jp/url?sa=t&rct=j&q=virt-clone%20%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF&source=web&cd=2&cad=rja&ved=0CDMQFjAB&url=http%3A%2F%2Flab.unicast.ne.jp%2F2011%2F07%2F14%2Fvirt-clone-%25E3%2581%2597%25E3%2581%259F%25E3%2582%2589-eth0-%25E3%2581%258C-eth1-%25E3%2581%25AB%25E3%2581%25AA%25E3%2581%25A3%25E3%2581%25A6%25E3%2581%2584%25E3%2581%259F%25E4%25BB%25B6%2F&ei=ICNeUcQ4ibWJB9eugfAM&usg=AFQjCNHJWL6P5j5RzshOxLjsgLqy7TuoRw
http://d.hatena.ne.jp/think-t/20111123/p1


●Tips
【その1】
ターミナル画面の、文字色を変更する。(ゲストOSにて、設定しておくと便利。)
vi ~/.bashrc

下記を追記し、上書き保存。
#色変更
PS1_BAK=$PS1
PS1="\[\033[0;34m\]$PS1"

*34の部分は、数値変更すると色を変更できる。
  31:赤。
  32:緑。
  33:薄緑。
  34:青。
  35:紫。
下記コマンドを入力すれば、色が変わる。
bash


【その2】
<現象>
ホストPCがGUI環境にて、
ターミナル画面で仮想PCにシリアル接続した状態で、
ターミナル画面を一度閉じてしまい、再度、同じ仮想PCにシリアル接続を試行すると、
下記エラーが出て、接続できない。
エラー: operation failed: Active console session exists for this domain

<対処>
下記コマンドを実行して、libvirtdサービスを再起動させる。
/etc/init.d/libvirtd restart


【その3】
ゲストPCのネットワーク環境を、ブリッジから、NATへ変更する。
<概要>
ルーターホストOSーゲストOS
←ーー同一ネットワークーー→
↓変更
ルーターホストOSーゲストOS
←ネットAーーー→←ネットB→

<手順>
1.下記コマンドにて、仮想ネットワークを手動停止。
virsh net-define default
2.下記コマンドにて、既存の仮想ネットワーク設定ファイルをバックアップ。
cp /etc/libvirt/qemu/networks/default.xml
3.下記コマンドにて、既存の仮想ネットワーク設定を修正。
virsh net-edit default
4.下記コマンドにて、仮想ネットワークを手動開始。
virsh net-start default

参考HP:http://www.asahi-net.or.jp/~aa4t-nngk/xen2.html
http://d.hatena.ne.jp/tarao/20121231/1356973751

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/hide_system/51888446
この記事へのコメント
5
KVM環境のホストOSを再起動後、teratermでホストOSに対して接続できなくなりました。

3.複製先の仮想PCにて、NIC設定ファイルのMACアドレス値修正
の箇所を参考にしたら、現象改善できました。
ありがとうございます。
Posted by マスタ at 2016年03月22日 03:19

コメントする

名前
URL
 
  絵文字