Révision 37

trunk/shell/finish-up-front-end (revision 37)
1
#! /bin/bash -x
2
#
3
# ST - 2012-05-25
4
#
5
# Finish up the front end installation.
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
CURRENT_HOST_NAME=$FRONT_END_HOST_NAME
15
#
16
# Get the cluster MAC address
17
#
18
FRONT_END_CLUSTER_MAC_ADDRESS=\
19
`awk -F, -v INDEX=$CONST_FRONT_END_CLUSTER_STATIC_NETWORK_POSTFIX '{if (FNR==INDEX) {print $1}}' $SCRIPT_PATH/$TEMPLATES_DIR$CURRENT_PATH/$CONST_DHCP_HOSTS_FILE_BASENAME`
20
#
21
#
22
# Create the Xen configuration file from a template
23
#
24
CURRENT_PATH=/etc/xen
25
cp templates$CURRENT_PATH/$CONST_FRONT_END_XEN_TEMPLATE_NAME \
26
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
27
rpl Template Configuration $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
28
rpl __FRONT_END_KERNEL__ $COMPUTE_NODE_KERNEL \
29
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
30
rpl __FRONT_END_RAMDISK__ $FRONT_END_RAMDISK \
31
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
32
rpl __FRONT_END_VCPUS_NUM__ $FRONT_END_VCPUS_NUM \
33
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
34
CPUS_LIST=$FRONT_END_CPUS_LIST
35
CPUS=""
36
for i in $CPUS_LIST
37
  do
38
    if [ "x$CPUS" == "x" ]
39
      then
40
        CPUS=$i
41
      else
42
        CPUS="$CPUS,$i"
43
    fi
44
done
45
rpl __FRONT_END_CPUS__ $CPUS \
46
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
47
# Memory
48
rpl __FRONT_END_MEMORY__ $FRONT_END_MEMORY \
49
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
50
# Root device
51
rpl __XEN_SYSTEM_DISK_ROOT_DEVICE_STANZA__ "$CONST_XEN_SYSTEM_DISK_ROOT_DEVICE_STANZA" \
52
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
53
#
54
# System disk stuff
55
FRONT_END_SYSTEM_DISK_STANZA="'phy:${FRONT_END_SYSTEM_VOLUME_GROUP_DEVICE}/${FRONT_END_SYSTEM_DISK},$FRONT_END_SYSTEM_VIRTUAL_VOLUME,w'"
56
rpl __FRONT_END_SYSTEM_DISK_STANZA__ "$FRONT_END_SYSTEM_DISK_STANZA" \
57
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
58
# Home disk stuff
59
FRONT_END_HOME_DISK_STANZA="'phy:${FRONT_END_HOME_VOLUME_GROUP_DEVICE}/${FRONT_END_HOME_DISK},$FRONT_END_HOME_VIRTUAL_VOLUME,w'"
60
rpl __FRONT_END_HOME_DISK_STANZA__ "$FRONT_END_HOME_DISK_STANZA" \
61
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
62
# Swap disk stuff.
63
if [ "x$FRONT_END_SWAP_DISK_SIZE" != "x$CONST_NULL_DISK_SIZE" ] ; then
64
  FRONT_END_SWAP_DISK_STANZA="'phy:${FRONT_END_SWAP_VOLUME_GROUP_DEVICE}/${FRONT_END_SWAP_DISK},$FRONT_END_SWAP_VIRTUAL_VOLUME,w'"
65
  rpl __FRONT_END_SWAP_DISK_STANZA__ $FRONT_END_SWAP_DISK_STANZA \
66
     $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
67
  # Comment out the noswap stanza.
68
  rpl __FRONT_END_NOSWAP__ "#$CLUSTER_NOSWAP" \
69
     $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
70
else
71
  echo y | rpl -f __FRONT_END_SWAP_DISK_STANZA__ "" \
72
     $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
73
  rpl __FRONT_END_NOSWAP__ $CLUSTER_NOSWAP \
74
     $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
