FreeBSD Bugzilla – Attachment 217561 Details for
Bug 186030
[nanobsd] [patch] Use gpart instead of fdisk, and create code image before full disk image
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch adapted to the nanobsd script from current 11-STABLE
nanobsd-11.4.patch (text/plain), 7.12 KB, created by
Arrigo Marchiori
on 2020-08-26 23:06:15 UTC
(
hide
)
Description:
Patch adapted to the nanobsd script from current 11-STABLE
Filename:
MIME Type:
Creator:
Arrigo Marchiori
Created:
2020-08-26 23:06:15 UTC
Size:
7.12 KB
patch
obsolete
>Index: defaults.sh >=================================================================== >--- defaults.sh (revision 363155) >+++ defaults.sh (working copy) >@@ -164,6 +164,8 @@ > NANO_SLICE_ALTROOT=s2 > NANO_SLICE_CFG=s3 > NANO_SLICE_DATA=s4 >+NANO_PARTITION_ROOT=a >+NANO_PARTITION_ALTROOT=a > NANO_ROOT=s1a > NANO_ALTROOT=s2a > >@@ -652,18 +654,12 @@ > populate_slice "$1" "$2" "$3" "$4" > ) > >-create_diskimage ( ) ( >- pprint 2 "build diskimage" >- pprint 3 "log: ${NANO_LOG}/_.di" >- >- ( >+calculate_partitioning ( ) ( > echo $NANO_MEDIASIZE $NANO_IMAGES \ > $NANO_SECTS $NANO_HEADS \ > $NANO_CODESIZE $NANO_CONFSIZE $NANO_DATASIZE | > awk ' > { >- printf "# %s\n", $0 >- > # size of cylinder in sectors > cs = $3 * $4 > >@@ -670,12 +666,6 @@ > # number of full cylinders on media > cyl = int ($1 / cs) > >- # output fdisk geometry spec, truncate cyls to 1023 >- if (cyl <= 1023) >- print "g c" cyl " h" $4 " s" $3 >- else >- print "g c" 1023 " h" $4 " s" $3 >- > if ($7 > 0) { > # size of data partition in full cylinders > dsl = int (($7 + cs - 1) / cs) >@@ -686,8 +676,8 @@ > # size of config partition in full cylinders > csl = int (($6 + cs - 1) / cs) > >+ # size of image partition(s) in full cylinders > if ($5 == 0) { >- # size of image partition(s) in full cylinders > isl = int ((cyl - dsl - csl) / $2) > } else { > isl = int (($5 + cs - 1) / cs) >@@ -694,37 +684,93 @@ > } > > # First image partition start at second track >- print "p 1 165 " $3, isl * cs - $3 >+ print $3, isl * cs - $3 > c = isl * cs; > > # Second image partition (if any) also starts offset one > # track to keep them identical. > if ($2 > 1) { >- print "p 2 165 " $3 + c, isl * cs - $3 >+ print $3 + c, isl * cs - $3 > c += isl * cs; > } > > # Config partition starts at cylinder boundary. >- print "p 3 165 " c, csl * cs >+ print c, csl * cs > c += csl * cs > > # Data partition (if any) starts at cylinder boundary. > if ($7 > 0) { >- print "p 4 165 " c, dsl * cs >+ print c, dsl * cs > } else if ($7 < 0 && $1 > c) { >- print "p 4 165 " c, $1 - c >+ print c, $1 - c > } else if ($1 < c) { > print "Disk space overcommitted by", \ > c - $1, "sectors" > "/dev/stderr" > exit 2 > } >- >- # Force slice 1 to be marked active. This is necessary >- # for booting the image from a USB device to work. >- print "a 1" > } >- ' > ${NANO_LOG}/_.fdisk >+ ' > ${NANO_LOG}/_.partitioning > >+) >+ >+create_code_slice ( ) ( >+ pprint 2 "build code slice" >+ pprint 3 "log: ${NANO_OBJ}/_.cs" >+ >+ ( >+ IMG=${NANO_DISKIMGDIR}/_.disk.image >+ MNT=${NANO_OBJ}/_.mnt >+ mkdir -p ${MNT} >+ CODE_SIZE=`head -n 1 ${NANO_OBJ}/_.partitioning | awk '{ print $2 }'` >+ >+ if [ "${NANO_MD_BACKING}" = "swap" ] ; then >+ MD=`mdconfig -a -t swap -s ${CODE_SIZE} -x ${NANO_SECTS} \ >+ -y ${NANO_HEADS}` >+ else >+ echo "Creating md backing file..." >+ rm -f ${IMG} >+ dd if=/dev/zero of=${IMG} seek=${CODE_SIZE} count=0 >+ MD=`mdconfig -a -t vnode -f ${IMG} -x ${NANO_SECTS} \ >+ -y ${NANO_HEADS}` >+ fi >+ >+ trap "echo 'Running exit trap code' ; df -i ${MNT} ; umount ${MNT} || true ; mdconfig -d -u $MD" 1 2 15 EXIT >+ >+ bsdlabel -w ${MD} >+ if [ -f ${NANO_WORLDDIR}/boot/boot ]; then >+ echo "Making bootable partition" >+ gpart bootcode -b ${NANO_WORLDDIR}/boot/boot ${MD} >+ else >+ echo "Partition will not be bootable" >+ fi >+ bsdlabel ${MD} >+ >+ # Create first image >+ populate_slice /dev/${MD}${NANO_PARTITION_ROOT} ${NANO_WORLDDIR} ${MNT} "${NANO_ROOT}" >+ mount /dev/${MD}a ${MNT} >+ echo "Generating mtree..." >+ ( cd ${MNT} && mtree -c ) > ${NANO_OBJ}/_.mtree >+ ( cd ${MNT} && du -k ) > ${NANO_OBJ}/_.du >+ nano_umount ${MNT} >+ >+ if [ "${NANO_MD_BACKING}" = "swap" ] ; then >+ echo "Writing out _.disk.image..." >+ dd conv=sparse if=/dev/${MD} of=${NANO_DISKIMGDIR}/_.disk.image bs=64k >+ fi >+ mdconfig -d -u $MD >+ >+ trap - 1 2 15 EXIT >+ >+ ) > ${NANO_OBJ}/_.cs 2>&1 >+) >+ >+ >+create_diskimage ( ) ( >+ pprint 2 "build diskimage" >+ pprint 3 "log: ${NANO_OBJ}/_.di" >+ >+ ( >+ > IMG=${NANO_DISKIMGDIR}/${NANO_IMGNAME} > MNT=${NANO_OBJ}/_.mnt > mkdir -p ${MNT} >@@ -740,29 +786,34 @@ > -y ${NANO_HEADS}` > fi > >+ awk ' >+ BEGIN { >+ # Create MBR partition table >+ print "gpart create -s mbr $1" >+ } >+ { >+ # Make partition >+ print "gpart add -t freebsd -b ", $1, " -s ", $2, " $1" >+ } >+ END { >+ # Force slice 1 to be marked active. This is necessary >+ # for booting the image from a USB device to work. >+ print "gpart set -a active -i 1 $1" >+ } >+ ' ${NANO_OBJ}/_.partitioning > ${NANO_OBJ}/_.gpart >+ > trap "echo 'Running exit trap code' ; df -i ${MNT} ; nano_umount ${MNT} || true ; mdconfig -d -u $MD" 1 2 15 EXIT > >- fdisk -i -f ${NANO_LOG}/_.fdisk ${MD} >- fdisk ${MD} >+ sh ${NANO_OBJ}/_.gpart ${MD} >+ gpart show ${MD} > # XXX: params > # XXX: pick up cached boot* files, they may not be in image anymore. > if [ -f ${NANO_WORLDDIR}/${NANO_BOOTLOADER} ]; then >- boot0cfg -B -b ${NANO_WORLDDIR}/${NANO_BOOTLOADER} ${NANO_BOOT0CFG} ${MD} >+ gpart bootcode -b ${NANO_WORLDDIR}/${NANO_BOOTLOADER} ${NANO_BOOTFLAGS} ${MD} > fi >- if [ -f ${NANO_WORLDDIR}/boot/boot ]; then >- bsdlabel -w -B -b ${NANO_WORLDDIR}/boot/boot ${MD}${NANO_SLICE_ROOT} >- else >- bsdlabel -w ${MD}${NANO_SLICE_ROOT} >- fi >- bsdlabel ${MD}${NANO_SLICE_ROOT} > >- # Create first image >- populate_slice /dev/${MD}${NANO_ROOT} ${NANO_WORLDDIR} ${MNT} "${NANO_ROOT}" >- mount /dev/${MD}${NANO_ROOT} ${MNT} >- echo "Generating mtree..." >- ( cd "${MNT}" && mtree -c ) > ${NANO_LOG}/_.mtree >- ( cd "${MNT}" && du -k ) > ${NANO_LOG}/_.du >- nano_umount "${MNT}" >+ echo "Writing code image..." >+ dd conv=sparse if=${NANO_DISKIMGDIR}/_.disk.image of=/dev/${MD}${NANO_SLICE_ROOT} bs=64k > > if [ $NANO_IMAGES -gt 1 -a $NANO_INIT_IMG2 -gt 0 ] ; then > # Duplicate to second image (if present) >@@ -806,11 +857,6 @@ > echo "Writing out ${NANO_IMGNAME}..." > dd conv=sparse if=/dev/${MD} of=${IMG} bs=64k > fi >- >- if ${do_copyout_partition} ; then >- echo "Writing out _.disk.image..." >- dd conv=sparse if=/dev/${MD}${NANO_SLICE_ROOT} of=${NANO_DISKIMGDIR}/_.disk.image bs=64k >- fi > mdconfig -d -u $MD > > trap - 1 2 15 >@@ -1021,7 +1067,7 @@ > echo "Usage: $0 [-bfhiKknqvwX] [-c config_file]" > echo " -b suppress builds (both kernel and world)" > echo " -c specify config file" >- echo " -f suppress code slice extraction" >+ echo " -f suppress code slice extraction (implies -i)" > echo " -h print this help summary page" > echo " -i suppress disk image build" > echo " -K suppress installkernel" >Index: nanobsd.sh >=================================================================== >--- nanobsd.sh (revision 363155) >+++ nanobsd.sh (working copy) >@@ -40,8 +40,8 @@ > do_kernel=true > do_installkernel=true > do_world=true >+do_code=true > do_image=true >-do_copyout_partition=true > do_native_xtools=false > > set +e >@@ -80,7 +80,8 @@ > shift > ;; > -f) >- do_copyout_partition=false >+ do_code=false >+ do_image=false > shift > ;; > -h) >@@ -181,10 +182,16 @@ > prune_usr > run_late_customize > fixup_before_diskimage >-if $do_image ; then >- create_diskimage >+if $do_code ; then >+ calculate_partitioning >+ create_code_slice >+ if $do_image ; then >+ create_diskimage >+ else >+ pprint 2 "Skipping image build (as instructed)" >+ fi > else >- pprint 2 "Skipping image build (as instructed)" >+ pprint 2 "Skipping code and image build (as instructed)" > fi > last_orders >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 186030
:
139727
|
161646
| 217561