【KVM】VMのコピーはやらない方がよさそう

VMをコピーして使うとIPアドレスとかマシン名とか色々被る。
ディスクイメージファイルをコピる。
cd /var/lib/libvirt/images
cp  VMsrc.qcoq2  VMdis.qco12
定義ファイルをコピる。
/etc/libvirt/qemu/VMsrc.xml
/etc/libvirt/qemu/VMdis.xml
定義ファイルの中も名前を変える
<name>VMdis</name>
<uuid>後述</uuid>
<source file=’/var/lib/libvirt/images/VMdis.qcow2’/>
<mac address=’後述‘/>
後述なのですが・・・

28.8. 新規の特有 MAC アドレスを生成

に書いてあるpythonのコードは
./macgen.py: 行 4: import: コマンドが見つかりません
./macgen.py: 行 6: 予期しないトークン `(‘ 周辺に構文エラーがあります
./macgen.py: 行 6: `def randomMAC():’
とエラーになって使えません。

sh ./macgen.py
じゃダメだよね。

python ./macgen.py
 File "./macgen.py", line 13
 print randomMAC()
               ^

まだダメらしい。
pythonの仮想環境をインスト。
これで、
# pyenv versions
でインスト済みのバージョンを調べ、無かったら・・・
# pyenv install –list
でインストできるバージョンを調べ、
# pyenv install インストールするバージョン
※要らないバージョンは uninstall  で削除。
でインストした後に
#  pyenv local 3.4.3
# python –version   で確認。
とすれば、自分だけインストールした中から好きなpythonを使える。
っと便利になったところで・・・結局は・・・
print randomMAC()
この辺はRedHatがそのような文化らしいので、
CentOSでは
print (randomMAC())
と変えなくてはいけないらしい。
pyenv での変更は ユーザのホームディレクトリィの.pyなんたらファイルを2個消して再ログインすればOK。
これでMAC ADDRESSはGET。
virtinst.utilパッケージを使うともっと良い!と書いてあったが
ImportError: No module named virtinst.util
そんなものはここにはなかった。
find / -name *virtinst* -print に願いをかけたら
/usr/share/virt-manager/virtinst と答えが返ってきた
中にちゃんと util.py もある。
export PYTHONPATH=”/usr/share/virt-manager:$PYTHONPATH” の後もエラー
util.py には randomUUIDは、あるものの パラメータ CONN が必要で・・・
ってソース読んだらテスト用のパラメータだった。 orz
uuidToStringとrandomMACが無かった!
でもUUIDは取れたし、MACアドレスはサンプルに載っていたので
new_uuid_mac.pyは

※以下はRedHatの参考コード+赤い文字は書き換えた部分
#!/usr/bin/python ※which pythonで見つかったパスを設定する
# -*- coding: utf-8; mode: python; -*-
#
# export PYTHONPATH="/usr/share/virt-manager:$PYTHONPATH"
import sys; sys.path.append('/usr/share/virt-manager')
import virtinst.util; print("MAC UUID: " + virtinst.util.randomUUID("dummy"))
import random
def randomMAC():
 mac = [ 0x00, 0x16, 0x3e, random.randint(0x00, 0x7f), random.randint(0x00, 0xff), random.randint(0x00, 0xff) ]
 return ':'.join(map(lambda x: "%02x" % x, mac))
print("MAC ADDRESS: " + randomMAC())

でいいんじゃないかな?
で、
結局は
pythonの新バージョンとか仮想環境の準備は全く不要でした。
 
あ、マシン名は
ネットワークの接続をハズして・・・
virsh start  VMdis
virsh console VMdis

vi /etc/hostname で書き換えてreboot
起動せずに/etc/hostnameを書き換えたい場合はループデバイスを使ってマウントしてしまえばいいけど
CentOS7では自動作成したディスクでは皆同じなので、ゲスト側のボリュームグループ名を一時的に書き換えてからマウントすることになる。

というわけで、
面倒な気がしても
実際には

キックスタートファイル

を作って
virt-installで新インストした方がよさそうだ。
 
 
 
 
 
 
 
 


    



コメントを残す

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

CAPTCHA