75
fi
76
#
77
rpl __FRONT_END_HOST_NAME__ $CURRENT_HOST_NAME \
78
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
79
# Vif stuff.
80
VIF_STANZA=$CONST_XEN_VIF_STANZA_PREFIX
81
EXTERNAL_MAC="${CONST_XEN_MAC_PREFIX}${FRONT_END_EXTERNAL_MAC_ADDRESS}"
82
INTERNAL_MAC="${CONST_XEN_MAC_PREFIX}${FRONT_END_CLUSTER_MAC_ADDRESS}"
83
INTERNAL_BRIDGE="${CONST_XEN_BRIDGE_PREFIX}${CLUSTER_BRIDGE_NAME}"
84
INTERNAL_IP="${CONST_XEN_IP_PREFIX}${FRONT_END_CLUSTER_STATIC_IP}"
85
if [ $CLUSTER_EXTERNAL_ADDRESSES_BY_DHCP -eq 1 ] ;then
86
  rpl __XEN_DHCP_STANZA__ "$CONST_XEN_DHCP_STANZA" \
87
     $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
88
  VIF_STANZA=${VIF_STANZA}${EXTERNAL_MAC}"','"${INTERNAL_IP}","${INTERNAL_MAC}","${INTERNAL_BRIDGE}${CONST_XEN_VIF_STANZA_POSTFIX}
89
else
90
  # Comment out the DHCP_STANZA.
91
  rpl __XEN_DHCP_STANZA__ "#$CONST_XEN_DHCP_STANZA" \
92
     $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
93
  VIF_STANZA=${VIF_STANZA}${EXTERNAL_IP}","${EXTERNAL_MAC}",'"${INTERNAL_IP}","${INTERNAL_MAC},${INTERNAL_BRIDGE}${CONST_XEN_VIF_STANZA_POSTFIX}
94
fi
95
# In any case, write the VIF_STANZA
96
rpl __VIF_STANZA__ "$VIF_STANZA" \
97
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
98
# Console stuff as extra parameter
99
rpl __EXTRA_STANZA__ "$CONST_XEN_EXTRA_STANZA" \
100
     $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
101
# End creation of Xen configuration file.
102
#
103
# Complet installation
104
#
105
# Modules stuff.
106
#
107
#  Create the directory on the new image, if it does not exit yet.
108
if [ ! -d $FRONT_END_FILE_SYSTEM_MOUNT_POINT/lib/modules ] ; then
109
  mkdir $FRONT_END_FILE_SYSTEM_MOUNT_POINT/lib/modules
110
fi
111
#
112
#  Copy the modules
113
#
114
XEN_MODULES_DIRECTORY=`ls /lib/modules | grep xen `
115
for i in $XEN_MODULES_DIRECTORY ; do
116
  cp -a /lib/modules/$i $FRONT_END_FILE_SYSTEM_MOUNT_POINT/lib/modules
117
done
118
#
119
# Module stuff done.
120
#
121
# Generate or configure the specific files from templates
122
#
123
# Create the /etc directory, if necessary
124
if [ ! -d $FRONT_END_FILE_SYSTEM_MOUNT_POINT/etc ] ; then
125
  mkdir $FRONT_END_FILE_SYSTEM_MOUNT_POINT/etc
126
fi
127
# Copy the sources list
128
if [ ! -d $FRONT_END_FILE_SYSTEM_MOUNT_POINT/etc/apt ] ; then
129
  mkdir $FRONT_END_FILE_SYSTEM_MOUNT_POINT/etc/apt
130
fi
131
cp /etc/apt/sources.list $FRONT_END_FILE_SYSTEM_MOUNT_POINT/etc/apt
132

  
133
# /etc/network/interfaces
134
# The first interface is DHCP configured.
135
# No '/' between $FRONT_END_FILE_SYSTEM_MOUNT_POINT and $CURRENT_PATH
136
CURRENT_PATH=/etc/network
137
if [ ! -d ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH} ] ; then
138
  mkdir ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}
139
fi
140
cp templates$CURRENT_PATH/$FRONT_END_INTERFACES_TEMPLATE \
141
   $FRONT_END_FILE_SYSTEM_MOUNT_POINT$CURRENT_PATH/interfaces
