*ゲスト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]]