blob: a32f218ae846c8d0f09b988ffff3965610a08841 [file] [log] [blame]
Andrew Jefferyba2e7442021-09-07 09:11:21 +09301#!/bin/sh
2
3set -eu
4
5fstab_fs_mntopt() {
6 awk "\"overlay\" == \$1 && \"$1\" == \$2 { printf(\"%s\n\", \$4) }"
7}
8
9fstab_option_iter() {
10 tr ',' '\n'
11}
12
13fstab_option_value() {
14 cut -d= -f2
15}
16
Andrew Jefferydc681102021-12-08 11:16:27 +103017overlay_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 Jefferyf6823ab2021-12-08 11:18:32 +103024overlay_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 Jeffery2f6ab502021-12-08 15:43:35 +103030 echo >&2 $o_lowerdir is not an overlay
Andrew Jefferyf6823ab2021-12-08 11:18:32 +103031 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 Jefferyba2e7442021-09-07 09:11:21 +093046if [ $# -lt 2 ]
47then
48 cat $0
49 exit 1
50fi
51
Andrew Jeffery727d1352021-12-08 11:25:09 +103052subcmd=$1
53shift
54
55case $subcmd in
Andrew Jefferyba2e7442021-09-07 09:11:21 +093056 add)
Andrew Jeffery811a5752021-12-08 12:10:20 +103057 for target in "$@"
58 do
59 overlay_add "$target"
60 done
Andrew Jefferyba2e7442021-09-07 09:11:21 +093061 ;;
62 remove)
Andrew Jeffery811a5752021-12-08 12:10:20 +103063 for target in "$@"
64 do
65 overlay_remove "$target"
66 done
Andrew Jefferyba2e7442021-09-07 09:11:21 +093067 ;;
68 -h|--help|*)
69 cat $0
70 ;;
71esac