142
if [ $CLUSTER_EXTERNAL_ADDRESSES_BY_DHCP -eq 1 ] ; then
143
  ETH0_STANZA="iface eth0 inet dhcp"
144
  rpl __ETH0_STATIC_OR_DHCP__ "$ETH0_STANZA"  \
145
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
146
  echo y | rpl __ETH0_STATIC_ADDRESS__ "" \
147
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
148
  echo y | rpl __ETH0_STATIC_NETMASK__ "" \
149
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
150
  echo y | rpl __ETH0_STATIC_NETWORK__ "" \
151
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
152
  echo y | rpl __ETH0_STATIC_GATEWAY__ "" \
153
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
154
  echo y | rpl __ETH0_STATIC_BROADCAST__ "" \
155
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
156
  echo y | rpl __ETH0_STATIC_NAMESERVERS__ "" \
157
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
158
  echo y | rpl __ETH0_STATIC_DNS_SEARCH__ "" \
159
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
160
else
161
  ETH0_STANZA="iface eth0 inet static"
162
  rpl __ETH0_STATIC_OR_DHCP__ "$ETH0_STANZA"  \
163
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces 
164
  echo y | rpl __ETH0_STATIC_ADDRESS__ "$FRONT_END_CLUSTER_STATIC_IP" \
165
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces 
166
  echo y | rpl __ETH0_STATIC_NETMASK__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_NETMASK" \
167
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces 
168
  echo y | rpl __ETH0_STATIC_NETWORK__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_NETWORK" \
169
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
170
  echo y | rpl __ETH0_STATIC_GATEWAY__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_GATEWAY" \
171
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces 
172
  echo y | rpl __ETH0_STATIC_BROADCAST__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_BROADCAST" \
173
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces 
174
  echo y | rpl __ETH0_STATIC_NAMESERVERS__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_DNS_NAMESERVERS" \
175
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces 
176
  echo y | rpl __ETH0_STATIC_DNS_SEARCH__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_DNS_SEARCH" \
177
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
178
fi 
179
# Static address on the cluster interface.
180
ADDRESS="${CLUSTER_STATIC_NETWORK_PREFIX}.${CONST_FRONT_END_CLUSTER_STATIC_NETWORK_POSTFIX}"
181
rpl __ETH1_STATIC_ADDRESS__ $ADDRESS  \
182
    ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
183
rpl __ETH1_STATIC_NETMASK__ $CLUSTER_STATIC_NETMASK  \
184
    ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
185
    
186
# /etc/hostname
187
CURRENT_PATH=/etc
188
echo $CURRENT_HOST_NAME > "${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/hostname"
189
# /etc/hosts. Script generated.
190
CURRENT_PATH=/etc
191
$SCRIPT_PATH/generate-hosts-file \
192
  ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/hosts
193
# /etc/resolv.conf
194
CURRENT_PATH=/etc
195
cp $TEMPLATES_DIR$CURRENT_PATH/resolv.conf \
196
   ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/resolv.conf
197
rpl __CLUSTER_DOMAIN_NAME__ "${CLUSTER_DOMAIN_NAME}." \
198
   ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/resolv.conf
199
rpl __FRONT_END_STATIC_ADDRESS__ "${CLUSTER_STATIC_NETWORK_PREFIX}.${CONST_FRONT_END_CLUSTER_STATIC_NETWORK_POSTFIX}" \
200
   ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/resolv.conf
201
#
202
# /etc/fstab
203
#
204
CURRENT_PATH=/etc
205
cp ${TEMPLATES_DIR}${CURRENT_PATH}/${FRONT_END_FSTAB_TEMPLATE} \
206
  ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/fstab
207
  # Front-End System Disk Line
208
FESDL=${FRONT_END_SYSTEM_VIRTUAL_VOLUME_DEVICE}
209
FESDL="$FESDL	/		$FRONT_END_SYSTEM_DISK_FILE_SYSTEM	errors=remount-ro	0	1"
210
rpl __FRONT_END_SYSTEM_DISK_LINE__ "$FESDL" \
211
  ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/fstab
212
  # Font-End Home Disk Line
