Statistiques
| Révision :

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

Historique | Voir | Annoter | Télécharger (10,76 ko)

1
#! /bin/bash
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_XEN_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
# Complet installation
146
#
147
# Modules stuff.
148
XEN_MODULES_DIRECTORY=`ls /lib/modules | grep xen `
149
for i in $XEN_MODULES_DIRECTORY ; do
150
  cp -a /lib/modules/i $FRONT_END_FILE_SYSTEM_MOUNT_POINT/lib/modules
151
done
152
# Generate or configure the specific files from templates
153
#
154
# Create the /etc directory, if necessary
155
if [ ! -d $FRONT_END_FILE_SYSTEM_MOUNT_POINT/etc ] ; then
156
  mkdir $FRONT_END_FILE_SYSTEM_MOUNT_POINT/etc
157
fi
158
# Copy the sources list
159
cp /etc/apt/sources.list $FRONT_END_FILE_SYSTEM_MOUNT_POINT/etc/apt
160

    
161
# /etc/network/interfaces
162
# The first interface is DHCP configured.
163
# No '/' between $FRONT_END_FILE_SYSTEM_MOUNT_POINT and $CURRENT_PATH
164
CURRENT_PATH=/etc/network
165
if [ ! -d ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH} ] ; then
166
  mkdir ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}
167
fi
168
cp templates$CURRENT_PATH/$FRONT_END_INTERFACES_TEMPLATE \
169
   $FRONT_END_FILE_SYSTEM_MOUNT_POINT$CURRENT_PATH/interfaces
170
if [ $CLUSTER_EXTERNAL_ADDRESSES_BY_DHCP -eq 1 ] ; then
171
  ETH0_STANZA="iface eth0 inet dhcp"
172
  rpl __ETH0_STATIC_OR_DHCP__ "$ETH0_STANZA"  \
173
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
174
  echo y | rpl __ETH0_STATIC_ADDRESS__ "" \
175
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
176
  echo y | rpl __ETH0_STATIC_NETMASK__ "" \
177
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
178
  echo y | rpl __ETH0_STATIC_NETWORK__ "" \
179
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
180
  echo y | rpl __ETH0_STATIC_GATEWAY__ "" \
181
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
182
  echo y | rpl __ETH0_STATIC_BROADCAST__ "" \
183
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
184
  echo y | rpl __ETH0_STATIC_NAMESERVERS__ "" \
185
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
186
  echo y | rpl __ETH0_STATIC_DNS_SEARCH__ "" \
187
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
188
else
189
  ETH0_STANZA="iface eth0 inet static"
190
  rpl __ETH0_STATIC_OR_DHCP__ "$ETH0_STANZA"  \
191
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces 
192
  echo y | rpl __ETH0_STATIC_ADDRESS__ "$FRONT_END_CLUSTER_STATIC_IP" \
193
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces 
194
  echo y | rpl __ETH0_STATIC_NETMASK__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_NETMASK" \
195
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces 
196
  echo y | rpl __ETH0_STATIC_NETWORK__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_NETWORK" \
197
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
198
  echo y | rpl __ETH0_STATIC_GATEWAY__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_GATEWAY" \
199
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces 
200
  echo y | rpl __ETH0_STATIC_BROADCAST__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_BROADCAST" \
201
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces 
202
  echo y | rpl __ETH0_STATIC_NAMESERVERS__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_DNS_NAMESERVERS" \
203
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces 
204
  echo y | rpl __ETH0_STATIC_DNS_SEARCH__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_DNS_SEARCH" \
205
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
206
fi 
207
ADDRESS="$CLUSTER_STATIC_NETWORK_PREFIX.$FRONT_END_STATIC_NETWORK_POSTFIX"
208
rpl __ETH1_STATIC_ADDRESS__ $ADDRESS  \
209
    ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
210
# /etc/hostname
211
CURRENT_PATH=/etc
212
echo $CURRENT_HOST_NAME > "${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/hostname"
213
# /etc/hosts. Script generated.
214
CURRENT_PATH=/etc
215
$SCRIPT_PATH/generate-hosts-file \
216
  ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/hosts
217
# /etc/resolv.conf
218
CURRENT_PATH=/etc
219
cp $TEMPLATES_DIR$CURRENT_PATH/resolv.conf \
220
   ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/resolv.conf
221
rpl __CLUSTER_DOMAIN_NAME__ "${CLUSTER_DOMAIN_NAME}." \
222
   ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/resolv.conf
223
rpl __FRONT_END_STATIC_ADDRESS__ "${CLUSTER_STATIC_NETWORK_PREFIX}.${CONST_FRONT_END_CLUSTER_STATIC_NETWORK_POSTFIX}" \
224
   ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/resolv.conf
225
# /etc/fstab
226
CURRENT_PATH=/etc
227
cp ${TEMPLATES_DIR}${CURRENT_PATH}/${FRONT_END_FSTAB_TEMPLATE} \
228
  ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/fstab
229
  # Front-End System Disk Line
230
FESDL=${FRONT_END_SYSTEM_VOLUME_GROUP_DEVICE}/${FRONT_END_SYSTEM_DISK}
231
FESDL="$FESDL	/	errors=remount-ro	0	1"
232
rpl __FRONT_END_SYSTEM_DISK_LINE__ "$FESDL" \
233
  ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/fstab
234
  # Font-End Home Disk Line
235
FEHDL=${FRONT_END_HOME_DISK_VOLUME_GROUP_DEVICE}/${FRONT_END_HOME_DISK}
236
FEHDL="$FEHDL	/	errors=remount-ro	0	2"
237
rpl __FRONT_END_HOME_DISK_LINE__ "$FEHDL" \
238
  ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/fstab
239
  # Font-End Swap Disk Line
240
if [ "x$FRONT_END_SWAP_DISK_SIZE" != "x$CONST_NULL_DISK_SIZE" ] ; then
241
  FESDL=${FRONT_END_SWAP_VOLUME_GROUP_DEVICE}/${FRONT_END_SWAP_DISK}
242
  FESDL="$FESDL		none	swap		0	0"
243
else
244
  FESDL=""
245
fi
246
rpl __FRONT_END_SWAP_DISK_LINE__ "$FESDL" \
247
  ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/fstab
248

    
249
#
250
# Umount the compute node system disk
251
#
252
umount $FRONT_END_FILE_SYSTEM_MOUNT_POINT
253
#
254
# Start the virtual machine
255
#
256
xm create $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
257
#
258
# Wait until the virtual machine has started
259
#
260
IS_RUNNING=""
261
while [ -z "$IS_RUNNING" ]
262
  do
263
    IS_RUNNING=`xm list | grep $CURRENT_HOST_NAME`
264
    sleep 1
265
done
266
#
267
# Pin the VCPUs to "real" CPUs.
268
#
269
VCPU_NUM=0
270
for i in $CPUS_LIST
271
  do
272
    xm vcpu-pin $CURRENT_HOST_NAME $VCPU_NUM $i
273
    VCPU_NUM=$((VCPU_NUM + 1))
274
done
275

    
276
exit 0