[SCM] Samba Shared Repository - branch master updated

Martin Schwenke martins at samba.org
Mon Jul 30 12:31:02 UTC 2018


The branch, master has been updated
       via  4fcbaae ctdb-doc: Provide an example script for migrating old configuration
      from  8025467 s3:libads: Add net ads keep-account test

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 4fcbaae57b129deaacfab0a226cefca99aa78256
Author: Martin Schwenke <martin at meltin.net>
Date:   Thu Jul 12 20:10:35 2018 +1000

    ctdb-doc: Provide an example script for migrating old configuration
    
    Include an example ctdbd.conf-style file for testing.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13550
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Reviewed-by: Amitay Isaacs <amitay at gmail.com>
    
    Autobuild-User(master): Martin Schwenke <martins at samba.org>
    Autobuild-Date(master): Mon Jul 30 14:30:06 CEST 2018 on sn-devel-144

-----------------------------------------------------------------------

Summary of changes:
 ctdb/doc/examples/config_migrate.sh         | 688 ++++++++++++++++++++++++++++
 ctdb/doc/examples/config_migrate.test_input |  45 ++
 2 files changed, 733 insertions(+)
 create mode 100755 ctdb/doc/examples/config_migrate.sh
 create mode 100644 ctdb/doc/examples/config_migrate.test_input


Changeset truncated at 500 lines:

diff --git a/ctdb/doc/examples/config_migrate.sh b/ctdb/doc/examples/config_migrate.sh
new file mode 100755
index 0000000..8eefd03
--- /dev/null
+++ b/ctdb/doc/examples/config_migrate.sh
@@ -0,0 +1,688 @@
+#!/bin/sh
+
+# config_migrate.sh - migrate old ctdbd.conf file to new configuration files
+#
+# Input files are old-style CTDB configuration files, including:
+#
+#   /etc/ctdb/ctdbd.conf
+#   /usr/local/etc/ctdb/ctdbd.conf
+#   /etc/sysconfig/ctdb
+#   /etc/defaults/ctdb
+#
+# These files are sourced by this script.  They used to be sourced by
+# ctdbd_wrapper, so this should not be too surprising.
+#
+# By default, the output directory is the given configuration
+# directory.  An alternate output directory can be specified if this
+# isn't desired.
+#
+# The output directory will contain the following if non-empty:
+#
+# * ctdb.conf (may be empty)
+# * script.options
+# * ctdb.tunables
+# * ctdb.sysconfig - consider installing as /etc/sysconfig/ctdb,
+#                    /etc/default/ctdb, or similar
+# * commands.sh    - consider running commands in this files
+# * README.warn    - warnings about removed/invalid configuration options
+
+usage ()
+{
+	cat <<EOF
+usage: config_migrate.sh [-f] [-d <ctdb-config-dir>] [-o <out-dir>] <file> ...
+EOF
+    exit 1
+}
+
+config_dir=""
+out_dir=""
+force=false
+
+while getopts "d:fho:?" opt ; do
+	case "$opt" in
+	d) config_dir="$OPTARG" ;;
+	f) force=true ;;
+	o) out_dir="$OPTARG" ;;
+	\?|h) usage ;;
+	esac
+done
+shift $((OPTIND - 1))
+
+if [ $# -lt 1 ] ; then
+	usage
+fi
+
+if [ -z "$config_dir" ] ; then
+	echo "Assuming \"/etc/ctdb\" as ctdb configuration directory"
+	echo "If that's not correct, please specify config dir with -d"
+	echo
+	config_dir="/etc/ctdb"
+else
+	echo "Using \"$config_dir\" as ctdb configuration directory"
+	echo
+fi
+
+if [ -z "$out_dir" ] ; then
+	echo "No output directory specified, using \"$config_dir\""
+	echo
+	out_dir="$config_dir"
+fi
+
+############################################################
+
+#
+# Output file handling
+#
+
+out_file_check_and_create ()
+{
+	_out_file="$1"
+
+	if [ -f "$_out_file" ] ; then
+		if ! $force ; then
+			echo "Not overwriting existing file: ${_out_file}" >&2
+			return 1
+		fi
+		mv -v "$_out_file" "${_out_file}.convertsave"
+	fi
+
+	touch "$_out_file"
+
+	return 0
+}
+
+out_file_remove_if_empty ()
+{
+	_out_file="$1"
+
+	if [ ! -s "$_out_file" ] ; then
+		rm "$_out_file"
+	fi
+}
+
+############################################################
+
+#
+# Option/tunable/service conversion and validity checking
+#
+# This is basically the data that drives most of the rest of the
+# script
+#
+
+# Convert a ctdbd.conf opt+val into a ctdb.conf section+opt
+#
+# If opt is matched and val is empty then output is printed, allowing
+# this function to be reused to check if opt is valid.
+get_ctdb_conf_option ()
+{
+	_opt="$1"
+	_val="$2"
+
+	awk -v opt="${_opt}" -v val="${_val}" \
+	    '$3 == opt { if (!$4 || !val || val ==$4) { print $1, $2 } }' <<EOF
+cluster		node-address			CTDB_NODE_ADDRESS
+cluster		recovery-lock			CTDB_RECOVERY_LOCK
+cluster		transport			CTDB_TRANSPORT
+database	lock-debug-script		CTDB_DEBUG_LOCKS
+database	persistent-database-directory	CTDB_DBDIR_PERSISTENT
+database	state-database-directory	CTDB_DBDIR_STATE
+database	volatile-database-directory	CTDB_DBDIR
+event		debug-script			CTDB_DEBUG_HUNG_SCRIPT
+legacy		lmaster-capability		CTDB_CAPABILITY_LMASTER	     no
+legacy		no-realtime			CTDB_NOSETSCHED		     yes
+legacy		recmaster-capability		CTDB_CAPABILITY_RECMASTER    no
+legacy		script-log-level		CTDB_SCRIPT_LOG_LEVEL
+legacy		start-as-disabled		CTDB_START_AS_DISABLED	     yes
+legacy		start-as-stopped		CTDB_START_AS_STOPPED	     yes
+logging		location			CTDB_LOGGING
+logging		log-level			CTDB_DEBUGLEVEL
+EOF
+
+}
+
+# Check if an option will convert to a ctdb.conf option
+check_ctdb_conf_option ()
+{
+	_opt="$1"
+
+	_out=$(get_ctdb_conf_option "$_opt" "")
+	[ -n "$_out" ]
+}
+
+# Check if an option has been removed
+check_removed_option ()
+{
+	_option="$1"
+
+	grep -Fqx "$_option" <<EOF
+CTDB_PIDFILE
+CTDB_SOCKET
+CTDB_EVENT_SCRIPT_DIR
+CTDB_NOTIFY_SCRIPT
+CTDB_PUBLIC_INTERFACE
+CTDB_MAX_PERSISTENT_CHECK_ERRORS
+CTDB_SHUTDOWN_TIMEOUT
+EOF
+}
+
+# Check if an option is a valid script option
+check_valid_script_option ()
+{
+	_option="$1"
+
+	grep -Fqx "$_option" <<EOF
+# 10.interface
+CTDB_PARTIALLY_ONLINE_INTERFACES
+# 11.natgw
+CTDB_NATGW_DEFAULT_GATEWAY
+CTDB_NATGW_NODES
+CTDB_NATGW_PRIVATE_NETWORK
+CTDB_NATGW_PUBLIC_IFACE
+CTDB_NATGW_PUBLIC_IP
+CTDB_NATGW_STATIC_ROUTES
+# 13.per_ip_routing
+CTDB_PER_IP_ROUTING_CONF
+CTDB_PER_IP_ROUTING_RULE_PREF
+CTDB_PER_IP_ROUTING_TABLE_ID_LOW
+CTDB_PER_IP_ROUTING_TABLE_ID_HIGH
+# 90.lvs
+CTDB_LVS_NODES
+CTDB_LVS_PUBLIC_IFACE
+CTDB_LVS_PUBLIC_IP
+# 20.multipathd
+CTDB_MONITOR_MPDEVICES
+# 31.clamd
+CTDB_CLAMD_SOCKET
+# 49.winbind
+CTDB_SERVICE_WINBIND
+# 50.samba
+CTDB_SAMBA_CHECK_PORTS
+CTDB_SAMBA_SKIP_SHARE_CHECK
+CTDB_SERVICE_NMB
+CTDB_SERVICE_SMB
+# 60.nfs
+CTDB_NFS_CALLOUT
+CTDB_NFS_CHECKS_DIR
+CTDB_NFS_SKIP_SHARE_CHECK
+CTDB_RPCINFO_LOCALHOST
+CTDB_RPCINFO_LOCALHOST6
+CTDB_NFS_STATE_FS_TYPE
+CTDB_NFS_STATE_MNT
+# 70.iscsi
+CTDB_START_ISCSI_SCRIPTS
+# 00.ctdb
+CTDB_MAX_CORRUPT_DB_BACKUPS
+# 05.system
+CTDB_MONITOR_FILESYSTEM_USAGE
+CTDB_MONITOR_MEMORY_USAGE
+CTDB_MONITOR_SWAP_USAGE
+# debug_hung_scripts.sh
+CTDB_DEBUG_HUNG_SCRIPT_STACKPAT
+EOF
+}
+
+# Check if a tunable is valid
+check_valid_tunable ()
+{
+	_tunable="$1"
+
+	grep -Fiqx "$_tunable" <<EOF
+AllowClientDBAttach
+AllowMixedVersions
+AllowUnhealthyDBRead
+ControlTimeout
+DBRecordCountWarn
+DBRecordSizeWarn
+DBSizeWarn
+DatabaseHashSize
+DatabaseMaxDead
+DeferredAttachTO
+DisableIPFailover
+ElectionTimeout
+EnableBans
+EventScriptTimeout
+FetchCollapse
+HopcountMakeSticky
+IPAllocAlgorithm
+KeepaliveInterval
+KeepaliveLimit
+LockProcessesPerDB
+LogLatencyMs
+MaxQueueDropMsg
+MonitorInterval
+MonitorTimeoutCount
+NoIPFailback
+NoIPTakeover
+PullDBPreallocation
+QueueBufferSize
+RecBufferSizeLimit
+RecLockLatencyMs
+RecdFailCount
+RecdPingTimeout
+RecoverInterval
+RecoverTimeout
+RecoveryBanPeriod
+RecoveryDropAllIPs
+RecoveryGracePeriod
+RepackLimit
+RerecoveryTimeout
+SeqnumInterval
+StatHistoryInterval
+StickyDuration
+StickyPindown
+TDBMutexEnabled
+TakeoverTimeout
+TickleUpdateInterval
+TraverseTimeout
+VacuumFastPathCount
+VacuumInterval
+VacuumLimit
+VacuumMaxRunTime
+VerboseMemoryNames
+EOF
+}
+
+# Check if a tunable has been removed
+check_removed_tunable ()
+{
+	_tunable="$1"
+
+	grep -Fiqx "$_tunable" <<EOF
+NoIPHostOnAllDisabled
+EOF
+}
+
+# Print a command to enable an event script for the given service
+print_event_script_enable_command ()
+{
+	_service="$1"
+
+	_component=""
+	_script=""
+	case "$_service" in
+	samba)         _component="legacy" ; _script="50.samba"   ;;
+	winbind)       _component="legacy" ; _script="49.winbind" ;;
+	apache2|httpd) _component="legacy" ; _script="41.httpd"   ;;
+	clamd)         _component="legacy" ; _script="31.clamd"   ;;
+	iscsi)         _component="legacy" ; _script="70.iscsi"   ;;
+	nfs)           _component="legacy" ; _script="60.nfs"     ;;
+	vsftpd)        _component="legacy" ; _script="40.vsftpd"  ;;
+	esac
+
+	if [ -z "$_script" ] ; then
+		return 1
+	fi
+
+	cat <<EOF
+# Enable the ${_service} service
+ctdb event script enable ${_component} ${_script}
+
+EOF
+}
+
+# Check if the given service is valid
+check_valid_service ()
+{
+	_service="$1"
+
+	print_event_script_enable_command "$_service" >/dev/null
+}
+
+############################################################
+
+#
+# Utilities
+#
+
+# List all options starting with "CTDB_" set in given configuration files
+list_options ()
+{
+	set |
+	sed -n 's|^\(CTDB_[^=]*\)=\(.*\)|\1 \2|p' |
+	while read -r _var _val ; do
+		# Strip quotes from value
+		_val=$(echo "$_val" | sed -e "s|^'||" -e "s|'\$||")
+
+		echo "${_var} ${_val}"
+	done
+}
+
+# List all tunables set in the given configuration files
+list_tunables ()
+{
+	list_options |
+	while read -r _opt _val ; do
+		case "$_opt" in
+		CTDB_SET_*) echo "${_opt#CTDB_SET_} ${_val}" ;;
+		esac
+	done
+}
+
+# List all managed services according to the given configuration files
+list_managed_services ()
+{
+	#
+	# CTDB_MANAGES_<service>="yes"
+	#
+	list_options |
+	while read -r _opt _val ; do
+		case "$_opt" in
+		CTDB_MANAGES_*) : ;;
+		*) continue ;;
+		esac
+
+		if [ "$_val" != "yes" ] ; then
+			continue
+		fi
+
+		# Trim and downcase
+		echo "${_opt#CTDB_MANAGES_}" | tr '[:upper:]' '[:lower:]'
+	done
+
+	#
+	# CTDB_MANAGED_SERVICES
+	#
+	for _service in $CTDB_MANAGED_SERVICES ; do
+		echo "$_service"
+	done
+}
+
+############################################################
+
+#
+# Print warnings for removed and unknown options
+#
+
+
+# Print a warning as a bullet list item
+#
+# Arguments after the 1st are printed as a subsequent paragraph.
+warn ()
+{
+	bullet="$1" ; shift
+
+	printf '* %s\n\n' "$bullet"
+
+	if [ $# -gt 0 ] ; then
+		printf '  %s\n\n' "$*"
+	fi
+}
+
+warn_about_CTDB_DBDIR_tmpfs_yes ()
+{
+	if $ctdb_dbdir_tmpfs_magic ; then
+		warn "Option \"CTDB_DBDIR=tmpfs\" is no longer available:" \
+		     "Permanently mount a tmpfs filesystem on the volatile" \
+		     "database directory"
+	fi
+}
+
+warn_about_unknown_managed_services ()
+{
+	list_managed_services |
+	while read -r _s ; do
+		if check_valid_service "$_s" ; then
+			continue
+		fi
+		warn "Unknown service \"${_s}\" marked as managed" \
+		     "If this is a 3rd party service, please enable it manually"
+	done
+}
+
+warn_about_removed_and_unknown_options ()
+{
+	list_options |
+	while read -r _opt _val ; do
+		if check_ctdb_conf_option "$_opt" ; then
+			continue
+		fi
+
+		if check_valid_script_option "$_opt" ; then
+			continue
+		fi
+
+		case "$_opt" in
+		CTDB_MANAGED_SERVICES|\
+		CTDB_MANAGES_*|\
+		CTDB_SET_*|\
+		CTDB_NODES|\
+		CTDB_PUBLIC_ADDRESSES|\
+		CTDB_MAX_OPEN_FILES|\
+		CTDB_SUPPRESS_COREFILE)
+			# Handled elsewhere
+			continue
+			;;
+		esac
+
+		if check_removed_option "$_opt" ; then
+			warn "Option \"${_opt}\" is no longer available" \
+			     "Please see the WHATSNEW.txt"
+			continue
+		fi
+
+		warn "Option \"${_opt}\" is unknown"
+	done
+}
+
+warn_about_removed_and_unknown_tunables ()
+{
+	list_tunables |
+	while read -r _var _val ; do
+		if check_valid_tunable "$_var" ; then
+			continue
+		fi
+
+		if check_removed_tunable "$_var" ; then
+			warn "Tunable \"${_var}\" is no longer available" \
+			     "Please see the WHATSNEW.txt"
+			continue
+		fi
+
+		warn "Tunable \"${_var}\" is unknown"
+	done
+}
+
+############################################################
+
+#
+# Top-level file builders
+#
+
+build_ctdb_conf ()
+{
+	_out_file="$1"
+


-- 
Samba Shared Repository



More information about the samba-cvs mailing list