213
FEHDL=${FRONT_END_HOME_VIRTUAL_VOLUME_DEVICE}
214
FEHDL="$FEHDL	/home		$FRONT_END_HOME_DISK_FILE_SYSTEM	errors=remount-ro	0	2"
215
rpl __FRONT_END_HOME_DISK_LINE__ "$FEHDL" \
216
  ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/fstab
217
  # Font-End Swap Disk Line
218
if [ "x$FRONT_END_SWAP_DISK_SIZE" != "x$CONST_NULL_DISK_SIZE" ] ; then
219
  FESDL=${FRONT_END_SWAP_VIRTUAL_VOLUME_DEVICE}
220
  FESDL="$FESDL	none		swap				0	0"
221
else
222
  FESDL=""
223
fi
224
# "rpl -f" since $FESDL can be an empty string.
225
rpl -f __FRONT_END_SWAP_DISK_LINE__ "$FESDL" \
226
  ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/fstab
227
#
228
# Umount the compute node system disk
229
#
230
# Order matters since the /home file system is mounted on the
231
# on the system partition
232
umount $FRONT_END_FILE_SYSTEM_MOUNT_POINT/home
233
umount $FRONT_END_FILE_SYSTEM_MOUNT_POINT
234
#
235
# Start the virtual machine
236
#
237
xm create $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
238
#
239
exit 0
240
#
241
# Wait until the virtual machine has started
242
#
243
IS_RUNNING=""
244
while [ -z "$IS_RUNNING" ]
245
  do
246
    IS_RUNNING=`xm list | grep $CURRENT_HOST_NAME`
247
    sleep 1
248
done
249
#
250
# Pin the VCPUs to "real" CPUs.
251
#
252
VCPU_NUM=0
253
for i in $CPUS_LIST
254
  do
255
    xm vcpu-pin $CURRENT_HOST_NAME $VCPU_NUM $i
256
    VCPU_NUM=$((VCPU_NUM + 1))
257
done
258

  
259
exit 0
trunk/shell/create-front-end (revision 37)
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
if [ $? -ne 0 ] ; then
54
  exit 1
55
fi 
56
# Create the directory for the homes
57
if [ ! -d "$FRONT_END_FILE_SYSTEM_MOUNT_POINT/home" ]; then
58
  mkdir "$FRONT_END_FILE_SYSTEM_MOUNT_POINT/home"
59
fi
60
mount $FRONT_END_HOME_VOLUME_GROUP_DEVICE/$FRONT_END_HOME_DISK \
61
      "$FRONT_END_FILE_SYSTEM_MOUNT_POINT/home"
62

  
63
#
64
# Get the cluster MAC address
65
#
66
CURRENT_PATH=/etc
67
FRONT_END_CLUSTER_MAC_ADDRESS=\
68
`awk -F, -v INDEX=$CONST_FRONT_END_CLUSTER_STATIC_NETWORK_POSTFIX '{if (FNR==INDEX) {print $1}}' $SCRIPT_PATH/$TEMPLATES_DIR$CURRENT_PATH/$CONST_DHCP_HOSTS_FILE_BASENAME`
69
#
70
# Install the system.
71
# 
72
debootstrap --arch $CONST_DEBIAN_ARCH $CONST_DEBIAN_VERSION \
73
    $FRONT_END_FILE_SYSTEM_MOUNT_POINT
74
# exit 0
75
#
76
# Complete the installation
77
#
78
exit 0
trunk/shell/front-end-start (revision 37)
1
#! /bin/bash -x
2
#
3
# ST - 2012-05-25
4
#
5
# 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
CURRENT_HOST_NAME=$FRONT_END_HOST_NAME
15
#
16
CPUS_LIST=$FRONT_END_CPUS_LIST
17
CPUS=""
18
for i in $CPUS_LIST
19
  do
20
    if [ "x$CPUS" == "x" ]
21
      then
22
        CPUS=$i
23
      else
24
        CPUS="$CPUS,$i"
25
    fi
26
done
27
#
28
# Start the virtual machine
29
#
30
xm create $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
31
#
32
# Wait until the virtual machine has started
33
#
34
IS_RUNNING=""
35
while [ -z "$IS_RUNNING" ]
36
  do
37
    IS_RUNNING=`xm list | grep $CURRENT_HOST_NAME`
