pastebin - collaborative debugging tool
eckelmann.kpaste.net RSS

Difference between
modified post cbb by Anonymous on Wed 15th Jan 2020 07:19
original post 97fc5 by Anonymous on Fri 10th Jan 2020 10:03
Download diff
Show old version | new version | both versions

    
11
#!/bin/bash
22
3-
export PATH=/sbin:/usr/sbin:/bin:/usr/bin
3+
export PATH='/sbin:/usr/sbin:/bin:/usr/bin'
4+
typeset -r usbstick_mountpoint='/media/usb0'
45
6+
typeset -r backupscript_version='V2.0.6'
58
printf '#\n'
69
printf '# Quantron backup script STARTING...\n'
710
8-
systemctl stop codesys3-rt.service
11+
# stop codesys application
12+
# we assume this returns only after codesys is no longer running
914
10-
export TERM=linux
15+
# send all output to the quantron framebuffer console
11-
exec 0<>/dev/tty0 1>&0 2>&0
16+
export TERM='linux'
17+
exec 0<>'/dev/tty0' 1>&0 2>&0
1218
clear
1319
14-
printf '#\n'
20+
# NASTY HACK:
15-
printf '# Welcome to the QUANTRON backup\n'
21+
# systemd/udev has a timeout running which will send SIGKILL to
16-
printf '#\n'
22+
# all processes in a cggroup. Since this backup script is interactive
23+
# the only way to avoid getting killed by that timeout is to move
1731
18-
is_usbstick_mounted()
32+
color_printf()
1933
{
20-
        grep -q -E \
34+
	typeset color=$1
21-
                '[[:space:]]+/media/usb0[[:space:]]+(fat|vfat|ntfs|ext4)[[:space:]]+(rw|ro),' \
35+
	shift
22-
                '/proc/self/mounts'
36+
	typeset ttycmd=''
2537
26-
do_menu()
38+
	case "$color" in
27-
{
39+
		'black')	ttycmd=$'\E[30m' ;;
28-
        printf ' * Menu:\n'
40+
		'red')		ttycmd=$'\E[31m' ;;
29-
        printf ' - Press <ESC> key for abort\n' # key="A"
41+
		'green')	ttycmd=$'\E[32m' ;;
30-
        printf ' - Press <T> key for backup\n' # key="C"
42+
		'yellow')	ttycmd=$'\E[33m' ;;
31-
        printf ' - Press <L%%/R%%> key for restore\n' # key="D"
43+
		'blue')		ttycmd=$'\E[34m' ;;
44+
		'magenta')	ttycmd=$'\E[35m' ;;
3248
33-
        key=""
49+
	printf '%s' "$ttycmd"
50+
	printf "$@"
3453
3854
39-
                case "$key" in
55+
is_usbstick_mounted()
40-
                        A)
56+
{
41-
                                printf '# Aborting...\n'
57+
	grep -q -E \
42-
                                exit 0
58+
		"[[:space:]]+${usbstick_mountpoint}[[:space:]]+(fat|vfat|ntfs|ext4)[[:space:]]+(rw|ro)," \
43-
                                ;;
59+
		'/proc/self/mounts'
44-
                        C)
60+
	return $?
45-
                                printf '# Starting backup...'
61+
}
46-
                                do_backup
62+
47-
                                exit 0
63+
disable_console_screensaver()
48-
                                ;;
64+
{
49-
                        D)
65+
	# make sure the framebuffer console screenblanker is NOT active
50-
                                printf '# Starting restore...'
66+
	printf '0\n' >'/sys/devices/platform/imx21-fb.0/graphics/fb0/blank'
5767
58-
do_backup()
68+
	# disable screen blanking (we have to do this via terminal codes
69+
	# since /sys/module/kernel/parameters/consoleblank is read-only)
6471
65-
        if ! /sbin/eag_usbstick mount_writeable ; then
72+
	return 0
66-
                printf '# ERROR: Cannot mount stick writeable, aborting\n'
73+
}
6874
69-
        mkdir -p /media/usb0/quantron_backup
