summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Cady <d@jerkface.net>2019-06-19 18:26:54 -0400
committerAndrew Cady <d@jerkface.net>2019-06-19 20:04:53 -0400
commitddd28e45d507665ffd89b35e8c759b6add7686a6 (patch)
tree466e4b6f014f58dfb063e23f7cb59db9b6046a14
parent0b63dd60a8187fd3367049aa1ad6a250cbac19ec (diff)
add some commands to the live system
-rw-r--r--Makefile2
m---------fsmgr0
-rwxr-xr-xsrc/samizdat-daily-snapshot-root55
-rwxr-xr-xsrc/samizdat-diff-root43
4 files changed, 99 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 1d67aa7..0cc337f 100644
--- a/Makefile
+++ b/Makefile
@@ -17,7 +17,7 @@ samizdat-pinentry: src/samizdat-pinentry.c
17wait_for_files: src/wait_for_files.c 17wait_for_files: src/wait_for_files.c
18 $(CC) $(CFLAGS) $< -o $@ 18 $(CC) $(CFLAGS) $< -o $@
19 19
20bin_programs=$(addprefix src/, xorriso-usb.sh btrfs-functions.sh btrfs-receive-root.sh btrfs-send-root.sh var.sh grub-efi.sh keygen.sh initrd.sh qemu.sh dnsmasq-dhcp-script.sh samizdat-password-agent samizdat-gpg-agent publish-ip.sh selfstrap) samizdat-paths.sh ${cc_files} ${btrfs_utils} 20bin_programs=$(addprefix src/, xorriso-usb.sh btrfs-functions.sh btrfs-receive-root.sh btrfs-send-root.sh var.sh grub-efi.sh keygen.sh initrd.sh qemu.sh dnsmasq-dhcp-script.sh samizdat-password-agent samizdat-gpg-agent publish-ip.sh selfstrap samizdat-daily-snapshot-root samizdat-diff-root) samizdat-paths.sh ${cc_files} ${btrfs_utils}
21 21
22btrfs_utils=$(addprefix src/btrfs-utils/, btarfs btrfs-shrink with-btrfs-seed) 22btrfs_utils=$(addprefix src/btrfs-utils/, btarfs btrfs-shrink with-btrfs-seed)
23 23
diff --git a/fsmgr b/fsmgr
Subproject 7363edc18110d90caefd098ae193b84c883f752 Subproject 020b7f993caaa963934062fba7e20ab96e4c13d
diff --git a/src/samizdat-daily-snapshot-root b/src/samizdat-daily-snapshot-root
new file mode 100755
index 0000000..c57524c
--- /dev/null
+++ b/src/samizdat-daily-snapshot-root
@@ -0,0 +1,55 @@
1#/bin/sh
2[ "$(id -u)" = 0 ] || exec sudo "$0" "$@" || exit
3
4is_subvol()
5{
6 btrfs subvolume show "$1" >/dev/null 2>&1
7}
8
9btrfs_subvolumes()
10{
11 btrfs subvolume list -a -t "${1:-/}" | awk '{print $4}' | sed -Ene 's?^(<FS_TREE>/)\?root/?/?p'
12}
13
14snapit()
15{
16 local dev mnt target
17
18 mnt=$(mktemp -d /tmp/mnt.XXXXXX) || return
19 src=$mnt/$1/
20 target=$mnt/${2:-daily/}${1%/}~$(date -I)
21 dev=$(btrfs fi sh / | sed -ne 's/.* path //p' | tail -n1) || return
22
23 mount "$dev" -o subvol=/ "$mnt"
24 if [ -e "$target" ]
25 then
26 :
27 else
28 mkdir -p "$(dirname "$target")"
29 btrfs subvolume snapshot -r "$src" "$target"
30 fi
31 umount "$mnt"
32 rmdir "$mnt"
33}
34
35do_not_snap()
36{
37 case "${1#/root/}" in
38 /var/cache/apt/archives|/home/*/.cache|/home/*/src/fsmgr/_build|/home/*/.stack|/home/*/.rustup)
39 true
40 ;;
41 *)
42 false
43 ;;
44 esac
45}
46
47snapit /root
48
49btrfs_subvolumes | while read f
50do
51 if is_subvol "$f"
52 then
53 do_not_snap "$f" || snapit /root/"${f#/}"
54 fi
55done
diff --git a/src/samizdat-diff-root b/src/samizdat-diff-root
new file mode 100755
index 0000000..ea9bb85
--- /dev/null
+++ b/src/samizdat-diff-root
@@ -0,0 +1,43 @@
1#!/bin/sh
2mp=/mnt/root.tmp
3fs=/
4
5excludes='--exclude /var/log/ --exclude /tmp/'
6
7devs()
8{
9 btrfs fi sh "$fs" | sed -ne 's?^[ \t]*devid[ \t].*/dev?/dev?p'
10}
11
12[ $(id -u) = 0 ] || exec sudo "$0" "$@" || exit
13
14if ! [ -e "$mp" ] || ! mountpoint -q "$mp"
15then
16 mkdir -p "$mp"
17 dev=$(devs | tail -n1) || exit
18 mount -t btrfs "$dev" -o subvol=/ "$mp" || exit
19fi
20
21case $# in
22 0) run()
23 {
24 rsync -xani $excludes "$mp"/root/ "$mp"/root~orig/
25 }
26 ;;
27 *) run()
28 {
29 for f
30 do
31 diff "$mp"/root/"$f" "$mp"/root~orig/"$f"
32 done
33 }
34 ;;
35esac
36if [ -t 0 ]
37then
38 run "$@" | less
39else
40 run "$@"
41fi
42
43umount "$mp"