summaryrefslogtreecommitdiffstats
path: root/scripts/clone_stage4
blob: 339d9eea6bf05b3dfe1bba3375b8c2a8648ca767 (plain) (blame)
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
#!/bin/bash
#
#	Helper script to generate a stage4 export
#	for a remote machine per rsync.
#

SELF="$(readlink -f $0)"
SCRIPTS_DIR="$(dirname "${SELF}")"
ROOT_DIR="${SCRIPTS_DIR%/*}"

. "${ROOT_DIR}/helper/logging.inc"

MLTK_PID="$$"

qnd_exit() {
	unset_quiet
	kill "$MLTK_PID"
	[ $# -ge 1 ] && kill "$1"
}

[ $# -lt 3 ]		&& perror "$0 <remote_ip> <stage_to_exclude> <target_dir>"
[ "$1" = "local" ]	&& perror 'It is not wise to use "local" as remote IP.'

BOOT_DIR="${ROOT_DIR}/server/boot/$1"
TARGET_DIR="$3"
mkdir -p "$TARGET_DIR"
mkdir -p "$BOOT_DIR"

EXCLUDE="$BOOT_DIR/exclude-stage4"
INCLUDE="$BOOT_DIR/include-stage4"

pinfo "Building rsync exclude-file for building stage 4...."
echo "## Exclude file for stage4 of $1" > "$EXCLUDE"
echo "## Include file for stage4 of $1" > "$INCLUDE"
for FILE in $(find "$ROOT_DIR"/server/blacklists/*/ -type f); do
	echo "## From $FILE" >> "$EXCLUDE"
	echo "## From $FILE" >> "$INCLUDE"
	grep '^-' "$FILE" >> "$EXCLUDE"
	grep '^+' "$FILE" >> "$INCLUDE"
done

pinfo "Done."
[ "y$UID" == "y0" ] || perror "You're not root. Cannot continue with rsync."

# prepare rsync's options depending on whether the source is local or remote
RSYNC_OPTS=""
RSYNC_SOURCE=""
if [[ "$1" == "local" ]]; then
	RSYNC_SOURCE="/"
else
	RSYNC_SOURCE="root@$1:/"
	RSYNC_OPTS="-e ssh -oStrictHostKeyChecking=no"
fi

pinfo "Cloning via rsync"
cat "$INCLUDE" "$EXCLUDE" | rsync -a --delete --delete-excluded --numeric-ids -v --exclude-from=- "${RSYNC_OPTS}" "${RSYNC_SOURCE}" "${TARGET_DIR}" || perror "rsync from '${RSYNC_SOURCE}' to '${TARGET_DIR}' failed."