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=
|
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
|
||||||
|
Reference in New Issue
Block a user