Andrew Jeffery | ba2e744 | 2021-09-07 09:11:21 +0930 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | |
| 3 | set -eu |
| 4 | |
| 5 | fstab_fs_mntopt() { |
| 6 | awk "\"overlay\" == \$1 && \"$1\" == \$2 { printf(\"%s\n\", \$4) }" |
| 7 | } |
| 8 | |
| 9 | fstab_option_iter() { |
| 10 | tr ',' '\n' |
| 11 | } |
| 12 | |
| 13 | fstab_option_value() { |
| 14 | cut -d= -f2 |
| 15 | } |
| 16 | |
Andrew Jeffery | dc68110 | 2021-12-08 11:16:27 +1030 | [diff] [blame] | 17 | overlay_add() { |
| 18 | o_lowerdir="$1" |
| 19 | o_upperdir=$(mktemp -d) |
| 20 | o_workdir=$(mktemp -d) |
| 21 | mount -t overlay -o lowerdir="${o_lowerdir}",upperdir=${o_upperdir},workdir=${o_workdir} overlay "${o_lowerdir}" |
| 22 | } |
| 23 | |
Andrew Jeffery | f6823ab | 2021-12-08 11:18:32 +1030 | [diff] [blame] | 24 | overlay_remove() { |
| 25 | o_lowerdir="$1" |
| 26 | o_options="$(fstab_fs_mntopt $o_lowerdir < /proc/mounts)" |
| 27 | umount $o_lowerdir |
| 28 | if [ -z "$o_options" ] |
| 29 | then |
Andrew Jeffery | 2f6ab50 | 2021-12-08 15:43:35 +1030 | [diff] [blame] | 30 | echo >&2 $o_lowerdir is not an overlay |
Andrew Jeffery | f6823ab | 2021-12-08 11:18:32 +1030 | [diff] [blame] | 31 | exit 1 |
| 32 | else |
| 33 | echo "${o_options}" | |
| 34 | fstab_option_iter | |
| 35 | while read FS_MNTOPT |
| 36 | do |
| 37 | case $FS_MNTOPT in |
| 38 | upperdir=*|workdir=*) |
| 39 | rm -rf "$(echo $FS_MNTOPT | fstab_option_value)" |
| 40 | ;; |
| 41 | esac |
| 42 | done |
| 43 | fi |
| 44 | } |
| 45 | |
Andrew Jeffery | ba2e744 | 2021-09-07 09:11:21 +0930 | [diff] [blame] | 46 | if [ $# -lt 2 ] |
| 47 | then |
| 48 | cat $0 |
| 49 | exit 1 |
| 50 | fi |
| 51 | |
Andrew Jeffery | 727d135 | 2021-12-08 11:25:09 +1030 | [diff] [blame] | 52 | subcmd=$1 |
| 53 | shift |
| 54 | |
| 55 | case $subcmd in |
Andrew Jeffery | ba2e744 | 2021-09-07 09:11:21 +0930 | [diff] [blame] | 56 | add) |
Andrew Jeffery | 811a575 | 2021-12-08 12:10:20 +1030 | [diff] [blame] | 57 | for target in "$@" |
| 58 | do |
| 59 | overlay_add "$target" |
| 60 | done |
Andrew Jeffery | ba2e744 | 2021-09-07 09:11:21 +0930 | [diff] [blame] | 61 | ;; |
| 62 | remove) |
Andrew Jeffery | 811a575 | 2021-12-08 12:10:20 +1030 | [diff] [blame] | 63 | for target in "$@" |
| 64 | do |
| 65 | overlay_remove "$target" |
| 66 | done |
Andrew Jeffery | ba2e744 | 2021-09-07 09:11:21 +0930 | [diff] [blame] | 67 | ;; |
| 68 | -h|--help|*) |
| 69 | cat $0 |
| 70 | ;; |
| 71 | esac |