diff --git a/save_config.sh b/save_config.sh index f6ab5a9..1a9646d 100644 --- a/save_config.sh +++ b/save_config.sh @@ -1,102 +1,109 @@ -#!/bin/sh - -rundate=$(date) - -################################################# -# Backup the FreeNAS configuration file -################################################# - -# Optional: specify your email address here if you want to receive notification -email="" - -# Optional: specify the short name of your ESXi host if you are running FreeNAS -# as a VM and you want to back up the ESXi host's configuration -esxihost="" - -# Specify the dataset on your system where you want the configuration files copied. -# Don't include the trailing slash. - -# Example: configdir=/mnt/tank/sysadmin/config - -configdir="" - -# Remove this code once you've defined configdir above... :-) - -if [ -z ${configdir} ]; then - echo "Edit script and specify the target directory ('configdir') before using $0" - exit 2 -fi - -freenashost=$(hostname -s) - -fnconfigdest_version=$(< /etc/version sed -e 's/)//;s/(//;s/ /-/' | tr -d '\n') -fnconfigdest_date=$(date +%Y%m%d%H%M%S) -fnconfigdest="${configdir}"/"${freenashost}"-"${fnconfigdest_version}"-"${fnconfigdest_date}".db - -echo "Backup FreeNAS configuration database file: ${fnconfigdest}" - -# Copy the source to the destination: - -cp /data/freenas-v1.db "${fnconfigdest}" -l_status=$? - -################################################# -# Backup the VMware ESXi host configuration: -################################################# - -if [ ! -z "${esxihost}" ]; then - esxihostname=$(ssh root@"${esxihost}" hostname) - esxiversion=$(ssh root@"${esxihost}" uname -a | sed -e "s|VMkernel ||;s|$esxihostname ||") - esxiconfig_url=$(ssh root@"${esxihost}" vim-cmd hostsvc/firmware/backup_config | awk '{print $7}' | sed -e "s|*|$esxihostname|") - esxiconfig_date=$(date +%Y%m%d%H%M%S) - esxiconfig_file="${configdir}"/"${esxihost}"-configBundle-"${esxiconfig_date}".tgz - - echo "Downloading $esxiconfig_url to $esxiconfig_file" - wget --no-check-certificate --output-document="${esxiconfig_file}" "${esxiconfig_url}" -fi - -################################################# -# Send email notification if indicated: -################################################# - -if [ ! -z "${email}" ]; then - freenashostuc=$(hostname -s | tr '[:lower:]' '[:upper:]') - freenashostname=$(hostname) - freenasversion=$(cat /etc/version) - logfile="/tmp/save_config.tmp" - if [ $l_status -eq 0 ]; then - subject="FreeNAS configuration saved on server ${freenashostuc}" - else - subject="FreeNAS configuration backup failed on server ${freenashostuc}" - fi - ( - echo "To: ${email}" - echo "Subject: ${subject}" - echo "Content-Type: text/html" - echo "MIME-Version: 1.0" - printf "\r\n" - echo "
"
- if [ $l_status -eq 0 ]; then
- echo "Configuration file saved successfully on ${rundate}"
- else
- echo "Configuration backup failed with status=${l_status} on ${rundate}"
- fi
- echo ""
- echo "FreeNAS:"
- echo "Server: ${freenashostname}"
- echo "Version: ${freenasversion}"
- echo "File: ${fnconfigdest}"
- if [ ! -z "${esxihost}" ]; then
- echo ""
- echo "ESXi:"
- echo "Server: ${esxihostname}"
- echo "Version: ${esxiversion}"
- echo "File: ${esxiconfig_file}"
- fi
- echo ""
- ) > ${logfile}
- sendmail ${email} < ${logfile}
- rm ${logfile}
-fi
-
-
+#!/bin/sh
+
+rundate=$(date)
+
+#################################################
+# Backup the FreeNAS configuration file
+#################################################
+
+# Optional: specify your email address here if you want to receive notification
+email=""
+
+# Optional: specify the short name of your ESXi host if you are running FreeNAS
+# as a VM and you want to back up the ESXi host's configuration
+esxihost=""
+
+# Specify the dataset on your system where you want the configuration files copied.
+# Don't include the trailing slash.
+
+# Example: configdir=/mnt/tank/sysadmin/config
+
+configdir=""
+
+# Remove this code once you've defined configdir above... :-)
+
+if [ -z ${configdir} ]; then
+ echo "Edit script and specify the target directory ('configdir') before using $0"
+ exit 2
+fi
+
+freenashost=$(hostname -s)
+
+fnconfigdest_version=$(< /etc/version sed -e 's/)//;s/(//;s/ /-/' | tr -d '\n')
+fnconfigdest_date=$(date +%Y%m%d%H%M%S)
+fnconfigdest="${configdir}"/"${freenashost}"-"${fnconfigdest_version}"-"${fnconfigdest_date}".db
+
+echo "Backup FreeNAS configuration database file: ${fnconfigdest}"
+
+iscorral=$(< /etc/version grep "Corral" | awk {'print $1'})
+
+if [ ! -z iscorral ]; then
+ # FreeNAS Corral: make a CLI call:
+ cli -e "system config download path=${fnconfigdest}"
+else
+ # FreeNAS 9.x: Copy the source to the destination:
+ cp /data/freenas-v1.db "${fnconfigdest}"
+fi
+
+l_status=$?
+
+#################################################
+# Backup the VMware ESXi host configuration:
+#################################################
+
+if [ ! -z "${esxihost}" ]; then
+ esxihostname=$(ssh root@"${esxihost}" hostname)
+ esxiversion=$(ssh root@"${esxihost}" uname -a | sed -e "s|VMkernel ||;s|$esxihostname ||")
+ esxiconfig_url=$(ssh root@"${esxihost}" vim-cmd hostsvc/firmware/backup_config | awk '{print $7}' | sed -e "s|*|$esxihostname|")
+ esxiconfig_date=$(date +%Y%m%d%H%M%S)
+ esxiconfig_file="${configdir}"/"${esxihost}"-configBundle-"${esxiconfig_date}".tgz
+
+ echo "Downloading $esxiconfig_url to $esxiconfig_file"
+ wget --no-check-certificate --output-document="${esxiconfig_file}" "${esxiconfig_url}"
+fi
+
+#################################################
+# Send email notification if indicated:
+#################################################
+
+if [ ! -z "${email}" ]; then
+ freenashostuc=$(hostname -s | tr '[:lower:]' '[:upper:]')
+ freenashostname=$(hostname)
+ freenasversion=$(cat /etc/version)
+ logfile="/tmp/save_config.tmp"
+ if [ $l_status -eq 0 ]; then
+ subject="FreeNAS configuration saved on server ${freenashostuc}"
+ else
+ subject="FreeNAS configuration backup failed on server ${freenashostuc}"
+ fi
+ (
+ echo "To: ${email}"
+ echo "Subject: ${subject}"
+ echo "Content-Type: text/html"
+ echo "MIME-Version: 1.0"
+ printf "\r\n"
+ echo ""
+ if [ $l_status -eq 0 ]; then
+ echo "Configuration file saved successfully on ${rundate}"
+ else
+ echo "Configuration backup failed with status=${l_status} on ${rundate}"
+ fi
+ echo ""
+ echo "FreeNAS:"
+ echo "Server: ${freenashostname}"
+ echo "Version: ${freenasversion}"
+ echo "File: ${fnconfigdest}"
+ if [ ! -z "${esxihost}" ]; then
+ echo ""
+ echo "ESXi:"
+ echo "Server: ${esxihostname}"
+ echo "Version: ${esxiversion}"
+ echo "File: ${esxiconfig_file}"
+ fi
+ echo ""
+ ) > ${logfile}
+ sendmail ${email} < ${logfile}
+ rm ${logfile}
+fi
+
+