@ -163,6 +163,8 @@ let format' = format; in let
closureInfo = pkgs . closureInfo { rootPaths = [ config . system . build . toplevel channelSources ] ; } ;
blockSize = toString ( 4 * 1024 ) ; # ext4fs block size (not block device sector size)
prepareImage = ''
export PATH = $ { binPath }
@ -175,6 +177,15 @@ let format' = format; in let
echo $ ( ( " $ 1 " * 512 ) )
}
# Given lines of numbers, adds them together
sum_lines ( ) {
local acc = 0
while read - r number ; do
acc = $ ( ( acc + number ) )
done
echo " $ a c c "
}
mkdir $ out
root = " $ P W D / r o o t "
@ -235,12 +246,23 @@ let format' = format; in let
$ { if diskSize == " a u t o " then ''
$ { if partitionTableType == " e f i " || partitionTableType == " h y b r i d " then ''
additionalSpace = $ ( ( ( $ ( numfmt - - from = iec ' $ { additionalSpace } ' ) + $ ( numfmt - - from = iec ' $ { bootSize } ' ) ) / 1000 ) )
additionalSpace = $ ( ( ( $ ( numfmt - - from = iec ' $ { additionalSpace } ' ) + $ ( numfmt - - from = iec ' $ { bootSize } ' ) ) ) )
'' e l s e ''
additionalSpace = $ ( ( $ ( numfmt - - from = iec ' $ { additionalSpace } ' ) / 1000 ) )
additionalSpace = $ ( ( $ ( numfmt - - from = iec ' $ { additionalSpace } ' ) ) )
'' }
diskSize = $ ( ( $ ( set - - $ ( du - d0 $ root ) ; echo " $ 1 " ) + $ additionalSpace ) )
truncate - s " $ d i s k S i z e " K $ diskImage
# Compute required space in filesystem blocks
requiredSpace = $ ( find . ! - type d - exec ' du' ' - - apparent-size' ' - - block-size' " ${ blockSize } " ' { } ' ' ; ' | cut - f1 | sum_lines )
# Convert to bytes
requiredSpace = $ ( ( requiredSpace * $ { blockSize } ) )
diskSize = $ ( ( requiredSpace + additionalSpace ) )
truncate - s " $ d i s k S i z e " $ diskImage
printf " A u t o m a t i c d i s k s i z e . . . \n "
printf " S p a c e n e e d e d : % d b y t e s \n " $ requiredSpace
printf " A d d i t i o n a l s p a c e : % d b y t e s \n " $ additionalSpace
printf " D i s k i m a g e s i z e : % d b y t e s \n " $ diskSize
'' e l s e ''
truncate - s $ { toString diskSize } M $ diskImage
'' }
@ -251,9 +273,9 @@ let format' = format; in let
# Get start & length of the root partition in sectors to $START and $SECTORS.
eval $ ( partx $ diskImage - o START , SECTORS - - nr $ { rootPartition } - - pairs )
mkfs . ${ fsType } - F - L $ { label } $ diskImage - E offset = $ ( sectorsToBytes $ START ) $ ( sectorsToKilobytes $ SECTORS ) K
mkfs . ${ fsType } - b $ { blockSize } - F - L $ { label } $ diskImage - E offset = $ ( sectorsToBytes $ START ) $ ( sectorsToKilobytes $ SECTORS ) K
'' e l s e ''
mkfs . ${ fsType } - F - L $ { label } $ diskImage
mkfs . ${ fsType } - b $ { blockSize } - F - L $ { label } $ diskImage
'' }
echo " c o p y i n g s t a g i n g r o o t t o i m a g e . . . "