#!/bin/bash # # Copyright (c) 2015 Igor Pecovnik, igor.pecovnik@gma**.com # # This file is licensed under the terms of the GNU General Public # License version 2. This program is licensed "as is" without any # warranty of any kind, whether express or implied. # # This file is a part of tool chain https://github.com/igorpecovnik/lib # # # Main program # # TTY_X=$(($(stty size| awk '{print $2}')-6)) # determine terminal width TTY_Y=$(($(stty size| awk '{print $1}')-6)) # determine terminal height # Include here to make "display_alert" and "prepare_host" available source $SRC/lib/general.sh # General functions # clean unfinished DEB packing rm -rf $DEST/debs/*/*/ # compress and remove old logs mkdir -p $DEST/debug (cd $DEST/debug && tar -czf logs-$(date +"%d_%m_%Y-%H_%M_%S").tgz *.log) > /dev/null 2>&1 rm -f $DEST/debug/*.log > /dev/null 2>&1 # Script parameters handling for i in "$@"; do if [[ "$i" == *"="* ]]; then parameter=${i%%=*} value=${i##*=} display_alert "Command line: setting $parameter to" "${value:-(empty)}" "info" eval $parameter=$value fi done if [[ $PROGRESS_DISPLAY == none ]]; then OUTPUT_VERYSILENT=yes; elif [[ $PROGRESS_DISPLAY != plain ]]; then OUTPUT_DIALOG=yes; fi if [[ $PROGRESS_LOG_TO_FILE != yes ]]; then unset PROGRESS_LOG_TO_FILE; fi if [[ $USE_CCACHE != no ]]; then CCACHE=ccache else CCACHE="" fi # compile.sh version checking ver1=$(awk -F"=" '/^# VERSION/ {print $2}' <"$SRC/compile.sh") ver2=$(awk -F"=" '/^# VERSION/ {print $2}' <"$SRC/lib/compile.sh" 2>/dev/null) || ver2=0 if [ -z "$ver1" ] || [ $ver1 -lt $ver2 ]; then display_alert "File $0 is outdated. Please overwrite is with updated version from" "$SRC/lib" "wrn" read -p "Press to abort compilation, to ignore and continue" fi # We'll use this title on all menus backtitle="Armbian building script, http://www.armbian.com | Author: Igor Pecovnik" # if language not set, set to english [ "$LANGUAGE" == "" ] && export LANGUAGE="en_US:en" # default console if not set [ "$CONSOLE_CHAR" == "" ] && export CONSOLE_CHAR="UTF-8" # Check and fix dependencies, directory structure and settings prepare_host # Choose destination - creating board list from file configuration.sh if [ "$BOARD" == "" ]; then IFS=";" MYARRAY=($(cat $SRC/lib/configuration.sh | awk '/\)#enabled/ || /#des/' | sed -e 's/\t\t//' | sed 's/)#enabled//g' \ | sed 's/#description //g' | sed -e 's/\t//' | sed ':a;N;$!ba;s/\n/;/g')) MYPARAMS=( --title "Choose a board" --backtitle $backtitle --menu "\n Supported:" 36 67 26 ) i=0; j=1 while [[ $i -lt ${#MYARRAY[@]} ]]; do MYPARAMS+=( "${MYARRAY[$i]}" " ${MYARRAY[$j]}" ) i=$[$i+2]; j=$[$j+2] done whiptail "${MYPARAMS[@]}" 2>results BOARD=$(results RELEASE=$(results BUILD_DESKTOP=$(results BRANCH=$(> $DEST/debug/install.log # needed if process failed in the middle umount_image # let's start with fresh screen display_alert "Starting Armbian build script" "@host" "info" # optimize build time with 100% CPU usage CPUS=$(grep -c 'processor' /proc/cpuinfo) if [ "$USEALLCORES" = "yes" ]; then CTHREADS="-j$(($CPUS + $CPUS/2))"; else CTHREADS="-j${CPUS}"; fi # display what we do if [ "$KERNEL_ONLY" == "yes" ]; then display_alert "Compiling kernel" "$BOARD" "info" else display_alert "Building" "$VERSION" "info" fi # sync clock if [ "$SYNC_CLOCK" != "no" ]; then display_alert "Syncing clock" "host" "info" eval ntpdate -s ${NTP_SERVER:- time.ijs.si} fi start=`date +%s` # fetch_from_github [repository, sub directory] if [ "$FORCE_CHECKOUT" = "yes" ]; then FORCE="-f"; else FORCE=""; fi [[ "$CLEAN_LEVEL" == *sources* ]] && cleaning "sources" display_alert "source downloading" "@host" "info" fetch_from_github "$BOOTLOADER" "$BOOTSOURCE" "$BOOTBRANCH" "yes" BOOTSOURCEDIR=$BOOTSOURCE/$GITHUBSUBDIR fetch_from_github "$LINUXKERNEL" "$LINUXSOURCE" "$KERNELBRANCH" "yes" LINUXSOURCEDIR=$LINUXSOURCE/$GITHUBSUBDIR if [[ -n "$MISC1" ]]; then fetch_from_github "$MISC1" "$MISC1_DIR"; fi if [[ -n "$MISC2" ]]; then fetch_from_github "$MISC2" "$MISC2_DIR"; fi if [[ -n "$MISC3" ]]; then fetch_from_github "$MISC3" "$MISC3_DIR"; fi if [[ -n "$MISC4" ]]; then fetch_from_github "$MISC4" "$MISC4_DIR"; fi if [[ -n "$MISC5" ]]; then fetch_from_github "$MISC5" "$MISC5_DIR"; fi if [[ -n "$MISC6" ]]; then fetch_from_github "$MISC6" "$MISC6_DIR"; fi # compile sunxi tools if [[ $LINUXFAMILY == sun*i ]]; then compile_sunxi_tools [[ $BRANCH != "default" ]] && LINUXFAMILY="sunxi" fi # define package names DEB_BRANCH=${BRANCH//default} # if not empty, append hyphen DEB_BRANCH=${DEB_BRANCH:+${DEB_BRANCH}-} CHOSEN_UBOOT=linux-u-boot-${DEB_BRANCH}${BOARD} CHOSEN_KERNEL=linux-image-${DEB_BRANCH}${LINUXFAMILY} CHOSEN_ROOTFS=linux-${RELEASE}-root-${DEB_BRANCH}${BOARD} for option in $(tr ',' ' ' <<< "$CLEAN_LEVEL"); do [[ $option != sources ]] && cleaning "$option" done [[ ! -f $DEST/debs/${CHOSEN_UBOOT}_${REVISION}_${ARCH}.deb ]] && needs_uboot=yes [[ ! -f $DEST/debs/${CHOSEN_KERNEL}_${REVISION}_${ARCH}.deb ]] && needs_kernel=yes # patching sources if we need to compile u-boot or kernel [[ $needs_uboot == yes || $needs_kernel == yes ]] && patching_sources # Compile source if packed not exists [[ $needs_uboot = yes ]] && compile_uboot [[ $needs_kernel = yes ]] && compile_kernel [[ -n $RELEASE ]] && create_board_package if [[ $KERNEL_ONLY != yes ]]; then if [[ $EXTENDED_DEBOOTSTRAP == yes ]]; then debootstrap_ng else # create or use prepared root file-system custom_debootstrap # add kernel to the image install_kernel # install board specific applications install_distribution_specific install_board_specific # install desktop if [ "$BUILD_DESKTOP" = "yes" ]; then install_desktop fi # install external applications if [ "$EXTERNAL" = "yes" ]; then install_external_applications fi # closing image closing_image fi else display_alert "Kernel building done" "@host" "info" display_alert "Target directory" "$DEST/debs/" "info" display_alert "File name" "${CHOSEN_KERNEL}_${REVISION}_${ARCH}.deb" "info" fi # workaround for bug introduced with desktop build -- please remove when fixed chmod 777 /tmp end=`date +%s` runtime=$(((end-start)/60)) display_alert "Runtime" "$runtime min" "info"