#!/bin/sh
#
# drbd83-install-v01.sh (30 May 2013)
# GeekPeek.Net scripts - Configure and install drbd83 on CentOS 6.X script
#
# INFO: This script was tested on CentOS 6.4 minimal installation. The script installs and configures
# DRBD 83. It installs ELRepo and drbd83-utils and kmod-drbd83 packages. It inserts drbd
# module and creates drbd resource configuration file. It creates drbd device and EXT4 filesystem on it.
# It adds two new lines to /etc/hosts file and creates new file /etc/cron.hourly/ntpsync.
#
# All of the actions are done on both of the DRBD nodes so SSH key is generated and transferred for
# easier configuration!
#
# CODE:
echo "For this script to work as expected, you need to enable root SSH access on the second machine."
echo "Is SSH root access enabled on the second machine? (y/n)"
read rootssh
case $rootssh in
y)
echo "Please enter the second machine IP address."
read ipaddr2
echo "Generating SSH key - press Enter a couple of times..."
/usr/bin/ssh-keygen
echo "Copying SSH key to the second machine..."
echo "Please enter root password for the second machine."
/usr/bin/ssh-copy-id root@$ipaddr2
echo "Succesfully set up SSH with key authentication...continuing with package installation on both machines..."
;;
n)
echo "Root access must be enabled on the second machine...exiting!"
exit 1
;;
esac
/bin/rpm -ivh http://elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm
/usr/bin/ssh root@$ipaddr2 /bin/rpm -ivh http://elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm
/usr/bin/yum install -y kmod-drbd83 drbd83-utils ntpdate
/usr/bin/ssh root@$ipaddr2 /usr/bin/yum install -y kmod-drbd83 drbd83-utils ntpdate
/sbin/modprobe drbd
/usr/bin/ssh root@$ipaddr2 /sbin/modprobe drbd
echo "Creating DRBD resource config file - need some additional INFO."
echo "..."
echo "Which DRBD device is this on your machines - talking about /dev/drbd1, /dev/drbd2,... (example: 1)"
read drbdnum
echo "Enter FQDN of your current machine (example: foo1.geekpeek.net):"
read fqdn1
echo "Enter current machine IP address (example: 192.168.1.100):"
read ipaddr1
echo "Enter current machine disk intended for DRBD (example: /dev/sdb):"
read disk1
echo "Enter FQDN of your second machine (example: foo2.geekpeek.net):"
read fqdn2
echo "Enter second machine IP address (example: 192.168.1.101):"
read ipaddr2
echo "Enter second machine disk intended for DRBD (example: /dev/sdb):"
read disk2
echo "Enter suitable NTP server for time synchronization (example: ntp1.arnes.si):"
read ntpserver
echo "Creating DRBD configuration file..."
echo "resource disk$drbdnum" >> /etc/drbd.d/disk$drbdnum.res
echo "{" >> /etc/drbd.d/disk$drbdnum.res
echo " startup {" >> /etc/drbd.d/disk$drbdnum.res
echo " wfc-timeout 30;" >> /etc/drbd.d/disk$drbdnum.res
echo " outdated-wfc-timeout 20;" >> /etc/drbd.d/disk$drbdnum.res
echo " degr-wfc-timeout 30;" >> /etc/drbd.d/disk$drbdnum.res
echo " }" >> /etc/drbd.d/disk$drbdnum.res
echo " net {" >> /etc/drbd.d/disk$drbdnum.res
echo " cram-hmac-alg sha1;" >> /etc/drbd.d/disk$drbdnum.res
echo " shared-secret "sync_disk";" >> /etc/drbd.d/disk$drbdnum.res
echo " }" >> /etc/drbd.d/disk$drbdnum.res
echo " syncer {" >> /etc/drbd.d/disk$drbdnum.res
echo " rate 100M;" >> /etc/drbd.d/disk$drbdnum.res
echo " verify-alg sha1;" >> /etc/drbd.d/disk$drbdnum.res
echo " }" >> /etc/drbd.d/disk$drbdnum.res
echo " on $fqdn1 {" >> /etc/drbd.d/disk$drbdnum.res
echo " device minor $drbdnum;" >> /etc/drbd.d/disk$drbdnum.res
echo " disk $disk1;" >> /etc/drbd.d/disk$drbdnum.res
echo " address $ipaddr1:7789;" >> /etc/drbd.d/disk$drbdnum.res
echo " meta-disk internal;" >> /etc/drbd.d/disk$drbdnum.res
echo " }" >> /etc/drbd.d/disk$drbdnum.res
echo " on $fqdn2 {" >> /etc/drbd.d/disk$drbdnum.res
echo " device minor $drbdnum;" >> /etc/drbd.d/disk$drbdnum.res
echo " disk $disk2;" >> /etc/drbd.d/disk$drbdnum.res
echo " address $ipaddr2:7789;" >> /etc/drbd.d/disk$drbdnum.res
echo " meta-disk internal;" >> /etc/drbd.d/disk$drbdnum.res
echo " }" >> /etc/drbd.d/disk$drbdnum.res
echo "}" >> /etc/drbd.d/disk$drbdnum.res
echo "DRBD configuration file created /etc/drbd.d/disk$drbdnum"
echo "$ipaddr1 $fqdn1" >> /etc/hosts
echo "$ipaddr2 $fqdn2" >> /etc/hosts
/usr/bin/scp /etc/hosts root@$ipaddr2:/etc/
echo "ntpdate $ntpserver" >> /etc/cron.hourly/ntpsync
/bin/chmod +x /etc/cron.hourly/ntpsync
/usr/bin/scp /etc/cron.hourly/ntpsync root@$ipaddr2:/etc/cron.hourly/
/usr/bin/ssh root@$ipaddr2 echo "1 * * * * root ntpdate $ntpserver" >> /etc/crontab
/usr/bin/ssh root@$ipaddr2 echo "$ipaddr1 $fqdn1" >> /etc/hosts
/usr/bin/ssh root@$ipaddr2 echo "$ipaddr2 $fqdn2" >> /etc/hosts
/usr/bin/scp /etc/drbd.d/disk$drbdnum.res root@$ipaddr2:/etc/drbd.d/
/sbin/drbdadm create-md disk$drbdnum
/usr/bin/ssh root@$ipaddr2 /sbin/drbdadm create-md disk$drbdnum
/usr/bin/ssh root@$ipaddr2 /etc/init.d/drbd start &
/etc/init.d/drbd start
/sbin/drbdadm -- --overwrite-data-of-peer primary disk$drbdnum
/sbin/mkfs.ext4 /dev/drbd$drbdnum
sleep 5
/bin/cat /proc/drbd
echo "DRBD configuration completed! Please wait for the disk synchronization to complete..."
echo "...then you can now mount your DRBD disk on primary node!"