summaryrefslogtreecommitdiffstats
path: root/debian/ctdb.example/nfs-kernel-server/enable-nfs.sh
diff options
context:
space:
mode:
Diffstat (limited to 'debian/ctdb.example/nfs-kernel-server/enable-nfs.sh')
-rwxr-xr-xdebian/ctdb.example/nfs-kernel-server/enable-nfs.sh186
1 files changed, 186 insertions, 0 deletions
diff --git a/debian/ctdb.example/nfs-kernel-server/enable-nfs.sh b/debian/ctdb.example/nfs-kernel-server/enable-nfs.sh
new file mode 100755
index 0000000..2346601
--- /dev/null
+++ b/debian/ctdb.example/nfs-kernel-server/enable-nfs.sh
@@ -0,0 +1,186 @@
+#!/bin/bash -e
+
+base="/usr/share/doc/ctdb/examples/nfs-kernel-server/"
+logfile="/tmp/enable-ctdb-nfs.$$.log" ; touch $logfile ;
+ghostname=""
+
+# functions ---------
+
+die() { echo error: $@; echo ; exit 1; };
+getout() { echo exit: $@; echo ; exit 0; };
+stopservice() { echo stopping $1... ; systemctl stop $1 2>&1 >> $logfile 2>&1; }
+disableservice() { echo disabling $1... ; systemctl disable $1 2>&1 >> $logfile 2>&1; }
+startservice() { echo starting $1... ; systemctl start $1 2>&1 >> $logfile 2>&1; }
+sysctlrefresh() { echo refreshing sysctl... ; sysctl --system 2>&1 >> $logfile 2>&1; }
+
+backupfile() {
+ echo backing up $1
+ [ -f $1.prvctdb ] && die "backup file $1 already exists!"
+ [ -f $1 ] && cp $1 $1.prvctdb || true
+}
+
+renamefiles() {
+ for f; do
+ [ -f "$f" ] || continue
+ echo "Renaming $f to $f.prvctdb"
+ mv "$f" "$f".prvctdb
+ done
+}
+
+checkservice() {
+ (systemctl list-unit-files | grep -q $1.service) || die "service $1 not found"
+}
+
+replacefile() {
+
+ origfile=$1
+ replfile=$2
+
+
+ [ ! -f $base/$origfile ] && die "coult not find $base/$origfile"
+
+ echo replacing $replfile...
+ cp $base/$origfile $replfile
+}
+
+appendfile() {
+
+ origfile=$1
+ replfile=$2
+
+ [ ! -f $base/$origfile ] && die "coult not find $base/$origfile"
+
+ echo appending $base/$origfile to $replfile...
+ cat $base/$origfile >> $replfile
+}
+
+execnfsenv() {
+
+ file=$1 ; [ -f $file ] || due "inexistent file $file";
+
+ echo executing $file...
+
+ $file 2>&1 >> $logfile 2>&1;
+}
+
+fixnfshostname() {
+
+ type nfsconf > /dev/null 2>&1 || die "nfsconf(8) not found"
+
+ if [ "$ghostname" == "" ]; then
+ echo "What is the FQDN for the public IP address of this host ?"
+ echo -n "> "
+ read ghostname
+ fi
+
+ echo "Setting $ghostname in nfs.conf..."
+ nfsconf --set statd name "$ghostname"
+}
+
+# end of functions --
+
+[ $UID != 0 ] && die "you need root privileges"
+
+echo """
+This script will enable CTDB NFS HA by changing the following files:
+
+(1) /etc/nfs.conf ( replace )
+(2) /etc/nfs.conf.d/*.conf ( rename )
+(3) /etc/services ( append )
+(4) /etc/sysctl.d/98-nfs-static-ports.conf ( create )
+(5) /etc/default/quota ( replace )
+
+and disabling the following services, as they will be managed
+by ctdb:
+
+(1) rpcbind
+(2) nfs-kernel-server
+(3) rpc.rquotad
+
+Obs:
+ - replaced files keep previous versions as "file".prevctdb
+ - dependant services will also be stopped
+"""
+
+while true; do
+ echo -n "Do you agree with this change ? (N/y) => "
+ read answer
+ [ "$answer" == "n" ] && getout "exiting without any changes"
+ [ "$answer" == "y" ] && break
+done
+
+
+echo "checking requirements..."
+
+checkservice nfs-kernel-server
+checkservice quota
+checkservice rpcbind
+
+echo "requirements okay!"
+echo
+
+backupfile /etc/nfs.conf
+renamefiles /etc/nfs.conf.d/*.conf
+backupfile /etc/services
+backupfile /etc/default/quota
+echo
+
+set +e
+
+stopservice ctdb.service
+stopservice quota.service
+stopservice nfs-kernel-server.service
+stopservice rpcbind.service
+stopservice rpcbind.socket
+stopservice rpcbind.target
+echo
+
+disableservice ctdb.service
+disableservice quota.service
+disableservice nfs-kernel-server.service
+disableservice rpcbind.service
+disableservice rpcbind.socket
+disableservice rpcbind.target
+echo
+
+set -e
+
+replacefile nfs.conf /etc/nfs.conf
+replacefile 98-nfs-static-ports.conf /etc/sysctl.d/98-nfs-static-ports.conf
+replacefile quota /etc/default/quota
+echo
+
+appendfile services /etc/services
+echo
+
+fixnfshostname
+echo
+
+sysctlrefresh
+echo
+
+echo """Finished! Make sure to configure properly:
+
+ - /etc/exports (containing the clustered fs to be exported)
+ - /etc/ctdb/nodes (containing all your node private IPs)
+ - /etc/ctdb/public_addressess (containing public addresses)
+
+A log file can be found at:
+
+ - /tmp/enable-ctdb-nfs.$$.log
+
+Remember:
+
+ - to place a cluster lock in /etc/ctdb/ctdb.conf:
+ ...
+ [cluster]
+ cluster lock = /clustered.filesystem/.reclock
+ ...
+
+And, make sure you enable ctdb service again:
+
+ - systemctl enable ctdb.service
+ - systemctl start ctdb.service
+
+Enjoy!
+"""