38
    sleep 1
39
done
40
#
41
# Pin the VCPUs to "real" CPUs.
42
#
43
VCPU_NUM=0
44
for i in $CPUS_LIST
45
  do
46
    xm vcpu-pin $CURRENT_HOST_NAME $VCPU_NUM $i
47
    VCPU_NUM=$((VCPU_NUM + 1))
48
done
49
#
50
exit 0
0 51

  
trunk/shell/front-end-finish-up (revision 37)
1
#! /bin/bash -x
2
#
3
# ST - 2012-05-25
4
#
5
# Finish up the front end installation.
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
CURRENT_HOST_NAME=$FRONT_END_HOST_NAME
15
#
16
# Get the cluster MAC address
17
#
18
FRONT_END_CLUSTER_MAC_ADDRESS=\
19
`awk -F, -v INDEX=$CONST_FRONT_END_CLUSTER_STATIC_NETWORK_POSTFIX '{if (FNR==INDEX) {print $1}}' $SCRIPT_PATH/$TEMPLATES_DIR$CURRENT_PATH/$CONST_DHCP_HOSTS_FILE_BASENAME`
20
#
21
#
22
# Create the Xen configuration file from a template
23
#
24
CURRENT_PATH=/etc/xen
25
cp templates$CURRENT_PATH/$CONST_FRONT_END_XEN_TEMPLATE_NAME \
26
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
27
rpl Template Configuration $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
28
rpl __FRONT_END_KERNEL__ $COMPUTE_NODE_KERNEL \
29
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
30
rpl __FRONT_END_RAMDISK__ $FRONT_END_RAMDISK \
31
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
32
rpl __FRONT_END_VCPUS_NUM__ $FRONT_END_VCPUS_NUM \
33
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
34
CPUS_LIST=$FRONT_END_CPUS_LIST
35
CPUS=""
36
for i in $CPUS_LIST
37
  do
38
    if [ "x$CPUS" == "x" ]
39
      then
40
        CPUS=$i
41
      else
42
        CPUS="$CPUS,$i"
43
    fi
44
done
45
rpl __FRONT_END_CPUS__ $CPUS \
46
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
47
# Memory
48
rpl __FRONT_END_MEMORY__ $FRONT_END_MEMORY \
49
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
50
# Root device
51
rpl __XEN_SYSTEM_DISK_ROOT_DEVICE_STANZA__ "$CONST_XEN_SYSTEM_DISK_ROOT_DEVICE_STANZA" \
52
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
53
#
54
# System disk stuff
55
FRONT_END_SYSTEM_DISK_STANZA="'phy:${FRONT_END_SYSTEM_VOLUME_GROUP_DEVICE}/${FRONT_END_SYSTEM_DISK},$FRONT_END_SYSTEM_VIRTUAL_VOLUME,w'"
56
rpl __FRONT_END_SYSTEM_DISK_STANZA__ "$FRONT_END_SYSTEM_DISK_STANZA" \
57
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
58
# Home disk stuff
59
FRONT_END_HOME_DISK_STANZA="'phy:${FRONT_END_HOME_VOLUME_GROUP_DEVICE}/${FRONT_END_HOME_DISK},$FRONT_END_HOME_VIRTUAL_VOLUME,w'"
60
rpl __FRONT_END_HOME_DISK_STANZA__ "$FRONT_END_HOME_DISK_STANZA" \
61
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
62
# Swap disk stuff.
63
if [ "x$FRONT_END_SWAP_DISK_SIZE" != "x$CONST_NULL_DISK_SIZE" ] ; then
64
  FRONT_END_SWAP_DISK_STANZA="'phy:${FRONT_END_SWAP_VOLUME_GROUP_DEVICE}/${FRONT_END_SWAP_DISK},$FRONT_END_SWAP_VIRTUAL_VOLUME,w'"
65
  rpl __FRONT_END_SWAP_DISK_STANZA__ $FRONT_END_SWAP_DISK_STANZA \
66
     $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
67
  # Comment out the noswap stanza.
68
  rpl __FRONT_END_NOSWAP__ "#$CLUSTER_NOSWAP" \