75+
do_menu()
76+
{
7078
71-
        set -o pipefail
79+
	#
72-
        (( backuperr=0 ))
80+
	# main menu
81+
	#
7387
74-
        (cd / ; tar -cvf - var/dyn/) | \
88+
	color_printf 'yellow' ' * Menu:\n'
75-
                bzip2 -9 | \
89+
	color_printf 'yellow' ' - Press <ESC> key for abort\n\t(system shutdown)\n'	# key="A"
76-
                tee \
90+
	color_printf 'yellow' ' - Press <T> key for backup\n'				# key="C"
77-
                        >(md5sum /dev/stdin | sed 's/\/dev\/stdin/quantron_var_dyn_backup.tar.bz2/' >/media/usb0/quantron_backup/quantron_var_dyn_backup.tar.bz2.md5sum) \
91+
	color_printf 'yellow' ' - Press <L%%/R%%> key for restore\n'			# key="D"
8092
81-
        sync ; sync # UNIX tradition!
93+
	for ((;;)) ; do
82-
        /sbin/eag_usbstick mount_readonly
94+
		disable_console_screensaver
8495
85-
        if (( backuperr == 0 )) ; then
96+
		key=''
9097
91-
        exit 0
98+
		#
92-
}
99+
		# wait for a key press...
100+
		#
93105
94-
do_restore()
106+
		case "$key" in
95-
{
107+
			'A')
96-
        true
108+
				color_printf 'cyan' '#### Aborting, system shutting down...\n'
97-
}
109+
				sleep 3
98-
110+
				reboot -p
99-
do_menu
111+
				exit 0
100-
112+
				;;
101-
113+
			'C')
102-
114+
				color_printf 'cyan' '#### Starting backup...\n'
103-
# EOF.
115+
				sleep 3
104-
116+
				do_backup
105-
117+
				exit 0
106-
118+
				;;
107-
119+
			'D')
108-
120+
				color_printf 'cyan' '#### Starting restore...\n'
109-
121+
				sleep 3
110-
122+
				do_restore
111-
123+
				exit 0
112-
124+
				;;
113-
125+
			*)
114-
126+
				# beep ?
115-
127+
				;;
116-
128+
		esac
117-
129+
	done
118130
119-
131+
	# notreached
