CentOSをVMware環境上で便利に展開・運用する方法


RHEL系のメジャーなディストリビューションであるCentOSは、Debian系のUbuntuと並び、よく紹介されているLinuxです。業務環境で運用されている方もいれば、個人で触れている方もたくさんいます。
スーパーコンピューターにも搭載されているCentOSですが、仮想マシン上にも多くのCentOSマシンが展開されています。多くの場合、最小構成でのインストールが行われています。
ですが、VMware環境上で、最小構成でインストールしたCentOSを展開・運用するには少々注意しなければならない点があります。
本記事では仮想環境特有の注意するべき点を紹介いたします。

【環境】
インストールに使用するISO:CentOS 6.5のminimal.isoを想定します。
インストール先仮想環境:VMware PlayerまたはESXi、およびその双方
また、インストール時はデフォルトの設定を選択します。

※便宜的にrootアカウントを利用して進めています。セキュリティポリシーに合わせて適切なアカウントを用意し実行しましょう。

■1:[VMware Player限定]簡易インストールを使わない

VMware Playerで仮想マシン作成時に、「インストール元」にISOファイルを選択すると「簡易インストール」というオプションがあります。

easy_install

このオプションは自動的にインストールを進めてくれる便利な機能ですが、この機能をMinimal CentOSで使うと戸惑う事態が発生します。
そのまま簡易インストールを進めると、以下の画面で停止してしまい、強制終了させるしかなくなります。
強制終了させた場合、仮想マシンデータが破損して起動しなくなることがあります。(実際にありました。)

easy_install_13

再起動が正常に行われない原因ですが、スクリーンショット内の最後の行を見ると、「eject: command not found」と出力されています。
これは最後にインストールされるVMware Toolsの導入後に、仮想ディスクドライブ内にあるISOファイルをイジェクトしようとしていますが、Minimal CentOSではイジェクトを行うパッケージejectがデフォルトではインストールされません。
ejectがないので当然イジェクトは行われずその後の操作に移れず停止してしまいます。

インストール画面を覚えることも重要ですので、「後でOSをインストール」を選択しましょう。インストール画面は日本語のGUIで進められますので、苦労することなくインストールが可能です。

■2:VMware Toolsのインストールがそのままではできない

VMware環境に仮想マシンを展開した場合、VMware Toolsを導入することが大半だと思います。
VMware Player環境ではホスト・ゲスト間のフォルダ共有、ESXi環境では時刻同期、VMware Power CLIを使ったコーディングも可能です。
弊社が取り扱う仮想環境特化のバックアップツールVeeam Backup & Replicationも、OS問わずVMware Toolsのインストールを推奨しています。

しかし最小インストールのCentOSにはVMware Toolsは入りません。パッケージに不足があるためです。

non-perl_bad_interpreter

以下のパッケージを導入する必要があります。

eject – 手動でOSインストールしたからといって不要ではありません。VMware Toolsのインストールも仮想CDドライブに専用のISOがマウントされ、インストールの一番最後にejectコマンドを打ちます。
VMware Toolsのアップグレードのたびに引っかかるのは大変面倒です。すぐにインストールしましょう。

gcc – GNUコンパイラコレクション。VMware ToolsのプログラムはC++で書かれているため、コンパイラが必要です。gccをインストールしましょう。

perl – Linuxでは定番のスクリプト言語ですが、Minimal CentOSにはありません。そしてVMware Toolsのインストーラーはperlスクリプトです。これがないとインストールできません。

この3点さえあればVMware Toolsはインストールすることが可能です。yumを使い導入してしまいましょう。

■3:[ESXi限定]ネットワーク設定を調整せずにテンプレート化およびクローンしてはいけない

作成した仮想マシンは、環境の大規模展開を想定している場合や、再度のインストールが面倒な場合に、必要に応じてテンプレート化されます。
しかし、この際、作成したMinimal CentOS仮想マシンをそのままテンプレート化しないでください。

そのままではLinuxのデバイス管理を司るudevがethXごとにMACアドレスを記録してしまっています。
そのため、テンプレートからの展開で新しい仮想NIC(=新しいMACアドレス)割り当てが行われた際にeth0と別のネットワークアダプタeth1として認識されてしまい、既存のネットワークアダプタeth0が起動せず、ネットワーク接続がうまくいきません。
一方、フルインストール版(デスクトップ環境を含む)ではネットワーク接続ができているように見えます。

