#!/bin/bash
USER_DATA=/mnt/user-data
EBS_DEV=/dev/sdf
EBS_MNT=/mnt/ebs0
PERSIST_LIST=/etc/instpersist.cfg
# Create a single parition
fdiskdev () {
fdisk $1 <<EOF
n
p
1
p
w
EOF
}
# Transplant data to the EBS volume
transplant () {
PTH=$1
EBS=$2
echo "Checking transplant of $PTH to $EBS"
if [ ! -e ${EBS}${PTH} ]; then
echo "Relocating ${PTH} ${EBS}${PTH}"
PDIR=`dirname ${EBS}${PTH}`
# Create a mysql directory on the EBS volume.
mkdir -p $PDIR
# Copy the current data to the EBS volume.
rsync -a $PTH $PDIR
fi
if [ ! -e ${PTH}.EPHEMERAL ]; then
echo "Replacing ${PTH} with link to ${EBS}${PTH}"
# Move the old path aside.
mv ${PTH} ${PTH}.EPHEMERAL
# Create symbolic link to the new place.
ln -s ${EBS}${PTH} ${PTH}
fi
}
# Is this a reboot?
if [ -e $USER_DATA ]; then
echo "instbootstrap saw REBOOT"
exit 0
fi
# It's not a reboot, fetch the user-data
wget http://169.254.169.254/latest/user-data -O $USER_DATA
if [ ! -s $USER_DATA ]; then
# Started in ephemeral state.
echo "instbootstrap started in EPHEMERAL"
else
# Which mode are we in?
if grep -qi INIT_EBS $USER_DATA; then
# We are INITIALIZING an EBS volume.
echo "instbootstrap saw INIT_EBS"
# Shutdown services.
service httpd stop
service mysqld stop
# Wait for the unformatted EBS volume.
echo "instbootstrap waiting for EBS on ${EBS_DEV} ..."
while [ ! -e $EBS_DEV ]; do
inotifywait -qq /dev
done
# Hate this.
sleep 5
# Write a parition table.
echo "Creating partion table on $EBS_DEV"
fdiskdev $EBS_DEV
# Create a filesystem.
echo "Making filesystem on $EBS_DEV"
mkfs -t ext3 ${EBS_DEV}1
# Create a mount point.
mkdir ${EBS_MNT}
# Append line to /etc/fstab.
echo "${EBS_DEV}1 ${EBS_MNT} ext3 defaults 1 2" >> /etc/fstab
# Mount the filesystem.
echo "Mounting ${EBS_MNT}"
mount ${EBS_MNT}
# Transplant things.
for path in `cat $PERSIST_LIST`; do
transplant $path ${EBS_MNT}
done
# Restart services.
service mysqld start
service httpd start
# Make sure we don't repeat the init.
echo USE_EBS > $USER_DATA
elif grep -qi USE_EBS $USER_DATA; then
# We are USING an existing EBS volume.
echo "instbootstrap saw USE_EBS"
# Shutdown services.
service httpd stop
service mysqld stop
# Wait for the unformatted EBS volume.
echo "instbootstrap waiting for EBS on ${EBS_DEV} ..."
while [ ! -e ${EBS_DEV}1 ]; do
inotifywait -qq /dev
done
# Hate this.
sleep 5
# Create a mount point.
mkdir ${EBS_MNT}
# Append line to /etc/fstab.
echo "${EBS_DEV}1 ${EBS_MNT} ext3 defaults 1 2" >> /etc/fstab
# Mount the filesystem.
echo "Mounting ${EBS_MNT}"
mount ${EBS_MNT}
# Link things.
for path in `cat $PERSIST_LIST`; do
transplant $path ${EBS_MNT}
done
# Restart services.
service mysqld start
service httpd start
else
# Fallback to ephemeral mode.
echo "instbootstrap fallback to EPHEMERAL"
fi
fi