Benutzer:Cae/Skripte

Aus DebianforumWiki
Zur Navigation springen Zur Suche springen

Demo eines Backupskripts

#!/bin/sh

now="$(date +%F.%T)"

fsroot=
storage="/foo/bar/FIXME"

latest="latest"
log="$storage/log-$now";

[ "x--nomount" = "x$1" ] || df "$storage" | awk '/\// { if ("/" == $NF) exit 1 }' || {
	echo "E: Nothing mounted into '$storage'! Override with --nomount." >&2
	exit 2
}

touch "$log"; chmod 600 "$log"
dpkg --get-selections >> "/root/backup/selections/selections-$now"

old="$now"
mv "$storage/$latest" "$storage/$old" 2>/dev/null || {
	echo "W: no '$latest' folder, using new set..." >&2 >>"$log"
	mkdir -p "$storage/$old"
}
mkdir -p "$storage/$latest"

# FIXME: no one cares about /usr/local, /usr/** gets excluded
rsync	\
	--verbose \
	--itemize-changes \
	--archive \
	--acls \
	--xattrs \
	--hard-links \
	--numeric-ids \
	--inplace \
	--link-dest="$storage/$old" \
	--include="$fsroot/root/" \
	--include="$fsroot/home/" \
	--include="$fsroot/etc/" \
	--include="$fsroot/var/" \
	--include="$fsroot/srv/" \
	--include="$fsroot/opt/" \
	--include="$fsroot/usr/local/" \
	--exclude="$fsroot/*" \
	"$fsroot/" \
	"$storage/$latest/" \
	>>"$log" 2>&1 \
	|| echo "E: rsync died with code $?!" \
	| tee -a "$log"

mv "$log" "$storage/$latest/"


exit $?

	--checksum \

Wie immer, keine Garantie, nix, gar nix, wenn Katzen wegen des Skriptes sterben sollten, bin ich nicht schuld. Und ja, das Rotieren ist suboptimal, da ein Verzeichnis mit scheinbarem Timestamp eben nicht den Stand zum Zeitpunkt des Timestamps darstellt, sondern an dem Zeitpunkt des Timestamps rotiert wurde. Also ist zum Beispiel die Überprüfung mit *du -sh * um eine Zeile versetzt zu lesen. Und der --include/--exclude-Krempel ist noch Scheiße gelöst, da muss etwas gescheites hin.

Microcom/avrdude und das gelockte /dev/tty*[1]

loop-microcom:

#!/bin/sh

trap '' TERM

touch /tmp/microcom_continue;

while sleep 0.1 || sleep 1; do
	test -e /tmp/microcom_continue && {
		rm /tmp/microcom_continue;
		microcom -p /dev/ttyACM0 -s 9600; # blocking
	}
done

Makefile:

...

include /usr/share/arduino/Arduino.mk

myupload:	kill_microcom reset raw_upload start_microcom
kill_microcom:
	pkill microcom # nice is different
start_microcom:
	touch /tmp/microcom_continue

Mit dem ersten Skript kann man Microcom wartungfrei dauerhaft auf das TTY festnageln und anstatt make upload das eigene Target make myupload verwenden. Microcom wird waehrend des Uploads transparent angehalten und danach wieder gestartet.



  1. Ja, diese bescheuerte Fussnote dient nur dazu, der Unterueberschrift einen Anker zu verschaffen, auf den man gescheit linken kann. Bestimmt geht das auch irgendwo anders...