Statistiques
| Révision :

root / trunk / shell / create-start-front-end @ 17

Historique | Voir | Annoter | Télécharger (5 ko)

1
#! /bin/bash -x
2
#
3
# ST - 2012-03-09
4
#
5
# Create and start the front end.
6
#
7
# Get the directory of the script.
8
SCRIPT_PATH=`dirname $0`
9
# Get the script name.
10
SCRIPT_NAME=`basename $0`
11
# Source the common configuration variables.
12
. $SCRIPT_PATH/c-i-a-b.common
13
#
14
# Check that the front-end virtual machine does not already exist.
15
#
16
CURRENT_HOST_NAME=$FRONT_END_NAME
17
IS_RUNNING=`xm list | grep $CURRENT_HOST_NAME`
18
if [ -n "$IS_RUNNING" ]
19
  then
20
    echo
21
    echo The \"$CURRENT_HOST_NAME\" domU already exists. Aborting!
22
    echo
23
    exit 1
24
fi
25

    
26
# Create the VM system disk.
27
lvcreate -L$FRONT_END_SYSTEM_DISK_SIZE \
28
         -n  $FRONT_END_SYSTEM_DISK \
29
         $FRONT_END_SYSTEM_VOLUME_GROUP
30
# Create a File System on the VM system disk.
31
mkfs -t $FRONT_END_SYSTEM_DISK_FILE_SYSTEM \
32
        $FRONT_END_SYSTEM_VOLUME_GROUP_DEVICE/$FRONT_END_SYSTEM_DISK
33
# If necessary, create the swap volume for the front end.
34
if [ $FRONT_END_SWAP_DISK_SIZE != $CONST_NULL_DISK_SIZE ]; then
35
  lvcreate -L $FRONT_END_SWAP_DISK_SIZE \
36
           -n $FRONT_END_SWAP_DISK \
37
           $FRONT_END_SWAP_VOLUME_GROUP
38
  mkswap $FRONT_END_SWAP_VOLUME_GROUP_DEVICE/$FRONT_END_SWAP_DISK
39
fi
40
# Mount the system disk to copy all the specific files.
41
if [ ! -d $FRONT_END_SYSTEM_DISK_MOUNT_POINT ]; then
42
  mkdir $FRONT_END_SYSTEM_DISK_MOUNT_POINT
43
fi
44
mount $FRONT_END_SYSTEM_VOLUME_GROUP_DEVICE/$FRONT_END_SYSTEM_DISK \
45
      $FRONT_END_SYSTEM_DISK_MOUNT_POINT
46
#
47
# Configure the specific files from templates
48
#
49
# /etc/network/interfaces
50
# The first interface is DHCP configured.
51
CURRENT_PATH=/etc/network
52
cp templates$CURRENT_PATH/$FRONT_END_INTERFACES_TEMPLATE \
53
   $FRONT_END_SYSTEM_DISK_MOUNT_POINT/$CURRENT_PATH
54
ADDRESS="$COMPUTE_NODE_STATIC_NETWORK_PREFIX.$FRONT_END_STATIC_NETWORK_POSTFIX"
55
rpl __STATIC_ADDRESS__ $ADDRESS  \
56
    $FRONT_END_SYSTEM_DISK_MOUNT_POINT/$CURRENT_PATH/interfaces
57
# /etc/hostname
58
CURRENT_PATH=/etc
59
echo $CURRENT_HOST_NAME > "${COMPUTE_NODE_DISK_MOUNT_POINT}${CURRENT_PATH}/hostname"
60
# /etc/hosts
61
CURRENT_PATH=/etc
62
CURRENT_HOST_IP="${COMPUTE_NODE_STATIC_NETWORK_PREFIX}.${FRONT_END_STATIC_NETWORK_POSTFIX}"
63
cp templates$CURRENT_PATH/hosts \
64
   $FRONT_END_SYSTEM_DISK_MOUNT_POINT/$CURRENT_PATH
65
rpl __COMPUTE_NODE_IP__ $CURRENT_HOST_IP \
66
    ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}/hosts
67
rpl __COMPUTE_NODE_NAME__ $CURRENT_HOST_NAME \
68
    ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}/hosts
