Statistiques
| Révision :

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

Historique | Voir | Annoter | Télécharger (9,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_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 install the system.
48
if [ ! -d $FRONT_END_FILE_SYSTEM_MOUNT_POINT ]; then
49
  mkdir $FRONT_END_FILE_SYSTEM_MOUNT_POINT
50
fi
51
mount $FRONT_END_SYSTEM_VOLUME_GROUP_DEVICE/$FRONT_END_SYSTEM_DISK \
52
      $FRONT_END_FILE_SYSTEM_MOUNT_POINT
53
# Create the directory for the homes
54
if [ ! -d "$FRONT_END_FILE_SYSTEM_MOUNT_POINT/home" ]; then
55
  mkdir "$FRONT_END_FILE_SYSTEM_MOUNT_POINT/home"
56
fi
57
mount $FRONT_END_HOME_VOLUME_GROUP_DEVICE/$FRONT_END_HOME_DISK \
58
      "$FRONT_END_FILE_SYSTEM_MOUNT_POINT/home"
59

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

    
243
exit 0