From fb043b7475fe270a55661c9f5410ed9b6b436f5a Mon Sep 17 00:00:00 2001 From: Jan Schneider Date: Sun, 13 May 2018 00:26:38 +0200 Subject: [PATCH] update_script to repartition --- addon/update_script_repartition | 99 +++++++++++++++++++++++++-------- 1 file changed, 76 insertions(+), 23 deletions(-) diff --git a/addon/update_script_repartition b/addon/update_script_repartition index f6146b4..db57c7c 100644 --- a/addon/update_script_repartition +++ b/addon/update_script_repartition @@ -1,35 +1,88 @@ #/bin/sh -fwinstall.sh - -exit 0 - DISK="/dev/mmcblk0" BOOT_SIZE=268435456 ROOT_SIZE=1073741824 -boot_start=$(parted $disk unit B print | grep '^ 1' | sed -n 's/ [1-4] *\([0-9]*\)B *\([0-9]*\)B.*/\1/p') -user_start=$(parted $disk unit B print | grep '^ 4' | sed -n 's/ [1-4] *\([0-9]*\)B *\([0-9]*\)B.*/\1/p') -user_end=$(parted $disk unit B print | grep '^ 4' | sed -n 's/ [1-4] *\([0-9]*\)B *\([0-9]*\)B.*/\2/p') +echo "Deleting update_script.
" 1>&2 +mount -o remount,rw /userfs +rm -f "$0" +mount -o remount,ro /userfs -boot_end=$(($boot_start+$BOOT_SIZE-1)) -root_start=$(($boot_end+1)) -root_end=$(($root_start+$ROOT_SIZE-1)) +echo "Checking for rootfs2 on $DISK.
" 1>&2 -#echo $boot_start - $boot_end -#echo $root_start - $root_end -#echo $user_start - $user_end +function start_sshd() { + echo "Starting ssh daemon.
" 1>&2 + mount -o remount,rw /bootfs + echo -n "rmupdate" > /bootfs/recoveryfs-sshpwd + mount -o remount,ro /bootfs + /etc/init.d/S50sshd start +} -parted --script $disk \ - mklabel msdos \ - mkpart primary fat32 ${boot_start}B ${boot_end}B \ - set 1 boot on \ - mkpart primary ext4 ${root_start}B ${root_end}B \ - mkpart primary ext4 ${user_start}B ${user_end}B - -partprobe - -rm "$0" +if blkid ${DISK}p3 | grep 'LABEL="rootfs2"' 1>/dev/null 2>/dev/null; then + echo "Rootfs2 found.
" 1>&2 + + start_sshd + + cp /bootfs/VERSION /tmp/bootfs.VERSION + umount /bootfs + umount /rootfs + + echo "Current partition table:
" 1>&2 + parted $DISK unit B print | sed ':a;N;$!ba;s#\n#
#g' 1>&2 + + boot_start=$(parted $DISK unit B print | grep '^ 1' | sed -n 's/ [1-4] *\([0-9]*\)B *\([0-9]*\)B.*/\1/p') + user_start=$(parted $DISK unit B print | grep '^ 4' | sed -n 's/ [1-4] *\([0-9]*\)B *\([0-9]*\)B.*/\1/p') + user_end=$(parted $DISK unit B print | grep '^ 4' | sed -n 's/ [1-4] *\([0-9]*\)B *\([0-9]*\)B.*/\2/p') + + boot_end=$(($boot_start+$BOOT_SIZE-1)) + root_start=$(($boot_end+1)) + root_end=$(($root_start+$ROOT_SIZE-1)) + + boot_start_s=$((${boot_start}/512)) + boot_size_s=$(((${boot_end}-${boot_start}+1)/512)) + root_start_s=$((${root_start}/512)) + root_size_s=$(((${root_end}-${root_start}+1)/512)) + user_start_s=$((${user_start}/512)) + user_size_s=$(((${user_end}-${user_start}+1)/512)) + + echo "Calculated new partition layout:
" 1>&2 + echo " bootfs: $boot_start ($boot_start_s) - $boot_end - $boot_size_s
" 1>&2 + echo " rootfs: $root_start ($root_start_s) - $root_end - $root_size_s
" 1>&2 + echo " userfs: $user_start ($user_start_s) - $user_end - $user_size_s
" 1>&2 + + echo "Writing new partition table to disk.
" 1>&2 + # parted will refuse to write partition table because partitions are mounted + #parted --script $DISK \ + # mklabel msdos \ + # mkpart primary fat32 ${boot_start}B ${boot_end}B \ + # set 1 boot on \ + # mkpart primary ext4 ${root_start}B ${root_end}B \ + # mkpart primary ext4 ${user_start}B ${user_end}B + + { + echo "$boot_start_s,$boot_size_s,0x0C,*" + echo "$root_start_s,$root_size_s,0x83" + echo "$user_start_s,$user_size_s,0x83" + ,0 + } | sfdisk --no-reread --force --wipe=always --label=dos $DISK 2>&1 | sed ':a;N;$!ba;s#\n#
#g' 1>&2 + + # Use dd to write label id + printf "\xde\xed\xbe\xef" | dd of=$DISK bs=1 count=4 seek=440 + + #echo "New partition table:
" 1>&2 + #parted $DISK unit B print | sed ':a;N;$!ba;s#\n#
#g' 1>&2 + + partprobe + + # RaspberryMatic will check for label rootfs and VERSION file + mkfs.ext4 -L rootfs ${DISK}p2 + mount ${DISK}p2 /rootfs + cp /tmp/bootfs.VERSION /rootfs/VERSION + umount /rootfs +fi +echo "Running fwinstall.sh (again).
" 1>&2 +rm -f /tmp/.runningFirmwareUpdate fwinstall.sh