FreeBSD Bugzilla – Attachment 161646 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 current nanobsd.sh from 10-STABLE
patch-10 (text/plain), 6.78 KB, created by
Arrigo Marchiori
on 2015-10-02 15:24:27 UTC
(
hide
)
Description:
Patch adapted to current nanobsd.sh from 10-STABLE
Filename:
MIME Type:
Creator:
Arrigo Marchiori
Created:
2015-10-02 15:24:27 UTC
Size:
6.78 KB
patch
obsolete
>--- nanobsd.release 2015-09-23 17:10:37.066280000 +0200 >+++ nanobsd.sh 2015-10-02 17:17:15.431792000 +0200 >@@ -129,7 +129,7 @@ > NANO_HEADS=16 > > # boot0 flags/options and configuration >-NANO_BOOT0CFG="-o packet -s 1 -m 3" >+NANO_BOOTFLAGS="" > NANO_BOOTLOADER="boot/boot0sio" > > # boot2 flags/options >@@ -499,30 +499,18 @@ > populate_slice "$1" "$2" "$3" "$4" > ) > >-create_diskimage ( ) ( >- pprint 2 "build diskimage" >- pprint 3 "log: ${NANO_OBJ}/_.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 > > # 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) >@@ -533,45 +521,100 @@ > # 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) > } > > # 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_OBJ}/_.fdisk >+ ' > ${NANO_OBJ}/_.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}a ${NANO_WORLDDIR} ${MNT} "s1a" >+ 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} >@@ -587,29 +630,35 @@ > -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_OBJ}/_.fdisk ${MD} >+ sh ${NANO_OBJ}/_.gpart ${MD} >+ gpart show ${MD} > fdisk ${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}s1 >- else >- bsdlabel -w ${MD}s1 >- fi >- bsdlabel ${MD}s1 > >- # Create first image >- populate_slice /dev/${MD}s1a ${NANO_WORLDDIR} ${MNT} "s1a" >- mount /dev/${MD}s1a ${MNT} >- echo "Generating mtree..." >- ( cd ${MNT} && mtree -c ) > ${NANO_OBJ}/_.mtree >- ( cd ${MNT} && du -k ) > ${NANO_OBJ}/_.du >- nano_umount ${MNT} >+ echo "Writing code image..." >+ dd conv=sparse if=${NANO_DISKIMGDIR}/_.disk.image of=/dev/${MD}s1 bs=64k > > if [ $NANO_IMAGES -gt 1 -a $NANO_INIT_IMG2 -gt 0 ] ; then > # Duplicate to second image (if present) >@@ -648,11 +697,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}s1 of=${NANO_DISKIMGDIR}/_.disk.image bs=64k >- fi > mdconfig -d -u $MD > > trap - 1 2 15 >@@ -912,7 +956,7 @@ > echo " -K suppress installkernel" > 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 " -i suppress disk image build" > echo " -k suppress buildkernel" > echo " -n add -DNO_CLEAN to buildworld, buildkernel, etc" >@@ -930,8 +974,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 >@@ -970,7 +1014,8 @@ > shift > ;; > -f) >- do_copyout_partition=false >+ do_code=false >+ do_image=false > shift > ;; > -h) >@@ -1120,10 +1165,16 @@ > setup_nanobsd > prune_usr > run_late_customize >-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