*ゲストOSのネットワークの設定 [#mb382594]
 
ゲストOSに、フロントエンドノードが割り当てたIPアドレスを設定するための方法を紹介します。~
ここでは新しく用意したイメージを使うものとします。
ここでは新規に作成したイメージを使う場合を想定しています。

*イメージファイルの作成 [#w102190d]

qemu-imgコマンドを使って空のイメージファイルを作成します。~
ここでは、ubuntu.imgという名前にしています。

 # qemu-img create -f qcow2 ubuntu.img 30G

続いてqemuで起動し、イメージファイルにOSをインストールします。~
(Ubuntuインストーラのisoファイルは用意してあるものとします。)

 # qemu -boot d -cdrom ubuntu.iso ubuntu.img

後はインストーラに沿ってインストールを進めます。

*ネットワークの設定用スクリプト [#weee5d78]

インストールの段階で静的にアドレスを設定しても良いですが、~
ゲストOSごとに違うイメージを毎回作るのも手間です。~
同じイメージを使いまわせるように、
スクリプトを使ってMACアドレスから動的に設定します。~
このスクリプトはOpenNebulaが配布しているttylinuxで使われているものです。

 #!/bin/bash
 #
 # chkconfig: 2345 10 90
 # description:  network reconfigure
 #
 # -------------------------------------------------------------------------- #
 # Copyright 2002-2009, Distributed Systems Architecture Group, Universidad   #
 # Complutense de Madrid (dsa-research.org)                                   #
 #                                                                            #
 # Licensed under the Apache License, Version 2.0 (the "License"); you may    #
 # not use this file except in compliance with the License. You may obtain    #
 # a copy of the License at                                                   #
 #                                                                            #
 # http://www.apache.org/licenses/LICENSE-2.0                                 #
 #                                                                            #
 # Unless required by applicable law or agreed to in writing, software        #
 # distributed under the License is distributed on an "AS IS" BASIS,          #
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
 # See the License for the specific language governing permissions and        #
 # limitations under the License.                                             #
 #--------------------------------------------------------------------------- #
 
 # Gets IP address from a given MAC
 mac2ip() {
     mac=$1
 
     let ip_a=0x`echo $mac | cut -d: -f 3`
     let ip_b=0x`echo $mac | cut -d: -f 4`
     let ip_c=0x`echo $mac | cut -d: -f 5`
     let ip_d=0x`echo $mac | cut -d: -f 6`
 
     ip="$ip_a.$ip_b.$ip_c.$ip_d" 
 
     echo $ip
 }
 
 # Gets the network part of an IP
 get_network() {
     IP=$1
 
     echo $IP | cut -d'.' -f1,2,3
 }
 
 get_interfaces() {
     IFCMD="/sbin/ifconfig -a" 
 
     $IFCMD | grep ^eth | sed 's/ *Link encap:Ethernet.*HWaddr /-/g'
 }
 
 get_dev() {
     echo $1 | cut -d'-' -f 1
 }
 
 get_mac() {
     echo $1 | cut -d'-' -f 2
 }
 
 gen_hosts() {
     NETWORK=$1
     echo "127.0.0.1 localhost"
     for n in `seq -w 01 99`; do
         n2=`echo $n | sed 's/^0*//'`
         echo ${NETWORK}.$n2 cluster${n}
     done
 }
 
 gen_exports() {
     NETWORK=$1
     echo "/images ${NETWORK}.0/255.255.255.0(rw,async,no_subtree_check)"
 } 
 
 gen_hostname() {
     MAC=$1
     NUM=`mac2ip $MAC | cut -d'.' -f4`
     NUM2=`echo 000000$NUM | sed 's/.*\(..\)/\1/'`
     echo cluster$NUM2
 }
 
 gen_interface() {
  DEV_MAC=$1
  DEV=`get_dev $DEV_MAC`
  MAC=`get_mac $DEV_MAC`
  IP=`mac2ip $MAC`
 
 cat <<EOT
  DEVICE=$DEV
  BOOTPROTO=none
  HWADDR=$MAC
  ONBOOT=yes
  TYPE=Ethernet
  NETMASK=255.255.255.0
  IPADDR=$IP
 EOT
 
     if [ $DEV == "eth0" ]; then
       echo " GATEWAY=$NETWORK.1"
     fi
 
 echo ""
 }
 
 
 IFACES=`get_interfaces`
 
 for i in $IFACES; do
     MASTER_DEV_MAC=$i
     DEV=`get_dev $i`
     MAC=`get_mac $i`
     IP=`mac2ip $MAC`
     NETWORK=`get_network $IP`
 done
 
 # gen_hosts $NETWORK > /etc/hosts
 
 # gen_exports $NETWORK  > /etc/exports
 
 # gen_hostname $MAC  > /etc/hostname
 (
 cat <<EOT

このスクリプトではMACアドレスの下位32bitからIPアドレスを生成しています。~
ルールとしては
IPアドレスが10.0.0.1であればMACアドレスは00:03:0a:0:0:01のように、00:03以降にIPアドレスがそのまま入ります。~
(16進数で表示されるので10なら0aになる)~
OpenNebulaで割り当てられるゲストOSのMACアドレスも、
同様のルールでIPアドレスから生成されているため、~
このスクリプトを使用するとフロントエンドノードが割り当てた物と同じアドレスが使われます。

またnetmaskは255.255.255.0、デフォルトルートは同じネットワークの1番のアドレスが設定されます。~
こちらは使用する環境に合わせて、該当箇所を変える必要があります。

このスクリプトをゲストOS内の/etc/init.d/vmcontextttyとして保存し、
起動時に呼び出すように設定します。

*リンク [#h938071e]
-[[ゲストOSの構築>OpenNebula/ゲストOSの構築]]~
-[[A VM with Context & Network 1.4>http://www.opennebula.org/documentation:rel1.4:vmg]]



トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS