image 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521
  1. #!/bin/bash
  2. ################################################################################
  3. # This file is part of OpenELEC - http://www.openelec.tv
  4. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  5. #
  6. # OpenELEC is free software: you can redistribute it and/or modify
  7. # it under the terms of the GNU General Public License as published by
  8. # the Free Software Foundation, either version 2 of the License, or
  9. # (at your option) any later version.
  10. #
  11. # OpenELEC is distributed in the hope that it will be useful,
  12. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. # GNU General Public License for more details.
  15. #
  16. # You should have received a copy of the GNU General Public License
  17. # along with OpenELEC. If not, see <http://www.gnu.org/licenses/>.
  18. ################################################################################
  19. . config/options $1
  20. show_config
  21. $SCRIPTS/checkdeps
  22. $SCRIPTS/build toolchain
  23. $SCRIPTS/build squashfs:host
  24. $SCRIPTS/build dosfstools:host
  25. $SCRIPTS/build fakeroot:host
  26. $SCRIPTS/build kmod:host
  27. $SCRIPTS/build mtools:host
  28. $SCRIPTS/build populatefs:host
  29. BUILD_DATE=`date +%Y%m%d%H%M%S`
  30. if [ "$LIBREELEC_VERSION" = devel ]; then
  31. if ! GIT_BUILD=$(git rev-list --count HEAD 2>/dev/null)
  32. then
  33. GIT_BUILD=$(git rev-list HEAD | wc -l)
  34. fi
  35. GIT_HASH=$(git rev-parse HEAD)
  36. GIT_ABBREV=$(git log -1 --pretty=format:%h)
  37. DEVEL_VERSION=$LIBREELEC_VERSION
  38. LIBREELEC_VERSION=$LIBREELEC_VERSION-$BUILD_DATE-r$GIT_BUILD-g$GIT_ABBREV
  39. fi
  40. TARGET_VERSION="$PROJECT.$TARGET_ARCH-$LIBREELEC_VERSION"
  41. IMAGE_NAME="$DISTRONAME-$TARGET_VERSION"
  42. if [ "$DEVEL_VERSION" = "devel" ] ; then
  43. IMAGE_NAME="$DISTRONAME-$PROJECT.$TARGET_ARCH-$OS_VERSION-$LIBREELEC_VERSION"
  44. fi
  45. if [ "$PROJECT" == "imx6" -a -n "$SYSTEM" ]; then
  46. IMAGE_NAME="$IMAGE_NAME-$SYSTEM"
  47. fi
  48. if [ -n "$IMAGE_SUFFIX" ]; then
  49. IMAGE_NAME="$IMAGE_NAME-$IMAGE_SUFFIX"
  50. fi
  51. # setup fakeroot
  52. rm -rf $FAKEROOT_SCRIPT # remove $FAKEROOT_SCRIPT if it exist
  53. touch $FAKEROOT_SCRIPT # create an empty $FAKEROOT_SCRIPT
  54. chmod +x $FAKEROOT_SCRIPT # make $FAKEROOT_SCRIPT executable
  55. echo "chown -R 0:0 $INSTALL" >> $FAKEROOT_SCRIPT
  56. # clean old install dirs
  57. rm -rf $INSTALL
  58. rm -rf $STAMPS_INSTALL
  59. mkdir -p $INSTALL
  60. # create baselayout
  61. mkdir -p $INSTALL/bin
  62. mkdir -p $INSTALL/etc
  63. mkdir -p $INSTALL/lib
  64. mkdir -p $INSTALL/sbin
  65. mkdir -p $INSTALL/dev
  66. mkdir -p $INSTALL/proc
  67. mkdir -p $INSTALL/run
  68. mkdir -p $INSTALL/sys
  69. mkdir -p $INSTALL/tmp
  70. mkdir -p $INSTALL/usr
  71. mkdir -p $INSTALL/var
  72. mkdir -p $INSTALL/flash
  73. mkdir -p $INSTALL/storage
  74. ln -sf /var/media $INSTALL/media
  75. if [ "$TARGET_ARCH" = "x86_64" -o "$TARGET_ARCH" = "powerpc64" ]; then
  76. ln -s /lib $INSTALL/lib64
  77. ln -s lib $INSTALL/usr/lib64
  78. fi
  79. echo "$TARGET_VERSION" > $INSTALL/etc/release
  80. # create /etc/os-release
  81. echo -e "NAME=\"$DISTRONAME\"" > $INSTALL/etc/os-release
  82. echo -e "VERSION=\"$LIBREELEC_VERSION\"" >> $INSTALL/etc/os-release
  83. echo -e "ID=\"libreelec\"" >> $INSTALL/etc/os-release
  84. echo -e "VERSION_ID=\"$OS_VERSION\"" >> $INSTALL/etc/os-release
  85. echo -e "PRETTY_NAME=\"$DISTRONAME ($([ "$OFFICIAL" = "yes" ] && echo "official" || echo "community")) - Version: $LIBREELEC_VERSION\"" >> $INSTALL/etc/os-release
  86. echo -e "HOME_URL=\"http://www.libreelec.tv\"" >> $INSTALL/etc/os-release
  87. echo -e "BUG_REPORT_URL=\"https://github.com/LibreELEC/LibreELEC.tv\"" >> $INSTALL/etc/os-release
  88. if [ -n "$GIT_HASH" ]; then
  89. echo -e "BUILD_ID=\"$GIT_HASH\"" >> $INSTALL/etc/os-release
  90. fi
  91. echo -e "LIBREELEC_ARCH=\"$PROJECT.$TARGET_ARCH\"" >> $INSTALL/etc/os-release
  92. if [ "$OFFICIAL" = "yes" ]; then
  93. echo -e "LIBREELEC_BUILD=\"official\"" >> $INSTALL/etc/os-release
  94. else
  95. echo -e "LIBREELEC_BUILD=\"community\"" >> $INSTALL/etc/os-release
  96. fi
  97. # create /etc/issue
  98. echo "$GREETING0" > $INSTALL/etc/issue
  99. echo "$GREETING1" >> $INSTALL/etc/issue
  100. echo "$GREETING2" >> $INSTALL/etc/issue
  101. echo "$GREETING3" >> $INSTALL/etc/issue
  102. echo "$GREETING4" >> $INSTALL/etc/issue
  103. echo "$DISTRONAME ($([ "$OFFICIAL" = "yes" ] && echo "official" || echo "community")) Version: $LIBREELEC_VERSION" >> $INSTALL/etc/issue
  104. if [ -n "$GIT_HASH" ]; then
  105. echo "$DISTRONAME git: $GIT_HASH" >> $INSTALL/etc/issue
  106. fi
  107. ln -sf /etc/issue $INSTALL/etc/motd
  108. # Basissystem...
  109. $SCRIPTS/install libc
  110. $SCRIPTS/install gcc
  111. $SCRIPTS/install linux
  112. $SCRIPTS/install linux-drivers
  113. $SCRIPTS/install linux-firmware
  114. $SCRIPTS/install $BOOTLOADER
  115. $SCRIPTS/install busybox
  116. $SCRIPTS/install util-linux
  117. $SCRIPTS/install corefonts
  118. $SCRIPTS/install network
  119. # Graphic support
  120. [ ! "$DISPLAYSERVER" = "no" ] && $SCRIPTS/install $DISPLAYSERVER
  121. # Multimedia support
  122. [ ! "$MEDIACENTER" = "no" ] && $SCRIPTS/install mediacenter
  123. # Sound support
  124. [ "$ALSA_SUPPORT" = "yes" ] && $SCRIPTS/install alsa
  125. # Automounter support
  126. [ "$UDEVIL" = "yes" ] && $SCRIPTS/install udevil
  127. # NTFS 3G support
  128. [ "$EXFAT" = "yes" ] && $SCRIPTS/install fuse-exfat
  129. # NTFS 3G support
  130. [ "$NTFS3G" = "yes" ] && $SCRIPTS/install ntfs-3g_ntfsprogs
  131. # Remote support
  132. [ "$REMOTE_SUPPORT" = "yes" ] && $SCRIPTS/install remote
  133. # LCD support
  134. [ ! "$LCD_DRIVER" = "none" ] && $SCRIPTS/install lcdproc
  135. # Installer support
  136. [ "$INSTALLER_SUPPORT" = "yes" ] && $SCRIPTS/install installer
  137. # Devtools... (not for Release)
  138. [ "$TESTING" = "yes" ] && $SCRIPTS/install testing
  139. [ "$DEVTOOLS" = "yes" ] && $SCRIPTS/install debug
  140. # OEM packages
  141. [ "$OEM_SUPPORT" = "yes" ] && $SCRIPTS/install oem
  142. # copy project related files to filesystem
  143. if [ -d "$PROJECT_DIR/$PROJECT/filesystem" ]; then
  144. cp -PR $PROJECT_DIR/$PROJECT/filesystem/* $INSTALL
  145. # install project specific systemd services
  146. for service in $PROJECT_DIR/$PROJECT/filesystem/usr/lib/systemd/system/*.service ; do
  147. if [ -f "$service" ] ; then
  148. enable_service $(basename $service)
  149. fi
  150. done
  151. fi
  152. # copy vendor related files to filesystem
  153. if [ -d "$HOME/.libreelec/filesystem" ]; then
  154. cp -PR $HOME/.libreelec/filesystem/* $INSTALL
  155. # install project specific systemd services
  156. for service in $HOME/.libreelec/filesystem/usr/lib/systemd/system/*.service ; do
  157. if [ -f "$service" ] ; then
  158. enable_service $(basename $service)
  159. fi
  160. done
  161. fi
  162. # copy vendor project related files to filesystem
  163. if [ -d "$HOME/.libreelec/projects/$PROJECT/filesystem" ]; then
  164. cp -PR $HOME/.libreelec/projects/$PROJECT/filesystem/* $INSTALL
  165. # install project specific systemd services
  166. for service in $HOME/.libreelec/projects/$PROJECT/filesystem/usr/lib/systemd/system/*.service ; do
  167. if [ -f "$service" ] ; then
  168. enable_service $(basename $service)
  169. fi
  170. done
  171. fi
  172. # run depmod
  173. MODVER=$(basename $(ls -d $INSTALL/lib/modules/*))
  174. find $INSTALL/lib/modules/$MODVER/ -name *.ko | \
  175. sed -e "s,$INSTALL/lib/modules/$MODVER/,," > $INSTALL/lib/modules/$MODVER/modules.order
  176. $ROOT/$TOOLCHAIN/bin/depmod -b $INSTALL $MODVER 2> /dev/null
  177. # strip kernel modules
  178. for MOD in `find $INSTALL/lib/modules/ -type f -name *.ko`; do
  179. $STRIP --strip-debug $MOD
  180. done
  181. # make target dir
  182. mkdir -p $TARGET_IMG
  183. rm -rf $TARGET_IMG/$IMAGE_NAME.kernel
  184. # copy kernel to target dir
  185. if [ "$BOOTLOADER" = "bcm2835-bootloader" ]; then
  186. echo "injecting DeviceTreeBlobs to kernel..."
  187. perl $BUILD/linux-$(kernel_version)/scripts/mkknlimg $BUILD/linux-$(kernel_version)/arch/$TARGET_KERNEL_ARCH/boot/$KERNEL_TARGET $TARGET_IMG/$IMAGE_NAME.kernel
  188. echo "...done"
  189. else
  190. cp -PR $BUILD/linux-$(kernel_version)/arch/$TARGET_KERNEL_ARCH/boot/$KERNEL_TARGET $TARGET_IMG/$IMAGE_NAME.kernel
  191. fi
  192. chmod 0644 $TARGET_IMG/$IMAGE_NAME.kernel
  193. # create squashfs file
  194. if [ -z "$SQUASHFS_COMPRESSION" ]; then
  195. SQUASHFS_COMPRESSION="gzip"
  196. fi
  197. echo "rm -rf $TARGET_IMG/$IMAGE_NAME.system" >> $FAKEROOT_SCRIPT
  198. echo "$ROOT/$TOOLCHAIN/bin/mksquashfs $BUILD/image/system $TARGET_IMG/$IMAGE_NAME.system -noappend -comp $SQUASHFS_COMPRESSION" >> $FAKEROOT_SCRIPT
  199. # run fakeroot
  200. $ROOT/$TOOLCHAIN/bin/fakeroot -- $FAKEROOT_SCRIPT
  201. rm -rf $FAKEROOT_SCRIPT
  202. # set permissions
  203. chmod 0644 $TARGET_IMG/$IMAGE_NAME.system
  204. if [ "$1" = "release" -o "$1" = "mkimage" -o "$1" = "amlpkg" ]; then
  205. RELEASE_DIR="target/$IMAGE_NAME"
  206. # cleanup
  207. rm -rf $RELEASE_DIR
  208. # create release dir
  209. mkdir -p $RELEASE_DIR
  210. # remove n previous created release image
  211. rm -rf $TARGET_IMG/$IMAGE_NAME.img.gz
  212. if [ -n "$BOOTLOADER" ]; then
  213. BOOTLOADER_DIR=""
  214. if [ -z "$BOOTLOADER_DIR" -a -d $HOME/.openelec/projects/$PROJECT/packages ]; then
  215. BOOTLOADER_DIR=`find $HOME/.openelec/projects/$PROJECT/packages -type d -name $BOOTLOADER 2>/dev/null`
  216. fi
  217. if [ -z "$BOOTLOADER_DIR" -a -d $HOME/.openelec/packages ]; then
  218. BOOTLOADER_DIR=`find $HOME/.openelec/packages -type d -name $BOOTLOADER 2>/dev/null`
  219. fi
  220. if [ -z "$BOOTLOADER_DIR" -a -d $PROJECT_DIR/$PROJECT/packages ]; then
  221. BOOTLOADER_DIR=`find $PROJECT_DIR/$PROJECT/packages -type d -name $BOOTLOADER 2>/dev/null`
  222. fi
  223. if [ -z "$BOOTLOADER_DIR" -o ! -d "$BOOTLOADER_DIR" ]; then
  224. BOOTLOADER_DIR=`find $PACKAGES -type d -name $BOOTLOADER 2>/dev/null`
  225. fi
  226. if [ -d "$BOOTLOADER_DIR"/files ]; then
  227. cp -R $BOOTLOADER_DIR/files/* $RELEASE_DIR
  228. fi
  229. if [ -f $HOME/.openelec/projects/$PROJECT/bootloader/release ]; then
  230. . $HOME/.openelec/projects/$PROJECT/bootloader/release
  231. elif [ -f $HOME/.openelec/bootloader/release ]; then
  232. . $HOME/.openelec/bootloader/release
  233. elif [ -f $PROJECT_DIR/$PROJECT/bootloader/release ]; then
  234. . $PROJECT_DIR/$PROJECT/bootloader/release
  235. elif [ -f "$BOOTLOADER_DIR"/release ]; then
  236. . $BOOTLOADER_DIR/release
  237. fi
  238. fi
  239. # MfgTool2 for TBS Matrix support (add it to .tar)
  240. # only for matrix system or all? (one tar for all updates?)
  241. if [ "$PROJECT" == "imx6" -a "$SYSTEM" == "matrix" ]; then
  242. $SCRIPTS/unpack imx6-mfgtool2-tbs-matrix
  243. mkdir -p $RELEASE_DIR/MfgTool2-TBS-Matrix
  244. cp -PR $BUILD/imx6-mfgtool2-tbs-matrix-*/* $RELEASE_DIR/MfgTool2-TBS-Matrix
  245. fi
  246. cp $ROOT/README* $RELEASE_DIR
  247. cp $ROOT/CHANGELOG* $RELEASE_DIR
  248. echo "$TARGET_VERSION" > $RELEASE_DIR/RELEASE
  249. if [ -n "$MEDIACENTER" ] ; then
  250. echo "Kodi commit: `scripts/git_version $MEDIACENTER`" >> $RELEASE_DIR/RELEASE
  251. fi
  252. mkdir -p $RELEASE_DIR/licenses
  253. cp $ROOT/licenses/* $RELEASE_DIR/licenses
  254. mkdir -p $RELEASE_DIR/target
  255. cp $TARGET_IMG/$IMAGE_NAME.system $RELEASE_DIR/target/SYSTEM
  256. cp $TARGET_IMG/$IMAGE_NAME.kernel $RELEASE_DIR/target/KERNEL
  257. # create md5sum's
  258. ( cd $RELEASE_DIR;
  259. md5sum -t target/SYSTEM > target/SYSTEM.md5;
  260. md5sum -t target/KERNEL > target/KERNEL.md5;
  261. )
  262. # create target directory
  263. mkdir -p $TARGET_IMG
  264. # remove an previous created release tarball
  265. rm -rf $TARGET_IMG/$IMAGE_NAME.tar
  266. # create release tarball
  267. tar cf $TARGET_IMG/$IMAGE_NAME.tar -C target $IMAGE_NAME
  268. # create image files if requested
  269. if [ "$1" = "mkimage" -a -n "$BOOTLOADER" ]; then
  270. # projects can set KERNEL_NAME (kernel.img)
  271. if [ -z "$KERNEL_NAME" ] ; then
  272. KERNEL_NAME="KERNEL"
  273. fi
  274. UBOOT_SYSTEM=""
  275. if [ "$PROJECT" == "imx6" ]; then
  276. if [ -n "$SYSTEM" ]; then
  277. UBOOT_SYSTEM="$SYSTEM"
  278. else
  279. UBOOT_SYSTEM="cuboxi"
  280. fi
  281. fi
  282. # variables used in image script must be passed
  283. env \
  284. PATH="$PATH:/sbin" \
  285. ROOT="$ROOT" \
  286. TOOLCHAIN="$TOOLCHAIN" \
  287. TARGET_IMG="$TARGET_IMG" \
  288. IMAGE_NAME="$IMAGE_NAME" \
  289. BOOTLOADER="$BOOTLOADER" \
  290. KERNEL_NAME="$KERNEL_NAME" \
  291. RELEASE_DIR="$RELEASE_DIR" \
  292. UUID_SYSTEM="$(uuidgen)" \
  293. UUID_STORAGE="$(uuidgen)" \
  294. UBOOT_SYSTEM="$UBOOT_SYSTEM" \
  295. EXTRA_CMDLINE="$EXTRA_CMDLINE" \
  296. $SCRIPTS/mkimage
  297. fi
  298. # create WeTek Play (Amlogic) ZIP update and auto-install packages if requested
  299. if [ "$1" = "amlpkg" ]; then
  300. echo "Creating Amlogic ZIP update package"
  301. INSTALL_SRC_DIR="$PROJECT_DIR/$PROJECT/install"
  302. AML_PKG_DIR="$RELEASE_DIR/ampl-pkg"
  303. # create package directory
  304. mkdir -p "$AML_PKG_DIR"
  305. # copy system and kernel images
  306. mkdir -p "$AML_PKG_DIR/system"
  307. cp $TARGET_IMG/$IMAGE_NAME.system $AML_PKG_DIR/system/SYSTEM
  308. cp $TARGET_IMG/$IMAGE_NAME.kernel $AML_PKG_DIR/KERNEL
  309. # copy update-binary and updater-script
  310. META_INF_DIR="$AML_PKG_DIR/META-INF/com/google/android"
  311. mkdir -p "$META_INF_DIR"
  312. cp $INSTALL_SRC_DIR/update-binary $META_INF_DIR
  313. cp $INSTALL_SRC_DIR/updater-script $META_INF_DIR
  314. # copy other files if any
  315. if [ -d "$INSTALL_SRC_DIR/files" ]; then
  316. cp -PR $INSTALL_SRC_DIR/files/* $AML_PKG_DIR
  317. fi
  318. # create the update package
  319. pushd "$AML_PKG_DIR" > /dev/null
  320. zip -rq update.zip *
  321. # sign the update package
  322. echo "Signing the update package"
  323. mkdir -p sign
  324. SIGNAPK_DIR="$ROOT/tools/signapk"
  325. java -Xmx1024m -jar $SIGNAPK_DIR/signapk.jar -w $SIGNAPK_DIR/testkey.x509.pem $SIGNAPK_DIR/testkey.pk8 update.zip sign/$IMAGE_NAME-update.zip
  326. # create the auto-install package
  327. if [ -f "$INSTALL_SRC_DIR/files/recovery.img" ]; then
  328. echo "Creating Amlogic ZIP auto-install package"
  329. pushd sign > /dev/null
  330. echo --update_package=/sdcard/$IMAGE_NAME-update.zip > factory_update_param.aml
  331. cp $INSTALL_SRC_DIR/files/recovery.img .
  332. if [ -f $INSTALL_SRC_DIR/files/aml_autoscript ]; then
  333. cp $INSTALL_SRC_DIR/files/aml_autoscript .
  334. fi
  335. zip -q $TARGET_IMG/$IMAGE_NAME.zip *
  336. popd > /dev/null
  337. fi
  338. # copy update package to target directory
  339. cp sign/$IMAGE_NAME-update.zip $TARGET_IMG
  340. popd > /dev/null
  341. fi
  342. # cleanup release dir
  343. rm -rf $RELEASE_DIR
  344. elif [ "$1" = "noobs" ]; then
  345. RELEASE_DIR="$TARGET_IMG/${IMAGE_NAME}-$1"
  346. # cleanup
  347. rm -rf $RELEASE_DIR
  348. # create release dir
  349. mkdir -p $RELEASE_DIR/${DISTRONAME}_${PROJECT}
  350. cp -PR $DISTRO_DIR/$DISTRO/${DISTRONAME}.png $RELEASE_DIR/${DISTRONAME}_${PROJECT}/${DISTRONAME}_${PROJECT}.png
  351. cp -PR $ROOT/config/noobs/os.json $RELEASE_DIR/${DISTRONAME}_${PROJECT}
  352. cp -PR $ROOT/config/noobs/partition_setup.sh $RELEASE_DIR/${DISTRONAME}_${PROJECT}
  353. cp -PR $ROOT/config/noobs/partitions.json $RELEASE_DIR/${DISTRONAME}_${PROJECT}
  354. if [ -d $DISTRO_DIR/$DISTRO/noobs/marketing ]; then
  355. tar cf $RELEASE_DIR/${DISTRONAME}_${PROJECT}/marketing.tar -C $DISTRO_DIR/$DISTRO/noobs/marketing .
  356. else
  357. tar cf $RELEASE_DIR/${DISTRONAME}_${PROJECT}/marketing.tar -C $ROOT/config/noobs/marketing .
  358. fi
  359. cp $ROOT/README* $RELEASE_DIR/${DISTRONAME}_${PROJECT}
  360. cp $ROOT/CHANGELOG $RELEASE_DIR/${DISTRONAME}_${PROJECT}/release_notes.txt
  361. sed -e "s%@DISTRONAME@%$DISTRONAME%g" \
  362. -e "s%@PROJECT@%$PROJECT%g" \
  363. -e "s%@LIBREELEC_VERSION@%$LIBREELEC_VERSION%g" \
  364. -e "s%@RELEASE_DATE@%$(date +%F)%g" \
  365. -e "s%@KERNEL_VERSION@%$(kernel_version)%g" \
  366. -e "s%@DESCRIPTION@%$DESCRIPTION%g" \
  367. -e "s%@ROOT_PASSWORD@%$ROOT_PASSWORD%g" \
  368. -e "s%@NOOBS_SUPPORTED_MODELS@%$NOOBS_SUPPORTED_MODELS%g" \
  369. -e "s%@NOOBS_HEX@%$NOOBS_HEX%g" \
  370. -i $RELEASE_DIR/${DISTRONAME}_${PROJECT}/os.json
  371. sed -e "s%@DISTRONAME@%$DISTRONAME%g" \
  372. -e "s%@PROJECT@%$PROJECT%g" \
  373. -i $RELEASE_DIR/${DISTRONAME}_${PROJECT}/partitions.json
  374. # create System dir
  375. mkdir -p $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System
  376. BOOTLOADER_DIR=`find $PACKAGES -type d -name $BOOTLOADER 2>/dev/null`
  377. if [ -d "$BOOTLOADER_DIR"/files/3rdparty/bootloader/ ]; then
  378. cp -PR $BOOTLOADER_DIR/files/3rdparty/bootloader/* $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System
  379. fi
  380. # copy Bootloader
  381. cp -PR $BUILD/bcm2835-bootloader-*/LICENCE* $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/
  382. cp -PR $BUILD/bcm2835-bootloader-*/bootcode.bin $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/
  383. cp -PR $BUILD/bcm2835-bootloader-*/fixup_x.dat $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/fixup.dat
  384. cp -PR $BUILD/bcm2835-bootloader-*/start_x.elf $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/start.elf
  385. # copy system files
  386. cp $TARGET_IMG/$IMAGE_NAME.system $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/SYSTEM
  387. cp $TARGET_IMG/$IMAGE_NAME.kernel $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/kernel.img
  388. for dtb in $INSTALL/usr/share/bootloader/*.dtb ; do
  389. if [ -f $dtb ]; then
  390. cp -PR $dtb $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System
  391. fi
  392. done
  393. for overlay in $INSTALL/usr/share/bootloader/overlays/* ; do
  394. if [ -f $overlay ]; then
  395. mkdir -p $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/overlays
  396. cp -PR $overlay $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/overlays
  397. fi
  398. done
  399. # create md5sum's
  400. ( cd $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System;
  401. md5sum -t SYSTEM > SYSTEM.md5;
  402. md5sum -t kernel.img > kernel.img.md5;
  403. )
  404. # copy additional files
  405. mkdir -p $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/licenses
  406. cp $ROOT/licenses/* $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/licenses
  407. # create Storage dir
  408. mkdir -p $RELEASE_DIR/${DISTRONAME}_${PROJECT}/Storage
  409. # remove an previous created release tarball
  410. rm -rf $RELEASE_DIR/${DISTRONAME}_${PROJECT}/${DISTRONAME}_${PROJECT}_System.tar.xz
  411. rm -rf $RELEASE_DIR/${DISTRONAME}_${PROJECT}/${DISTRONAME}_${PROJECT}_Storage.tar.xz
  412. # create filesystem tarballs
  413. tar cJf $RELEASE_DIR/${DISTRONAME}_${PROJECT}/${DISTRONAME}_${PROJECT}_System.tar.xz -C $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System/ .
  414. tar cJf $RELEASE_DIR/${DISTRONAME}_${PROJECT}/${DISTRONAME}_${PROJECT}_Storage.tar.xz -C $RELEASE_DIR/${DISTRONAME}_${PROJECT}/Storage/ .
  415. # remove an filesystem dirs
  416. rm -rf $RELEASE_DIR/${DISTRONAME}_${PROJECT}/System
  417. rm -rf $RELEASE_DIR/${DISTRONAME}_${PROJECT}/Storage
  418. # remove an previous created release tarball
  419. rm -rf $TARGET_IMG/${IMAGE_NAME}-$1.tar
  420. # create release tarball
  421. tar cf $TARGET_IMG/${IMAGE_NAME}-$1.tar -C $TARGET ${IMAGE_NAME}-$1
  422. # cleanup release dir
  423. rm -rf $RELEASE_DIR
  424. fi