69
     $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
70
else
71
  echo y | rpl -f __FRONT_END_SWAP_DISK_STANZA__ "" \
72
     $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
73
  rpl __FRONT_END_NOSWAP__ $CLUSTER_NOSWAP \
74
     $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
75
fi
76
#
77
rpl __FRONT_END_HOST_NAME__ $CURRENT_HOST_NAME \
78
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
79
# Vif stuff.
80
VIF_STANZA=$CONST_XEN_VIF_STANZA_PREFIX
81
EXTERNAL_MAC="${CONST_XEN_MAC_PREFIX}${FRONT_END_EXTERNAL_MAC_ADDRESS}"
82
INTERNAL_MAC="${CONST_XEN_MAC_PREFIX}${FRONT_END_CLUSTER_MAC_ADDRESS}"
83
INTERNAL_BRIDGE="${CONST_XEN_BRIDGE_PREFIX}${CLUSTER_BRIDGE_NAME}"
84
INTERNAL_IP="${CONST_XEN_IP_PREFIX}${FRONT_END_CLUSTER_STATIC_IP}"
85
if [ $CLUSTER_EXTERNAL_ADDRESSES_BY_DHCP -eq 1 ] ;then
86
  rpl __XEN_DHCP_STANZA__ "$CONST_XEN_DHCP_STANZA" \
87
     $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
88
  VIF_STANZA=${VIF_STANZA}${EXTERNAL_MAC}"','"${INTERNAL_IP}","${INTERNAL_MAC}","${INTERNAL_BRIDGE}${CONST_XEN_VIF_STANZA_POSTFIX}
89
else
90
  # Comment out the DHCP_STANZA.
91
  rpl __XEN_DHCP_STANZA__ "#$CONST_XEN_DHCP_STANZA" \
92
     $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
93
  VIF_STANZA=${VIF_STANZA}${EXTERNAL_IP}","${EXTERNAL_MAC}",'"${INTERNAL_IP}","${INTERNAL_MAC},${INTERNAL_BRIDGE}${CONST_XEN_VIF_STANZA_POSTFIX}
94
fi
95
# In any case, write the VIF_STANZA
96
rpl __VIF_STANZA__ "$VIF_STANZA" \
97
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
98
# Console stuff as extra parameter
99
rpl __EXTRA_STANZA__ "$CONST_XEN_EXTRA_STANZA" \
100
     $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
101
# End creation of Xen configuration file.
102
#
103
# Complet installation
104
#
105
# Modules stuff.
106
#
107
#  Create the directory on the new image, if it does not exit yet.
108
if [ ! -d $FRONT_END_FILE_SYSTEM_MOUNT_POINT/lib/modules ] ; then
109
  mkdir $FRONT_END_FILE_SYSTEM_MOUNT_POINT/lib/modules
110
fi
111
#
112
#  Copy the modules
113
#
114
XEN_MODULES_DIRECTORY=`ls /lib/modules | grep xen `
115
for i in $XEN_MODULES_DIRECTORY ; do
116
  cp -a /lib/modules/$i $FRONT_END_FILE_SYSTEM_MOUNT_POINT/lib/modules
117
done
118
#
119
# Module stuff done.
120
#
121
# Generate or configure the specific files from templates
122
#
123
# Create the /etc directory, if necessary
124
if [ ! -d $FRONT_END_FILE_SYSTEM_MOUNT_POINT/etc ] ; then
125
  mkdir $FRONT_END_FILE_SYSTEM_MOUNT_POINT/etc
126
fi
127
# Copy the sources list
128
if [ ! -d $FRONT_END_FILE_SYSTEM_MOUNT_POINT/etc/apt ] ; then
129
  mkdir $FRONT_END_FILE_SYSTEM_MOUNT_POINT/etc/apt
130
fi
131
cp /etc/apt/sources.list $FRONT_END_FILE_SYSTEM_MOUNT_POINT/etc/apt
132

  
133
# /etc/network/interfaces
134
# The first interface is DHCP configured.
135
# No '/' between $FRONT_END_FILE_SYSTEM_MOUNT_POINT and $CURRENT_PATH
136
CURRENT_PATH=/etc/network
137
if [ ! -d ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH} ] ; then
138
  mkdir ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}
