Statistiques
| Révision :

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

Historique | Voir | Annoter | Télécharger (9,4 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_HOST_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 front-end 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 front-end 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
# Create the VM home disk.
41
lvcreate -L$FRONT_END_HOME_DISK_SIZE \
42
         -n  $FRONT_END_HOME_DISK \
43
         $FRONT_END_HOME_VOLUME_GROUP
44
# Create a File System on the front-end system disk.
45
mkfs -t $FRONT_END_HOME_DISK_FILE_SYSTEM \
46
        $FRONT_END_HOME_VOLUME_GROUP_DEVICE/$FRONT_END_HOME_DISK
47
# Mount the system disk to copy all the specific files.
48
if [ ! -d $FRONT_END_SYSTEM_DISK_MOUNT_POINT ]; then
49
  mkdir $FRONT_END_SYSTEM_DISK_MOUNT_POINT
50
fi
51
mount $FRONT_END_SYSTEM_VOLUME_GROUP_DEVICE/$FRONT_END_SYSTEM_DISK \
52
      $FRONT_END_SYSTEM_DISK_MOUNT_POINT
53
#
54
# Get the cluster MAC address
55
#
56
CURRENT_PATH=/etc
57
FRONT_END_CLUSTER_MAC_ADDRESS=\
58
`awk -F, -v INDEX=$FRONT_END_STATIC_NETWORK_POSTFIX '{if (FNR==INDEX) {print $1}}' $SCRIPT_PATH/$TEMPLATES_DIR$CURRENT_PATH/$DHCP_HOSTSFILE_BASENAME`
59
#
60
# Create the Xen configuration file from a template
61
#
62
CURRENT_PATH=/etc/xen
63
cp templates$CURRENT_PATH/$CONST_FRONT_END_TEMPLATE_NAME \
64
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
65
rpl Template Configuration $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
66
rpl __FRONT_END_KERNEL__ $COMPUTE_NODE_KERNEL \
67
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
68
rpl __FRONT_END_RAMDISK__ $FRONT_END_RAMDISK \
69
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
70
rpl __FRONT_END_VCPUS_NUM__ $FRONT_END_VCPUS_NUM \
71
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
72
CPUS_LIST=$FRONT_END_CPUS_LIST
73
CPUS=""
74
for i in $CPUS_LIST
75
  do
76
    if [ "x$CPUS" == "x" ]
77
      then
78
        CPUS=$i
79
      else
80
        CPUS="$CPUS,$i"
81
    fi
82
done
83
rpl __FRONT_END_CPUS__ $CPUS \
84
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
85
# Memory
86
rpl __FRONT_END_MEMORY__ $FRONT_END_MEMORY \
87
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
88
# Root device
89
rpl __XEN_SYSTEM_DISK_ROOT_DEVICE__ "$CONST_XEN_SYSTEM_DISK_ROOT_DEVICE" \
90
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
91
#
92
rpl __FRONT_END_SYSTEM_DISK__ $FRONT_END_SYSTEM_VOLUME_GROUP_DEVICE/$FRONT_END_SYSTEM_DISK \
93
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
94
rpl __FRONT_END_HOME_DISK__ $FRONT_END_HOME_VOLUME_GROUP_DEVICE/$FRONT_END_HOME_DISK \
95
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
96
# Swap disk stuff.
97
if [ "x$FRONT_END_SWAP_DISK_SIZE" != "x$CONST_NULL_DISK_SIZE" ] ; then
98
  FRONT_END_SWAP_DISK_STANZA="'phy:$FRONT_END_SWAP_VOLUME_GROUP_DEVICE/${FRONT_END_SWAP_DISK},xvda3,w',"
99
  rpl __FRONT_END_SWAP_DISK__ $FRONT_END_SWAP_DISK_STANZA \
100
     $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
101
  # Comment out the noswap stanza.
102
  rpl __FRONT_END_NOSWAP__ "#$CLUSTER_NOSWAP" \
103
     $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
104
else
105
  echo y | rpl -f __FRONT_END_SWAP_DISK__ "" \
106
     $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
107
  rpl __FRONT_END_NOSWAP__ $CLUSTER_NOSWAP \
108
     $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
109
fi
110
#
111
rpl __FRONT_END_HOST_NAME__ $CURRENT_HOST_NAME \
112
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
113
# Vif stuff.
114
VIF_STANZA=$CONST_XEN_VIF_STANZA_PREFIX
115
EXTERNAL_MAC="${CONST_XEN_MAC_PREFIX}${FRONT_END_EXTERNAL_MAC_ADDRESS}"
116
INTERNAL_MAC="${CONST_XEN_MAC_PREFIX}${FRONT_END_CLUSTER_MAC_ADDRESS}"
117
INTERNAL_BRIDGE="${CONST_XEN_BRIDGE_PREFIX}${CLUSTER_BRIDGE_NAME}"
118
INTERNAL_IP="${CONST_XEN_IP_PREFIX}${FRONT_END_CLUSTER_STATIC_IP}"
119
if [ $CLUSTER_EXTERNAL_ADDRESSES_BY_DHCP -eq 1 ] ;then
120
  rpl __XEN_DHCP_STANZA__ "$CONST_XEN_DHCP_STANZA" \
121
     $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
122
  VIF_STANZA=${VIF_STANZA}${EXTERNAL_MAC}"','"${INTERNAL_IP}","${INTERNAL_MAC}","${INTERNAL_BRIDGE}${CONST_XEN_VIF_STANZA_POSTFIX}
123
else
124
  # Comment out the DHCP_STANZA.
125
  rpl __XEN_DHCP_STANZA__ "#$CONST_XEN_DHCP_STANZA" \
126
     $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
127
  VIF_STANZA=${VIF_STANZA}${EXTERNAL_IP}","${EXTERNAL_MAC}",'"${INTERNAL_IP}","${INTERNAL_MAC},${INTERNAL_BRIDGE}${CONST_XEN_VIF_STANZA_POSTFIX}
128
fi
129
# In any case, write the VIF_STANZA
130
rpl __VIF_STANZA__ "$VIF_STANZA" \
131
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
132
#
133
#
134
# Configure the specific files from templates
135
#
136
# Create the /etc directory, if necessary
137
if [ ! -d $FRONT_END_SYSTEM_DISK_MOUNT_POINT/etc ] ; then
138
  mkdir $FRONT_END_SYSTEM_DISK_MOUNT_POINT/etc
139
fi
140
# /etc/network/interfaces
141
# The first interface is DHCP configured.
142
# No '/' between $FRONT_END_SYSTEM_DISK_MOUNT_POINT and $CURRENT_PATH
143
CURRENT_PATH=/etc/network
144
if [ ! -d ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH} ] ; then
145
  mkdir ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}
