diff --git a/scripts/image b/scripts/image index e10776ae91..df5afaa66e 100755 --- a/scripts/image +++ b/scripts/image @@ -82,487 +82,481 @@ if [ -n "$IMAGE_SUFFIX" ]; then fi # setup fakeroot - rm -rf $FAKEROOT_SCRIPT # remove $FAKEROOT_SCRIPT if it exist - touch $FAKEROOT_SCRIPT # create an empty $FAKEROOT_SCRIPT - chmod +x $FAKEROOT_SCRIPT # make $FAKEROOT_SCRIPT executable - echo "chown -R 0:0 $INSTALL" >> $FAKEROOT_SCRIPT +rm -rf $FAKEROOT_SCRIPT # remove $FAKEROOT_SCRIPT if it exist +touch $FAKEROOT_SCRIPT # create an empty $FAKEROOT_SCRIPT +chmod +x $FAKEROOT_SCRIPT # make $FAKEROOT_SCRIPT executable +echo "chown -R 0:0 $INSTALL" >> $FAKEROOT_SCRIPT # clean old install dirs - rm -rf $INSTALL - rm -rf $STAMPS_INSTALL - mkdir -p $INSTALL +rm -rf $INSTALL +rm -rf $STAMPS_INSTALL +mkdir -p $INSTALL # create baselayout - mkdir -p $INSTALL/bin - mkdir -p $INSTALL/etc - mkdir -p $INSTALL/lib - mkdir -p $INSTALL/sbin - mkdir -p $INSTALL/dev - mkdir -p $INSTALL/proc - mkdir -p $INSTALL/run - mkdir -p $INSTALL/sys - mkdir -p $INSTALL/tmp - mkdir -p $INSTALL/usr - mkdir -p $INSTALL/var - mkdir -p $INSTALL/flash - mkdir -p $INSTALL/storage - ln -sf /var/media $INSTALL/media +mkdir -p $INSTALL/bin +mkdir -p $INSTALL/etc +mkdir -p $INSTALL/lib +mkdir -p $INSTALL/sbin +mkdir -p $INSTALL/dev +mkdir -p $INSTALL/proc +mkdir -p $INSTALL/run +mkdir -p $INSTALL/sys +mkdir -p $INSTALL/tmp +mkdir -p $INSTALL/usr +mkdir -p $INSTALL/var +mkdir -p $INSTALL/flash +mkdir -p $INSTALL/storage +ln -sf /var/media $INSTALL/media - if [ "$TARGET_ARCH" = "x86_64" -o "$TARGET_ARCH" = "powerpc64" ]; then - ln -s /lib $INSTALL/lib64 - ln -s lib $INSTALL/usr/lib64 - fi +if [ "$TARGET_ARCH" = "x86_64" -o "$TARGET_ARCH" = "powerpc64" ]; then + ln -s /lib $INSTALL/lib64 + ln -s lib $INSTALL/usr/lib64 +fi - echo "$TARGET_VERSION" > $INSTALL/etc/release +echo "$TARGET_VERSION" > $INSTALL/etc/release # create /etc/os-release - echo -e "NAME=\"$DISTRONAME\"" > $INSTALL/etc/os-release - echo -e "VERSION=\"$LIBREELEC_VERSION\"" >> $INSTALL/etc/os-release - echo -e "ID=\"libreelec\"" >> $INSTALL/etc/os-release - echo -e "VERSION_ID=\"$OS_VERSION\"" >> $INSTALL/etc/os-release - echo -e "PRETTY_NAME=\"$DISTRONAME ($LIBREELEC_BUILD) - Version: $LIBREELEC_VERSION\"" >> $INSTALL/etc/os-release - echo -e "HOME_URL=\"https://libreelec.tv\"" >> $INSTALL/etc/os-release - echo -e "BUG_REPORT_URL=\"$ORIGIN_URL\"" >> $INSTALL/etc/os-release - echo -e "BUILD_ID=\"$GIT_HASH\"" >> $INSTALL/etc/os-release - echo -e "OPENELEC_ARCH=\"$PROJECT.$TARGET_ARCH\"" >> $INSTALL/etc/os-release - echo -e "LIBREELEC_ARCH=\"$PROJECT.$TARGET_ARCH\"" >> $INSTALL/etc/os-release - echo -e "LIBREELEC_BUILD=\"$LIBREELEC_BUILD\"" >> $INSTALL/etc/os-release +echo -e "NAME=\"$DISTRONAME\"" > $INSTALL/etc/os-release +echo -e "VERSION=\"$LIBREELEC_VERSION\"" >> $INSTALL/etc/os-release +echo -e "ID=\"libreelec\"" >> $INSTALL/etc/os-release +echo -e "VERSION_ID=\"$OS_VERSION\"" >> $INSTALL/etc/os-release +echo -e "PRETTY_NAME=\"$DISTRONAME ($LIBREELEC_BUILD) - Version: $LIBREELEC_VERSION\"" >> $INSTALL/etc/os-release +echo -e "HOME_URL=\"https://libreelec.tv\"" >> $INSTALL/etc/os-release +echo -e "BUG_REPORT_URL=\"$ORIGIN_URL\"" >> $INSTALL/etc/os-release +echo -e "BUILD_ID=\"$GIT_HASH\"" >> $INSTALL/etc/os-release +echo -e "OPENELEC_ARCH=\"$PROJECT.$TARGET_ARCH\"" >> $INSTALL/etc/os-release +echo -e "LIBREELEC_ARCH=\"$PROJECT.$TARGET_ARCH\"" >> $INSTALL/etc/os-release +echo -e "LIBREELEC_BUILD=\"$LIBREELEC_BUILD\"" >> $INSTALL/etc/os-release # create /etc/issue - echo "$GREETING0" > $INSTALL/etc/issue - echo "$GREETING1" >> $INSTALL/etc/issue - echo "$GREETING2" >> $INSTALL/etc/issue - echo "$GREETING3" >> $INSTALL/etc/issue - echo "$GREETING4" >> $INSTALL/etc/issue - echo "$DISTRONAME ($LIBREELEC_BUILD) Version: $LIBREELEC_VERSION" >> $INSTALL/etc/issue - if [ "$DEVEL_VERSION" = "devel" ] ; then - echo "$DISTRONAME git: $GIT_HASH" >> $INSTALL/etc/issue - fi +echo "$GREETING0" > $INSTALL/etc/issue +echo "$GREETING1" >> $INSTALL/etc/issue +echo "$GREETING2" >> $INSTALL/etc/issue +echo "$GREETING3" >> $INSTALL/etc/issue +echo "$GREETING4" >> $INSTALL/etc/issue +echo "$DISTRONAME ($LIBREELEC_BUILD) Version: $LIBREELEC_VERSION" >> $INSTALL/etc/issue +if [ "$DEVEL_VERSION" = "devel" ] ; then + echo "$DISTRONAME git: $GIT_HASH" >> $INSTALL/etc/issue +fi - ln -sf /etc/issue $INSTALL/etc/motd +ln -sf /etc/issue $INSTALL/etc/motd # Basissystem... - $SCRIPTS/install libc - $SCRIPTS/install gcc - $SCRIPTS/install linux - $SCRIPTS/install linux-drivers - $SCRIPTS/install linux-firmware - $SCRIPTS/install $BOOTLOADER - $SCRIPTS/install busybox - $SCRIPTS/install util-linux - $SCRIPTS/install corefonts - $SCRIPTS/install network +$SCRIPTS/install libc +$SCRIPTS/install gcc +$SCRIPTS/install linux +$SCRIPTS/install linux-drivers +$SCRIPTS/install linux-firmware +$SCRIPTS/install $BOOTLOADER +$SCRIPTS/install busybox +$SCRIPTS/install util-linux +$SCRIPTS/install corefonts +$SCRIPTS/install network # Graphic support - [ ! "$DISPLAYSERVER" = "no" ] && $SCRIPTS/install $DISPLAYSERVER +[ ! "$DISPLAYSERVER" = "no" ] && $SCRIPTS/install $DISPLAYSERVER # Multimedia support - [ ! "$MEDIACENTER" = "no" ] && $SCRIPTS/install mediacenter +[ ! "$MEDIACENTER" = "no" ] && $SCRIPTS/install mediacenter # Sound support - [ "$ALSA_SUPPORT" = "yes" ] && $SCRIPTS/install alsa +[ "$ALSA_SUPPORT" = "yes" ] && $SCRIPTS/install alsa # Automounter support - [ "$UDEVIL" = "yes" ] && $SCRIPTS/install udevil +[ "$UDEVIL" = "yes" ] && $SCRIPTS/install udevil # NTFS 3G support - [ "$EXFAT" = "yes" ] && $SCRIPTS/install fuse-exfat +[ "$EXFAT" = "yes" ] && $SCRIPTS/install fuse-exfat # NTFS 3G support - [ "$NTFS3G" = "yes" ] && $SCRIPTS/install ntfs-3g_ntfsprogs +[ "$NTFS3G" = "yes" ] && $SCRIPTS/install ntfs-3g_ntfsprogs # Remote support - [ "$REMOTE_SUPPORT" = "yes" ] && $SCRIPTS/install remote +[ "$REMOTE_SUPPORT" = "yes" ] && $SCRIPTS/install remote # LCD support - [ ! "$LCD_DRIVER" = "none" ] && $SCRIPTS/install lcdproc +[ ! "$LCD_DRIVER" = "none" ] && $SCRIPTS/install lcdproc # Virtual image creation support - [ "$PROJECT" = Virtual ] && $SCRIPTS/install virtual +[ "$PROJECT" = Virtual ] && $SCRIPTS/install virtual # Installer support - [ "$INSTALLER_SUPPORT" = "yes" ] && $SCRIPTS/install installer +[ "$INSTALLER_SUPPORT" = "yes" ] && $SCRIPTS/install installer # Devtools... (not for Release) - [ "$TESTING" = "yes" ] && $SCRIPTS/install testing +[ "$TESTING" = "yes" ] && $SCRIPTS/install testing # Install gdb in all builds, including releases - $SCRIPTS/install debug +$SCRIPTS/install debug # OEM packages - [ "$OEM_SUPPORT" = "yes" ] && $SCRIPTS/install oem +[ "$OEM_SUPPORT" = "yes" ] && $SCRIPTS/install oem # copy project related files to filesystem - if [ -d "$PROJECT_DIR/$PROJECT/filesystem" ]; then - cp -PR $PROJECT_DIR/$PROJECT/filesystem/* $INSTALL - # install project specific systemd services - for service in $PROJECT_DIR/$PROJECT/filesystem/usr/lib/systemd/system/*.service ; do - if [ -f "$service" ] ; then - enable_service $(basename $service) - fi - done - fi +if [ -d "$PROJECT_DIR/$PROJECT/filesystem" ]; then + cp -PR $PROJECT_DIR/$PROJECT/filesystem/* $INSTALL + # install project specific systemd services + for service in $PROJECT_DIR/$PROJECT/filesystem/usr/lib/systemd/system/*.service ; do + if [ -f "$service" ] ; then + enable_service $(basename $service) + fi + done +fi # copy vendor related files to filesystem - if [ -d "$HOME/.libreelec/filesystem" ]; then - cp -PR $HOME/.libreelec/filesystem/* $INSTALL - # install project specific systemd services - for service in $HOME/.libreelec/filesystem/usr/lib/systemd/system/*.service ; do - if [ -f "$service" ] ; then - enable_service $(basename $service) - fi - done - fi +if [ -d "$HOME/.libreelec/filesystem" ]; then + cp -PR $HOME/.libreelec/filesystem/* $INSTALL + # install project specific systemd services + for service in $HOME/.libreelec/filesystem/usr/lib/systemd/system/*.service ; do + if [ -f "$service" ] ; then + enable_service $(basename $service) + fi + done +fi # copy vendor project related files to filesystem - if [ -d "$HOME/.libreelec/projects/$PROJECT/filesystem" ]; then - cp -PR $HOME/.libreelec/projects/$PROJECT/filesystem/* $INSTALL - # install project specific systemd services - for service in $HOME/.libreelec/projects/$PROJECT/filesystem/usr/lib/systemd/system/*.service ; do - if [ -f "$service" ] ; then - enable_service $(basename $service) - fi - done - fi +if [ -d "$HOME/.libreelec/projects/$PROJECT/filesystem" ]; then + cp -PR $HOME/.libreelec/projects/$PROJECT/filesystem/* $INSTALL + # install project specific systemd services + for service in $HOME/.libreelec/projects/$PROJECT/filesystem/usr/lib/systemd/system/*.service ; do + if [ -f "$service" ] ; then + enable_service $(basename $service) + fi + done +fi # run depmod - MODVER=$(basename $(ls -d $INSTALL/lib/modules/*)) - find $INSTALL/lib/modules/$MODVER/ -name *.ko | \ - sed -e "s,$INSTALL/lib/modules/$MODVER/,," > $INSTALL/lib/modules/$MODVER/modules.order - $ROOT/$TOOLCHAIN/bin/depmod -b $INSTALL $MODVER 2> /dev/null +MODVER=$(basename $(ls -d $INSTALL/lib/modules/*)) +find $INSTALL/lib/modules/$MODVER/ -name *.ko | \ + sed -e "s,$INSTALL/lib/modules/$MODVER/,," > $INSTALL/lib/modules/$MODVER/modules.order +$ROOT/$TOOLCHAIN/bin/depmod -b $INSTALL $MODVER 2> /dev/null # strip kernel modules - for MOD in `find $INSTALL/lib/modules/ -type f -name *.ko`; do - $STRIP --strip-debug $MOD - done +for MOD in `find $INSTALL/lib/modules/ -type f -name *.ko`; do + $STRIP --strip-debug $MOD +done # make target dir - mkdir -p $TARGET_IMG - rm -rf $TARGET_IMG/$IMAGE_NAME.kernel +mkdir -p $TARGET_IMG +rm -rf $TARGET_IMG/$IMAGE_NAME.kernel # copy kernel to target dir - if [ "$BOOTLOADER" = "bcm2835-bootloader" ]; then - echo "injecting DeviceTreeBlobs to kernel..." - perl $BUILD/linux-$(kernel_version)/scripts/mkknlimg $BUILD/linux-$(kernel_version)/arch/$TARGET_KERNEL_ARCH/boot/$KERNEL_TARGET $TARGET_IMG/$IMAGE_NAME.kernel - echo "...done" - else - cp -PR $BUILD/linux-$(kernel_version)/arch/$TARGET_KERNEL_ARCH/boot/$KERNEL_TARGET $TARGET_IMG/$IMAGE_NAME.kernel - fi - chmod 0644 $TARGET_IMG/$IMAGE_NAME.kernel +if [ "$BOOTLOADER" = "bcm2835-bootloader" ]; then + echo "injecting DeviceTreeBlobs to kernel..." + perl $BUILD/linux-$(kernel_version)/scripts/mkknlimg $BUILD/linux-$(kernel_version)/arch/$TARGET_KERNEL_ARCH/boot/$KERNEL_TARGET $TARGET_IMG/$IMAGE_NAME.kernel + echo "...done" +else + cp -PR $BUILD/linux-$(kernel_version)/arch/$TARGET_KERNEL_ARCH/boot/$KERNEL_TARGET $TARGET_IMG/$IMAGE_NAME.kernel +fi +chmod 0644 $TARGET_IMG/$IMAGE_NAME.kernel # create squashfs file - if [ -z "$SQUASHFS_COMPRESSION" ]; then - SQUASHFS_COMPRESSION="gzip" - fi +if [ -z "$SQUASHFS_COMPRESSION" ]; then + SQUASHFS_COMPRESSION="gzip" +fi - echo "rm -rf $TARGET_IMG/$IMAGE_NAME.system" >> $FAKEROOT_SCRIPT - echo "$ROOT/$TOOLCHAIN/bin/mksquashfs $BUILD/image/system $TARGET_IMG/$IMAGE_NAME.system -noappend -comp $SQUASHFS_COMPRESSION" >> $FAKEROOT_SCRIPT +echo "rm -rf $TARGET_IMG/$IMAGE_NAME.system" >> $FAKEROOT_SCRIPT +echo "$ROOT/$TOOLCHAIN/bin/mksquashfs $BUILD/image/system $TARGET_IMG/$IMAGE_NAME.system -noappend -comp $SQUASHFS_COMPRESSION" >> $FAKEROOT_SCRIPT # run fakeroot - $ROOT/$TOOLCHAIN/bin/fakeroot -- $FAKEROOT_SCRIPT - rm -rf $FAKEROOT_SCRIPT +$ROOT/$TOOLCHAIN/bin/fakeroot -- $FAKEROOT_SCRIPT +rm -rf $FAKEROOT_SCRIPT # set permissions - chmod 0644 $TARGET_IMG/$IMAGE_NAME.system +chmod 0644 $TARGET_IMG/$IMAGE_NAME.system - if [ "$1" = "release" -o "$1" = "mkimage" -o "$1" = "amlpkg" -o "$1" = "noobs" ]; then +if [ "$1" = "release" -o "$1" = "mkimage" -o "$1" = "amlpkg" -o "$1" = "noobs" ]; then - RELEASE_DIR="target/$IMAGE_NAME" + RELEASE_DIR="target/$IMAGE_NAME" - # cleanup - rm -rf $RELEASE_DIR + # cleanup + rm -rf $RELEASE_DIR + + # create release dir + mkdir -p $RELEASE_DIR + + # remove n previous created release image + rm -rf $TARGET_IMG/$IMAGE_NAME.img.gz + if [ -n "$BOOTLOADER" ]; then + + BOOTLOADER_DIR="" + if [ -z "$BOOTLOADER_DIR" -a -d $HOME/.openelec/projects/$PROJECT/packages ]; then + BOOTLOADER_DIR=`find $HOME/.openelec/projects/$PROJECT/packages -type d -name $BOOTLOADER 2>/dev/null` + fi + + if [ -z "$BOOTLOADER_DIR" -a -d $HOME/.openelec/packages ]; then + BOOTLOADER_DIR=`find $HOME/.openelec/packages -type d -name $BOOTLOADER 2>/dev/null` + fi + + if [ -z "$BOOTLOADER_DIR" -a -d $PROJECT_DIR/$PROJECT/packages ]; then + BOOTLOADER_DIR=`find $PROJECT_DIR/$PROJECT/packages -type d -name $BOOTLOADER 2>/dev/null` + fi + + if [ -z "$BOOTLOADER_DIR" -o ! -d "$BOOTLOADER_DIR" ]; then + BOOTLOADER_DIR=`find $PACKAGES -type d -name $BOOTLOADER 2>/dev/null` + fi + + if [ -d "$BOOTLOADER_DIR"/files ]; then + cp -R $BOOTLOADER_DIR/files/* $RELEASE_DIR + fi + + if [ -f $HOME/.openelec/projects/$PROJECT/bootloader/release ]; then + . $HOME/.openelec/projects/$PROJECT/bootloader/release + elif [ -f $HOME/.openelec/bootloader/release ]; then + . $HOME/.openelec/bootloader/release + elif [ -f $PROJECT_DIR/$PROJECT/bootloader/release ]; then + . $PROJECT_DIR/$PROJECT/bootloader/release + elif [ -f "$BOOTLOADER_DIR"/release ]; then + . $BOOTLOADER_DIR/release + fi + fi + + # MfgTool2 for TBS Matrix support (add it to .tar) + # only for matrix system or all? (one tar for all updates?) + if [ "$PROJECT" == "imx6" -a "$SYSTEM" == "matrix" ]; then + $SCRIPTS/unpack imx6-mfgtool2-tbs-matrix + mkdir -p $RELEASE_DIR/MfgTool2-TBS-Matrix + cp -PR $BUILD/imx6-mfgtool2-tbs-matrix-*/* $RELEASE_DIR/MfgTool2-TBS-Matrix + fi + + cp $ROOT/README* $RELEASE_DIR + cp $ROOT/CHANGELOG* $RELEASE_DIR + echo "$TARGET_VERSION" > $RELEASE_DIR/RELEASE + + if [ -n "$MEDIACENTER" ] ; then + echo "Kodi commit: `scripts/git_version $MEDIACENTER`" >> $RELEASE_DIR/RELEASE + fi + + mkdir -p $RELEASE_DIR/licenses + cp $ROOT/licenses/* $RELEASE_DIR/licenses + + mkdir -p $RELEASE_DIR/target + cp $TARGET_IMG/$IMAGE_NAME.system $RELEASE_DIR/target/SYSTEM + cp $TARGET_IMG/$IMAGE_NAME.kernel $RELEASE_DIR/target/KERNEL + + # create md5sum's + ( cd $RELEASE_DIR; + md5sum -t target/SYSTEM > target/SYSTEM.md5; + md5sum -t target/KERNEL > target/KERNEL.md5; + ) + + # create target directory + mkdir -p $TARGET_IMG + + # remove an previous created release tarball + rm -rf $TARGET_IMG/$IMAGE_NAME.tar + + # create release tarball + tar cf $TARGET_IMG/$IMAGE_NAME.tar -C target $IMAGE_NAME + + # create image files if requested + if [[ ( "$1" = "amlpkg" || "$1" = "noobs" || "$1" = "mkimage" ) && -n "$BOOTLOADER" ]]; then + # projects can set KERNEL_NAME (kernel.img) + if [ -z "$KERNEL_NAME" ] ; then + KERNEL_NAME="KERNEL" + fi + + UBOOT_SYSTEM="" + if [ "$PROJECT" == "imx6" ]; then + if [ -n "$SYSTEM" ]; then + UBOOT_SYSTEM="$SYSTEM" + else + UBOOT_SYSTEM="cuboxi" + fi + fi + + # variables used in image script must be passed + env \ + PATH="$PATH:/sbin" \ + ROOT="$ROOT" \ + TOOLCHAIN="$TOOLCHAIN" \ + PROJECT_DIR="$PROJECT_DIR" \ + PROJECT="$PROJECT" \ + DISTRO="$DISTRO" \ + TARGET_IMG="$TARGET_IMG" \ + IMAGE_NAME="$IMAGE_NAME" \ + BOOTLOADER="$BOOTLOADER" \ + KERNEL_NAME="$KERNEL_NAME" \ + RELEASE_DIR=$RELEASE_DIR \ + UUID_SYSTEM="$(uuidgen)" \ + UUID_STORAGE="$(uuidgen)" \ + UBOOT_SYSTEM="$UBOOT_SYSTEM" \ + EXTRA_CMDLINE="$EXTRA_CMDLINE" \ + SYSTEM_SIZE="$SYSTEM_SIZE" \ + SYSTEM_PART_START="$SYSTEM_PART_START" \ + $SCRIPTS/mkimage + fi + + # cleanup release dir + rm -rf $RELEASE_DIR + + # create WeTek Play (Amlogic) ZIP update and auto-install packages if requested + if [ "$1" = "amlpkg" ]; then + echo "Creating Amlogic ZIP update package" + + INSTALL_SRC_DIR="$PROJECT_DIR/$PROJECT/install" + AML_PKG_DIR="$RELEASE_DIR/ampl-pkg" + + # create package directory + mkdir -p "$AML_PKG_DIR" + + # copy system and kernel images + mkdir -p "$AML_PKG_DIR/system" + cp $TARGET_IMG/$IMAGE_NAME.system $AML_PKG_DIR/system/SYSTEM + cp $TARGET_IMG/$IMAGE_NAME.kernel $AML_PKG_DIR/KERNEL + + # copy update-binary and updater-script + META_INF_DIR="$AML_PKG_DIR/META-INF/com/google/android" + mkdir -p "$META_INF_DIR" + cp $INSTALL_SRC_DIR/update-binary $META_INF_DIR + cp $INSTALL_SRC_DIR/updater-script $META_INF_DIR + + # copy other files if any + if [ -d "$INSTALL_SRC_DIR/files" ]; then + cp -PR $INSTALL_SRC_DIR/files/* $AML_PKG_DIR + fi + + # copy device tree image if any + if [ -f "$INSTALL/usr/share/bootloader/dtb.img" ]; then + cp "$INSTALL/usr/share/bootloader/dtb.img" $AML_PKG_DIR/dtb.img + fi + + # create the update package + pushd "$AML_PKG_DIR" > /dev/null + zip -rq update.zip * + + # sign the update package + echo "Signing the update package" + mkdir -p sign + SIGNAPK_DIR="$ROOT/tools/signapk" + java -Xmx1024m -jar $SIGNAPK_DIR/signapk.jar -w $SIGNAPK_DIR/testkey.x509.pem $SIGNAPK_DIR/testkey.pk8 update.zip sign/$IMAGE_NAME-update.zip + + # create the auto-install package + echo "Creating Amlogic ZIP auto-install package" + pushd sign > /dev/null + echo --update_package=/sdcard/$IMAGE_NAME-update.zip > factory_update_param.aml + if [ -f "$INSTALL_SRC_DIR/files/recovery.img" ]; then + cp $INSTALL_SRC_DIR/files/recovery.img . + fi + + if [ -f $INSTALL_SRC_DIR/files/aml_autoscript ]; then + cp $INSTALL_SRC_DIR/files/aml_autoscript . + fi + + # copy device tree image if any + if [ -f "$ROOT/$INSTALL/usr/share/bootloader/dtb.img" ]; then + cp "$ROOT/$INSTALL/usr/share/bootloader/dtb.img" . + fi + + zip -q $TARGET_IMG/$IMAGE_NAME.zip * + + popd > /dev/null + popd > /dev/null + + elif [ "$1" = "noobs" ]; then + RELEASE_DIR="$TARGET_IMG/${IMAGE_NAME}-$1" # create release dir - mkdir -p $RELEASE_DIR - # remove n previous created release image - rm -rf $TARGET_IMG/$IMAGE_NAME.img.gz - if [ -n "$BOOTLOADER" ]; then + mkdir -p $RELEASE_DIR/${DISTRONAME}_${PROJECT} - BOOTLOADER_DIR="" + if [ -f $DISTRO_DIR/$DISTRO/${DISTRONAME}_40x40.png ]; then + cp -PR $DISTRO_DIR/$DISTRO/${DISTRONAME}_40x40.png $RELEASE_DIR/${DISTRONAME}_${PROJECT}/${DISTRONAME}_${PROJECT}.png + else + cp -PR $DISTRO_DIR/$DISTRO/${DISTRONAME}.png $RELEASE_DIR/${DISTRONAME}_${PROJECT}/${DISTRONAME}_${PROJECT}.png + fi + cp -PR $ROOT/config/noobs/os.json $RELEASE_DIR/${DISTRONAME}_${PROJECT} + cp -PR $ROOT/config/noobs/partition_setup.sh $RELEASE_DIR/${DISTRONAME}_${PROJECT} + cp -PR $ROOT/config/noobs/partitions.json $RELEASE_DIR/${DISTRONAME}_${PROJECT} + if [ -d $DISTRO_DIR/$DISTRO/noobs/marketing ]; then + tar cf $RELEASE_DIR/${DISTRONAME}_${PROJECT}/marketing.tar -C $DISTRO_DIR/$DISTRO/noobs/marketing . + else + tar cf $RELEASE_DIR/${DISTRONAME}_${PROJECT}/marketing.tar -C $ROOT/config/noobs/marketing . + fi + cp $ROOT/README* $RELEASE_DIR/${DISTRONAME}_${PROJECT} + cp $ROOT/CHANGELOG $RELEASE_DIR/${DISTRONAME}_${PROJECT}/release_notes.txt - if [ -z "$BOOTLOADER_DIR" -a -d $HOME/.openelec/projects/$PROJECT/packages ]; then - BOOTLOADER_DIR=`find $HOME/.openelec/projects/$PROJECT/packages -type d -name $BOOTLOADER 2>/dev/null` - fi + sed -e "s%@DISTRONAME@%$DISTRONAME%g" \ + -e "s%@PROJECT@%$PROJECT%g" \ + -e "s%@LIBREELEC_VERSION@%$LIBREELEC_VERSION%g" \ + -e "s%@RELEASE_DATE@%$(date +%F)%g" \ + -e "s%@KERNEL_VERSION@%$(kernel_version)%g" \ + -e "s%@DESCRIPTION@%$DESCRIPTION%g" \ + -e "s%@ROOT_PASSWORD@%$ROOT_PASSWORD%g" \ + -e "s%@NOOBS_SUPPORTED_MODELS@%$NOOBS_SUPPORTED_MODELS%g" \ + -e "s%@NOOBS_HEX@%$NOOBS_HEX%g" \ + -i $RELEASE_DIR/${DISTRONAME}_${PROJECT}/os.json - if [ -z "$BOOTLOADER_DIR" -a -d $HOME/.openelec/packages ]; then - BOOTLOADER_DIR=`find $HOME/.openelec/packages -type d -name $BOOTLOADER 2>/dev/null` - 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 - if [ -z "$BOOTLOADER_DIR" -a -d $PROJECT_DIR/$PROJECT/packages ]; then - BOOTLOADER_DIR=`find $PROJECT_DIR/$PROJECT/packages -type d -name $BOOTLOADER 2>/dev/null` - fi + # create System dir + mkdir -p $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System - if [ -z "$BOOTLOADER_DIR" -o ! -d "$BOOTLOADER_DIR" ]; then - BOOTLOADER_DIR=`find $PACKAGES -type d -name $BOOTLOADER 2>/dev/null` - fi + BOOTLOADER_DIR=`find $PACKAGES -type d -name $BOOTLOADER 2>/dev/null` + if [ -d "$BOOTLOADER_DIR"/files/3rdparty/bootloader/ ]; then + cp -PR $BOOTLOADER_DIR/files/3rdparty/bootloader/* $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System + fi - if [ -d "$BOOTLOADER_DIR"/files ]; then - cp -R $BOOTLOADER_DIR/files/* $RELEASE_DIR - fi + # copy Bootloader + cp -PR $BUILD/bcm2835-bootloader-*/LICENCE* $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/ + cp -PR $BUILD/bcm2835-bootloader-*/bootcode.bin $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/ + cp -PR $BUILD/bcm2835-bootloader-*/fixup_x.dat $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/fixup.dat + cp -PR $BUILD/bcm2835-bootloader-*/start_x.elf $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/start.elf + [ -f $BUILD/bcm2835-bootloader-*/dt-blob.bin ] && cp -PR $BUILD/bcm2835-bootloader-*/dt-blob.bin $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/dt-blob.bin - if [ -f $HOME/.openelec/projects/$PROJECT/bootloader/release ]; then - . $HOME/.openelec/projects/$PROJECT/bootloader/release - elif [ -f $HOME/.openelec/bootloader/release ]; then - . $HOME/.openelec/bootloader/release - elif [ -f $PROJECT_DIR/$PROJECT/bootloader/release ]; then - . $PROJECT_DIR/$PROJECT/bootloader/release - elif [ -f "$BOOTLOADER_DIR"/release ]; then - . $BOOTLOADER_DIR/release - fi - fi + # copy system files + cp $TARGET_IMG/$IMAGE_NAME.system $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/SYSTEM + cp $TARGET_IMG/$IMAGE_NAME.kernel $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/kernel.img - # MfgTool2 for TBS Matrix support (add it to .tar) - # only for matrix system or all? (one tar for all updates?) - if [ "$PROJECT" == "imx6" -a "$SYSTEM" == "matrix" ]; then - $SCRIPTS/unpack imx6-mfgtool2-tbs-matrix + for dtb in $INSTALL/usr/share/bootloader/*.dtb ; do + if [ -f $dtb ]; then + cp -PR $dtb $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System + fi + done - mkdir -p $RELEASE_DIR/MfgTool2-TBS-Matrix - cp -PR $BUILD/imx6-mfgtool2-tbs-matrix-*/* $RELEASE_DIR/MfgTool2-TBS-Matrix - fi + for overlay in $INSTALL/usr/share/bootloader/overlays/* ; do + if [ -f $overlay ]; then + mkdir -p $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/overlays + cp -PR $overlay $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/overlays + fi + done - cp $ROOT/README* $RELEASE_DIR - cp $ROOT/CHANGELOG* $RELEASE_DIR - echo "$TARGET_VERSION" > $RELEASE_DIR/RELEASE - - if [ -n "$MEDIACENTER" ] ; then - echo "Kodi commit: `scripts/git_version $MEDIACENTER`" >> $RELEASE_DIR/RELEASE - fi - - mkdir -p $RELEASE_DIR/licenses - cp $ROOT/licenses/* $RELEASE_DIR/licenses - - mkdir -p $RELEASE_DIR/target - cp $TARGET_IMG/$IMAGE_NAME.system $RELEASE_DIR/target/SYSTEM - cp $TARGET_IMG/$IMAGE_NAME.kernel $RELEASE_DIR/target/KERNEL # create md5sum's - ( cd $RELEASE_DIR; - md5sum -t target/SYSTEM > target/SYSTEM.md5; - md5sum -t target/KERNEL > target/KERNEL.md5; - ) + ( cd $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System; + md5sum -t SYSTEM > SYSTEM.md5; + md5sum -t kernel.img > kernel.img.md5; + ) - # create target directory - mkdir -p $TARGET_IMG + # copy additional files + mkdir -p $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/licenses + cp $ROOT/licenses/* $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/licenses + + # create Storage dir + mkdir -p $RELEASE_DIR/${DISTRONAME}_${PROJECT}/Storage # remove an previous created release tarball - rm -rf $TARGET_IMG/$IMAGE_NAME.tar + rm -rf $RELEASE_DIR/${DISTRONAME}_${PROJECT}/${DISTRONAME}_${PROJECT}_System.tar.xz + rm -rf $RELEASE_DIR/${DISTRONAME}_${PROJECT}/${DISTRONAME}_${PROJECT}_Storage.tar.xz + + # create filesystem tarballs + tar cJf $RELEASE_DIR/${DISTRONAME}_${PROJECT}/${DISTRONAME}_${PROJECT}_System.tar.xz -C $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/ . + tar cJf $RELEASE_DIR/${DISTRONAME}_${PROJECT}/${DISTRONAME}_${PROJECT}_Storage.tar.xz -C $RELEASE_DIR/${DISTRONAME}_${PROJECT}/Storage/ . + + # remove an filesystem dirs + rm -rf $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System + rm -rf $RELEASE_DIR/${DISTRONAME}_${PROJECT}/Storage + + # remove an previous created release tarball + rm -rf $TARGET_IMG/${IMAGE_NAME}-$1.tar # create release tarball - tar cf $TARGET_IMG/$IMAGE_NAME.tar -C target $IMAGE_NAME - - # create image files if requested - if [[ ( "$1" = "amlpkg" || "$1" = "noobs" || "$1" = "mkimage" ) && -n "$BOOTLOADER" ]]; then - # projects can set KERNEL_NAME (kernel.img) - if [ -z "$KERNEL_NAME" ] ; then - KERNEL_NAME="KERNEL" - fi - - UBOOT_SYSTEM="" - if [ "$PROJECT" == "imx6" ]; then - if [ -n "$SYSTEM" ]; then - UBOOT_SYSTEM="$SYSTEM" - else - UBOOT_SYSTEM="cuboxi" - fi - fi - - # variables used in image script must be passed - env \ - PATH="$PATH:/sbin" \ - ROOT="$ROOT" \ - TOOLCHAIN="$TOOLCHAIN" \ - PROJECT_DIR="$PROJECT_DIR" \ - PROJECT="$PROJECT" \ - DISTRO="$DISTRO" \ - TARGET_IMG="$TARGET_IMG" \ - IMAGE_NAME="$IMAGE_NAME" \ - BOOTLOADER="$BOOTLOADER" \ - KERNEL_NAME="$KERNEL_NAME" \ - RELEASE_DIR="$RELEASE_DIR" \ - UUID_SYSTEM="$(uuidgen)" \ - UUID_STORAGE="$(uuidgen)" \ - UBOOT_SYSTEM="$UBOOT_SYSTEM" \ - EXTRA_CMDLINE="$EXTRA_CMDLINE" \ - SYSTEM_SIZE="$SYSTEM_SIZE" \ - SYSTEM_PART_START="$SYSTEM_PART_START" \ - $SCRIPTS/mkimage - fi - - # cleanup release dir - rm -rf $RELEASE_DIR - - # create WeTek Play (Amlogic) ZIP update and auto-install packages if requested - if [ "$1" = "amlpkg" ]; then - echo "Creating Amlogic ZIP update package" - - INSTALL_SRC_DIR="$PROJECT_DIR/$PROJECT/install" - AML_PKG_DIR="$RELEASE_DIR/ampl-pkg" - - # create package directory - mkdir -p "$AML_PKG_DIR" - - # copy system and kernel images - mkdir -p "$AML_PKG_DIR/system" - cp $TARGET_IMG/$IMAGE_NAME.system $AML_PKG_DIR/system/SYSTEM - cp $TARGET_IMG/$IMAGE_NAME.kernel $AML_PKG_DIR/KERNEL - - # copy update-binary and updater-script - META_INF_DIR="$AML_PKG_DIR/META-INF/com/google/android" - mkdir -p "$META_INF_DIR" - cp $INSTALL_SRC_DIR/update-binary $META_INF_DIR - cp $INSTALL_SRC_DIR/updater-script $META_INF_DIR - - # copy other files if any - if [ -d "$INSTALL_SRC_DIR/files" ]; then - cp -PR $INSTALL_SRC_DIR/files/* $AML_PKG_DIR - fi - - # copy device tree image if any - if [ -f "$INSTALL/usr/share/bootloader/dtb.img" ]; then - cp "$INSTALL/usr/share/bootloader/dtb.img" $AML_PKG_DIR/dtb.img - fi - - # create the update package - pushd "$AML_PKG_DIR" > /dev/null - zip -rq update.zip * - - # sign the update package - echo "Signing the update package" - mkdir -p sign - SIGNAPK_DIR="$ROOT/tools/signapk" - java -Xmx1024m -jar $SIGNAPK_DIR/signapk.jar -w $SIGNAPK_DIR/testkey.x509.pem $SIGNAPK_DIR/testkey.pk8 update.zip sign/$IMAGE_NAME-update.zip - - # create the auto-install package - if [ -f "$INSTALL_SRC_DIR/files/recovery.img" ]; then - echo "Creating Amlogic ZIP auto-install package" - pushd sign > /dev/null - echo --update_package=/sdcard/$IMAGE_NAME-update.zip > factory_update_param.aml - cp $INSTALL_SRC_DIR/files/recovery.img . - - if [ -f $INSTALL_SRC_DIR/files/aml_autoscript ]; then - cp $INSTALL_SRC_DIR/files/aml_autoscript . - fi - - # copy device tree image if any - if [ -f "$ROOT/$INSTALL/usr/share/bootloader/dtb.img" ]; then - cp "$ROOT/$INSTALL/usr/share/bootloader/dtb.img" . - fi - - zip -q $TARGET_IMG/$IMAGE_NAME.zip * - popd > /dev/null - fi - - popd > /dev/null - - # cleanup release dir - rm -rf $RELEASE_DIR - - elif [ "$1" = "noobs" ]; then - - RELEASE_DIR="$TARGET_IMG/${IMAGE_NAME}-$1" - - # cleanup - rm -rf $RELEASE_DIR - - # create release dir - mkdir -p $RELEASE_DIR/${DISTRONAME}_${PROJECT} - - if [ -f $DISTRO_DIR/$DISTRO/${DISTRONAME}_40x40.png ]; then - cp -PR $DISTRO_DIR/$DISTRO/${DISTRONAME}_40x40.png $RELEASE_DIR/${DISTRONAME}_${PROJECT}/${DISTRONAME}_${PROJECT}.png - else - cp -PR $DISTRO_DIR/$DISTRO/${DISTRONAME}.png $RELEASE_DIR/${DISTRONAME}_${PROJECT}/${DISTRONAME}_${PROJECT}.png - fi - cp -PR $ROOT/config/noobs/os.json $RELEASE_DIR/${DISTRONAME}_${PROJECT} - cp -PR $ROOT/config/noobs/partition_setup.sh $RELEASE_DIR/${DISTRONAME}_${PROJECT} - cp -PR $ROOT/config/noobs/partitions.json $RELEASE_DIR/${DISTRONAME}_${PROJECT} - if [ -d $DISTRO_DIR/$DISTRO/noobs/marketing ]; then - tar cf $RELEASE_DIR/${DISTRONAME}_${PROJECT}/marketing.tar -C $DISTRO_DIR/$DISTRO/noobs/marketing . - else - tar cf $RELEASE_DIR/${DISTRONAME}_${PROJECT}/marketing.tar -C $ROOT/config/noobs/marketing . - fi - cp $ROOT/README* $RELEASE_DIR/${DISTRONAME}_${PROJECT} - cp $ROOT/CHANGELOG $RELEASE_DIR/${DISTRONAME}_${PROJECT}/release_notes.txt - - - sed -e "s%@DISTRONAME@%$DISTRONAME%g" \ - -e "s%@PROJECT@%$PROJECT%g" \ - -e "s%@LIBREELEC_VERSION@%$LIBREELEC_VERSION%g" \ - -e "s%@RELEASE_DATE@%$(date +%F)%g" \ - -e "s%@KERNEL_VERSION@%$(kernel_version)%g" \ - -e "s%@DESCRIPTION@%$DESCRIPTION%g" \ - -e "s%@ROOT_PASSWORD@%$ROOT_PASSWORD%g" \ - -e "s%@NOOBS_SUPPORTED_MODELS@%$NOOBS_SUPPORTED_MODELS%g" \ - -e "s%@NOOBS_HEX@%$NOOBS_HEX%g" \ - -i $RELEASE_DIR/${DISTRONAME}_${PROJECT}/os.json - - 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 - mkdir -p $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System - - BOOTLOADER_DIR=`find $PACKAGES -type d -name $BOOTLOADER 2>/dev/null` - if [ -d "$BOOTLOADER_DIR"/files/3rdparty/bootloader/ ]; then - cp -PR $BOOTLOADER_DIR/files/3rdparty/bootloader/* $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System - fi - - # copy Bootloader - cp -PR $BUILD/bcm2835-bootloader-*/LICENCE* $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/ - cp -PR $BUILD/bcm2835-bootloader-*/bootcode.bin $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/ - cp -PR $BUILD/bcm2835-bootloader-*/fixup_x.dat $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/fixup.dat - cp -PR $BUILD/bcm2835-bootloader-*/start_x.elf $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/start.elf - [ -f $BUILD/bcm2835-bootloader-*/dt-blob.bin ] && cp -PR $BUILD/bcm2835-bootloader-*/dt-blob.bin $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/dt-blob.bin - - # copy system files - cp $TARGET_IMG/$IMAGE_NAME.system $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/SYSTEM - cp $TARGET_IMG/$IMAGE_NAME.kernel $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/kernel.img - - for dtb in $INSTALL/usr/share/bootloader/*.dtb ; do - if [ -f $dtb ]; then - cp -PR $dtb $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System - fi - done - - for overlay in $INSTALL/usr/share/bootloader/overlays/* ; do - if [ -f $overlay ]; then - mkdir -p $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/overlays - cp -PR $overlay $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/overlays - fi - done - - # create md5sum's - ( cd $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System; - md5sum -t SYSTEM > SYSTEM.md5; - md5sum -t kernel.img > kernel.img.md5; - ) - - # copy additional files - mkdir -p $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/licenses - cp $ROOT/licenses/* $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/licenses - - # create Storage dir - mkdir -p $RELEASE_DIR/${DISTRONAME}_${PROJECT}/Storage - - # remove an previous created release tarball - rm -rf $RELEASE_DIR/${DISTRONAME}_${PROJECT}/${DISTRONAME}_${PROJECT}_System.tar.xz - rm -rf $RELEASE_DIR/${DISTRONAME}_${PROJECT}/${DISTRONAME}_${PROJECT}_Storage.tar.xz - - # create filesystem tarballs - tar cJf $RELEASE_DIR/${DISTRONAME}_${PROJECT}/${DISTRONAME}_${PROJECT}_System.tar.xz -C $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/ . - tar cJf $RELEASE_DIR/${DISTRONAME}_${PROJECT}/${DISTRONAME}_${PROJECT}_Storage.tar.xz -C $RELEASE_DIR/${DISTRONAME}_${PROJECT}/Storage/ . - - # remove an filesystem dirs - rm -rf $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System - rm -rf $RELEASE_DIR/${DISTRONAME}_${PROJECT}/Storage - - # remove an previous created release tarball - rm -rf $TARGET_IMG/${IMAGE_NAME}-$1.tar - - # create release tarball - tar cf $TARGET_IMG/${IMAGE_NAME}-$1.tar -C $TARGET ${IMAGE_NAME}-$1 - - # cleanup noobs dir - rm -rf $RELEASE_DIR - fi + tar cf $TARGET_IMG/${IMAGE_NAME}-$1.tar -C $TARGET ${IMAGE_NAME}-$1 fi + + if [ -d $RELEASE_DIR ]; then + # cleanup release dir + rm -rf $RELEASE_DIR + fi +fi