139
fi
140
cp templates$CURRENT_PATH/$FRONT_END_INTERFACES_TEMPLATE \
141
   $FRONT_END_FILE_SYSTEM_MOUNT_POINT$CURRENT_PATH/interfaces
142
if [ $CLUSTER_EXTERNAL_ADDRESSES_BY_DHCP -eq 1 ] ; then
143
  ETH0_STANZA="iface eth0 inet dhcp"
144
  rpl __ETH0_STATIC_OR_DHCP__ "$ETH0_STANZA"  \
145
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
146
  echo y | rpl __ETH0_STATIC_ADDRESS__ "" \
147
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
148
  echo y | rpl __ETH0_STATIC_NETMASK__ "" \
149
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
150
  echo y | rpl __ETH0_STATIC_NETWORK__ "" \
151
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
152
  echo y | rpl __ETH0_STATIC_GATEWAY__ "" \
153
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
154
  echo y | rpl __ETH0_STATIC_BROADCAST__ "" \
155
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
156
  echo y | rpl __ETH0_STATIC_NAMESERVERS__ "" \
157
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
158
  echo y | rpl __ETH0_STATIC_DNS_SEARCH__ "" \
159
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
160
else
161
  ETH0_STANZA="iface eth0 inet static"
162
  rpl __ETH0_STATIC_OR_DHCP__ "$ETH0_STANZA"  \
163
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces 
164
  echo y | rpl __ETH0_STATIC_ADDRESS__ "$FRONT_END_CLUSTER_STATIC_IP" \
165
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces 
166
  echo y | rpl __ETH0_STATIC_NETMASK__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_NETMASK" \
167
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces 
168
  echo y | rpl __ETH0_STATIC_NETWORK__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_NETWORK" \
169
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
170
  echo y | rpl __ETH0_STATIC_GATEWAY__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_GATEWAY" \
171
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces 
172
  echo y | rpl __ETH0_STATIC_BROADCAST__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_BROADCAST" \
173
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces 
174
  echo y | rpl __ETH0_STATIC_NAMESERVERS__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_DNS_NAMESERVERS" \
175
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces 
176
  echo y | rpl __ETH0_STATIC_DNS_SEARCH__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_DNS_SEARCH" \
177
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
178
fi 
179
# Static address on the cluster interface.
180
ADDRESS="${CLUSTER_STATIC_NETWORK_PREFIX}.${CONST_FRONT_END_CLUSTER_STATIC_NETWORK_POSTFIX}"
181
rpl __ETH1_STATIC_ADDRESS__ $ADDRESS  \
182
    ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
183
rpl __ETH1_STATIC_NETMASK__ $CLUSTER_STATIC_NETMASK  \
184
    ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
185
    
186
# /etc/hostname
187
CURRENT_PATH=/etc
188
echo $CURRENT_HOST_NAME > "${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/hostname"
189
# /etc/hosts. Script generated.
190
CURRENT_PATH=/etc
191
$SCRIPT_PATH/generate-hosts-file \
192
  ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/hosts
193
# /etc/resolv.conf
194
CURRENT_PATH=/etc
195
cp $TEMPLATES_DIR$CURRENT_PATH/resolv.conf \
196
   ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/resolv.conf
197
rpl __CLUSTER_DOMAIN_NAME__ "${CLUSTER_DOMAIN_NAME}." \
198
   ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/resolv.conf
199
rpl __FRONT_END_STATIC_ADDRESS__ "${CLUSTER_STATIC_NETWORK_PREFIX}.${CONST_FRONT_END_CLUSTER_STATIC_NETWORK_POSTFIX}" \
200
   ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/resolv.conf
201
#
202
# /etc/fstab
203
#
204
CURRENT_PATH=/etc
205
cp ${TEMPLATES_DIR}${CURRENT_PATH}/${FRONT_END_FSTAB_TEMPLATE} \
206
  ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/fstab
207
  # Front-End System Disk Line
