FreeBSD Bugzilla – Attachment 139727 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]
file.diff
file.diff (text/plain), 6.36 KB, created by
Arrigo Marchiori
on 2014-01-23 11:20:00 UTC
(
hide
)
Description:
file.diff
Filename:
MIME Type:
Creator:
Arrigo Marchiori
Created:
2014-01-23 11:20:00 UTC
Size:
6.36 KB
patch
obsolete
>--- nanobsd.sh.originale 2012-04-10 12:41:31.000000000 +0200 >+++ nanobsd.sh 2012-06-12 16:52:04.000000000 +0200 >@@ -431,30 +431,18 @@ > populate_slice "$1" "$2" "$3" "$4" > ) > >-create_i386_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) >@@ -465,45 +453,94 @@ > # 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_i386_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 -B -b ${NANO_WORLDDIR}/boot/boot ${MD} >+ 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 >+ umount ${MNT} > >+ if [ "${NANO_MD_BACKING}" = "swap" ] ; then >+ echo "Writing out _.disk.image..." >+ dd 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_i386_diskimage ( ) ( >+ pprint 2 "build diskimage" >+ pprint 3 "log: ${NANO_OBJ}/_.di" >+ >+ ( > IMG=${NANO_DISKIMGDIR}/${NANO_IMGNAME} > MNT=${NANO_OBJ}/_.mnt > mkdir -p ${MNT} >@@ -519,9 +556,26 @@ > -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} ; 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. >@@ -529,13 +583,8 @@ > bsdlabel -w -B -b ${NANO_WORLDDIR}/boot/boot ${MD}s1 > 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 >- umount ${MNT} >+ echo "Writing code image..." >+ dd 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) >@@ -567,10 +616,6 @@ > dd if=/dev/${MD} of=${IMG} bs=64k > fi > >- if ${do_copyout_partition} ; then >- echo "Writing out _.disk.image..." >- dd if=/dev/${MD}s1 of=${NANO_DISKIMGDIR}/_.disk.image bs=64k >- fi > mdconfig -d -u $MD > > trap - 1 2 15 EXIT >@@ -578,6 +623,11 @@ > ) > ${NANO_OBJ}/_.di 2>&1 > ) > >+# i386 and amd64 are identical for code partitions >+create_amd64_code_slice ( ) ( >+ create_i386_code_slice >+) >+ > # i386 and amd64 are identical for disk images > create_amd64_diskimage ( ) ( > create_i386_diskimage >@@ -768,7 +818,7 @@ > ( > echo "Usage: $0 [-bfiknqvw] [-c config_file]" > echo " -b suppress builds (both kernel and world)" >- 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" >@@ -786,8 +836,8 @@ > do_clean=true > do_kernel=true > do_world=true >+do_code=true > do_image=true >-do_copyout_partition=true > > set +e > args=`getopt bc:fhiknqvw $*` >@@ -817,7 +867,8 @@ > shift > ;; > -f) >- do_copyout_partition=false >+ do_code=false >+ do_image=false > shift > ;; > -h) >@@ -952,10 +1003,16 @@ > setup_nanobsd > prune_usr > run_late_customize >-if $do_image ; then >- create_${NANO_ARCH}_diskimage >+if $do_code ; then >+ calculate_partitioning >+ create_${NANO_ARCH}_code_slice >+ if $do_image ; then >+ create_${NANO_ARCH}_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