FIRSBOOT: add extra p5 for ROMS (use GPT) & add option for switching FS (#168)

* BOARD: firstboot:  use ext4 for p1 explicitly
* BOARD: /etc/main : update fsck scripts
* BOARD: inittab: 
 - add /roms in p5
 - mount RO /boot in async (default)
* BOARD: genimage.sh: gen ROMS EXT4 image
* BAORD: prebuild.sh: 
 - create mount point for ROMS
 - increase MAIN & ROMS block size
 - the size of /mnt is "hardcoded" after image creation
 - we need real space for backup manipulation in ROMS
* BOARD: mv roms upward
* BOARD: firstboot: add p5 ROMS and resize
* BOARD: genimage-sdcard.cfg: 
 - use GPT
 - add p5 for roms

* PACKAGE/BOARD: patch/genimage: down-size gpt table
* PACKAGE/DEFCONFIG: add `gptfdisk` package to shared
* BOARD: firstboot: allow for switching FS type in MAIN and ROMS
* README: update firstboot_procedure.drawio.png
  - add FS change boxes and IPK installer
* BOARD: firstboot: not mandatory to resize for IPK manager
* DEFCONFIG: add default kernel patching
* DEFCONFIG: uppercase rootfs label
* BOARD: umtpr: uppercas partition LABELS
* DEFCONFIG/PACKAGE: add RSYNC pkg
* BOARD: mount FAT p5 in async (default)

* BOARD: add ROMS icons for Win
Co-Authored-By: TriForce <triforce@gznetwork.com>
This commit is contained in:
Apaczer
2025-05-18 16:27:05 +02:00
committed by GitHub
parent ae9408c067
commit bb94014294
24 changed files with 348 additions and 126 deletions

View File

@@ -1,5 +1,4 @@
#!/bin/busybox sh
MOUNTDIR=/boot
export TERM=linux
# expect to be run from /boot, where the boot partition is mounted (readonly)
@@ -15,12 +14,10 @@ echo -e "\e[32m" # green
echo "firstboot script running..." | tee -a ${LOG}
echo
BASEDIR="${MOUNTDIR}"
# run a custom script if present - could be used to fix u-boot and such
if test -r "${BASEDIR}/firstboot.custom.sh"; then
if test -r "${BOOTDIR}/firstboot.custom.sh"; then
echo "Running a specific firstboot script..." | tee -a ${LOG}
(cd "${BASEDIR}" && sh firstboot.custom.sh) | tee -a ${LOG}
(cd "${BOOTDIR}" && sh firstboot.custom.sh) | tee -a ${LOG}
echo "Finished running a specific firstboot script." | tee -a ${LOG}
fi
@@ -44,7 +41,7 @@ consequences arising from the use or misuse of this software.
TEMP=$(mktemp)
## Access /boot directory
mount -o remount,rw "${MOUNTDIR}" | tee -a ${LOG}
mount -o remount,rw "${BOOTDIR}" | tee -a ${LOG}
# list of available devices in u-boot Environment parameters' read from FORCE_VERSION
devices_ID="
@@ -109,8 +106,8 @@ done
# try to read what handheld we're on when calling func
console_var_func(){
if (test -r "${MOUNTDIR}/console.cfg"); then
source "${MOUNTDIR}/console.cfg"
if (test -r "${BOOTDIR}/console.cfg"); then
source "${BOOTDIR}/console.cfg"
else
export CONSOLE_VARIANT="unknown"
fi
@@ -129,7 +126,7 @@ safe_shutdown_func(){
mv ${LOG} ${HOME}/log_firstboot.txt
sync
sleep 1
mount -o remount,ro "${MOUNTDIR}" | tee -a ${LOG}
mount -o remount,ro "${BOOTDIR}" | tee -a ${LOG}
umount /dev/mmcblk0p4 | tee -a ${LOG}
#umount /dev/mmcblk0p1 | tee -a ${LOG} # this fails
sleep 4
@@ -148,14 +145,14 @@ safe_poweroff_func(){
}
console_unknown_func(){
echo "CONSOLE_VARIANT=unknown" > ${MOUNTDIR}/console.cfg
echo "##DO_NOT_REMOVE_THIS_LINE##" >> ${MOUNTDIR}/console.cfg
echo "CONSOLE_VARIANT=unknown" > ${BOOTDIR}/console.cfg
echo "##DO_NOT_REMOVE_THIS_LINE##" >> ${BOOTDIR}/console.cfg
}
## Default CONSOLE_VARIANT for st7789s screens
default_console_func(){
echo "CONSOLE_VARIANT=pocketgo" > ${MOUNTDIR}/console.cfg
cp ${MOUNTDIR}/suniv-f1c100s-miyoo-4bit.dtb ${MOUNTDIR}/suniv-f1c100s-miyoo.dtb
echo "CONSOLE_VARIANT=pocketgo" > ${BOOTDIR}/console.cfg
cp ${BOOTDIR}/suniv-f1c100s-miyoo-4bit.dtb ${BOOTDIR}/suniv-f1c100s-miyoo.dtb
# No need to overwrite uboot FORCE version for default so continue procedure
CONSOLE_OVERWRITE=false
}
@@ -192,7 +189,7 @@ test_video_func(){
# "YES" choice for Test_Video msgbox DIALOG_EXTRA exit code
if test $CHOICE -eq 3; then
# Correct variant for st7789s (non forced)
echo "CONSOLE_VARIANT=st7789s" > ${MOUNTDIR}/console.cfg
echo "CONSOLE_VARIANT=st7789s" > ${BOOTDIR}/console.cfg
# "Flipped!" choice for Test_Video msgbox DIALOG_CANCEL exit code
elif test $CHOICE -eq 1; then
# Test_Flip-prompt double checks if user selected correct answer for 1'st video test
@@ -200,7 +197,7 @@ test_video_func(){
# "NO" or timeout choice for Test_Video msgbox thus DIALOG_OK exit code
elif test $CHOICE -eq 0; then
# Correct variant for bittboy2x_v1 (non forced)
echo "CONSOLE_VARIANT=bittboy" > ${MOUNTDIR}/console.cfg
echo "CONSOLE_VARIANT=bittboy" > ${BOOTDIR}/console.cfg
safe_reboot_func
# Error (DIALOG_ERROR) or ESCAPE button pressed (DIALOG_ESCAPE) thus exit code -1/255
else
@@ -219,7 +216,7 @@ test_video2_func(){
# "YES" choice for Test_Video'2 msgbox DIALOG_CANCEL exit code
## thus we have valid version, just update to FORCE_VERSION and continue
if test $CHOICE -eq 1; then
echo "CONSOLE_VARIANT=bittboy2x_v1" > ${MOUNTDIR}/console.cfg
echo "CONSOLE_VARIANT=bittboy2x_v1" > ${BOOTDIR}/console.cfg
# "NO" or timeout choice for Test_Video msgbox thus DIALOG_OK exit code 0 (or ERROR/ESCAPE with -1/255)
## correct variant to unknown and redo whole flashing_prd again
else
@@ -240,28 +237,28 @@ test_keyboard_func(){
## thus we have valid version, just update to FORCE_VERSION and continue
if test $CHOICE -eq 1; then
if test "$CONSOLE_VARIANT" == "bittboy3"; then
echo "CONSOLE_VARIANT=bittboy3.5" > ${MOUNTDIR}/console.cfg
echo "CONSOLE_VARIANT=bittboy3.5" > ${BOOTDIR}/console.cfg
elif test "$CONSOLE_VARIANT" == "bittboy2"; then
echo "CONSOLE_VARIANT=bittboy2x_v2" > ${MOUNTDIR}/console.cfg
echo "CONSOLE_VARIANT=bittboy2x_v2" > ${BOOTDIR}/console.cfg
elif test "$CONSOLE_VARIANT" == "xyc"; then
echo "CONSOLE_VARIANT=xyc_gc9306" > ${MOUNTDIR}/console.cfg
echo "CONSOLE_VARIANT=xyc_gc9306" > ${BOOTDIR}/console.cfg
# Test_Image-prompt if proper "invert" colors parameter was loaded:
INVERSION=1 #applied only if colors are inverted
test_image_func
elif test "$CONSOLE_VARIANT" == "m3"; then
echo "CONSOLE_VARIANT=m3_gc9306" > ${MOUNTDIR}/console.cfg
echo "CONSOLE_VARIANT=m3_gc9306" > ${BOOTDIR}/console.cfg
fi
# "NO" or timeout choice for Test_Keyboard msgbox DIALOG_OK exit code
## thus correct Auto-Detection variant and reboot
elif test $CHOICE -eq 0; then
if test "$CONSOLE_VARIANT" == "bittboy3"; then
echo "CONSOLE_VARIANT=bittboy2" > ${MOUNTDIR}/console.cfg
echo "CONSOLE_VARIANT=bittboy2" > ${BOOTDIR}/console.cfg
elif test "$CONSOLE_VARIANT" == "bittboy2"; then
console_unknown_func
elif test "$CONSOLE_VARIANT" == "xyc"; then
console_unknown_func
elif test "$CONSOLE_VARIANT" == "m3"; then
echo "CONSOLE_VARIANT=xyc" > ${MOUNTDIR}/console.cfg
echo "CONSOLE_VARIANT=xyc" > ${BOOTDIR}/console.cfg
fi
safe_reboot_func
# Error (DIALOG_ERROR) or ESCAPE button pressed (DIALOG_ESCAPE) thus exit code -1/255
@@ -289,7 +286,7 @@ test_variant_func(){
test_flip_func(){
if (dialog --backtitle "MiyooCFW 2.0" --no-shadow --stdout --ok-label YES --cancel-label NO --title "Test Flip" --pause " \n Flipped? \n\nAre you sure?!" 12 15 10); then
# Correct variant for bittboy3.5 (non forced) and display info about flipped image
echo "CONSOLE_VARIANT=bittboy3" > ${MOUNTDIR}/console.cfg
echo "CONSOLE_VARIANT=bittboy3" > ${BOOTDIR}/console.cfg
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 2 --msgbox "Image flipped! correct&reboot" 0 0
sleep 1.5
#TODO: use special Unicode characters to draw text upside-down e.g.:
@@ -303,14 +300,14 @@ test_flip_func(){
#Checking if device at hand is operational within flashing procedure
CONSOLE_DETECTED=false
if (grep -qE "${DETECTED_1}|${DETECTED_2}|${DETECTED_3}|${DETECTED_4}|${DETECTED_5}|${DETECTED_6}|${DETECTED_7}|${DETECTED_8}|${DETECTED_9}|${DETECTED_10}" "${MOUNTDIR}/uEnv.txt"); then
if (grep -qE "${DETECTED_1}|${DETECTED_2}|${DETECTED_3}|${DETECTED_4}|${DETECTED_5}|${DETECTED_6}|${DETECTED_7}|${DETECTED_8}|${DETECTED_9}|${DETECTED_10}" "${BOOTDIR}/uEnv.txt"); then
CONSOLE_DETECTED=true
fi
# I - Test_Block
detect_console_func
if ! $FOUND_CONSOLE && ! $FOUND_CONSOLE_AUTO && $CONSOLE_DETECTED; then
if (grep -q "$DETECTED_1" "${MOUNTDIR}/uEnv.txt"); then
if (grep -q "$DETECTED_1" "${BOOTDIR}/uEnv.txt"); then
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 3 --msgbox "Auto-Detected $DETECTED_1" 0 0
# Test_Video-prompt if proper miyoo video's version driver was loaded:
## Loop Test_Video until correct selection has been performed (CHOICE=0/3)
@@ -321,36 +318,36 @@ if ! $FOUND_CONSOLE && ! $FOUND_CONSOLE_AUTO && $CONSOLE_DETECTED; then
break
fi
done
elif (grep -q "$DETECTED_2" "${MOUNTDIR}/uEnv.txt"); then
elif (grep -q "$DETECTED_2" "${BOOTDIR}/uEnv.txt"); then
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 3 --msgbox "Auto-Detected $DETECTED_2" 0 0
echo "CONSOLE_VARIANT=m3" > ${MOUNTDIR}/console.cfg
elif (grep -q "$DETECTED_3" "${MOUNTDIR}/uEnv.txt"); then
echo "CONSOLE_VARIANT=m3" > ${BOOTDIR}/console.cfg
elif (grep -q "$DETECTED_3" "${BOOTDIR}/uEnv.txt"); then
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 3 --msgbox "Auto-Detected $DETECTED_3" 0 0
echo "CONSOLE_VARIANT=m3_r61520" > ${MOUNTDIR}/console.cfg
echo "CONSOLE_VARIANT=m3_r61520" > ${BOOTDIR}/console.cfg
# Test_Image-prompt if proper "invert" colors parameter was loaded:
INVERSION=0 #applied only if colors are inverted
test_image_func
# look in II Test block for following DETECTED versions as these imply devices_auto_ID variants:
## DETECTED_4 - bittboy
## DETECTED_5 - bittboy3/2
elif (grep -q "$DETECTED_6" "${MOUNTDIR}/uEnv.txt"); then
elif (grep -q "$DETECTED_6" "${BOOTDIR}/uEnv.txt"); then
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 3 --msgbox "Auto-Detected $DETECTED_6" 0 0
echo "CONSOLE_VARIANT=m3_rm68090" > ${MOUNTDIR}/console.cfg
elif (grep -q "$DETECTED_7" "${MOUNTDIR}/uEnv.txt"); then
echo "CONSOLE_VARIANT=m3_rm68090" > ${BOOTDIR}/console.cfg
elif (grep -q "$DETECTED_7" "${BOOTDIR}/uEnv.txt"); then
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 3 --msgbox "Auto-Detected $DETECTED_7" 0 0
#echo "CONSOLE_VARIANT=r61520" > ${MOUNTDIR}/console.cfg
elif (grep -q "$DETECTED_8" "${MOUNTDIR}/uEnv.txt"); then
#echo "CONSOLE_VARIANT=r61520" > ${BOOTDIR}/console.cfg
elif (grep -q "$DETECTED_8" "${BOOTDIR}/uEnv.txt"); then
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 3 --msgbox "Auto-Detected $DETECTED_8" 0 0
#echo "CONSOLE_VARIANT=r61505w" > ${MOUNTDIR}/console.cfg
elif (grep -q "$DETECTED_9" "${MOUNTDIR}/uEnv.txt"); then
#echo "CONSOLE_VARIANT=r61505w" > ${BOOTDIR}/console.cfg
elif (grep -q "$DETECTED_9" "${BOOTDIR}/uEnv.txt"); then
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 3 --msgbox "Auto-Detected $DETECTED_9" 0 0
echo "CONSOLE_VARIANT=m3_hx8347d" > ${MOUNTDIR}/console.cfg
elif (grep -q "$DETECTED_10" "${MOUNTDIR}/uEnv.txt"); then
echo "CONSOLE_VARIANT=m3_hx8347d" > ${BOOTDIR}/console.cfg
elif (grep -q "$DETECTED_10" "${BOOTDIR}/uEnv.txt"); then
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 3 --msgbox "Auto-Detected $DETECTED_10" 0 0
#echo "CONSOLE_VARIANT=unknown-error" > ${MOUNTDIR}/console.cfg
#echo "CONSOLE_VARIANT=unknown-error" > ${BOOTDIR}/console.cfg
fi
# Overwrite CONSOLE_VARIANT from new entry
source "${MOUNTDIR}/console.cfg"
source "${BOOTDIR}/console.cfg"
fi
# II - Test_Block
@@ -361,7 +358,7 @@ detect_console_func
## test if no device specified in console.cfg
if ! $FOUND_CONSOLE && $FOUND_CONSOLE_AUTO && $CONSOLE_DETECTED; then
# show selection menu for ST7789S devices
if (test "$CONSOLE_VARIANT" == "st7789s" && grep -q "$DETECTED_1" "${MOUNTDIR}/uEnv.txt"); then
if (test "$CONSOLE_VARIANT" == "st7789s" && grep -q "$DETECTED_1" "${BOOTDIR}/uEnv.txt"); then
dialog --backtitle "MiyooCFW 2.0" --no-shadow --clear --timeout 60 --title "Select your device:" --menu " " 15 40 5 \
1 "Powkiddy Q20" \
2 "Powkiddy Q90" \
@@ -376,23 +373,23 @@ if ! $FOUND_CONSOLE && $FOUND_CONSOLE_AUTO && $CONSOLE_DETECTED; then
## Perform actions based on the user's choice
case $CHOICE in
1)
echo "CONSOLE_VARIANT=q20" > ${MOUNTDIR}/console.cfg
cp ${MOUNTDIR}/suniv-f1c100s-miyoo-4bit.dtb ${MOUNTDIR}/suniv-f1c100s-miyoo.dtb
echo "CONSOLE_VARIANT=q20" > ${BOOTDIR}/console.cfg
cp ${BOOTDIR}/suniv-f1c100s-miyoo-4bit.dtb ${BOOTDIR}/suniv-f1c100s-miyoo.dtb
;;
2)
echo "CONSOLE_VARIANT=q90" > ${MOUNTDIR}/console.cfg
cp ${MOUNTDIR}/suniv-f1c100s-miyoo-4bit.dtb ${MOUNTDIR}/suniv-f1c100s-miyoo.dtb
echo "CONSOLE_VARIANT=q90" > ${BOOTDIR}/console.cfg
cp ${BOOTDIR}/suniv-f1c100s-miyoo-4bit.dtb ${BOOTDIR}/suniv-f1c100s-miyoo.dtb
;;
3)
echo "CONSOLE_VARIANT=v90" > ${MOUNTDIR}/console.cfg
cp ${MOUNTDIR}/suniv-f1c100s-miyoo-4bit.dtb ${MOUNTDIR}/suniv-f1c100s-miyoo.dtb
echo "CONSOLE_VARIANT=v90" > ${BOOTDIR}/console.cfg
cp ${BOOTDIR}/suniv-f1c100s-miyoo-4bit.dtb ${BOOTDIR}/suniv-f1c100s-miyoo.dtb
;;
4)
default_console_func
;;
5)
echo "CONSOLE_VARIANT=pocketgo_TE" > ${MOUNTDIR}/console.cfg
cp ${MOUNTDIR}/suniv-f1c100s-miyoo-4bit.dtb ${MOUNTDIR}/suniv-f1c100s-miyoo.dtb
echo "CONSOLE_VARIANT=pocketgo_TE" > ${BOOTDIR}/console.cfg
cp ${BOOTDIR}/suniv-f1c100s-miyoo-4bit.dtb ${BOOTDIR}/suniv-f1c100s-miyoo.dtb
;;
*)
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 4 --msgbox "Invalid choice. Exiting and selecting default device from autodetection." 0 0
@@ -400,10 +397,10 @@ if ! $FOUND_CONSOLE && $FOUND_CONSOLE_AUTO && $CONSOLE_DETECTED; then
sleep 0.1
;;
esac
elif (((test "$CONSOLE_VARIANT" == "bittboy2" || test "$CONSOLE_VARIANT" == "bittboy3") && grep -q "$DETECTED_5" "${MOUNTDIR}/uEnv.txt") || ((test "$CONSOLE_VARIANT" == "xyc" || test "$CONSOLE_VARIANT" == "m3") && grep -q "$DETECTED_2" "${MOUNTDIR}/uEnv.txt")); then
if (grep -q "$DETECTED_5" "${MOUNTDIR}/uEnv.txt"); then
elif (((test "$CONSOLE_VARIANT" == "bittboy2" || test "$CONSOLE_VARIANT" == "bittboy3") && grep -q "$DETECTED_5" "${BOOTDIR}/uEnv.txt") || ((test "$CONSOLE_VARIANT" == "xyc" || test "$CONSOLE_VARIANT" == "m3") && grep -q "$DETECTED_2" "${BOOTDIR}/uEnv.txt")); then
if (grep -q "$DETECTED_5" "${BOOTDIR}/uEnv.txt"); then
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 3 --msgbox "Auto-Detected $DETECTED_5" 0 0
elif (grep -q "$DETECTED_2" "${MOUNTDIR}/uEnv.txt"); then
elif (grep -q "$DETECTED_2" "${BOOTDIR}/uEnv.txt"); then
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 4 --msgbox "Correcting $DETECTED_2 - wait for further instructions" 0 0
fi
# Test_Keyboard-prompt if proper miyoo.kbd version was loaded:
@@ -414,7 +411,7 @@ if ! $FOUND_CONSOLE && $FOUND_CONSOLE_AUTO && $CONSOLE_DETECTED; then
break
fi
done
elif (test "$CONSOLE_VARIANT" == "bittboy" && grep -q "$DETECTED_4" "${MOUNTDIR}/uEnv.txt") ; then
elif (test "$CONSOLE_VARIANT" == "bittboy" && grep -q "$DETECTED_4" "${BOOTDIR}/uEnv.txt") ; then
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 3 --msgbox "Auto-Detected $DETECTED_4" 0 0
# Test_Video'2-prompt if proper miyoo video's version driver was loaded:
test_video2_func
@@ -503,69 +500,206 @@ fi
/sbin/mkswap /dev/mmcblk0p3
/sbin/swapon /dev/mmcblk0p3
mount -o remount,ro "${MOUNTDIR}" | tee -a ${LOG}
sync
sleep 1
mount -o remount,ro "${BOOTDIR}" | tee -a ${LOG}
#define priamry partitions FS types
P4_FS_TYPE="BTRFS"
P5_FS_TYPE="EXT4"
#grep all partitions current size
SD_SIZE=$(cat "/sys/block/mmcblk0/size")
P1_SIZE=$(cat "/sys/block/mmcblk0/mmcblk0p1/size")
P2_SIZE=$(cat "/sys/block/mmcblk0/mmcblk0p2/size")
P3_SIZE=$(cat "/sys/block/mmcblk0/mmcblk0p3/size")
P4_SIZE=$(cat "/sys/block/mmcblk0/mmcblk0p4/size")
P1_SIZE=$(cat "/sys/block/mmcblk0/mmcblk0p1/size") # BOOT
P2_SIZE=$(cat "/sys/block/mmcblk0/mmcblk0p2/size") # ROOTFS
P3_SIZE=$(cat "/sys/block/mmcblk0/mmcblk0p3/size") # SWAP
P4_SIZE=$(cat "/sys/block/mmcblk0/mmcblk0p4/size") # MAIN
P5_SIZE=$(cat "/sys/block/mmcblk0/mmcblk0p5/size") # ROMS
SD_SIZE_IN_MiB=$((SD_SIZE * 512 / 1024 / 1024))
SD_SIZE_IN_GiB=$((SD_SIZE * 512 / 1024 / 1024 / 1024))
BOOT_SIZE=$(((1016+1) * 1024 / 512)) #bootloader partition=1016K (see `genimage` script in buildroot)
## boot_size calculated to 512 byte sector size blocks, adding +1K as a safety measure for roundups (at fatresize we use KibiBits)
BOOT_SIZE=$(((1016+1 - 1000 + 1024) * 1024 / 512)) #bootloader partition=1016K (see `genimage` script in buildroot)
## boot_size calculated to 512 byte sector size blocks, adding +1K as a safety measure for roundups (at fatresize we use KibiBits)
## adding 1M (1024) for GPT align offset
#Calculate unallocated left space to expand MAIN:
SD_MAX_UNALL_SIZE="$((${SD_SIZE} - (${P1_SIZE} + ${P2_SIZE} + ${P3_SIZE} + ${P4_SIZE}) - $BOOT_SIZE))"
#Calculate unallocated left space to expand ROMS partition:
SD_MAX_UNALL_SIZE="$((${SD_SIZE} - (${P1_SIZE} + ${P2_SIZE} + ${P3_SIZE} + ${P4_SIZE} + ${P5_SIZE}) - $BOOT_SIZE))"
SD_MAX_UNALL_SIZE_IN_MiB=$((SD_MAX_UNALL_SIZE * 512 / 1024 / 1024))
SD_MAX_UNALL_SIZE_IN_GiB=$(echo "scale=1; ${SD_MAX_UNALL_SIZE} * 512 / 1024 / 1024 / 1024" | bc)
#Calculate available space for 4'th partition (MAIN):
SD_MAX_AVAIL_SIZE="$((${SD_SIZE} - (${P1_SIZE} + ${P2_SIZE} + ${P3_SIZE}) - $BOOT_SIZE))"
#Calculate available space for 5'th partition (ROMS):
SD_MAX_AVAIL_SIZE="$((${SD_SIZE} - (${P1_SIZE} + ${P2_SIZE} + ${P3_SIZE} + ${P4_SIZE}) - $BOOT_SIZE))"
SD_MAX_AVAIL_SIZE_IN_KiB=$((SD_MAX_AVAIL_SIZE * 512 / 1024))
# Expand_MAIN_Partition-prompt for fatresize the p4 partition if requested
# Change_MAIN_FileSystem-prompt for the p4 partition if requested
CHANGE_FS_P4=false
if (dialog --backtitle "MiyooCFW 2.0" --no-shadow --clear --stdout --ok-label ${P4_FS_TYPE}\(default\) --cancel-label EXT4 --title " Change FileSystem" \
--colors --pause "\n\n\Z5Change default FileSystem of MAIN?\Zn\n\n BTRFS - safe & reliable\Zn\n\n EXT4 - fast & optimal\Zn\n\n Select an option & press START
\n\n \ZbWARNING:\Zn\n After 30min changes\n to MAIN partition won't be possible." 15 60 1800); then
echo "Selected ${P4_FS_TYPE} for MAIN partition, continuing with default setup." | tee -a ${LOG}
sleep 2
else
P4_FS_TYPE="EXT4"
echo -en "\n\nConverting the MAIN partition filesystem to ${P4_FS_TYPE} type.\n\n" | tee -a ${LOG}
echo -en "This can take a few minutes, be patient!"
sleep 3
mkdir "${ROMS}"/backup
rsync -a --info=nonreg0 --info=progress2 "${HOME}" "${ROMS}"/backup
umount /dev/mmcblk0p4 | tee -a ${LOG}
clear
echo -en "\n\n"
mkfs.ext4 -d "${ROMS}"/backup/"${HOME}" -L MAIN -v -F /dev/mmcblk0p4 | tee -a ${LOG}
sleep 2
e2fsck -y /dev/mmcblk0p4 | tee -a ${LOG}
mount /dev/mmcblk0p4 "${HOME}" -o rw,sync,exec | tee -a ${LOG}
#cp -v -a "${ROMS}"/backup/"${HOME}" /
rm -r "${ROMS}"/backup
CHANGE_FS_P4=true
fi
## Correct inittab for new p4 filesystem type
if ( $CHANGE_FS_P4 ); then
mount -o remount,rw / /
sed -i "s|\(::sysinit:/bin/mount /dev/mmcblk0p4\).*|\1 "${HOME}" -o rw,sync,exec|" /etc/inittab
mount -o remount,ro / /
fi
# Change_ROMS_FileSystem-prompt for the p5 partition if requested
CHANGE_FS_P5=false
dialog --backtitle "MiyooCFW 2.0" --no-shadow --clear --stdout --ok-label "${P5_FS_TYPE}(def.)" --cancel-label BTRFS --extra-button --extra-label FAT32 --title " Change FileSystem" \
--colors --pause "\n\n\Z5Change default FileSystem for ROMS?\Zn\n\nEXT4 - fast write/read & UNIX compliant\Zn\n\nBTRFS - slow read but poweroff safe, UNIX compliant\Zn\n\nFAT32 - slow on-device write but Windows compatbile\Zn\n\n Select an option & press START
\n\n \ZbWARNING:\Zn\n After 30min changes to ROMS\n partition won't be possible." 25 60 1800
echo $? > $TEMP
## Read the user's first choice from the tmp file
CHOICE=$(cat $TEMP)
if test $CHOICE -eq 0; then
echo "Selected ${P5_FS_TYPE} for ROMS partition, continuing with default setup." | tee -a ${LOG}
sleep 2
elif test $CHOICE -eq 3; then
P5_FS_TYPE="FAT32"
CHANGE_FS_P5=true
elif test $CHOICE -eq 1; then
P5_FS_TYPE="BTRFS"
CHANGE_FS_P5=true
else
dialog --backtitle "MiyooCFW 2.0" --no-shadow --timeout 2 --msgbox "Invalid choice, continuing with default setup!" 0 0
sleep 1.5
fi
if ( $CHANGE_FS_P5 ); then
echo -en "\n\nConverting the ROMS partition filesystem to ${P5_FS_TYPE} type.\n\n" | tee -a ${LOG}
echo -en "This can take a few minutes, be patient!"
sleep 3
mkdir "${HOME}"/backup
rsync -a --info=nonreg0 --info=progress2 "${ROMS}" "${HOME}"/backup
umount /dev/mmcblk0p5 | tee -a ${LOG}
clear
echo -en "\n\n"
if test "${P5_FS_TYPE}" == "FAT32"; then
mkfs.vfat -n ROMS -v -F32 /dev/mmcblk0p5 | tee -a ${LOG}
sleep 2
fsck.fat -y /dev/mmcblk0p5 | tee -a ${LOG}
mount /dev/mmcblk0p5 "${ROMS}" -t vfat -o rw,utf8 | tee -a ${LOG}
rsync -rvt --modify-window=1 --exclude "lost+found" --info=nonreg0 --info=progress2 "${HOME}"/backup"${ROMS}" /
elif test "${P5_FS_TYPE}" == "BTRFS"; then
mkfs.btrfs -r "${HOME}"/backup"${ROMS}" -v -f -L ROMS /dev/mmcblk0p5 | tee -a ${LOG}
sleep 2
btrfsck -y /dev/mmcblk0p5 | tee -a ${LOG}
mount /dev/mmcblk0p5 "${ROMS}" -o commit=5,flushoncommit,noatime,nodiratime | tee -a ${LOG}
fi
rm -r "${HOME}"/backup
## Correct inittab for new p5 filesystem type
mount -o remount,rw / /
if test "${P5_FS_TYPE}" == "FAT32"; then
sed -i "s|\(::sysinit:/bin/mount /dev/mmcblk0p5\).*|\1 "${ROMS}" -t vfat -o rw,utf8|" /etc/inittab
elif test "${P5_FS_TYPE}" == "BTRFS"; then
sed -i "s|\(::sysinit:/bin/mount /dev/mmcblk0p5\).*|\1 "${ROMS}" -o commit=5,flushoncommit,noatime,nodiratime|" /etc/inittab
fi
mount -o remount,ro / /
fi
# Expand_ROMS_Partition-prompt for the p5 (ROMS) partition if requested
RESIZE_COMMENCED=false
if (dialog --backtitle "MiyooCFW 2.0" --no-shadow --clear --stdout --ok-label YES --cancel-label NO --title " AUTO-RESIZE" \
--colors --pause "\n\n \Z5Expand MAIN partition?\Zn\n\n Select an option & press START
\n\n \ZbWARNING:\Zn\n After 10s auto-resize\n of BTRFS partition will begin." 15 60 10); then
--colors --pause "\n\n \Z5Expand ROMS partition?\Zn\n\n Select an option & press START
\n\n \ZbWARNING:\Zn\n After 30min auto-resize\n of ${P5_FS_TYPE} partition will begin." 15 60 1800); then
clear
SD_MAX_AVAIL_SIZE_IN_GiB=$(echo "scale=1; ${SD_MAX_AVAIL_SIZE_IN_KiB} / 1024 / 1024" | bc) #only to inform user about end point for resize
SD_MAX_AVAIL_SIZE_IN_GB=$(echo "scale=1; ${SD_MAX_AVAIL_SIZE_IN_KiB} * 1024 / 1000 / 1000 / 1000" | bc)
P4_SIZE_IN_GB=$(echo "scale=1; ${P4_SIZE} * 512 / 1000 / 1000 / 1000" | bc)
P5_SIZE_IN_GB=$(echo "scale=1; ${P5_SIZE} * 512 / 1000 / 1000 / 1000" | bc)
# roundup GB value to 0,1GB for integer calculations:
SD_MAX_AVAIL_SIZE_IN_GBx10=$(echo "$SD_MAX_AVAIL_SIZE_IN_GB" | tr -d ".")
P4_SIZE_IN_GBx10=$(echo "$P4_SIZE_IN_GB" | tr -d ".")
P5_SIZE_IN_GBx10=$(echo "$P5_SIZE_IN_GB" | tr -d ".")
#Sanity checks if we don't down- or over-resize partition:
if (test "$P4_SIZE_IN_GBx10" -ge "$SD_MAX_AVAIL_SIZE_IN_GBx10" || test "$SD_MAX_UNALL_SIZE_IN_MiB" -le 15); then
echo "Your MAIN partition is greater than available space for resizing or you lack unallocated sectors space" | tee -a ${LOG}
RESIZE_ABORT=false
if (test "$P5_SIZE_IN_GBx10" -ge "$SD_MAX_AVAIL_SIZE_IN_GBx10" || test "$SD_MAX_UNALL_SIZE_IN_MiB" -le 15); then
echo "Your ROMS partition is greater than available space for resizing or you lack unallocated sectors space" | tee -a ${LOG}
sleep 1.5
RESIZE_ABORT=true
fi
echo "The full size of your SD is ${SD_SIZE_IN_MiB}MB large" | tee -a ${LOG}
echo "Unallocated space available for resizing equals ${SD_MAX_UNALL_SIZE_IN_GiB}GB," | tee -a ${LOG}
echo "and more precisely it's ${SD_MAX_UNALL_SIZE_IN_MiB}MB big" | tee -a ${LOG}
echo "Resizing the MAIN partition to ${SD_MAX_AVAIL_SIZE_IN_GiB}GB." | tee -a ${LOG}
echo "This can take a few seconds." | tee -a ${LOG}
umount /dev/mmcblk0p4 | tee -a ${LOG}
P4_START_POINT=` parted /dev/mmcblk0 unit MB print | grep '4' | tail -n1 | awk '{print $2}'`
parted -a optimal /dev/mmcblk0 --script rm 4 | tee -a ${LOG}
parted -a optimal /dev/mmcblk0 --script mkpart primary $P4_START_POINT 100% | tee -a ${LOG}
partx -u /dev/mmcblk0 | tee -a ${LOG}
mount /dev/mmcblk0p4 ${HOME} | tee -a ${LOG}
btrfs filesystem resize max ${HOME} | tee -a ${LOG}
partprobe
RESIZE_COMMENCED=true
if test "${P5_FS_TYPE}" == "FAT32" ; then
if test "$SD_SIZE_IN_GiB" -gt 128; then
if (dialog --clear --stdout --ok-label NO --cancel-label YES --title " \Zb\Z1WARNING!\Zn" \
--colors --pause "\nYour SD card exceeds max. size for auto-resizing!
\n\nWe could however expand it to 118GB. \n\n \ZuDo you AGREE?\Zn
\n\n\ZbINFO: For microSD >128GB big we\n recommend to use your PC!\Zn" 0 0 30 || test $? -eq 255); then
dialog --clear --colors --timeout 2 --msgbox " FAT resizing \ZuABORTED!\Zn" 5 27
clear
RESIZE_ABORT=true
else
SD_MAX_AVAIL_SIZE_IN_KiB=123731968
fi
fi
fi
if ! $RESIZE_ABORT; then
echo "The full size of your SD is ${SD_SIZE_IN_MiB}MB large" | tee -a ${LOG}
echo "Unallocated space available for resizing equals ${SD_MAX_UNALL_SIZE_IN_GiB}GB," | tee -a ${LOG}
echo "and more precisely it's ${SD_MAX_UNALL_SIZE_IN_MiB}MB big" | tee -a ${LOG}
echo "Resizing the ROMS (${P5_FS_TYPE}) partition to ${SD_MAX_AVAIL_SIZE_IN_GiB}GB." | tee -a ${LOG}
umount /dev/mmcblk0p5 | tee -a ${LOG}
if test "${P5_FS_TYPE}" == "FAT32"; then
echo "This can take a minute, so be patient!" | tee -a ${LOG}
#TODO: fix outputting logs from fatresize stdout
fatresize --size="${SD_MAX_AVAIL_SIZE_IN_KiB}"ki -v -p /dev/mmcblk0p5 -n5 | tee -a ${LOG}
fsck.fat -y /dev/mmcblk0p5 | tee -a ${LOG}
#echo -n -e \\xEB\\x58\\x90 > /dev/mmcblk0p5
sync
mount -t vfat -o rw,utf8 /dev/mmcblk0p5 "${ROMS}" | tee -a ${LOG}
else
echo "This can take a few seconds." | tee -a ${LOG}
P5_START_POINT=` parted --script /dev/mmcblk0 unit MB print | grep '5' | tail -n1 | awk '{print $2}'`
parted -a optimal /dev/mmcblk0 --script rm '5' | tee -a ${LOG}
parted -a optimal /dev/mmcblk0 --script mkpart roms $P5_START_POINT 100% | tee -a ${LOG}
partx -u /dev/mmcblk0 | tee -a ${LOG}
if test "${P5_FS_TYPE}" == "BTRFS"; then
mount /dev/mmcblk0p5 "${ROMS}" -o rw,noatime | tee -a ${LOG}
btrfs filesystem resize max ${ROMS} | tee -a ${LOG}
else #EXT4
resize2fs /dev/mmcblk0p5 | tee -a ${LOG}
e2fsck -y /dev/mmcblk0p5 | tee -a ${LOG}
mount /dev/mmcblk0p5 "${ROMS}" -o rw,noatime,nodiratime | tee -a ${LOG}
fi
partprobe
fi
RESIZE_COMMENCED=true
else
echo "ROMS partition resizing was aborted!" | tee -a ${LOG}
sleep 2
fi
fi
if ! $RESIZE_COMMENCED && test "${P5_FS_TYPE}" == "FAT32" ; then
sgdisk --typecode=5:0700 /dev/mmcblk0 # Microsoft basic data - partition type
partprobe
fi
# output FS table with type
df -Th >> ${LOG}
# Cleanup - delete the temporary file storing variable value
rm $TEMP
# disable this script
mount -o remount,rw "${MOUNTDIR}" | tee -a ${LOG}
mount -o remount,rw "${BOOTDIR}" | tee -a ${LOG}
echo "Disabling the firstboot script." | tee -a ${LOG}
mv "${MOUNTDIR}/firstboot" "${MOUNTDIR}/firstboot.done" | tee -a ${LOG}
mv "${BOOTDIR}/firstboot" "${BOOTDIR}/firstboot.done" | tee -a ${LOG}
mount -o remount,ro "${BOOTDIR}" | tee -a ${LOG}
# copy over the config files
echo "Copying default configuration files into place..." | tee -a ${LOG}
@@ -574,7 +708,6 @@ if $BITTBOY_CONFIG; then
elif $MIYOO_CONFIG; then
cp "${HOME}/gmenu2x/input_miyoo.conf" "${HOME}/gmenu2x/input.conf"
fi
mount -o remount,ro "${MOUNTDIR}" | tee -a ${LOG}
sync
echo "firstboot script finished." | tee -a ${LOG}
@@ -582,14 +715,12 @@ touch ${HOME}/firstboot.completed
echo
#install IPK packages
if ( $RESIZE_COMMENCED ); then
echo "starting ipk install manager..." | tee -a ${LOG}
${BASEDIR}/ipk_install.sh | tee -a ${LOG}
fi
echo "starting ipk install manager..." | tee -a ${LOG}
${BOOTDIR}/ipk_install.sh | tee -a ${LOG}
# Reboot device if CONSOLE_VARIANT was overwritten from $CHOICE so that it could be applied in u-boot by readID
## or found firstboot custom script
if ($CONSOLE_OVERWRITE || test -r "${BASEDIR}/firstboot.custom.sh"); then
if ($CONSOLE_OVERWRITE || test -r "${BOOTDIR}/firstboot.custom.sh"); then
safe_reboot_func
else
#just grep logs from temp directory before continuing