これはフルインストール版ではネットワーク設定に関してはNetworkManagerが管理しており、新しいNICに対しても従来のネットワーク設定が利用されているためです。
ifconfig -aで確認すると、eth0ではなく新しいeth1がネットワークに接続できていることが表示されます。

ifconfig-a_restored_centos_desktop

一方、Minimal CentOS仮想マシンでは、NetworkManagerがインストールされず、従来からのNetwork Administration Tool(NAT)が使われます。これはNetworkManagerのようなネットワーク設定の転用をしないため、ネットワーク接続ができなくなります。

ifconfig-a_restored_centos

このイーサネット接続の問題に対する解決策は2つあります。

●1:/etc/udev/rules.d/70-persistent-net.rulesを編集する。
これは、ネットワークインターフェースの関連付けをMACアドレスではなく、PCIアドレス(PCI ID)に結びつけることにより自動再設定を回避するという方法になります。
VMwareのVMXNET3環境であれば、PCIアドレスはすべてVMwareのものとなっています。
E1000環境であれば、ESXiホストにささっているNICの製造元のものとなっています。
※以下ではVMXNET3環境の場合を案内します。E1000環境では適宜読み替えて設定を行ってください。

以下、手順を案内します。
まず/etc/sysconfig/network-scripts/ifcfg-eth0を編集してHWADDRの設定行を削除します。
このファイルがない、またはHWADDRがもともとない場合は編集する必要はありません。

PCIアドレスはlspciコマンドで確認可能ですが、Minimal CentOSにはこのコマンドを含むpciutilsパッケージがインストールされていないので、インストールします。
lspci | grep VMXNET3で結果がアダプターに応じて表示されます。

lspci-grep-vmxnet3_on_centos


03:00.0 Ethernet controller: VMware VMXNET3 Ethernet Controller (rev 01)

行の先頭(下線部)がPCIアドレスです。これをメモします。これを元に以下の手順に従いに70-persistent-net.rulesを書き換えます。
(事前にコピーしてバックアップを取得してください。)

  • DRIVERS項目の値をvmxnet3(小文字必須)に書き換え
  • ATTR{address}の項目をすべて削除
  • BUS項目を追加し、値にpci(小文字必須)を設定
  • ID項目を追加し、値に「0000:」+lspciの結果(上記の下線部)を設定します。

etc-udev-rules.d_on_minimal_centos2


※画像黄枠
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:50:56:a4:2f:b4", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

※画像赤枠
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="vmxnet3", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0", BUS=="pci", ID=="0000:03:00.0"

この状態で再起動し、正常にeth0が認識されているのを確認した後、テンプレートを作成すれば問題ありません。

●2:/lib/udev/rules.d/75-persistent-net-generator.rulesを編集する。
もう1つの方法は上記/etc/udev/rules.d/70-persistent-net.rulesを生成するための設定ファイル/lib/udev/rules.d/75-persistent-net-generator.rulesを編集することです。
etc内のネットワークアダプタ設定情報は、lib内のジェネレータルールに基づき記録されています。
ジェネレータルールを編集し、VMware環境上でテンプレートからの展開・クローンを行っても設定情報を生成しないようにします。

以下、手順を案内します。
まず/etc/sysconfig/network-scripts/ifcfg-eth0を編集してHWADDRの設定行を削除します。
このファイルがない、またはHWADDRがもともとない場合は編集する必要はありません。

続いて現在の設定情報を持っているファイル/etc/udev/rules.d/70-persistent-net.rulesを削除します。
次に/lib/udev/rules.d/75-persistent-net-generator.rulesを開きます。
このうち、# ignore Xen virtual interfacesの行を探し、その上に以下の2行を追記してください。

# ignore VMWare virtual interfaces
ENV{MATCHADDR}=="00:0c:29:*|00:50:56:*", GOTO="persistent_net_generator_end"

lib-udev-rules.d_on_restored_centos

これで、新しい仮想ネットワークアダプタが接続されてもMACアドレスの固定が発生しなくなります。(70-persistent-net.rulesが作成されなくなります。)

Ubuntu仮想マシンでは、Minimal CentOS仮想マシンで起きる、udev由来のネットワーク問題は発生しません。
なぜなら、生成ルール内に、VMwareやHyper-Vといった仮想環境上ではインターフェースとMACアドレスの関連付けを行わないように、例外が設定されているためです。
上記CentOSの設定方法はこの設定に基づき案内しております。

lib-udev-rules.d_on_ubuntu_2

関連トピックス:

カテゴリー: VMware タグ: , , パーマリンク

コメントを残す

メールアドレスが公開されることはありません。

 

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

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