diff options
Diffstat (limited to 'src/partvi')
-rwxr-xr-x | src/partvi | 107 |
1 files changed, 57 insertions, 50 deletions
@@ -3,9 +3,11 @@ shopt -s nullglob | |||
3 | PATH=/sbin:$PATH | 3 | PATH=/sbin:$PATH |
4 | 4 | ||
5 | msg() { printf '%s: %s: %s\n' "$0" "$1" "$2" >&2; } | 5 | msg() { printf '%s: %s: %s\n' "$0" "$1" "$2" >&2; } |
6 | die() { msg Error "${*:-exiting on fatal error.}"; exit 1; } | 6 | die() { msg Error "${*:-Exiting on fatal error.}"; exit 1; } |
7 | warn() { msg Warning "${*:-Something is wrong.}"; } | 7 | warn() { msg Warning "${*:-Something is wrong.}"; } |
8 | notice() { msg Notice "$*"; } | 8 | notice() { msg Notice "$*"; } |
9 | quietly() { "$@" >/dev/null 2>&1 || true; } | ||
10 | loudly() { (set -x; "$@"); } | ||
9 | 11 | ||
10 | validate_name() | 12 | validate_name() |
11 | { | 13 | { |
@@ -62,34 +64,12 @@ require_exists() | |||
62 | done | 64 | done |
63 | } | 65 | } |
64 | 66 | ||
65 | set -e | 67 | build_partition() |
66 | 68 | { | |
67 | builddir=_build | ||
68 | mkdir -p "$builddir" | ||
69 | |||
70 | for f in part*.conf | ||
71 | do | ||
72 | notice "Processing $f" | ||
73 | img=${f%.conf} | ||
74 | |||
75 | read_config_file "$img" || warn "Received error return from command: read_config_file $img" | ||
76 | require_var name | ||
77 | |||
78 | require_var type | ||
79 | case "$type" in | ||
80 | efi-system-partition|bios-grub|samizdat-*) ;; | ||
81 | dm-verity-hashes|dm-verity-data) require_var data_path ;; | ||
82 | partition-table) ;; | ||
83 | *) die "invalid type: $type" ;; | ||
84 | esac | ||
85 | |||
86 | imgfile=$builddir/$img | ||
87 | |||
88 | if inquire_var rebuild | 69 | if inquire_var rebuild |
89 | then | 70 | then |
90 | case "$rebuild" in | 71 | case "$rebuild" in |
91 | always) ;; | 72 | always|never|default) ;; |
92 | never) ;; | ||
93 | *) die "invalid value for field 'rebuild': $rebuild" ;; | 73 | *) die "invalid value for field 'rebuild': $rebuild" ;; |
94 | esac | 74 | esac |
95 | fi | 75 | fi |
@@ -134,42 +114,44 @@ do | |||
134 | mv -T "$tmp" "$imgfile" | 114 | mv -T "$tmp" "$imgfile" |
135 | notice "Successfully wrote $imgfile" | 115 | notice "Successfully wrote $imgfile" |
136 | fi | 116 | fi |
137 | done | 117 | } |
138 | 118 | ||
139 | if [ "$UID" = 0 ] | 119 | iterate_partitions() |
140 | then sudo= | 120 | { |
141 | else sudo=sudo | 121 | local f |
142 | fi | 122 | for f in part*.conf |
123 | do | ||
124 | notice "Processing $f" | ||
125 | img=${f%.conf} | ||
143 | 126 | ||
144 | map_name=samline | 127 | read_config_file "$img" || warn "Received error return from command: read_config_file $img" |
128 | require_var name | ||
145 | 129 | ||
146 | quietly() | 130 | require_var type |
147 | { | 131 | case "$type" in |
148 | "$@" >/dev/null 2>&1 || true | 132 | efi-system-partition|bios-grub|samizdat-*) ;; |
149 | } | 133 | dm-verity-hashes|dm-verity-data) require_var data_path ;; |
150 | loudly() | 134 | partition-table) ;; |
151 | { | 135 | *) die "invalid type: $type" ;; |
152 | (set -x | 136 | esac |
153 | "$@") | ||
154 | } | ||
155 | 137 | ||
156 | quietly $sudo kpartx -dv /dev/mapper/"$map_name" | 138 | imgfile=$builddir/$img |
157 | quietly $sudo dmsetup remove "$map_name" | ||
158 | quietly $sudo losetup -D | ||
159 | 139 | ||
160 | start=0 | 140 | "$@" |
161 | map=$builddir/dmsetup.map | 141 | done |
162 | : > "$map" | 142 | } |
163 | 143 | ||
164 | for f in part*.conf | 144 | create_dmsetup_map() |
165 | do | 145 | { |
166 | part=$builddir/${f%.conf} | 146 | part=$builddir/${f%.conf} |
147 | |||
167 | if [ -h "$part" ] | 148 | if [ -h "$part" ] |
168 | then | 149 | then |
169 | partuuid=$(readlink -e "$part") | 150 | partuuid=$(readlink -e "$part") |
170 | else | 151 | else |
171 | partuuid= | 152 | partuuid= |
172 | fi | 153 | fi |
154 | |||
173 | $sudo losetup -L -f "$part" | 155 | $sudo losetup -L -f "$part" |
174 | dev=$(losetup -j "$part" -O NAME --noheadings) | 156 | dev=$(losetup -j "$part" -O NAME --noheadings) |
175 | devsz=$($sudo blockdev --getsz $dev) | 157 | devsz=$($sudo blockdev --getsz $dev) |
@@ -185,8 +167,33 @@ do | |||
185 | printf '%d %d zero\n' $start $devsz >> "$map" | 167 | printf '%d %d zero\n' $start $devsz >> "$map" |
186 | start=$((start + devsz)) | 168 | start=$((start + devsz)) |
187 | fi | 169 | fi |
170 | } | ||
171 | |||
172 | set -e | ||
173 | |||
174 | builddir=_build | ||
175 | mkdir -p "$builddir" | ||
176 | |||
177 | iterate_partitions build_partition | ||
178 | |||
179 | if [ "$UID" = 0 ] | ||
180 | then sudo= | ||
181 | else sudo=sudo | ||
182 | fi | ||
183 | |||
184 | map_name=samline | ||
185 | |||
186 | |||
187 | quietly $sudo kpartx -dv /dev/mapper/"$map_name" | ||
188 | quietly $sudo dmsetup remove "$map_name" | ||
189 | quietly $sudo losetup -D | ||
190 | |||
191 | start=0 | ||
192 | map=$builddir/dmsetup.map | ||
193 | : > "$map" | ||
194 | |||
195 | iterate_partitions create_dmsetup_map | ||
188 | 196 | ||
189 | done | ||
190 | $sudo dmsetup -v create "$map_name" "$map" | 197 | $sudo dmsetup -v create "$map_name" "$map" |
191 | 198 | ||
192 | dev=/dev/mapper/$map_name | 199 | dev=/dev/mapper/$map_name |