WIP; SD card can be fully prepared on any linux PC (cmdline.txt change, resize second partition)
This commit is contained in:
@@ -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
|
||||
|
Reference in New Issue
Block a user