diff options
Diffstat (limited to 'src/partvi')
-rwxr-xr-x | src/partvi | 78 |
1 files changed, 27 insertions, 51 deletions
@@ -181,44 +181,6 @@ set_var() | |||
181 | eval "conf_${img}_${1}=\$${1}" | 181 | eval "conf_${img}_${1}=\$${1}" |
182 | } | 182 | } |
183 | 183 | ||
184 | create_dmsetup_map() | ||
185 | { | ||
186 | part=$builddir/${f%.conf} | ||
187 | |||
188 | if [ -h "$part" ] | ||
189 | then | ||
190 | partuuid=$(readlink -e "$part") | ||
191 | else | ||
192 | partuuid= | ||
193 | fi | ||
194 | |||
195 | $sudo losetup -L -f "$part" | ||
196 | dev=$(losetup -j "$part" -O NAME --noheadings) | ||
197 | devsz=$($sudo blockdev --getsz $dev) | ||
198 | |||
199 | alignment_error=$((devsz % 2048)) | ||
200 | |||
201 | printf '%d %d linear %s 0\n' $start $devsz "$dev" >> "$map" | ||
202 | |||
203 | set_var start | ||
204 | set_var devsz | ||
205 | start=$((start + devsz)) | ||
206 | |||
207 | if [ $alignment_error -gt 0 ] | ||
208 | then | ||
209 | devsz=$((2048 - alignment_error)) | ||
210 | printf '%d %d zero\n' $start $devsz >> "$map" | ||
211 | start=$((start + devsz)) | ||
212 | fi | ||
213 | } | ||
214 | |||
215 | create_ptable_conf_debug() | ||
216 | { | ||
217 | set -x | ||
218 | create_ptable_conf "$@" | ||
219 | set +x | ||
220 | } | ||
221 | |||
222 | create_ptable_conf() | 184 | create_ptable_conf() |
223 | { | 185 | { |
224 | #inquire_var start && inquire_var devsz || return | 186 | #inquire_var start && inquire_var devsz || return |
@@ -228,20 +190,35 @@ create_ptable_conf() | |||
228 | 190 | ||
229 | [ "$((devsz % 512))" -eq 0 ] | 191 | [ "$((devsz % 512))" -eq 0 ] |
230 | 192 | ||
193 | start_sectors=$((start / 512)) | ||
194 | size_sectors=$((devsz / 512)) | ||
195 | |||
196 | typecode=0FC63DAF-8483-4772-8E79-3D69D8477DE4 | ||
231 | case "$type" in | 197 | case "$type" in |
232 | partition-table) start=$((start + devsz)); return;; | 198 | partition-table) start=$((start + devsz)); return;; |
233 | efi-system-partition) typecode=C12A7328-F81F-11D2-BA4B-00A0C93EC93B ;; | 199 | efi-system-partition) typecode=C12A7328-F81F-11D2-BA4B-00A0C93EC93B ;; |
234 | bios-grub) typecode=21686148-6449-6E6F-744E-656564454649 ;; | 200 | bios-grub) typecode=21686148-6449-6E6F-744E-656564454649 ;; |
235 | *) typecode=0FC63DAF-8483-4772-8E79-3D69D8477DE4 ;; | 201 | boot) |
202 | printf 'start=1, size=%d, type=ee\n' \ | ||
203 | "$((start_sectors - 1))" \ | ||
204 | >> "$DOS_TABLE_FILE" | ||
205 | printf 'start=%d, size=%d, type=83, bootable\n' \ | ||
206 | "$start_sectors" \ | ||
207 | "$size_sectors" \ | ||
208 | >> "$DOS_TABLE_FILE" | ||
209 | printf 'start=%d, type=ee\n' \ | ||
210 | "$((start_sectors + size_sectors))" \ | ||
211 | >> "$DOS_TABLE_FILE" | ||
212 | ;; | ||
236 | esac | 213 | esac |
237 | 214 | ||
238 | printf '%d: start=%d, size=%d, type=%s, name="%s"\n' \ | 215 | printf '%d: start=%d, size=%d, type=%s, name="%s"\n' \ |
239 | "$i" \ | 216 | "$i" \ |
240 | "$((start / 512))" \ | 217 | "$start_sectors" \ |
241 | "$((devsz / 512))" \ | 218 | "$size_sectors" \ |
242 | "$typecode" \ | 219 | "$typecode" \ |
243 | "$name" \ | 220 | "$name" \ |
244 | >> "$ptable.sfdisk" | 221 | >> "$GPT_TABLE_FILE" |
245 | let ++i | 222 | let ++i |
246 | start=$((start + devsz)) | 223 | start=$((start + devsz)) |
247 | } | 224 | } |
@@ -288,21 +265,20 @@ END | |||
288 | 265 | ||
289 | pee_on_table() | 266 | pee_on_table() |
290 | { | 267 | { |
268 | GPT_TABLE_FILE=$builddir/table.gpt | ||
269 | DOS_TABLE_FILE=$builddir/table.mbr | ||
270 | |||
291 | local dev="$1" | 271 | local dev="$1" |
292 | ptable=$builddir/ptable.bin | ||
293 | i=1 | 272 | i=1 |
294 | start=0 | 273 | start=0 |
295 | 274 | ||
296 | sfdisk_init "$dev" > "$ptable".sfdisk | 275 | sfdisk_init "$dev" > "$GPT_TABLE_FILE" |
297 | 276 | : > "$DOS_TABLE_FILE" | |
298 | iterate_partitions create_ptable_conf_debug | 277 | iterate_partitions create_ptable_conf |
299 | |||
300 | cat "$ptable".sfdisk >&2 | ||
301 | 278 | ||
302 | set -x | 279 | set -x |
303 | $sudo sfdisk "$dev" < "$ptable".sfdisk || return | 280 | $sudo sfdisk "$dev" < "$GPT_TABLE_FILE" || return |
304 | $sudo sfdisk --dump "$dev" || return | 281 | $sudo sfdisk -Y dos "$dev" < "$DOS_TABLE_FILE" || return |
305 | $sudo sfdisk -Y MBR --dump "$dev" || return | ||
306 | } | 282 | } |
307 | 283 | ||
308 | truncate -s0 whole.img | 284 | truncate -s0 whole.img |