CentOS7のvirt-cloneで重複したMACアドレスを使用する


Table of Contents


1 重複したMACアドレスを使用

私は仮想環境を以下の通りに使用してます。

– 予めベースとなる仮想マシンを用意しておく(例:Fedora20ベース)- DHCPサーバにベースとなる仮想マシンのMACアドレスに対する静的な IPアドレスを登録しておく- 仮想マシンを使用するクライアントマシンの/etc/hostsにホスト名と IPアドレスを登録しておく- 用途に合わせてベースとなる仮想マシンをクローンして使用する (例:Android構築用)- クローンしたマシンはベースとMACアドレスが同一である為、 クライアントマシンからssh [ホスト名]で接続できる

重複したMACアドレスが使用できない場合、DHCPサーバから静的なIPアドレスが分配されず、ssh [ホスト名]で接続できなくなり困りました。


2 virt-cloneコマンドのパッケージが変更

本現象が発生したのはCentOS6とCentOS7で/usr/bin/virt-cloneのパッケージが別のものになっている為です。

2.1 CentOS6のvirt-clone

/usr/bin/virt-cloneにクローン処理のpythonソースコードが記載されています。

python-virtinst.noarch : Python modules and utilities for installing virtual : machines

2.2 CentOS7のvirt-clone

/usr/bin/virt-cloneは/usr/share/virt-manager/virt-cloneを呼び出し、/usr/share/virt-manager/配下のpythonソースコードを使用します。

virt-install.noarch : Utilities for installing virtual machines

3 virt-cloneコマンドが呼び出すcloner.pyを変更

pythonソースコードとバイトコードのバックアップを取っておきます。

# cp /usr/share/virt-manager/virtinst/cloner.py{,.org}

以下の通り、ランタイムエラーを呼び出す箇所を警告出力に変更します。virt-cloneコマンドで-dオプションを指定すればpythonのスタックトレースが出力されるので該当箇所を見つけることができます。

# diff -uprN /usr/share/virt-manager/virtinst/cloner.py{.org,}— /usr/share/virt-manager/virtinst/cloner.py.org 2015-05-03 01:45:11.703676348 +0900+++ /usr/share/virt-manager/virtinst/cloner.py 2015-05-03 01:45:43.653392218 +0900@@ -166,7 +166,7 @@ class Cloner(object): for m in maclist: msg = VirtualNetworkInterface.is_conflict_net(self.conn, m)[1] if msg:- raise RuntimeError(msg)+ logging.warning(msg) self._clone_macs = maclist def get_clone_macs(self):

pythonソースコードをコンパイルします。

# python -O -m compileall /usr/share/virt-manager/virtinst/cloner.py# python -m compileall /usr/share/virt-manager/virtinst/cloner.py

以上でvirt-cloneで重複したMACアドレスを使うことができます。


4 webvirtmgr

webvirtmgrではvirt-cloneコマンドを使わず、libvirtのインターフェースを直接呼び出しているようで、重複したMACアドレスを使うことができます。

5 まとめ

そもそも仮想環境運用時にMACアドレスが重複することによるエラー検出は手間が掛かる為、virt-cloneコマンドで重複したMACアドレスを使えないようにしているので、上記修正は好ましいものではないです。

virt-cloneコマンドに重複したMACアドレスを許可するオプションを追加するのがより良い方法です。

DHCPサーバで動的にIPアドレスを分配しつつ、クローンしたマシンをDNSサーバに登録していく方式が最適です。

Android | Linux | SDL - Narrow Escape