208
FESDL=${FRONT_END_SYSTEM_VIRTUAL_VOLUME_DEVICE}
209
FESDL="$FESDL	/		$FRONT_END_SYSTEM_DISK_FILE_SYSTEM	errors=remount-ro	0	1"
210
rpl __FRONT_END_SYSTEM_DISK_LINE__ "$FESDL" \
211
  ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/fstab
212
  # Font-End Home Disk Line
213
FEHDL=${FRONT_END_HOME_VIRTUAL_VOLUME_DEVICE}
214
FEHDL="$FEHDL	/home		$FRONT_END_HOME_DISK_FILE_SYSTEM	errors=remount-ro	0	2"
215
rpl __FRONT_END_HOME_DISK_LINE__ "$FEHDL" \
216
  ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/fstab
217
  # Font-End Swap Disk Line
218
if [ "x$FRONT_END_SWAP_DISK_SIZE" != "x$CONST_NULL_DISK_SIZE" ] ; then
219
  FESDL=${FRONT_END_SWAP_VIRTUAL_VOLUME_DEVICE}
220
  FESDL="$FESDL	none		swap				0	0"
221
else
222
  FESDL=""
223
fi
224
# "rpl -f" since $FESDL can be an empty string.
225
rpl -f __FRONT_END_SWAP_DISK_LINE__ "$FESDL" \
226
  ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/fstab
227
#
228
# End /etc/fstab stuff.
229
#
230
# /etc/inittab stuff
231
#
232
rpl tty1 "$CONST_XEN_VIRTUAL_CONSOLE_NAME" \
233
  ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/inittab
234
#
235
# Umount the compute node system disk
236
#
237
# Order matters since the /home file system is mounted on the
238
# on the system partition
239
umount $FRONT_END_FILE_SYSTEM_MOUNT_POINT/home
240
umount $FRONT_END_FILE_SYSTEM_MOUNT_POINT
241
#
242
# Start the virtual machine
243
#
244
xm create $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
245
#
246
exit 0
247
#
248
# Wait until the virtual machine has started
249
#
250
IS_RUNNING=""
251
while [ -z "$IS_RUNNING" ]
252
  do
253
    IS_RUNNING=`xm list | grep $CURRENT_HOST_NAME`
254
    sleep 1
255
done
256
#
257
# Pin the VCPUs to "real" CPUs.
258
#
259
VCPU_NUM=0
260
for i in $CPUS_LIST
261
  do
262
    xm vcpu-pin $CURRENT_HOST_NAME $VCPU_NUM $i
263
    VCPU_NUM=$((VCPU_NUM + 1))
264
done
265

  
266
exit 0
0 267

  
trunk/shell/front-end-create (revision 37)
1
#! /bin/bash -x
2
#
3
# ST - 2012-03-09
4
#
5
# Create the front end, up to basic system installation.
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
if [ $? -ne 0 ] ; then
54
  exit 1
55
fi 
56
# Create the directory for the homes
57
if [ ! -d "$FRONT_END_FILE_SYSTEM_MOUNT_POINT/home" ]; then
58
  mkdir "$FRONT_END_FILE_SYSTEM_MOUNT_POINT/home"
59
fi
60
mount $FRONT_END_HOME_VOLUME_GROUP_DEVICE/$FRONT_END_HOME_DISK \
61
      "$FRONT_END_FILE_SYSTEM_MOUNT_POINT/home"
62

  
63
#
64
# Get the cluster MAC address
65
#
66
CURRENT_PATH=/etc
67
FRONT_END_CLUSTER_MAC_ADDRESS=\
68
`awk -F, -v INDEX=$CONST_FRONT_END_CLUSTER_STATIC_NETWORK_POSTFIX '{if (FNR==INDEX) {print $1}}' $SCRIPT_PATH/$TEMPLATES_DIR$CURRENT_PATH/$CONST_DHCP_HOSTS_FILE_BASENAME`
69
#
70
# Install the system.
71
# 
72
debootstrap --arch $CONST_DEBIAN_ARCH $CONST_DEBIAN_VERSION \
73
    $FRONT_END_FILE_SYSTEM_MOUNT_POINT
74
# exit 0
75
#
76
# Complete the installation
77
#
78
exit 0
0 79

  

Formats disponibles : Unified diff