blob: aa72b9e87fc5f6343ee02f25616b0305c4cd6041 [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)
Andrew Jefferyc49e2c52022-04-04 14:07:38 +093021 chmod $(stat -c '%a' $o_lowerdir) $o_upperdir $o_workdir
Andrew Jefferydc681102021-12-08 11:16:27 +103022 mount -t overlay -o lowerdir="${o_lowerdir}",upperdir=${o_upperdir},workdir=${o_workdir} overlay "${o_lowerdir}"
23}
24
Andrew Jefferyf6823ab2021-12-08 11:18:32 +103025overlay_remove() {
26 o_lowerdir="$1"
27 o_options="$(fstab_fs_mntopt $o_lowerdir < /proc/mounts)"
28 umount $o_lowerdir
29 if [ -z "$o_options" ]
30 then
Andrew Jeffery2f6ab502021-12-08 15:43:35 +103031 echo >&2 $o_lowerdir is not an overlay
Andrew Jefferyf6823ab2021-12-08 11:18:32 +103032 exit 1
33 else
34 echo "${o_options}" |
Patrick Williamse310dd92022-12-07 06:55:38 -060035 fstab_option_iter |
36 while read FS_MNTOPT
37 do
38 case $FS_MNTOPT in
39 upperdir=*|workdir=*)
40 rm -rf "$(echo $FS_MNTOPT | fstab_option_value)"
41 ;;
42 esac
43 done
Andrew Jefferyf6823ab2021-12-08 11:18:32 +103044 fi
45}
46
Andrew Jefferyba2e7442021-09-07 09:11:21 +093047if [ $# -lt 2 ]
48then
49 cat $0
50 exit 1
51fi
52
Andrew Jeffery727d1352021-12-08 11:25:09 +103053subcmd=$1
54shift
55
56case $subcmd in
Andrew Jefferyba2e7442021-09-07 09:11:21 +093057 add)
Andrew Jeffery811a5752021-12-08 12:10:20 +103058 for target in "$@"
59 do
60 overlay_add "$target"
61 done
Andrew Jefferyba2e7442021-09-07 09:11:21 +093062 ;;
63 remove)
Andrew Jeffery811a5752021-12-08 12:10:20 +103064 for target in "$@"
65 do
66 overlay_remove "$target"
67 done
Andrew Jefferyba2e7442021-09-07 09:11:21 +093068 ;;
69 -h|--help|*)
70 cat $0
71 ;;
72esac