Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Path: blob/next/scripts/build-all-ng.sh
Views: 3960
#!/bin/bash1#2# Copyright (c) 2013-2021 Igor Pecovnik, igor.pecovnik@gma**.com3#4# This file is licensed under the terms of the GNU General Public5# License version 2. This program is licensed "as is" without any6# warranty of any kind, whether express or implied.789# Functions:10# unset_all11# pack_upload12# build_main13# array_contains14# check_hash15# build_all161718[[ -z $START ]] && START="0"19[[ -z $BSP_BUILD ]] && BSP_BUILD="no"20[[ -z $MULTITHREAD ]] && MULTITHREAD="0"21[[ -z $STABILITY ]] && STABILITY="stable"22[[ -z $BUILD_OPT ]] && BUILD_OPT="image"23[[ -z $BRANCH_OVER ]] && BRANCH_OVER=""24[[ -z $RELEASE_OVER ]] && RELEASE_OVER=""25[[ -z $CLEAN_LEVEL ]] && CLEAN_LEVEL="oldcache"26[[ -z $KERNEL_CONFIGURE ]] && KERNEL_CONFIGURE="no"2728# cleanup29rm -f /run/orangepi/*.pid30mkdir -p /run/orangepi3132# read user defined targets if exits33if [[ -f $USERPATCHES_PATH/targets.conf ]]; then3435display_alert "Adding user provided targets configuration"36BUILD_TARGETS="${USERPATCHES_PATH}/targets.conf"3738else3940BUILD_TARGETS="${EXTER}/config/targets.conf"4142fi4344unset_all ()45{46unset LINUXFAMILY LINUXCONFIG KERNELDIR KERNELSOURCE KERNELBRANCH BOOTDIR BOOTSOURCE BOOTBRANCH ARCH UBOOT_USE_GCC \47KERNEL_USE_GCC CPUMIN CPUMAX UBOOT_VER KERNEL_VER GOVERNOR BOOTSIZE BOOTFS_TYPE UBOOT_TOOLCHAIN KERNEL_TOOLCHAIN \48DEBOOTSTRAP_LIST PACKAGE_LIST_EXCLUDE KERNEL_IMAGE_TYPE write_uboot_platform family_tweaks family_tweaks_bsp \49setup_write_uboot_platform uboot_custom_postprocess atf_custom_postprocess family_tweaks_s BOOTSCRIPT \50UBOOT_TARGET_MAP LOCALVERSION UBOOT_COMPILER KERNEL_COMPILER BOOTCONFIG_VAR_NAME INITRD_ARCH BOOTENV_FILE BOOTDELAY \51ATF_TOOLCHAIN2 MOUNT SDCARD BOOTPATCHDIR KERNELPATCHDIR RELEASE IMAGE_TYPE OVERLAY_PREFIX ASOUND_STATE ATF_COMPILER \52ATF_USE_GCC ATFSOURCE ATFDIR ATFBRANCH ATFSOURCEDIR PACKAGE_LIST_RM NM_IGNORE_DEVICES DISPLAY_MANAGER \53family_tweaks_bsp_s CRYPTROOT_ENABLE CRYPTROOT_PASSPHRASE CRYPTROOT_SSH_UNLOCK CRYPTROOT_SSH_UNLOCK_PORT \54CRYPTROOT_SSH_UNLOCK_KEY_NAME ROOT_MAPPER NETWORK HDMI USB WIRELESS ARMBIANMONITOR FORCE_BOOTSCRIPT_UPDATE \55UBOOT_TOOLCHAIN2 toolchain2 BUILD_REPOSITORY_URL BUILD_REPOSITORY_COMMIT BUILD_TARGET HOST BUILD_IMAGE \56DEB_STORAGE REPO_STORAGE REPO_CONFIG REPOSITORY_UPDATE PACKAGE_LIST_RELEASE LOCAL_MIRROR COMPILE_ATF \57PACKAGE_LIST_BOARD PACKAGE_LIST_FAMILY PACKAGE_LIST_DESKTOP_BOARD PACKAGE_LIST_DESKTOP_FAMILY ATF_COMPILE ATFPATCHDIR OFFSET BOOTSOURCEDIR BOOT_USE_BLOBS \58BOOT_SOC DDR_BLOB MINILOADER_BLOB BL31_BLOB BOOT_RK3328_USE_AYUFAN_ATF BOOT_USE_BLOBS BOOT_RK3399_LEGACY_HYBRID \59BOOT_USE_MAINLINE_ATF BOOT_USE_TPL_SPL_BLOB OFFLINE_WORK IMAGE_PARTITION_TABLE BOOT_LOGO60}6162pack_upload ()63{64# pack and upload to server or just pack6566local version="${BOARD^}_${REVISION}_${RELEASE}_${BRANCH}_${VER/-$LINUXFAMILY/}"67local subdir=""6869cd "${DESTIMG}" || exit7071if [[ -n "${SEND_TO_SERVER}" ]]; then72ssh "${SEND_TO_SERVER}" "mkdir -p ${SEND_TO_LOCATION}${BOARD}/{archive,nightly}" &73display_alert "Uploading" "Please wait!" "info"74nice -n 19 bash -c "rsync -arP --info=progress2 --prune-empty-dirs $DESTIMG/ -e 'ssh -T -c aes128-ctr -o Compression=no -x -p 22' ${SEND_TO_SERVER}:${SEND_TO_LOCATION}${BOARD}/${subdir}; rm -rf ${DESTIMG}/*" &75fi76}77787980build_main ()81{8283# build images which we do pack or kernel84#local upload_image="${BOARD^}_$(cat ${SRC}/VERSION)_${RELEASE}_${BRANCH}_*${VER/-$LINUXFAMILY/}"85#local upload_subdir="archive"8687[[ $BUILD_DESKTOP == yes ]] && upload_image=${upload_image}_desktop88[[ $BUILD_MINIMAL == yes ]] && upload_image=${upload_image}_minimal8990touch "/run/orangepi/${BOARD^}_${BRANCH}_${RELEASE}_${BUILD_DESKTOP}_${BUILD_MINIMAL}.pid";9192if [[ $BUILD_OPT == image ]]; then9394#if ssh ${SEND_TO_SERVER} stat ${SEND_TO_LOCATION}${BOARD}/${upload_subdir}/${upload_image}* \> /dev/null 2\>\&1; then95# echo "$n exists $upload_image"96#else97#shellcheck source=main.sh98source "${SRC}"/scripts/main.sh99#[[ $BSP_BUILD != yes ]] && pack_upload100#fi101else102103source "${SRC}"/scripts/main.sh104fi105106echo -e "\n"107rm "/run/orangepi/${BOARD^}_${BRANCH}_${RELEASE}_${BUILD_DESKTOP}_${BUILD_MINIMAL}.pid"108}109110111112113array_contains ()114{115116# utility snippet117118local array="$1[@]"119local seeking=$2120local in=1121122for element in "${!array}"; do123if [[ "${element}" == "${seeking}" ]]; then124in=0125break126fi127done128return $in129}130131132133134function build_all()135{136137# main routine138139buildall_start=$(date +%s)140n=0141ARRAY=()142buildlist="cat "143144if [[ -f $USERPATCHES_PATH/build_all.config ]]; then145146source $USERPATCHES_PATH/build_all.config147148elif [[ -f $EXTER/config/templates/build_all.config ]]; then149150cp $EXTER/config/templates/build_all.config $USERPATCHES_PATH/151source $USERPATCHES_PATH/build_all.config152fi153154# building selected ones155if [[ -n ${REBUILD_IMAGES} ]]; then156157buildlist="grep -w '"158filter="'"159for build in $(tr ',' ' ' <<< "${REBUILD_IMAGES}"); do160buildlist=$buildlist"$build\|"161filter=$filter"$build\|"162done163buildlist=${buildlist::-2}"'"164filter=${filter::-2}"'"165fi166167# find unique boards - we will build debs for all variants168sorted_unique_ids=($(echo "${ids[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' '))169unique_boards=$(eval "${buildlist}" ${EXTER}/config/targets.conf | sed '/^#/ d' | awk '{print $1}')170read -a unique_boards <<< $(echo "${unique_boards[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ')171172while read -r line; do173174[[ "${line}" =~ ^#.*$ ]] && continue175[[ -n "${REBUILD_IMAGES}" ]] && [[ -z $(echo "${line}" | eval grep -w "${filter}") ]] && continue176#[[ $n -lt $START ]] && ((n+=1)) && continue177178unset_all179# unset also board related variables180unset BOARDFAMILY DESKTOP_AUTOLOGIN DEFAULT_CONSOLE FULL_DESKTOP MODULES_CURRENT MODULES_LEGACY MODULES_DEV \181BOOTCONFIG MODULES_BLACKLIST_LEGACY MODULES_BLACKLIST_CURRENT MODULES_BLACKLIST_DEV DEFAULT_OVERLAYS SERIALCON \182BUILD_MINIMAL RELEASE ATFBRANCH BOOT_FDT_FILE BOOTCONFIG_DEV183184read -r BOARD BRANCH RELEASE BUILD_TARGET BUILD_STABILITY BUILD_IMAGE <<< "${line}"185186# read all possible configurations187source ${EXTER}"/config/boards/${BOARD}".conf 2> /dev/null188189# override branch to build selected branches if defined190[[ -n "${BRANCH_OVER}" ]] && [[ ${BRANCH} != ${BRANCH_OVER} ]] && continue191# override release to build selected release if defined192[[ -n "${RELEASE_OVER}" ]] && [[ "$RELEASE" != ${RELEASE_OVER} ]] && continue193# override board to build selected board if defined194[[ -n "${BOARD_OVER}" ]] && [[ "$BOARD" != ${BOARD_OVER} ]] && continue195196# small optimisation. we only (try to) build needed kernels197if [[ $BUILD_OPT == kernel ]]; then198199source "${EXTER}/config/sources/families/${BOARDFAMILY}.conf" 2> /dev/null200array_contains ARRAY "${LINUXFAMILY}${BRANCH}${BUILD_STABILITY}" && continue201ARRAY+=("${LINUXFAMILY}${BRANCH}${BUILD_STABILITY}")202BOARDFAMILY=${LINUXFAMILY}203204elif [[ $BUILD_OPT == u-boot ]]; then205206source "${EXTER}/config/sources/families/${BOARDFAMILY}.conf" 2> /dev/null207array_contains ARRAY "${BOARD}${BRANCH}${BUILD_STABILITY}" && continue208ARRAY+=("${BOARD}${BRANCH}${BUILD_STABILITY}")209210elif [[ $BUILD_IMAGE == no ]] ; then211212continue213fi214215BUILD_DESKTOP="no"216BUILD_MINIMAL="no"217218[[ ${BUILD_TARGET} == "desktop" ]] && BUILD_DESKTOP="yes"219[[ ${BUILD_TARGET} == "minimal" ]] && BUILD_MINIMAL="yes"220221# create beta or stable222if [[ "${BUILD_STABILITY}" == "${STABILITY}" ]]; then223224((n+=1))225226if [[ $1 != "dryrun" ]] && [[ $n -ge $START ]]; then227228while :229do230[[ $(find /run/orangepi/*.pid 2>/dev/null | wc -l) -le ${MULTITHREAD} || -z ${MULTITHREAD} ]] && break231sleep 5232done233234display_alert "Building ${n}."235(build_main)236237# create BSP for all boards238elif [[ "${BSP_BUILD}" == yes ]]; then239240for BOARD in "${unique_boards[@]}"241do242source ${EXTER}"/config/boards/${BOARD}".conf 2> /dev/null243IFS=',' read -a RELBRANCH <<< $KERNEL_TARGET244for BRANCH in "${RELBRANCH[@]}"245do246RELTARGETS=(xenial buster bionic focal)247for RELEASE in "${RELTARGETS[@]}"248do249display_alert "BSP for ${BOARD} ${BRANCH} ${RELEASE}."250build_main251# unset non board related stuff252unset_all253done254done255done256display_alert "Done building all BSP images"257exit258else259# In dryrun it only prints out what will be build260printf "%s\t%-32s\t%-8s\t%-14s\t%-6s\t%-6s\t%-6s\n" "${n}." \261"$BOARD (${BOARDFAMILY})" "${BRANCH}" "${RELEASE}" "${BUILD_DESKTOP}" "${BUILD_MINIMAL}"262fi263fi264265done < "${BUILD_TARGETS}"266267}268269# display what will be build270echo ""271display_alert "Building all targets" "$STABILITY - $BUILD_OPT"272273printf "\n%s\t%-32s\t%-8s\t%-14s\t%-6s\t%-6s\t%-6s\n\n" "" "board" "branch" "release" "XFCE" "minimal"274275# display what we will build276build_all "dryrun"277278if [[ $BUILD_ALL != demo ]] ; then279280echo ""281# build282build_all283284fi285286# wait until they are not finshed287sleep 5288while :289do290if [[ $(df | grep -c .tmp) -lt 1 ]]; then291break292fi293sleep 5294done295296while :297do298if [[ -z $(ps -uax | grep 7z | grep OrangePi) ]]; then299break300fi301sleep 5302done303304buildall_end=$(date +%s)305buildall_runtime=$(((buildall_end - buildall_start) / 60))306display_alert "Runtime in total" "${buildall_runtime} min" "info"307308309