ぱろっと・すたじお

技術メモなどをまったりと / my site : http://parrot-studio.com/

Hyper-Vの仮想環境にScientific Linux 6.1をインストールする

仕事の話なので細かい経緯は省略*1しますが、
WindowsServerのHyper-V上で、
Scientific Linux 6.1環境を複数動かすことになりまして


インストールを試すだけなら、普通にISOを突っ込んで起動すれば終わりなのですが、
実運用しようとすると、Hyper-Vと連携するモジュールが必須になります


今回はこれを実際に適用した手順+αのメモを...φ(・ω・`)


ちなみに、以前サーバを選定するにあたり、
Hyper-VにCentOS5.xを入れる手順も試していますが、
圧倒的に6系の方が楽になってます*2

仮想マシンの定義


メモリ・HDD等ご自由に
ネットワーク周りは「ネットワークアダプタ」を選択します*3

Scientific Linux 6.1のインストール


ISOファイルを用意しておいて、マウントするのが楽です
時間も短縮できます


ただし、WindowsServerをリモートで操作している場合、
SL6.1のインストーラーでGUIを使おうとしても、
マウスをキャプチャしてくれません


かといって、textインストールだとパッケージ構成が選べず、
初期段階ではネットワークが使えない=yumが使えないため、
GUIをキーボード操作するのをおすすめします
(tab/tab+shift/space/カーソル等)


同様の理由で、ネットワークの設定がグレーアウトしていますが、
Linux IS適用後にいじるので問題ないです

Linux IS v3.1のインストール


MSからダウンロードしたファイルはISO形式なので、
それをマウントし、中に入っているrpmをインストールします

# mount /dev/cdrom /media
# cd /media/x86_64
# rpm -ivh kmod-microsoft-hyper-v-rhel6-60.1.x86_64.rpm
# rpm -ivh microsoft-hyper-v-rhel6-60.1.x86_64.rpm


後はrebootすればいいのですが、
これを組み込んだ後はcdromのmountができなくなりますΣ(・ω・ノ)ノ


Linux IS v3.1のPDFファイルや、前述のBlogにもありますが、
もしcdromを使う必要がある場合は、
デバイスドライバの組み込みが必要です

insmod /lib/modules/$(uname -r)/kernel/drivers/ata/ata_piix.ko

まあ、ネットワークさえ動いていれば、普通はwgetとかするので、
あまり気にならないと思いますが

ネットワーク初期設定(強引な方法)


デバイスの組み込みができているので、
「ifup eth0」といきたいところですが、
なぜかうまくいきませんΣ(゚Д゚)ガーン


このあたりは先ほどのBlogに細かく書いてありますが、
以下の手順で一応動くようになります

  • ifconfig eth0 up
  • vi /etc/sysconfig/network-scripts/ifcfg-eth0
    • 存在しないので新規作成になる
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp
TYPE=Ethernet
HWADDR=XX:XX:XX:XX:XX:XX
IPV6INET=no
  • ifup eth0
    • エラーが出るけど無視する
  • system-config-netwok
    • eth0デバイス設定を開いて「Save」する
  • reboot


後はあるべき設定に書き直すだけです*4

yum周りの設定


これでHyper-V固有の問題は解決し、
後はSSH鍵やらsudoやら好きに設定すればいいのですが、
その前にSL特有のyum問題を解決しておきましょう


SLのyumはデフォルトだと公式のrepoのみを参照し、
非常に遅いため、mirrorの設定が必須です

  • vi /etc/yum.repos.d/sl.repo
    • mirrorlistのコメントを外す(sl/sl-securityの二箇所)
  • yum install yum-plugin-fastestmirror
  • yum clean all
    • 念のためやっておくけど、たぶん不要
  • yum update
    • fastestmirrorを選択してupdateが開始される
    • kernelもupdateしちゃってOK


このあたりのポリシーはCentOSとだいぶ違っていて、
6.0 -> 6.1のupdateも単純にyumを実行しただけではできません


研究開発環境用OSということで、
このあたりのポリシーを厳しくしているんだと思いますが、
一方で有用なリポジトリがyumから入れられるのは便利です

環境のコピーとネットワークの再設定


本番環境では複数の仮想マシンを同時に起動させるため、
ある程度構築が終わった段階で環境そのものをコピーし、
ネットワーク周りだけ修正して動くといいな・・・と思いますよね(´・ω・)?


というわけで、Linux ISまで適用した仮想HDDファイル(VHDファイル)をコピーし、
新しい仮想マシンにマウントしてみたのですが、
起動直後はやはりネットワーク周りがおかしくなってました


仮想NICのMACアドレスが変わり、
元々のeth0と違うデバイスとして認識されたため、
eth1として定義されています


なので、ifcfg-eth1を書いて「ifup eth1」すればいいのですが、
使うあてのないeth0が残ってるのが微妙に気持ち悪いなと(´-ω-)


気にしなければそれまでですが、
ついでなのでethをどこで定義しているのか調べてみました

/etc/udev/rules.d/70-persistent-net.rules

ここにeth0/1といったデバイスが定義されているので、
必要な方の設定だけ残し、eth0に書きかえれば、
新しいNICをeth0として扱うことができます


まあ、マスター環境を一つ作って、そこからVHDコピーする運用ならば、
結果的に全ての環境でeth1を使うことになるので、
あまり神経質にならなくてもいいと思いますが、ついでなので・・・

*1: RHELのKVMももちろん検討しましたが、いろいろ事情があって、WindowsServerがBetterという結論に

*2: 5.x用のLinux IC v2.0は、kernelに組み込む必要があったため、kernelをupdateするたびに再度組み込みが必要だったのですが、6.x用のLinux IS v3.1はrpmになったのでかなり楽です

*3: ちなみに5.x系の場合、一度「レガシーネットワークアダプタ」を入れなきゃならない等、非常に面倒です

*4: たぶん、もっとスマートな解決策があるのでしょうけども、今回は仕事なので「確実に動くとわかっている方法」で手順を作りました