146
fi
147
cp templates$CURRENT_PATH/$FRONT_END_INTERFACES_TEMPLATE \
148
   $FRONT_END_SYSTEM_DISK_MOUNT_POINT$CURRENT_PATH/interfaces
149
if [ $CLUSTER_EXTERNAL_ADDRESSES_BY_DHCP -eq 1 ] ; then
150
  ETH0_STANZA="iface eth0 inet dhcp"
151
  rpl __ETH0_STATIC_OR_DHCP__ "$ETH0_STANZA"  \
152
      ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}/interfaces
153
  echo y | rpl __ETH0_STATIC_ADDRESS__ "" \
154
      ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}/interfaces
155
  echo y | rpl __ETH0_STATIC_NETMASK__ "" \
156
      ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}/interfaces
157
  echo y | rpl __ETH0_STATIC_NETWORK__ "" \
158
      ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}/interfaces
159
  echo y | rpl __ETH0_STATIC_GATEWAY__ "" \
160
      ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}/interfaces
161
  echo y | rpl __ETH0_STATIC_BROADCAST__ "" \
162
      ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}/interfaces
163
  echo y | rpl __ETH0_STATIC_NAMESERVERS__ "" \
164
      ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}/interfaces
165
  echo y | rpl __ETH0_STATIC_DNS_SEARCH__ "" \
