140 lines
3.4 kB
1
obm() { a__overlay_bind_mount "${@}"; }
2
a__overlay_bind_mount() {
3
local directory
4
for directory in "dev" "dev/pts" "proc" "sys"; do
5
if ! mount --bind "/${directory}" "overlay/mount/${directory}"; then
6
rwx_log_error "Unable to bind mount directory: ${directory}"
7
return 1
8
fi
9
done
10
}
11
12
obu() { a__overlay_bind_unmount "${@}"; }
13
a__overlay_bind_unmount() {
14
local directory
15
for directory in "sys" "proc" "dev/pts" "dev"; do
16
if ! umount --lazy "overlay/mount/${directory}"; then
17
rwx_log_error "Unable to bind unmount directory: ${directory}"
18
return 1
19
fi
20
done
21
}
22
23
ocr() { a__overlay_command_root "${@}"; }
24
a__overlay_command_root() {
25
chroot \
26
"overlay/mount" "${@}"
27
}
28
29
ocu() { a__overlay_command_user "${@}"; }
30
a__overlay_command_user() {
31
chroot \
32
--userspec "1000:1000" \
33
"overlay/mount" "${@}"
34
}
35
36
omm() { a__overlay_mirror_mount "${@}"; }
37
a__overlay_mirror_mount() {
38
mount --make-rslave --rbind "/deb" "overlay/mount/deb"
39
}
40
41
omu() { a__overlay_mirror_unmount "${@}"; }
42
a__overlay_mirror_unmount() {
43
umount --recursive "overlay/mount/deb"
44
}
45
46
orm() { a__overlay_root_mount "${@}"; }
47
a__overlay_root_mount() {
48
local root="${1}"
49
if [ -z "${root}" ]; then
50
rwx_log_error "No root target directory"
51
return 1
52
fi
53
root="$(realpath "${root}")"
54
if ! mkdir "overlay"; then
55
rwx_log_error "Unable to make overlay directory"
56
return 2
57
fi
58
(
59
if ! cd "overlay"; then
60
rwx_log_error "Unable to move into overlay directory"
61
return 3
62
fi
63
local directory
64
for directory in "lower" "upper" "work" "mount"; do
65
if ! mkdir --parents "${directory}"; then
66
rwx_log_error "Unable to make directory: ${directory}"
67
return 4
68
fi
69
done
70
local file="${root}/filesystem.squashfs"
71
if ! mount "${file}" "lower"; then
72
rwx_log_error "Unable to lower mount: ${file}"
73
return 5
74
fi
75
if ! mount \
76
-o "lowerdir=lower,upperdir=upper,workdir=work" \
77
-t "overlay" \
78
"overlay" "mount"; then
79
rwx_log_error "Unable to overlay mount"
80
return 6
81
fi
82
)
83
}
84
85
ors() { a__overlay_root_squash "${@}"; }
86
a__overlay_root_squash() {
87
local directory="${1}"
88
local file
89
local level="${2}"
90
if [ -n "${directory}" ]; then
91
if mkdir "${directory}"; then
92
[ -n "${level}" ] || level="18"
93
for file in "vmlinuz" "initrd.img"; do
94
cp "overlay/mount/${file}" "${directory}"
95
done
96
mksquashfs \
97
"overlay/mount" "${directory}/filesystem.squashfs" \
98
-noappend \
99
-comp "zstd" -Xcompression-level "${level}"
100
chown --recursive 1000:1000 "${directory}"
101
fi
102
fi
103
}
104
105
oru() { a__overlay_root_unmount "${@}"; }
106
a__overlay_root_unmount() {
107
(
108
if ! cd "overlay"; then
109
rwx_log_error "Unable to move into overlay directory"
110
return 1
111
fi
112
if ! umount "mount"; then
113
rwx_log_error "Unable to unmount mount directory"
114
return 2
115
fi
116
if ! rmdir "mount"; then
117
rwx_log_error "Unable to remove mount directory"
118
return 3
119
fi
120
local directory
121
for directory in "upper" "work"; do
122
if ! rm --force --recursive "${directory}"; then
123
rwx_log_error "Unable to remove directory: ${directory}"
124
return 4
125
fi
126
done
127
if ! umount "lower"; then
128
rwx_log_error "Unable to unmount lower directory"
129
return 5
130
fi
131
if ! rmdir "lower"; then
132
rwx_log_error "Unable to remove lower directory"
133
return 6
134
fi
135
)
136
if ! rmdir "overlay"; then
137
rwx_log_error "Unable to remove overlay directory"
138
return 7
139
fi
140
}
141