WIP; SD card can be fully prepared on any linux PC (cmdline.txt change, resize second partition)

This commit is contained in:
2020-12-23 23:39:51 +01:00
parent 0a92b49cc7
commit 8d96d7e38a

View File

@@ -33,6 +33,7 @@ SDDEV=
SDBOOT= SDBOOT=
SDBOOTPUUID= SDBOOTPUUID=
SDROOT= SDROOT=
SDROOTDEV=
SDROOTPUUID= SDROOTPUUID=
HDDEV= HDDEV=
HDROOT= HDROOT=
@@ -72,15 +73,17 @@ step_2() {
step setup step setup
fi fi
if [ ! -f "$downImgName" ] ; then if [ ! -f "$downImgName" ] ; then
echoerr " [E] No raspios image found" endReturn -o 1 "No raspios image found"
return 1 fi
if [ $(id -u) -ne 0 ] ; then
endReturn -o 1 "No root"
fi fi
read_sd_dev "$2" read_sd_dev "$2"
# check if device was confirmed # check if device was confirmed
if [ $? -ne 0 ] ; then if [ $? -ne 0 ] ; then
echoerr " [E] SD card device not found" endReturn -o 1 "SD card device not found"
return 1
fi fi
# write image # write image
@@ -146,43 +149,112 @@ step_4_info() {
if [ ! -z $3 ] ; then if [ ! -z $3 ] ; then
hd="HD: \"$3\"" hd="HD: \"$3\""
fi fi
echo "TODO Prepare $sd to boot from $hd" echo "Prepare $sd to boot from $hd"
} }
step_4_alias() { ALIAS="hdboot"; } step_4_alias() { ALIAS="hdboot"; }
step_4() { step_4() {
#TODO
echoerr " [E] Not ready yet...TODO"
#return 1
read_sd_dev "$2" read_sd_dev "$2"
endReturn -o $? "SD detection error $?" endReturn -o $? "SD detection error $?"
read_hd_dev "$3"
endReturn -o $? "HD detection error"
echo " [I] SD: $SDDEV" echo " [I] SD: $SDDEV"
echo " $SDBOOT [$SDBOOTPUUID]" echo " $SDBOOT [$SDBOOTPUUID]"
echo " $SDROOT [$SDROOTPUUID]" echo " $SDROOT [$SDROOTPUUID]"
read_hd_dev "$3"
endReturn -o $? "HD detection error"
echo " [I] HD: $HDDEV" echo " [I] HD: $HDDEV"
echo " $HDROOT [$HDROOTPUUID]" echo " $HDROOT [$HDROOTPUUID]"
echo " $HDSWAP [$HDSWAPPUUID]" echo " $HDSWAP [$HDSWAPPUUID]"
echo echo
echo " [I] modify PARTUUID of $SDBOOT/cmdline.txt" # Point boot command line to SSD
if [ -z $HDROOTPUUID ] ; then echo -n " [I] modify PARTUUID of $SDBOOT/cmdline.txt"
echo " root=PARTUUID=******00-01" 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 else
echo " root=PARTUUID=$HDROOTPUUID" echo " Replace \"root=PARTUUID=******00-01\" manually"
fi 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 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 " [I] Clone SD root to HD root:"
echo " rsync -avxHAX --numeric-ids --info=stats2 $SDROOT/ $HDROOT/" echo " rsync -avxHAX --numeric-ids --info=stats2 $SDROOT/ $HDROOT/"
echo echo
# Modify fstab on HD for root and swap on HD
echo " [I] modify $HDROOT/etc/fstab" echo " [I] modify $HDROOT/etc/fstab"
echo " PARTUUID=$SDBOOTPUUID /boot vfat ro,defaults 0 2" echo " PARTUUID=$SDBOOTPUUID /boot vfat ro,defaults 0 2"
echo " PARTUUID=$SDROOTPUUID /backup ext4 ro,defaults,noatime 0 2" echo " PARTUUID=$SDROOTPUUID /backup ext4 ro,defaults,noatime 0 2"
echo " PARTUUID=$HDROOTPUUID / ext4 defaults,noatime 0 1" echo " PARTUUID=$HDROOTPUUID / ext4 defaults,noatime 0 1"
echo " PARTUUID=$HDSWAPPUUID none swap sw 0 0" echo " PARTUUID=$HDSWAPPUUID none swap sw 0 0"
echo echo
# etc
echo " [I] modify $HDROOT/etc/dhcpcd.conf for static IPs" echo " [I] modify $HDROOT/etc/dhcpcd.conf for static IPs"
} }
@@ -207,22 +279,33 @@ step_20() {
} }
rpiSwapFile="/var/swap" 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_alias() { ALIAS="resizesd"; }
step_22() { step_22() {
local mountP="$resizeMount" shift
if [ ! -z $2 ] && [ "$2" != "" ] && [ "$2" != "/" ] ; then read_sd_dev "$1"
mountP=$2 if [ -z $SDDEV ] || [ "$SDDEV" = "" ] || [ "$SDROOT" == "/" ] ; then
echoerr " [E] No SD found"
return 1
fi fi
exe umount -q "$mountP" echo " [I] Device to be resized: $SDROOTDEV"
exe parted -s "$resizeDevice" "resizepart $resizePartNo -1" quit
exe resize2fs "$resizePart" exe umount -q "$SDROOT"
exe mount "$mountP" 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() { step_24_info() {
echo "Turn off power LED [OPTION]" echo "Turn off power LED [OPTION]"
@@ -253,11 +336,14 @@ step_26_alias() { ALIAS="netrestart"; }
step_26() { step_26() {
exep "sudo ip link set eth0 down && sudo ip link set eth0 up" exep "sudo ip link set eth0 down && sudo ip link set eth0 up"
} }
read_sd_dev() { read_sd_dev() {
local partExt="" local partExt=""
if [ ! -z "$1" ] ; then if [ ! -z "$1" ] ; then
SDBOOT= SDBOOT=
SDROOT= SDROOT=
SDROOTDEV=
SDROOTPUUID= SDROOTPUUID=
SDBOOTPUUID= SDBOOTPUUID=
SDDEV="$1" SDDEV="$1"
@@ -265,6 +351,7 @@ read_sd_dev() {
SDDEV= SDDEV=
SDBOOT= SDBOOT=
SDROOT= SDROOT=
SDROOTDEV=
SDBOOTPUUID= SDBOOTPUUID=
SDROOTPUUID= SDROOTPUUID=
echo " [I] Available devices:" echo " [I] Available devices:"
@@ -285,21 +372,24 @@ read_sd_dev() {
fi fi
if [ -z $SDBOOT ] ; then if [ -z $SDBOOT ] ; then
SDBOOT=$(findmnt -no TARGET "${SDDEV}${partExt}1") SDBOOT=$(findmnt -no TARGET "${SDDEV}${partExt}${SDBOOTPARTNO}")
fi fi
if [ -z $SDBOOTPUUID ] ; then 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 SDBOOTPUUID=$vPARTUUID
fi fi
SDROOTDEV=${SDDEV}${partExt}${SDROOTPARTNO}
if [ -z $SDROOT ] ; then if [ -z $SDROOT ] ; then
SDROOT=$(findmnt -no TARGET "${SDDEV}${partExt}2") SDROOT=$(findmnt -no TARGET "${SDROOTDEV}")
fi fi
if [ -z $SDROOTPUUID ] ; then if [ -z $SDROOTPUUID ] ; then
SDROOTPUUID=$(findmnt -no PARTUUID "${SDDEV}${partExt}2") SDROOTPUUID=$(findmnt -no PARTUUID "${SDROOTDEV}")
fi fi
return 0 return 0
} }
SDBOOTPARTNO=1
SDROOTPARTNO=2
read_hd_dev() { read_hd_dev() {
if [ ! -z "$1" ] ; then if [ ! -z "$1" ] ; then