@@ -303,13 +303,15 @@ mount -F hsfs "${isodev}" "${iso_path}" || \
303
303
# Compute the size for the new USB image.
304
304
# Use ISO file size + 20% to account for smaller block size on UFS
305
305
# and the log. Round to nearest kbyte plus 512
306
- # plus 4MB for MBR+SMI label
306
+ # plus 4MB for label
307
+ # plus 34MB for system partition
308
+ # plus 1MB for boot partition
307
309
#
308
310
get_filesize "usb_size" "${iso_file}"
309
311
if (( usb_size == -1 )) ; then
310
312
error_handler "Failed to get size of file ${iso_file}"
311
313
fi
312
- (( usb_size=((int( (usb_size * 1.2) / 1024.) * 1024.) + 512) + 4194304 ))
314
+ (( usb_size=((int( (usb_size * 1.2) / 1024.) * 1024.) + 512) + 41943040 ))
313
315
314
316
#
315
317
# Create and mount an empty new USB image.
@@ -324,40 +326,64 @@ devs="$(lofiadm -la "${usb_file}")" || \
324
326
# Set rdevs by replacing dsk with rdsk in devs
325
327
#
326
328
rdevs="${devs/dsk/rdsk}"
327
- # for mount
329
+ # for system partition
328
330
s0devs="${devs/p0/s0}"
329
- # for newfs and installboot
330
- rs0devs="${rdevs/p0/s0}"
331
- # for prtvtoc | fmthard
331
+ s2devs="${devs/p0/s2}"
332
+ # for newfs and installboot and prtvtoc | fmthard
332
333
rs2devs="${rdevs/p0/s2}"
334
+ rs0devs="${rdevs/p0/s0}"
335
+ pdev="${devs/p0/}"
333
336
334
337
#
335
- # create Solaris2 partition
338
+ # create GPT partitioning with system, boot and root
336
339
#
337
- fdisk -B "${rdevs}"
340
+ zpool create -B -o bootsize=34M usbgen-$$ $pdev
341
+ zpool destroy usbgen-$$
342
+
338
343
prtvtoc "${rs2devs}" | nawk '
339
344
/^[^\*]/ { r = $1; for(n = 1; n <= NF; n++) vtoc[r,n] = $n }
340
345
END {
341
- vtoc[0,1] = 0;
342
- vtoc[0,2] = 2;
343
- vtoc[0,3] = 00;
344
- vtoc[0,4] = vtoc[8,6] + 1;
345
- vtoc[0,5] = vtoc[2,6] - vtoc[8,6];
346
- vtoc[0,6] = vtoc[2,6];
346
+ vtoc[1,1] = 1;
347
+ vtoc[1,2] = 1;
348
+ vtoc[1,3] = 00;
349
+ vtoc[1,5] = 1024 * 1024 / 512;
350
+ vtoc[1,6] = vtoc[1,4] + vtoc[1,5] - 1;
351
+
352
+ vtoc[2,1] = 2;
353
+ vtoc[2,2] = 2;
354
+ vtoc[2,3] = 00;
355
+ vtoc[2,4] = vtoc[1,6] + 1;
356
+ vtoc[2,6] = vtoc[8,4] - 1;
357
+ vtoc[2,5] = vtoc[2,6] - vtoc[2,4];
358
+
359
+ printf("\t%d\t%d\t%02d\t%d\t%d\t%d\n",
360
+ vtoc[0,1], vtoc[0,2], vtoc[0,3], vtoc[0,4], vtoc[0,5], vtoc[0,6]);
347
361
printf("\t%d\t%d\t%02d\t%d\t%d\t%d\n",
348
- vtoc[0 ,1], vtoc[0 ,2], vtoc[0 ,3], vtoc[0 ,4], vtoc[0 ,5], vtoc[0 ,6]);
362
+ vtoc[1 ,1], vtoc[1 ,2], vtoc[1 ,3], vtoc[1 ,4], vtoc[1 ,5], vtoc[1 ,6]);
349
363
printf("\t%d\t%d\t%02d\t%d\t%d\t%d\n",
350
- vtoc[2,1], vtoc[2,2], vtoc[2,3], vtoc[2,4], vtoc[2,5], vtoc[2,6]);
364
+ vtoc[2,1], vtoc[2,2], vtoc[2,3], vtoc[2,4], vtoc[2,5], vtoc[2,6]);
351
365
printf("\t%d\t%d\t%02d\t%d\t%d\t%d\n",
352
- vtoc[8,1], vtoc[8,2], vtoc[8,3], vtoc[8,4], vtoc[8,5], vtoc[8,6]);
366
+ vtoc[8,1], vtoc[8,2], vtoc[8,3], vtoc[8,4], vtoc[8,5], vtoc[8,6]);
353
367
}' | fmthard -s- "${rs2devs}"
354
368
369
+ mkfs -F pcfs -o b=system ${rs0devs} < /dev/null
370
+
371
+ mount -F pcfs ${s0devs} ${usb_path}
372
+ mkdir -p ${usb_path}/efi/boot
373
+ if [ -f ${iso_path}/boot/bootia32.efi ] ; then
374
+ cp ${iso_path}/boot/bootia32.efi ${usb_path}/efi/boot/BOOTIA32.EFI
375
+ cp ${iso_path}/boot/bootx64.efi ${usb_path}/efi/boot/BOOTX64.EFI
376
+ else
377
+ cp ${iso_path}/boot/boot1.efi ${usb_path}/efi/boot/BOOTX64.EFI
378
+ fi
379
+ umount ${usb_path}
380
+
355
381
# newfs doesn't ask questions if stdin isn't a tty.
356
- newfs "${rs0devs }" </dev/null || \
357
- error_handler "Failed to construct the UFS file system ${rs0devs }"
382
+ newfs "${rs2devs }" </dev/null || \
383
+ error_handler "Failed to construct the UFS file system ${rs2devs }"
358
384
359
- mount -o nologging "${s0devs }" "${usb_path}" || \
360
- error_handler "Failed to mount construct the UFS file system ${rs0devs }"
385
+ mount -o nologging "${s2devs }" "${usb_path}" || \
386
+ error_handler "Failed to mount construct the UFS file system ${rs2devs }"
361
387
362
388
#
363
389
# Copy the contents of the ISO file to the new USB image.
@@ -369,7 +395,7 @@ print "Copying ISO contents to USB image..."
369
395
# install bootblocks
370
396
#
371
397
installboot -mf "${usb_path}/boot/pmbr" "${usb_path}/boot/gptzfsboot" \
372
- "${rs0devs }"
398
+ "${rs2devs }"
373
399
374
400
# If we get an error hereforth in menu.lst modifications, proceed with a warning
375
401
trap "" ERR INT
0 commit comments