diff --git a/seqs/raspberry.sh b/seqs/raspberry.sh index 6183d2c..2c0c104 100755 --- a/seqs/raspberry.sh +++ b/seqs/raspberry.sh @@ -33,6 +33,7 @@ SDDEV= SDBOOT= SDBOOTPUUID= SDROOT= +SDROOTDEV= SDROOTPUUID= HDDEV= HDROOT= @@ -72,15 +73,17 @@ step_2() { step setup fi if [ ! -f "$downImgName" ] ; then - echoerr " [E] No raspios image found" - return 1 + endReturn -o 1 "No raspios image found" + fi + + if [ $(id -u) -ne 0 ] ; then + endReturn -o 1 "No root" fi read_sd_dev "$2" # check if device was confirmed if [ $? -ne 0 ] ; then - echoerr " [E] SD card device not found" - return 1 + endReturn -o 1 "SD card device not found" fi # write image @@ -146,43 +149,112 @@ step_4_info() { if [ ! -z $3 ] ; then hd="HD: \"$3\"" fi - echo "TODO Prepare $sd to boot from $hd" + echo "Prepare $sd to boot from $hd" } step_4_alias() { ALIAS="hdboot"; } step_4() { - #TODO - echoerr " [E] Not ready yet...TODO" - #return 1 read_sd_dev "$2" endReturn -o $? "SD detection error $?" + read_hd_dev "$3" + endReturn -o $? "HD detection error" echo " [I] SD: $SDDEV" echo " $SDBOOT [$SDBOOTPUUID]" echo " $SDROOT [$SDROOTPUUID]" - - read_hd_dev "$3" - endReturn -o $? "HD detection error" echo " [I] HD: $HDDEV" echo " $HDROOT [$HDROOTPUUID]" echo " $HDSWAP [$HDSWAPPUUID]" echo - echo " [I] modify PARTUUID of $SDBOOT/cmdline.txt" - if [ -z $HDROOTPUUID ] ; then - echo " root=PARTUUID=******00-01" + # Point boot command line to SSD + echo -n " [I] modify PARTUUID of $SDBOOT/cmdline.txt" + if [ ! -z $HDROOTPUUID ] ; then + exe sed -i -E "s/root=PARTUUID=[a-f0-9-]+/root=PARTUUID=${HDROOTPUUID}/" "$SDBOOT/cmdline.txt" + if [ $? -eq 0 ] ; then + echo " ... Ok" + else + echo -e "\n Failed! Replace PARTUUID manually" + fi else - echo " root=PARTUUID=$HDROOTPUUID" + echo " Replace \"root=PARTUUID=******00-01\" manually" fi - echo " remove \"init=/usr/lib/raspi-config/init_resize.sh\"" + + # Disable initial resizing of the second partition + echo -n " [I] remove \"init=/usr/lib/raspi-config/init_resize.sh\"" + exe sed -i -E "s/[ ]*init=.*\/init_resize\.sh//" "$SDBOOT/cmdline.txt" + if [ $? -eq 0 ] ; then + echo " ... Ok" + else + echo -e "\n Failed! Remove init=... manually" + fi + + # Save modifications for HD boot + exe cp -ar "$SDBOOT"/cmdline.txt "$SDBOOT"/cmdline.txt.hd echo + + # Resize second partition of SD to max. possible size + echo " [I] Resize root partion of SD: ${SDROOT} " + step resizesd "$SDDEV" + if [ $? -ne 0 ] ; then + echoerr " [W] Something seems to have failed during resize" + else + # Disable init script to resize SD + echo -n " [I] remove \"init=\" part from $SDBOOT/cmdline.txt.sd" + exe sed -i -E "s/[ ]*init=.*\/init_resize\.sh//" "$SDBOOT/cmdline.txt.sd" + if [ $? -eq 0 ] ; then + echo " ... Ok" + else + echo -e "\n Failed! Remove init=... manually" + fi + fi +} + +step_5_info() { + local sd="[SD CARD DEVICE]" + local hd="[HD DEVICE]" + if [ ! -z $2 ] ; then + sd="SD: \"$2\"" + fi + if [ ! -z $3 ] ; then + hd="HD: \"$3\"" + fi + echo "Prepare HD for boot $sd $hd (TODO)" +} +step_5() { + #TODO + echoerr " [E] Not ready yet...TODO" + #return 1 + read_sd_dev "$2" + endReturn -o $? "SD detection error $?" + + read_hd_dev "$3" + endReturn -o $? "HD detection error" + echo " [I] SD: $SDDEV" + echo " $SDBOOT [$SDBOOTPUUID]" + echo " $SDROOT [$SDROOTPUUID]" + echo " [I] HD: $HDDEV" + echo " $HDROOT [$HDROOTPUUID]" + echo " $HDSWAP [$HDSWAPPUUID]" + echo + + # TODO how to partition HD + echo " [I] $HDDEV is expected to be partitioned with root and swap" + echo " TODO create a step for partitioning script support?!" + echo + + # Initial rsync of system to HD echo " [I] Clone SD root to HD root:" echo " rsync -avxHAX --numeric-ids --info=stats2 $SDROOT/ $HDROOT/" echo + + # Modify fstab on HD for root and swap on HD echo " [I] modify $HDROOT/etc/fstab" echo " PARTUUID=$SDBOOTPUUID /boot vfat ro,defaults 0 2" echo " PARTUUID=$SDROOTPUUID /backup ext4 ro,defaults,noatime 0 2" echo " PARTUUID=$HDROOTPUUID / ext4 defaults,noatime 0 1" echo " PARTUUID=$HDSWAPPUUID none swap sw 0 0" echo + + # etc echo " [I] modify $HDROOT/etc/dhcpcd.conf for static IPs" } @@ -207,22 +279,33 @@ step_20() { } rpiSwapFile="/var/swap" -step_22_info() { echo "Resize second SD card partition [MOUNTPOINT]"; } +step_22_info() { echo "Resize second SD card partition [SD CARD DEVICE]"; } step_22_alias() { ALIAS="resizesd"; } step_22() { - local mountP="$resizeMount" - if [ ! -z $2 ] && [ "$2" != "" ] && [ "$2" != "/" ] ; then - mountP=$2 + shift + read_sd_dev "$1" + if [ -z $SDDEV ] || [ "$SDDEV" = "" ] || [ "$SDROOT" == "/" ] ; then + echoerr " [E] No SD found" + return 1 fi - exe umount -q "$mountP" - exe parted -s "$resizeDevice" "resizepart $resizePartNo -1" quit - exe resize2fs "$resizePart" - exe mount "$mountP" + echo " [I] Device to be resized: $SDROOTDEV" + + exe umount -q "$SDROOT" + exe parted -s "$SDDEV" "resizepart $SDROOTPARTNO -1" quit + saveReturn $? + exe e2fsck -f "$SDROOTDEV" + saveReturn $? + exe resize2fs "$SDROOTDEV" + saveReturn $? + if [ -z $SDROOT ] ; then + read -p "Please provide a mountpoint: " SDROOT + exe mkdir -p "$SDROOT" + fi + exe mount "$SDROOTDEV" "$SDROOT" + saveReturn $? + getReturn + return $? } -resizeMount="/backup" -resizeDevice="/dev/mmcblk0" -resizePartNo=2 -resizePart="${resizeDevice}p${resizePartNo}" step_24_info() { echo "Turn off power LED [OPTION]" @@ -253,11 +336,14 @@ step_26_alias() { ALIAS="netrestart"; } step_26() { exep "sudo ip link set eth0 down && sudo ip link set eth0 up" } + + read_sd_dev() { local partExt="" if [ ! -z "$1" ] ; then SDBOOT= SDROOT= + SDROOTDEV= SDROOTPUUID= SDBOOTPUUID= SDDEV="$1" @@ -265,6 +351,7 @@ read_sd_dev() { SDDEV= SDBOOT= SDROOT= + SDROOTDEV= SDBOOTPUUID= SDROOTPUUID= echo " [I] Available devices:" @@ -285,21 +372,24 @@ read_sd_dev() { fi if [ -z $SDBOOT ] ; then - SDBOOT=$(findmnt -no TARGET "${SDDEV}${partExt}1") + SDBOOT=$(findmnt -no TARGET "${SDDEV}${partExt}${SDBOOTPARTNO}") fi if [ -z $SDBOOTPUUID ] ; then - IFS=\" read -r _ vPARTUUID _ < <(blkid "${SDDEV}${partExt}1" -s PARTUUID) + IFS=\" read -r _ vPARTUUID _ < <(blkid "${SDDEV}${partExt}${SDBOOTPARTNO}" -s PARTUUID) SDBOOTPUUID=$vPARTUUID fi + SDROOTDEV=${SDDEV}${partExt}${SDROOTPARTNO} if [ -z $SDROOT ] ; then - SDROOT=$(findmnt -no TARGET "${SDDEV}${partExt}2") + SDROOT=$(findmnt -no TARGET "${SDROOTDEV}") fi if [ -z $SDROOTPUUID ] ; then - SDROOTPUUID=$(findmnt -no PARTUUID "${SDDEV}${partExt}2") + SDROOTPUUID=$(findmnt -no PARTUUID "${SDROOTDEV}") fi return 0 } +SDBOOTPARTNO=1 +SDROOTPARTNO=2 read_hd_dev() { if [ ! -z "$1" ] ; then