Statistiques
| Révision :

root / trunk / shell / finish-up-front-end @ 36

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

1 34 storres
#! /bin/bash -x
2 34 storres
#
3 34 storres
# ST - 2012-05-25
4 34 storres
#
5 34 storres
# Finish up the front end installation.
6 34 storres
#
7 34 storres
# Get the directory of the script.
8 34 storres
SCRIPT_PATH=`dirname $0`
9 34 storres
# Get the script name.
10 34 storres
SCRIPT_NAME=`basename $0`
11 34 storres
# Source the common configuration variables.
12 34 storres
. $SCRIPT_PATH/c-i-a-b.common
13 34 storres
14 34 storres
CURRENT_HOST_NAME=$FRONT_END_HOST_NAME
15 34 storres
#
16 34 storres
# Get the cluster MAC address
17 34 storres
#
18 34 storres
FRONT_END_CLUSTER_MAC_ADDRESS=\
19 34 storres
`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 34 storres
#
21 34 storres
#
22 34 storres
# Create the Xen configuration file from a template
23 34 storres
#
24 34 storres
CURRENT_PATH=/etc/xen
25 34 storres
cp templates$CURRENT_PATH/$CONST_FRONT_END_XEN_TEMPLATE_NAME \
26 34 storres
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
27 34 storres
rpl Template Configuration $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
28 34 storres
rpl __FRONT_END_KERNEL__ $COMPUTE_NODE_KERNEL \
29 34 storres
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
30 34 storres
rpl __FRONT_END_RAMDISK__ $FRONT_END_RAMDISK \
31 34 storres
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
32 34 storres
rpl __FRONT_END_VCPUS_NUM__ $FRONT_END_VCPUS_NUM \
33 34 storres
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
34 34 storres
CPUS_LIST=$FRONT_END_CPUS_LIST
35 34 storres
CPUS=""
36 34 storres
for i in $CPUS_LIST
37 34 storres
  do
38 34 storres
    if [ "x$CPUS" == "x" ]
39 34 storres
      then
40 34 storres
        CPUS=$i
41 34 storres
      else
42 34 storres
        CPUS="$CPUS,$i"
43 34 storres
    fi
44 34 storres
done
45 34 storres
rpl __FRONT_END_CPUS__ $CPUS \
46 34 storres
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
47 34 storres
# Memory
48 34 storres
rpl __FRONT_END_MEMORY__ $FRONT_END_MEMORY \
49 34 storres
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
50 34 storres
# Root device
51 34 storres
rpl __XEN_SYSTEM_DISK_ROOT_DEVICE_STANZA__ "$CONST_XEN_SYSTEM_DISK_ROOT_DEVICE_STANZA" \
52 34 storres
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
53 34 storres
#
54 34 storres
# System disk stuff
55 34 storres
FRONT_END_SYSTEM_DISK_STANZA="'phy:${FRONT_END_SYSTEM_VOLUME_GROUP_DEVICE}/${FRONT_END_SYSTEM_DISK},$FRONT_END_SYSTEM_VIRTUAL_VOLUME,w'"
56 34 storres
rpl __FRONT_END_SYSTEM_DISK_STANZA__ "$FRONT_END_SYSTEM_DISK_STANZA" \
57 34 storres
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
58 34 storres
# Home disk stuff
59 34 storres
FRONT_END_HOME_DISK_STANZA="'phy:${FRONT_END_HOME_VOLUME_GROUP_DEVICE}/${FRONT_END_HOME_DISK},$FRONT_END_HOME_VIRTUAL_VOLUME,w'"
60 34 storres
rpl __FRONT_END_HOME_DISK_STANZA__ "$FRONT_END_HOME_DISK_STANZA" \
61 34 storres
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
62 34 storres
# Swap disk stuff.
63 34 storres
if [ "x$FRONT_END_SWAP_DISK_SIZE" != "x$CONST_NULL_DISK_SIZE" ] ; then
64 34 storres
  FRONT_END_SWAP_DISK_STANZA="'phy:${FRONT_END_SWAP_VOLUME_GROUP_DEVICE}/${FRONT_END_SWAP_DISK},$FRONT_END_SWAP_VIRTUAL_VOLUME,w'"
65 34 storres
  rpl __FRONT_END_SWAP_DISK_STANZA__ $FRONT_END_SWAP_DISK_STANZA \
66 34 storres
     $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
67 34 storres
  # Comment out the noswap stanza.
68 34 storres
  rpl __FRONT_END_NOSWAP__ "#$CLUSTER_NOSWAP" \
69 34 storres
     $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
70 34 storres
else
71 34 storres
  echo y | rpl -f __FRONT_END_SWAP_DISK_STANZA__ "" \
72 34 storres
     $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
73 34 storres
  rpl __FRONT_END_NOSWAP__ $CLUSTER_NOSWAP \
74 34 storres
     $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
75 34 storres
fi
76 34 storres
#
77 34 storres
rpl __FRONT_END_HOST_NAME__ $CURRENT_HOST_NAME \
78 34 storres
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
79 34 storres
# Vif stuff.
80 34 storres
VIF_STANZA=$CONST_XEN_VIF_STANZA_PREFIX
81 34 storres
EXTERNAL_MAC="${CONST_XEN_MAC_PREFIX}${FRONT_END_EXTERNAL_MAC_ADDRESS}"
82 34 storres
INTERNAL_MAC="${CONST_XEN_MAC_PREFIX}${FRONT_END_CLUSTER_MAC_ADDRESS}"
83 34 storres
INTERNAL_BRIDGE="${CONST_XEN_BRIDGE_PREFIX}${CLUSTER_BRIDGE_NAME}"
84 34 storres
INTERNAL_IP="${CONST_XEN_IP_PREFIX}${FRONT_END_CLUSTER_STATIC_IP}"
85 34 storres
if [ $CLUSTER_EXTERNAL_ADDRESSES_BY_DHCP -eq 1 ] ;then
86 34 storres
  rpl __XEN_DHCP_STANZA__ "$CONST_XEN_DHCP_STANZA" \
87 34 storres
     $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
88 34 storres
  VIF_STANZA=${VIF_STANZA}${EXTERNAL_MAC}"','"${INTERNAL_IP}","${INTERNAL_MAC}","${INTERNAL_BRIDGE}${CONST_XEN_VIF_STANZA_POSTFIX}
89 34 storres
else
90 34 storres
  # Comment out the DHCP_STANZA.
91 34 storres
  rpl __XEN_DHCP_STANZA__ "#$CONST_XEN_DHCP_STANZA" \
92 34 storres
     $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
93 34 storres
  VIF_STANZA=${VIF_STANZA}${EXTERNAL_IP}","${EXTERNAL_MAC}",'"${INTERNAL_IP}","${INTERNAL_MAC},${INTERNAL_BRIDGE}${CONST_XEN_VIF_STANZA_POSTFIX}
94 34 storres
fi
95 34 storres
# In any case, write the VIF_STANZA
96 34 storres
rpl __VIF_STANZA__ "$VIF_STANZA" \
97 34 storres
   $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
98 35 storres
# Console stuff as extra parameter
99 35 storres
rpl __EXTRA_STANZA__ "$CONST_XEN_EXTRA_STANZA" \
100 35 storres
     $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
101 34 storres
# End creation of Xen configuration file.
102 34 storres
#
103 34 storres
# Complet installation
104 34 storres
#
105 34 storres
# Modules stuff.
106 34 storres
#
107 34 storres
#  Create the directory on the new image, if it does not exit yet.
108 34 storres
if [ ! -d $FRONT_END_FILE_SYSTEM_MOUNT_POINT/lib/modules ] ; then
109 34 storres
  mkdir $FRONT_END_FILE_SYSTEM_MOUNT_POINT/lib/modules
110 34 storres
fi
111 34 storres
#
112 34 storres
#  Copy the modules
113 34 storres
#
114 34 storres
XEN_MODULES_DIRECTORY=`ls /lib/modules | grep xen `
115 34 storres
for i in $XEN_MODULES_DIRECTORY ; do
116 34 storres
  cp -a /lib/modules/$i $FRONT_END_FILE_SYSTEM_MOUNT_POINT/lib/modules
117 34 storres
done
118 34 storres
#
119 34 storres
# Module stuff done.
120 34 storres
#
121 34 storres
# Generate or configure the specific files from templates
122 34 storres
#
123 34 storres
# Create the /etc directory, if necessary
124 34 storres
if [ ! -d $FRONT_END_FILE_SYSTEM_MOUNT_POINT/etc ] ; then
125 34 storres
  mkdir $FRONT_END_FILE_SYSTEM_MOUNT_POINT/etc
126 34 storres
fi
127 34 storres
# Copy the sources list
128 34 storres
if [ ! -d $FRONT_END_FILE_SYSTEM_MOUNT_POINT/etc/apt ] ; then
129 34 storres
  mkdir $FRONT_END_FILE_SYSTEM_MOUNT_POINT/etc/apt
130 34 storres
fi
131 34 storres
cp /etc/apt/sources.list $FRONT_END_FILE_SYSTEM_MOUNT_POINT/etc/apt
132 34 storres
133 34 storres
# /etc/network/interfaces
134 34 storres
# The first interface is DHCP configured.
135 34 storres
# No '/' between $FRONT_END_FILE_SYSTEM_MOUNT_POINT and $CURRENT_PATH
136 34 storres
CURRENT_PATH=/etc/network
137 34 storres
if [ ! -d ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH} ] ; then
138 34 storres
  mkdir ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}
139 34 storres
fi
140 34 storres
cp templates$CURRENT_PATH/$FRONT_END_INTERFACES_TEMPLATE \
141 34 storres
   $FRONT_END_FILE_SYSTEM_MOUNT_POINT$CURRENT_PATH/interfaces
142 34 storres
if [ $CLUSTER_EXTERNAL_ADDRESSES_BY_DHCP -eq 1 ] ; then
143 34 storres
  ETH0_STANZA="iface eth0 inet dhcp"
144 34 storres
  rpl __ETH0_STATIC_OR_DHCP__ "$ETH0_STANZA"  \
145 34 storres
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
146 34 storres
  echo y | rpl __ETH0_STATIC_ADDRESS__ "" \
147 34 storres
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
148 34 storres
  echo y | rpl __ETH0_STATIC_NETMASK__ "" \
149 34 storres
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
150 34 storres
  echo y | rpl __ETH0_STATIC_NETWORK__ "" \
151 34 storres
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
152 34 storres
  echo y | rpl __ETH0_STATIC_GATEWAY__ "" \
153 34 storres
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
154 34 storres
  echo y | rpl __ETH0_STATIC_BROADCAST__ "" \
155 34 storres
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
156 34 storres
  echo y | rpl __ETH0_STATIC_NAMESERVERS__ "" \
157 34 storres
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
158 34 storres
  echo y | rpl __ETH0_STATIC_DNS_SEARCH__ "" \
159 34 storres
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
160 34 storres
else
161 34 storres
  ETH0_STANZA="iface eth0 inet static"
162 34 storres
  rpl __ETH0_STATIC_OR_DHCP__ "$ETH0_STANZA"  \
163 34 storres
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
164 34 storres
  echo y | rpl __ETH0_STATIC_ADDRESS__ "$FRONT_END_CLUSTER_STATIC_IP" \
165 34 storres
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
166 34 storres
  echo y | rpl __ETH0_STATIC_NETMASK__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_NETMASK" \
167 34 storres
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
168 34 storres
  echo y | rpl __ETH0_STATIC_NETWORK__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_NETWORK" \
169 34 storres
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
170 34 storres
  echo y | rpl __ETH0_STATIC_GATEWAY__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_GATEWAY" \
171 34 storres
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
172 34 storres
  echo y | rpl __ETH0_STATIC_BROADCAST__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_BROADCAST" \
173 34 storres
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
174 34 storres
  echo y | rpl __ETH0_STATIC_NAMESERVERS__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_DNS_NAMESERVERS" \
175 34 storres
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
176 34 storres
  echo y | rpl __ETH0_STATIC_DNS_SEARCH__ "$FRONT_END_EXTERNAL_INTERFACE_STATIC_DNS_SEARCH" \
177 34 storres
      ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
178 34 storres
fi
179 34 storres
# Static address on the cluster interface.
180 34 storres
ADDRESS="${CLUSTER_STATIC_NETWORK_PREFIX}.${CONST_FRONT_END_CLUSTER_STATIC_NETWORK_POSTFIX}"
181 34 storres
rpl __ETH1_STATIC_ADDRESS__ $ADDRESS  \
182 34 storres
    ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
183 34 storres
rpl __ETH1_STATIC_NETMASK__ $CLUSTER_STATIC_NETMASK  \
184 34 storres
    ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/interfaces
185 34 storres
186 34 storres
# /etc/hostname
187 34 storres
CURRENT_PATH=/etc
188 34 storres
echo $CURRENT_HOST_NAME > "${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/hostname"
189 34 storres
# /etc/hosts. Script generated.
190 34 storres
CURRENT_PATH=/etc
191 34 storres
$SCRIPT_PATH/generate-hosts-file \
192 34 storres
  ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/hosts
193 34 storres
# /etc/resolv.conf
194 34 storres
CURRENT_PATH=/etc
195 34 storres
cp $TEMPLATES_DIR$CURRENT_PATH/resolv.conf \
196 34 storres
   ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/resolv.conf
197 34 storres
rpl __CLUSTER_DOMAIN_NAME__ "${CLUSTER_DOMAIN_NAME}." \
198 34 storres
   ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/resolv.conf
199 34 storres
rpl __FRONT_END_STATIC_ADDRESS__ "${CLUSTER_STATIC_NETWORK_PREFIX}.${CONST_FRONT_END_CLUSTER_STATIC_NETWORK_POSTFIX}" \
200 34 storres
   ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/resolv.conf
201 34 storres
#
202 34 storres
# /etc/fstab
203 34 storres
#
204 34 storres
CURRENT_PATH=/etc
205 34 storres
cp ${TEMPLATES_DIR}${CURRENT_PATH}/${FRONT_END_FSTAB_TEMPLATE} \
206 34 storres
  ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/fstab
207 34 storres
  # Front-End System Disk Line
208 34 storres
FESDL=${FRONT_END_SYSTEM_VIRTUAL_VOLUME_DEVICE}
209 34 storres
FESDL="$FESDL	/		$FRONT_END_SYSTEM_DISK_FILE_SYSTEM	errors=remount-ro	0	1"
210 34 storres
rpl __FRONT_END_SYSTEM_DISK_LINE__ "$FESDL" \
211 34 storres
  ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/fstab
212 34 storres
  # Font-End Home Disk Line
213 34 storres
FEHDL=${FRONT_END_HOME_VIRTUAL_VOLUME_DEVICE}
214 34 storres
FEHDL="$FEHDL	/home		$FRONT_END_HOME_DISK_FILE_SYSTEM	errors=remount-ro	0	2"
215 34 storres
rpl __FRONT_END_HOME_DISK_LINE__ "$FEHDL" \
216 34 storres
  ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/fstab
217 34 storres
  # Font-End Swap Disk Line
218 34 storres
if [ "x$FRONT_END_SWAP_DISK_SIZE" != "x$CONST_NULL_DISK_SIZE" ] ; then
219 34 storres
  FESDL=${FRONT_END_SWAP_VIRTUAL_VOLUME_DEVICE}
220 34 storres
  FESDL="$FESDL	none		swap				0	0"
221 34 storres
else
222 34 storres
  FESDL=""
223 34 storres
fi
224 34 storres
# "rpl -f" since $FESDL can be an empty string.
225 34 storres
rpl -f __FRONT_END_SWAP_DISK_LINE__ "$FESDL" \
226 34 storres
  ${FRONT_END_FILE_SYSTEM_MOUNT_POINT}${CURRENT_PATH}/fstab
227 34 storres
#
228 34 storres
# Umount the compute node system disk
229 34 storres
#
230 34 storres
# Order matters since the /home file system is mounted on the
231 34 storres
# on the system partition
232 34 storres
umount $FRONT_END_FILE_SYSTEM_MOUNT_POINT/home
233 34 storres
umount $FRONT_END_FILE_SYSTEM_MOUNT_POINT
234 34 storres
#
235 34 storres
# Start the virtual machine
236 34 storres
#
237 34 storres
xm create $CONST_XEN_CONFIG_DIR/$CURRENT_HOST_NAME.cfg
238 34 storres
#
239 34 storres
exit 0
240 34 storres
#
241 34 storres
# Wait until the virtual machine has started
242 34 storres
#
243 34 storres
IS_RUNNING=""
244 34 storres
while [ -z "$IS_RUNNING" ]
245 34 storres
  do
246 34 storres
    IS_RUNNING=`xm list | grep $CURRENT_HOST_NAME`
247 34 storres
    sleep 1
248 34 storres
done
249 34 storres
#
250 34 storres
# Pin the VCPUs to "real" CPUs.
251 34 storres
#
252 34 storres
VCPU_NUM=0
253 34 storres
for i in $CPUS_LIST
254 34 storres
  do
255 34 storres
    xm vcpu-pin $CURRENT_HOST_NAME $VCPU_NUM $i
256 34 storres
    VCPU_NUM=$((VCPU_NUM + 1))
257 34 storres
done
258 34 storres
259 34 storres
exit 0