diff --git a/config/noobs/partitions.json b/config/noobs/partitions.json index 95e0deb71d..bc05e26adb 100644 --- a/config/noobs/partitions.json +++ b/config/noobs/partitions.json @@ -3,7 +3,7 @@ { "label": "@DISTRONAME@_@PROJECT@_System", "filesystem_type": "FAT", - "partition_size_nominal": 512, + "partition_size_nominal": @SYSTEM_SIZE@, "want_maximised": false, "uncompressed_tarball_size": 120, "mkfs_options": "" diff --git a/distributions/LibreELEC/options b/distributions/LibreELEC/options index 8dbfbff80c..e7daab7228 100644 --- a/distributions/LibreELEC/options +++ b/distributions/LibreELEC/options @@ -204,3 +204,8 @@ # set the addon dirs ADDON_PATH="$ADDON_VERSION/$PROJECT/$TARGET_ARCH" ADDON_URL="$ADDON_SERVER_URL/$ADDON_PATH" + +# Default size of system partition, in MB, eg. 512 + SYSTEM_SIZE=512 +# Default system partition offset, in sectors, eg. 2048 + SYSTEM_PART_START=2048 diff --git a/packages/tools/installer/config/installer.conf b/packages/tools/installer/config/installer.conf index 5c88d15d76..2fa9df3d96 100644 --- a/packages/tools/installer/config/installer.conf +++ b/packages/tools/installer/config/installer.conf @@ -19,8 +19,11 @@ DISKLABEL_SYSTEM="System" DISKLABEL_STORAGE="Storage" -# Defaultsize of system partition (Cylinder: 16=132MB, 31=255MB, 66=517MiB) - PARTSIZE_SYSTEM="66" +# Default size of system partition, in MB, eg. 512 + PARTSIZE_SYSTEM="@SYSTEM_SIZE@" + +# Default starting offset for system partition, in sectors (1 sector = 512B), eg. 2048 + PARTSIZE_SYSTEM_OFFSET="@SYSTEM_PART_START@" # additional parameters to extlinux EXTLINUX_PARAMETERS="" diff --git a/packages/tools/installer/package.mk b/packages/tools/installer/package.mk index 7313223e39..9fd13920ca 100644 --- a/packages/tools/installer/package.mk +++ b/packages/tools/installer/package.mk @@ -50,6 +50,9 @@ post_install() { else cp $PKG_DIR/config/installer.conf $INSTALL/etc fi + sed -e "s/@SYSTEM_SIZE@/$SYSTEM_SIZE/g" \ + -e "s/@SYSTEM_PART_START@/$SYSTEM_PART_START/g" \ + -i $INSTALL/etc/installer.conf enable_service installer.service } diff --git a/packages/tools/installer/scripts/installer b/packages/tools/installer/scripts/installer index 2736551930..c8b236ee2e 100755 --- a/packages/tools/installer/scripts/installer +++ b/packages/tools/installer/scripts/installer @@ -253,15 +253,20 @@ do_install_quick() { cat /usr/share/syslinux/mbr.bin > $INSTALL_DEVICE fi + partsize_system_start=$PARTSIZE_SYSTEM_OFFSET + partsize_system_end=$(((PARTSIZE_SYSTEM * 1024 * 1024 / 512) + partsize_system_start)) + partsize_storage_start=$((partsize_system_end + 2048)) + partsize_storage_end=-1024 + msg_progress_install "10" "creating partition on $INSTALL_DEVICE" if [ "$UEFI" = "1" ]; then - parted -s $INSTALL_DEVICE unit cyl mkpart primary fat32 -- 0 $PARTSIZE_SYSTEM >> $LOGFILE 2>&1 + parted -s $INSTALL_DEVICE unit s mkpart primary fat32 -- $partsize_system_start $partsize_system_end >> $LOGFILE 2>&1 else - parted -s $INSTALL_DEVICE unit cyl mkpart primary ext2 -- 0 $PARTSIZE_SYSTEM >> $LOGFILE 2>&1 + parted -s $INSTALL_DEVICE unit s mkpart primary ext2 -- $partsize_system_start $partsize_system_end >> $LOGFILE 2>&1 fi msg_progress_install "13" "creating partition on $INSTALL_DEVICE" - parted -s $INSTALL_DEVICE unit cyl mkpart primary ext2 -- $PARTSIZE_SYSTEM -2 >> $LOGFILE 2>&1 + parted -s $INSTALL_DEVICE unit s mkpart primary ext2 -- $partsize_storage_start $partsize_storage_end >> $LOGFILE 2>&1 msg_progress_install "16" "setup bootflag on partition 1 of $INSTALL_DEVICE" parted -s $INSTALL_DEVICE set 1 boot on >> $LOGFILE 2>&1 @@ -629,7 +634,7 @@ do_poweroff() { } # setup needed variables -INSTALLER_VERSION="0.2.7" +INSTALLER_VERSION="0.2.8" OS_VERSION=$(lsb_release) BACKTITLE="LibreELEC Installer $INSTALLER_VERSION - $OS_VERSION" diff --git a/scripts/image b/scripts/image index 8137f649db..e66e3c03a8 100755 --- a/scripts/image +++ b/scripts/image @@ -357,6 +357,8 @@ fi UUID_STORAGE="$(uuidgen)" \ UBOOT_SYSTEM="$UBOOT_SYSTEM" \ EXTRA_CMDLINE="$EXTRA_CMDLINE" \ + SYSTEM_SIZE="$SYSTEM_SIZE" \ + SYSTEM_PART_START="$SYSTEM_PART_START" \ $SCRIPTS/mkimage fi @@ -453,6 +455,7 @@ fi sed -e "s%@DISTRONAME@%$DISTRONAME%g" \ -e "s%@PROJECT@%$PROJECT%g" \ + -e "s%@SYSTEM_SIZE@%$SYSTEM_SIZE%g" \ -i $RELEASE_DIR/${DISTRONAME}_${PROJECT}/partitions.json # create System dir diff --git a/scripts/mkimage b/scripts/mkimage index 901da33790..38579ea7dc 100755 --- a/scripts/mkimage +++ b/scripts/mkimage @@ -27,7 +27,11 @@ OE_TMP=$(mktemp -d) SAVE_ERROR="$OE_TMP/save_error" - SYSTEM_SIZE=512 + if [ -z "$SYSTEM_SIZE" -o -z "$SYSTEM_PART_START" ]; then + echo "mkimage: SYSTEM_SIZE and SYSTEM_PART_START must be configured!" + exit 1 + fi + STORAGE_SIZE=32 # STORAGE_SIZE must be >= 32 ! DISK_SIZE=$(( $SYSTEM_SIZE + $STORAGE_SIZE + 4 )) @@ -74,8 +78,8 @@ trap cleanup SIGINT # create part1 echo "image: creating part1..." - SYSTEM_PART_END=$(( $SYSTEM_SIZE * 1024 * 1024 / 512 + 2048 )) - parted -s "$DISK" -a min unit s mkpart primary fat32 2048 $SYSTEM_PART_END + SYSTEM_PART_END=$(( ($SYSTEM_SIZE * 1024 * 1024 / 512) + $SYSTEM_PART_START )) + parted -s "$DISK" -a min unit s mkpart primary fat32 $SYSTEM_PART_START $SYSTEM_PART_END if [ "$BOOTLOADER" = "syslinux" ]; then parted -s "$DISK" set 1 legacy_boot on else @@ -100,7 +104,7 @@ fi # create filesystem on part1 echo "image: creating filesystem on part1..." - OFFSET=$(( 2048 * 512 )) + OFFSET=$(( $SYSTEM_PART_START * 512 )) HEADS=4 TRACKS=32 SECTORS=$(( $SYSTEM_SIZE * 1024 * 1024 / 512 / $HEADS / $TRACKS ))