166
      ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}/interfaces
167
else
168
  ETH0_STANZA="iface eth0 inet static"
169
  rpl __ETH0_STATIC_OR_DHCP__ "$ETH0_STANZA"  \
170
      ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}/interfaces 
171
  echo y | rpl __ETH0_STATIC_ADDRESS__ "$FRONT_END_CLUSTER_STATIC_IP" \
172
      ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}/interfaces 
173
  echo y | rpl __ETH0_STATIC_NETMASK__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_NETMASK" \
174
      ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}/interfaces 
175
  echo y | rpl __ETH0_STATIC_NETWORK__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_NETWORK" \
176
      ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}/interfaces
177
  echo y | rpl __ETH0_STATIC_GATEWAY__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_GATEWAY" \
178
      ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}/interfaces 
179
  echo y | rpl __ETH0_STATIC_BROADCAST__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_BROADCAST" \
180
      ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}/interfaces 
181
  echo y | rpl __ETH0_STATIC_NAMESERVERS__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_DNS_NAMESERVERS" \
182
      ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}/interfaces 
183
  echo y | rpl __ETH0_STATIC_DNS_SEARCH__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_DNS_SEARCH" \
184
      ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}/interfaces
185
fi 
186
ADDRESS="$CLUSTER_STATIC_NETWORK_PREFIX.$FRONT_END_STATIC_NETWORK_POSTFIX"
187
rpl __ETH1_STATIC_ADDRESS__ $ADDRESS  \
188
    ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}/interfaces
189
# /etc/hostname
190
CURRENT_PATH=/etc
191
echo $CURRENT_HOST_NAME > "${FRONT_END_DISK_MOUNT_POINT}${CURRENT_PATH}/hostname"
192
# /etc/hosts
193
CURRENT_PATH=/etc
194
CURRENT_HOST_IP="${CLUSTER_STATIC_NETWORK_PREFIX}.${FRONT_END_STATIC_NETWORK_POSTFIX}"
195
cp templates$CURRENT_PATH/hosts \
196
   ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}
197
rpl __COMPUTE_NODE_IP__ $CURRENT_HOST_IP \
198
    ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}/hosts
199
rpl __COMPUTE_NODE_NAME__ $CURRENT_HOST_NAME \
200
    ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}/hosts
201
# /etc/resolv.conf
202
CURRENT_PATH=/etc
203
cp $TEMPLATES_DIR$CURRENT_PATH/resolv.conf \
204
   ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}/resolv.conf
205
rpl __CLUSTER_DOMAIN_NAME__ "${CLUSTER_DOMAIN_NAME}." \
206
   ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}/resolv.conf
207
rpl __FRONT_END_STATIC_ADDRESS__ "${CLUSTER_STATIC_NETWORK_PREFIX}.$FRONT_END_STATIC_NETWORK_POSTFIX" \
208
   ${FRONT_END_SYSTEM_DISK_MOUNT_POINT}${CURRENT_PATH}/resolv.conf
209
exit 0
210
#
211
# Umount the compute node system disk
212
#
213
umount $FRONT_END_SYSTEM_DISK_MOUNT_POINT
214
#
215
# Start the virtual machine
216
#
217
xm create $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
218
#
219
# Wait until the virtual machine has started
220
#
221
IS_RUNNING=""
222
while [ -z "$IS_RUNNING" ]
223
  do
224
    IS_RUNNING=`xm list | grep $CURRENT_HOST_NAME`
225
    sleep 1
226
done
227
#
228
# Pin the VCPUs to "real" CPUs.
229
#
230
VCPU_NUM=0
231
for i in $CPUS_LIST
232
  do
233
    xm vcpu-pin $CURRENT_HOST_NAME $VCPU_NUM $i
234
    VCPU_NUM=$((VCPU_NUM + 1))
235
done
236

    
237
exit 0