120-
132+
}
121133
122-
134+
do_backup()
123-
135+
{
124-
136+
	typeset -i backuperr=0
125137
126-
138+
	if ! is_usbstick_mounted ; then
127-
139+
		color_printf 'red' '# ERROR: No USB stick mounted, aborting\n'
128-
140+
		return 1
129-
141+
	fi
130142
131-
143+
	if ! /sbin/eag_usbstick mount_writeable ; then
132-
144+
		color_printf 'red' '# ERROR: Cannot mount stick writeable, aborting\n'
133-
145+
		return 1
134-
146+
	fi
135147
136-
148+
	mkdir -p "${usbstick_mountpoint}/quantron_backup"
137-
149+
	rm -f "${usbstick_mountpoint}/quantron_backup/quantron_var_dyn_backup.tar.bz2.md5sum"
138150
139-
151+
	color_printf 'cyan' '\n# Saving files...\n'
140-
152+
	set -o pipefail
141153
142-
154+
	(cd / && tar -cvf - var/dyn/* ) | \
143-
155+
		bzip2 -9 | \
144-
156+
		tee \
145-
157+
			>(md5sum '/dev/stdin' | sed 's/\/dev\/stdin/quantron_var_dyn_backup.tar.bz2/' >"${usbstick_mountpoint}/quantron_backup/quantron_var_dyn_backup.tar.bz2.md5sum") \
146-
158+
			>"${usbstick_mountpoint}/quantron_backup/quantron_var_dyn_backup.tar.bz2"
147-
159+
	(( backuperr+=$? ))
148160
149-
161+
	sync ; sync # UNIX tradition!
150162
151-
163+
	/sbin/eag_usbstick mount_readonly
152-
164+
	(( backuperr+=$? ))
153165
154-
166+
	# verifying backup
155-
167+
	color_printf 'cyan' '\n# Verifying backup data...\n'
156-
168+
	(cd "${usbstick_mountpoint}/quantron_backup" && md5sum -c 'quantron_var_dyn_backup.tar.bz2.md5sum')
157-
169+
	if (( $? != 0 )) ; then
158-
170+
		(( backuperr++ ))
159-
171+
		color_printf 'red' '# ERROR: Wrong MD5 hash sum of written data\n'
160172
161-
173+
		# remove backup archive so the user cannot restore broken data
162-
174+
		/sbin/eag_usbstick mount_writeable >'/dev/null' 2>&1
163-
175+
		rm -f \
164-
176+
			"${usbstick_mountpoint}/quantron_backup/quantron_var_dyn_backup.tar.bz2" \
165-
177+
			"${usbstick_mountpoint}/quantron_backup/quantron_var_dyn_backup.tar.bz2.md5sum"
166-
178+
		/sbin/eag_usbstick mount_readonly >'/dev/null' 2>&1
167-
179+
	fi
168180
169-
181+
	if (( backuperr == 0 )) ; then
170-
182+
		color_printf 'green' '\n#\n# Backup success.\n#\n'
171-
183+
	else
172-
184+
		color_printf 'red' '\n#\n# Backup FAILED!!\n#\n'
173-
185+
	fi
174186
175-
187+
	disable_console_screensaver
176188
177-
189+
	color_printf 'yellow' '\n\nPlease remove USB stick and reboot...\n'
178-
190+
	return $(( backuperr?1:0 ))
179-
191+
}
180192
181-
193+
do_restore()
182-
194+
{
183-
195+
	typeset -i restoreerr=0
184196
185-
197+
	if [[ ! -r "${usbstick_mountpoint}/quantron_backup/quantron_var_dyn_backup.tar.bz2" ]] ; then
186-
198+
		color_printf 'red' '# ERROR: Cannot read backup file %s\n' "${usbstick_mountpoint}/quantron_backup/quantron_var_dyn_backup.tar.bz2"
187-
199+
		return 1
188-
200+
	fi
189201
190-
202+
	color_printf 'cyan' '\n# Verifying backup data...\n'
191-
203+
	(cd "${usbstick_mountpoint}/quantron_backup" && md5sum -c 'quantron_var_dyn_backup.tar.bz2.md5sum')
192-
204+
	if (( $? != 0 )) ; then
193-
205+
		color_printf 'red' '# ERROR: Backup archive does not have the correct hash sum.\n'
194-
206+
		color_printf 'red' '\n#\n# Restore FAILED!!\n#\n'
195-
207+
		return 1
196-
208+
	fi
197209
198-
210+
	color_printf 'cyan' '\n# Restoring files...\n'
199-
211+
	set -o pipefail
200-
212+
	bunzip2 -c <"${usbstick_mountpoint}/quantron_backup/quantron_var_dyn_backup.tar.bz2" |
201-
213+
		(cd / && tar -xvf -)
202-
214+
	(( restoreerr+=$? ))
203215
204-
216+
	sync ; sync # UNIX tradition!
205217
206-
218+
	if (( restoreerr == 0 )) ; then
207-
219+
		color_printf 'green' '\n#\n# Restore success.\n#\n'
208-
220+
	else
209-
221+
		color_printf 'red' '\n#\n# Restore FAILED!!\n#\n'
210-
222+
	fi
211223
212-
224+
	disable_console_screensaver
213225
214-
226+
	color_printf 'yellow' '\n\nPlease remove USB stick and reboot...\n'
215-
227+
	return $(( restoreerr?1:0 ))
216-
228+
}
217229
218-
230+
# main
219-
231+
do_menu
220232
221-
233+
# EOF.
222234

Submit a correction or amendment below (click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.

Syntax highlighting:

To highlight particular lines, prefix each line with {%HIGHLIGHT}




All content is user-submitted.
The administrators of this site (kpaste.net) are not responsible for their content.
Abuse reports should be emailed to us at