69
# /etc/resolv.conf
70
CURRENT_PATH=/etc
71
cp $TEMPLATES_DIR$CURRENT_PATH/resolv.conf \
72
   ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}/resolv.conf
73
rpl __CLUSTER_DOMAIN_NAME__ "${CLUSTER_DOMAIN_NAME}." \
74
   ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}/resolv.conf
75
rpl __FRONT_END_STATIC_ADDRESS__ "${CLUSTER_STATIC_NETWORK_PREFIX}.$FRONT_END_STATIC_NETWORK_POSTFIX" \
76
   ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}/resolv.conf
77
exit 0
78
#
79
# Get the MAC address
80
#
81
CURRENT_PATH=/etc
82
COMPUTE_NODE_MAC_ADDRESS=\
83
`awk -F, -v INDEX=$NODE_NUMBER '{if (FNR==INDEX) {print $1}}' $SCRIPT_PATH/$TEMPLATES_DIR$CURRENT_PATH/$DHCP_HOSTSFILE_BASENAME`
84
#
85
# Create the Xen configuration file from a template
86
#
87
CURRENT_PATH=/etc/xen
88
cp templates$CURRENT_PATH/compute-node.cfg \
89
   $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
90
rpl Template Configuration $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
91
rpl "the Xen instance compute-node" "compute-node-$NODE_NUMBER_STRING" \
92
   $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
93
rpl __COMPUTE_NODE_KERNEL__ $COMPUTE_NODE_KERNEL \
94
   $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
95
rpl __COMPUTE_NODE_RAMDISK__ $COMPUTE_NODE_RAMDISK \
96
   $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
97
rpl __COMPUTE_NODE_MEMORY__ $COMPUTE_NODE_MEMORY \
98
   $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
99
rpl __COMPUTE_NODE_VCPUS__ $COMPUTE_NODE_VCPUS \
100
   $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
101
CPUS_LIST=`sed -n ${NODE_NUMBER},${NODE_NUMBER}p $SCRIPT_PATH/$COMPUTE_NODE_CPUS_FILE`
102
CPUS=""
103
for i in $CPUS_LIST
104
  do
105
    if [ "x$CPUS" == "x" ]
106
      then
107
        CPUS=$i
108
      else
109
        CPUS="$CPUS,$i"
110
    fi
111
done
112
rpl __COMPUTE_NODE_CPUS__ $CPUS \
113
   $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
114
rpl __COMPUTE_NODE_SYSTEM_DISK__ $SYSTEM_DISK_LOGICAL_VOLUME/$COMPUTE_NODE_SYSTEM_DISK \
115
   $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
116
rpl __COMPUTE_NODE_SWAP_DISK__ $SYSTEM_DISK_LOGICAL_VOLUME/$COMPUTE_NODE_SWAP_DISK \
117
   $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
118
rpl __COMPUTE_NODE_HOST_NAME__ $CURRENT_HOST_NAME \
119
   $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
120
rpl __COMPUTE_NODE_IP__ $ADDRESS \
121
   $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
122
rpl __COMPUTE_NODE_MAC__ $COMPUTE_NODE_MAC_ADDRESS \
123
   $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
124
rpl __COMPUTE_NODE_BRIDGE__ $COMPUTE_NODE_BRIDGE \
125
   $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
126

    
127
#
128
# Umount the compute node system disk
129
#
130
umount $COMPUTE_NODE_DISK_MOUNT_POINT
131
#
132
# Start the virtual machine
133
#
134
xm create $SCRIPT_PATH/$CURRENT_HOST_NAME.cfg
135
#
136
# Wait until the virtual machine has started
137
#
138
IS_RUNNING=""
139
while [ -z "$IS_RUNNING" ]
140
  do
141
    IS_RUNNING=`xm list | grep $CURRENT_HOST_NAME`
142
    sleep 1
143
done
144
#
145
# Pin the VCPUs to "real" CPUs.
146
#
147
VCPU_NUM=0
148
for i in $CPUS_LIST
149
  do
150
    xm vcpu-pin $CURRENT_HOST_NAME $VCPU_NUM $i
151
    VCPU_NUM=$((VCPU_NUM + 1))
152
done