/usr/sbin/mfsrestoremaster is in lizardfs-master 3.9.4+dfsg-4.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 | #!/usr/bin/env bash
set -e
set -u
if [ $# -lt 1 -o $# -gt 2 ]; then
	cat <<EOF
USAGE: $0 <net-interface> [<etc-mfs-dir>]
	<net-interface> - network interface to reconfigure
	<etc-mfs-dir> - mfs configuration directory to use
			default: /etc/lizardfs
This scripts automates starting spare master server on a metalogger machine.
It performs the following steps:
* verify basic sanity of configuration files
* update metadata image with data from metalogger changelogs
* set master's IP address on given network interface
* start the master server
EOF
	exit 1
fi
notice() {
	echo "+ $1"
}
panic() {
	echo "- $1"
	echo "- Aborting, the master server hasn't been started"
	exit 1
}
if [ $UID -ne 0 ]; then
	panic "This script requires root privileges to reconfigure network"
fi
net_interface="$1"
etc_directory="${2:-/etc/lizardfs}"
get_config_option() {
	local file="$1"
	local option="$2"
	local default="${3:-}"
	awk "
		BEGIN {
			result = \"$default\"
		}
		/^[ \t]*$option[ \t]*=/ {
			sub(\"[^=]*=[ \t]*\", \"\")
			result = \$0
		}
		END {
			print result
		}" < "$file"
}
if_equal() {
	local result="$1"
	shift
	while [ -n "$*" ]; do
		if [ "$1" != "$result" ]; then
			return
		fi
		shift
	done
	echo "$result"
}
is_tcp_port_open() {
	local host="$1"
	local port="$2"
	python <<EOF
import socket
try:
	socket.create_connection(("$host", $port), 1)
except:
	exit(1)
EOF
}
notice "Using configuration directory: $etc_directory"
notice "Checking configuration files..."
ml_config="$etc_directory/mfsmetalogger.cfg"
ma_config="$etc_directory/mfsmaster.cfg"
if [ ! -r "$ml_config" ]; then
	panic "Can't read metalogger configuration: $ml_config"
fi
if [ ! -r "$ma_config" ]; then
	panic "Can't read master configuration: $ma_config"
fi
ml_master_host=$(get_config_option "$ml_config" MASTER_HOST)
ma_matoml_host=$(get_config_option "$ma_config" MATOML_LISTEN_HOST "*")
ma_matocs_host=$(get_config_option "$ma_config" MATOCS_LISTEN_HOST "*")
ma_matocl_host=$(get_config_option "$ma_config" MATOCL_LISTEN_HOST "*")
master_host=$(if_equal "$ma_matoml_host" "$ma_matocs_host" "$ma_matoml_host")
if [ -z "$master_host" ]; then
	panic "Not sure what to do with multiple master listening addresses"
fi
if [ "$master_host" = "*" -o "$master_host" = "0.0.0.0" ]; then
	master_host="$ml_master_host"
else
	if [ "$master_host" != "$ml_master_host" ]; then
		panic "BUG: metalogger's MASTER_HOST doesn't match master's MATOML_LISTEN_HOST"
	fi
fi
notice "Using master server address: $master_host"
master_port=$(get_config_option "$ml_config" MASTER_PORT 9419)
if ping -c1 -w1 "$master_host" &>/dev/null ; then
	panic "Some other machine already uses IP address $master_host"
fi
if is_tcp_port_open "$master_host" "$master_port" ; then
	panic "Some other server is already responding at $master_host:$master_port"
fi
ml_data_path=$(get_config_option "$ml_config" DATA_PATH "/var/lib/lizardfs")
ma_data_path=$(get_config_option "$ma_config" DATA_PATH "/var/lib/lizardfs")
ma_meta_file="$ma_data_path/metadata.mfs"
ml_meta_file="$ml_data_path/metadata_ml.mfs.back"
if [ ! -r "$ml_meta_file" ]; then
	panic "Can't find metadata backup at $ml_meta_file"
fi
notice "Reading metadata from: $ml_meta_file"
notice "Restoring metadata to: $ma_meta_file"
if ! mfsmetarestore -o "$ma_meta_file" -m "$ml_meta_file" "$ml_data_path"/changelog_ml.* >/dev/null ; then
	panic "Metadata restoration failed"
fi
notice "Changing IP address of $net_interface to $master_host"
if ! ifconfig $net_interface $master_host ; then
	panic "Failed to set IP address"
fi
notice "Starting the master server"
if ! mfsmaster -c "$ma_config" start ; then
	panic "Master server failed to start"
fi
 |