forked from libretro/Lakka-LibreELEC
ff4d1dd698
Script uses arbitrary values for FAT32 partition and name of the distribution. Using placeholders in the script and replacing them at build time offers flexibility, i.e. no need to change arbitrary values in script when SYSTEM_SIZE is changed.
94 lines
2.2 KiB
Bash
Executable File
94 lines
2.2 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
# Copyright (C) 2021-present Team LibreELEC (https://libreelec.tv)
|
|
|
|
TMP=/tmp/mnt/
|
|
|
|
SYSTEM_SIZE=@SYSTEM_SIZE@
|
|
UUID_SYSTEM="$(date '+%d%m')-$(date '+%M%S')"
|
|
UUID_STORAGE="$(uuidgen)"
|
|
BOOT=$(grep /flash /proc/mounts | awk '{print $1}' | sed 's/p[012]//g')
|
|
DISK=""
|
|
|
|
for TYPE in /sys/class/block/mmcblk*/device/type; do
|
|
if grep -q "MMC" "${TYPE}"; then
|
|
DISK="/dev/$(echo "${TYPE}" | awk -F/ '{print $5}')"
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [ -z "${DISK}" ]; then
|
|
echo "Can't find eMMC module!"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "${BOOT}" = "${DISK}" ]; then
|
|
echo "Your device is booted from the eMMC module!"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo -e "\033[36m==============================="
|
|
echo "Installing @DISTRONAME@ to eMMC"
|
|
echo -e "===============================\033[37m"
|
|
echo ""
|
|
echo "eMMC found at ${DISK}"
|
|
echo ""
|
|
|
|
if [ ! -b "${DISK}" ]; then
|
|
echo "Error: eMMC not found."
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo -n "WARNING: ALL DATA ON eMMC WILL BE ERASED! Continue (y/N)? "
|
|
read -n 1 ANSWER
|
|
|
|
if [ ! "${ANSWER}" = "y" ]; then
|
|
echo ""
|
|
echo "Aborting..."
|
|
exit 0
|
|
fi
|
|
echo ""
|
|
|
|
umount ${DISK}* > /dev/null 2>&1
|
|
|
|
echo "Erasing eMMC ..."
|
|
dd if=/dev/zero of="${DISK}" bs=1M count=1 conv=fsync > /dev/null 2>&1
|
|
|
|
echo "Creating partitions"
|
|
parted -s "${DISK}" mklabel msdos
|
|
parted -s "${DISK}" -a optimal mkpart primary fat32 0% ${SYSTEM_SIZE}MiB
|
|
parted -s "${DISK}" set 1 boot on
|
|
parted -s "${DISK}" -a optimal mkpart primary ext4 ${SYSTEM_SIZE}MiB 100%
|
|
sync
|
|
|
|
echo "Creating filesystems"
|
|
dd if=/dev/zero of="${DISK}p1" bs=1M count=1 conv=fsync > /dev/null 2>&1
|
|
mkfs.vfat -n SYSTEM -i ${UUID_SYSTEM//-/} ${DISK}p1 > /dev/null 2>&1
|
|
dd if=/dev/zero of="${DISK}p2" bs=1M count=1 conv=fsync > /dev/null 2>&1
|
|
mkfs.ext4 -L STORAGE -U ${UUID_STORAGE} ${DISK}p2 > /dev/null 2>&1
|
|
sync
|
|
|
|
echo "Installing bootloader"
|
|
dd if="${BOOT}" skip=8 of="${DISK}" bs=1k seek=8 count=768 conv=fsync > /dev/null 2>&1
|
|
|
|
echo "Copying system files"
|
|
|
|
mkdir -p ${TMP}
|
|
|
|
mount -t vfat ${DISK}p1 ${TMP}
|
|
|
|
cp -R /flash/. ${TMP}/
|
|
sync
|
|
|
|
echo "Adjusting partition UUIDs"
|
|
|
|
sed -i "s/boot=UUID=[0-9a-f\-]*/boot=UUID=${UUID_SYSTEM}/g" ${TMP}/extlinux/extlinux.conf
|
|
sed -i "s/disk=UUID=[0-9a-f\-]*/disk=UUID=${UUID_STORAGE}/g" ${TMP}/extlinux/extlinux.conf
|
|
|
|
umount ${TMP}
|
|
|
|
echo "Done"
|