mirror of
https://github.com/tuxbox-neutrino/buildenv.git
synced 2025-08-26 15:02:58 +02:00
- Replaced hardcoded 'poky' with `$(basename $YOCTO_GIT_URL)` for better maintainability. - Ensured compatibility with dynamically fetched URLs for Yocto and potential future sources.
366 lines
15 KiB
Bash
Executable File
366 lines
15 KiB
Bash
Executable File
#!/bin/bash
|
|
source init.functions.sh
|
|
#set -x
|
|
|
|
## Comatible and default image version
|
|
DEFAULT_IMAGE_VERSION="3.2.4"
|
|
COMPATIBLE_IMAGE_VERSIONS="$DEFAULT_IMAGE_VERSION 3.2"
|
|
IMAGE_VERSION="$DEFAULT_IMAGE_VERSION"
|
|
|
|
## global vars
|
|
BASEPATH=$(pwd)
|
|
SSH=$(which ssh)
|
|
GIT_SSH_KEYFILE=""
|
|
true="1"
|
|
false="0"
|
|
DO_UPDATE=$false
|
|
DO_RESET=$false
|
|
FILES_DIR="$BASEPATH/files"
|
|
UPDATE_SERVER_URL="http://localhost"
|
|
DIST_DIR="$BASEPATH/dist"
|
|
USER_CALL="$0 $@"
|
|
|
|
## Basename of this script
|
|
NAME=$(basename $0)
|
|
|
|
## Timestamp for logging
|
|
TIMESTAMP=$(date '+%Y%m%d_%H%M%S')
|
|
## Logfile
|
|
LOG_PATH=$BASEPATH/log
|
|
mkdir -p $LOG_PATH
|
|
TMP_LOGFILE="$LOG_PATH/.$0-tmp.log"
|
|
rm -f $TMP_LOGFILE
|
|
LOGFILE_NAME="$NAME"_"$TIMESTAMP.log"
|
|
LOGFILE=$LOG_PATH/$LOGFILE_NAME
|
|
LOGFILE_LINK=$LOG_PATH/$NAME.log
|
|
LOCAL_CONFIG_FILE_INC_PATH=$BASEPATH/local.conf.common.inc
|
|
echo "" > $LOGFILE
|
|
ln -sf $LOGFILE $LOGFILE_LINK
|
|
my_echo "true" "$USER_CALL"
|
|
|
|
## Current build env script version
|
|
BUILD_ENV_VERSION=$(git -C $BASEPATH describe --tags 2>/dev/null)
|
|
if [ -z "$BUILD_ENV_VERSION" ]; then
|
|
BUILD_ENV_VERSION="unknown"
|
|
fi
|
|
|
|
## Machines
|
|
# Identical listings
|
|
MACHINES_IDENTICAL_HD51="hd51 ax51 mutant51"
|
|
MACHINES_IDENTICAL_H7="h7 zgemmah7"
|
|
MACHINES_IDENTICAL_HD60="hd60 ax60" #TODO: move into gfutures
|
|
MACHINES_IDENTICAL_HD61="hd61 ax61" #TODO: move into gfutures
|
|
|
|
# gfutures listing
|
|
MACHINES_GFUTURES="$MACHINES_IDENTICAL_HD51 bre2ze4k"
|
|
# hisilcon listing #TODO: move into gfutures
|
|
MACHINES_HISI="$MACHINES_IDENTICAL_HD60 $MACHINES_IDENTICAL_HD61"
|
|
# airdigital listing
|
|
MACHINES_AIRDIGITAL="$MACHINES_IDENTICAL_H7"
|
|
# edision listing
|
|
MACHINES_EDISION="osmio4k osmio4kplus"
|
|
# ceryon listing
|
|
MACHINES_CERYON="e4hdultra"
|
|
|
|
# valid machine list
|
|
MACHINES="$MACHINES_GFUTURES $MACHINES_HISI $MACHINES_AIRDIGITAL $MACHINES_EDISION $MACHINES_CERYON"
|
|
|
|
MACHINE="all" # default for MACHINE, if not set
|
|
HINT_MACHINES="Select a valid machine type (empty means <all> as default) <$MACHINES>"
|
|
|
|
## Backups
|
|
BACKUP_PATH=$BASEPATH/backups
|
|
mkdir -p $BACKUP_PATH
|
|
BACKUP_SUFFIX=bak
|
|
|
|
# meta-neutrino project URL:
|
|
PROJECT_URL="https://github.com/tuxbox-neutrino"
|
|
|
|
## Help
|
|
show_help() {
|
|
if [[ $LANG == de_* ]]; then
|
|
echo "Dieses Skript initialisiert und aktualisiert die Entwicklungsumgebung für den Bau von Images und Paketen für verschiedene Maschinenkonfigurationen."
|
|
echo "Es klont und aktualisiert Meta-Layer aus vorgegebenen Repositories, bereitet die Build-Umgebung vor und unterstützt die Konfiguration für spezifische Maschinentypen."
|
|
else
|
|
echo "This script initializes and updates the development environment for building images and packages for various machine configurations."
|
|
echo "It clones and updates meta-layers from specified repositories, prepares the build environment, and supports configuration for specific machine types."
|
|
fi
|
|
echo ""
|
|
echo "Usage: $0 [OPTIONS]..."
|
|
echo ""
|
|
echo "Options:"
|
|
echo " -m, --machine $HINT_MACHINES"
|
|
echo " --update-url URL (IP, hostname or domain, optional with portnumber) to define the update server address for $LOCAL_CONFIG_FILE_INC_PATH, default: $UPDATE_SERVER_URL"
|
|
echo " --dist-dir Directory where to find the deployed images and packages, default: $DIST_DIR"
|
|
echo " -p, --project-url Project-URL where to find project meta layers,"
|
|
echo " e.g. for read and write access: git@github.com:tuxbox-neutrino, default = $PROJECT_URL"
|
|
echo " --image-version Sets the required image version to build, possible versions are: $COMPATIBLE_IMAGE_VERSIONS, default = $DEFAULT_IMAGE_VERSION"
|
|
echo " -u, --update Update your project meta layers"
|
|
echo " -r, --reset Resets the tmp dir within the build directory, $BASEPATH/poky-x.x.x/build/<machine>/tmp. The /tmp directory will be not deleted but renamed"
|
|
echo " -i, --id-rsa-file Path to your preferred id rsa file, default: users id rsa file, e.g. $HOME/.ssh/id_rsa"
|
|
echo ""
|
|
echo " -h, --help Show this help"
|
|
echo " --version Show version information for buildenv script"
|
|
}
|
|
|
|
## Processing command line arguments
|
|
TEMP=$(getopt -o rup:m:i:h --long reset,update-url:,dist-dir:,update,project-url:,machine:,id-rsa-file,image-version:,help,version -n 'init' -- "$@")
|
|
if [ $? != 0 ] ; then
|
|
my_echo "Error while process arguments" >&2
|
|
show_help
|
|
exit 1
|
|
fi
|
|
|
|
# Note the quotes around `$TEMP`: they are essential!
|
|
eval set -- "$TEMP"
|
|
|
|
# Extract arguments.
|
|
while true ; do
|
|
case "$1" in
|
|
-p|--project-url)
|
|
PROJECT_URL="$2"; shift 2 ;;
|
|
-m|--machine)
|
|
MACHINE="$2"; shift 2 ;;
|
|
-i|--id-rsa-file)
|
|
GIT_SSH_KEYFILE="$2"; shift 2 ;;
|
|
--update-url)
|
|
UPDATE_SERVER_URL="$2"; shift 2 ;;
|
|
--dist-dir)
|
|
DIST_DIR="$2"; shift 2 ;;
|
|
-u|--update)
|
|
DO_UPDATE="$true"; shift ;;
|
|
-r|--reset)
|
|
DO_RESET="$true"; shift ;;
|
|
--image-version)
|
|
IMAGE_VERSION="$2"; shift 2 ;;
|
|
-h|--help)
|
|
show_help
|
|
exit 0 ;;
|
|
--version)
|
|
echo "$BUILD_ENV_VERSION"
|
|
exit 0 ;;
|
|
--) shift ; break ;;
|
|
*) echo "Internal Error!" ; exit 1 ;;
|
|
esac
|
|
done
|
|
|
|
## Validate the chosen image version
|
|
if [[ ! " $COMPATIBLE_IMAGE_VERSIONS " =~ " $IMAGE_VERSION " ]]; then
|
|
my_echo "\033[31;1mError: Invalid image version specified '$IMAGE_VERSION'. Available versions are: [$COMPATIBLE_IMAGE_VERSIONS]\033[0m"
|
|
exit 1
|
|
fi
|
|
|
|
## Layer sources
|
|
YOCTO_GIT_URL="https://git.yoctoproject.org/git/poky"
|
|
POKY="$(basename $YOCTO_GIT_URL)"
|
|
POKY_NAME="$IMAGE_VERSION" #TODO
|
|
BUILD_ROOT_DIR="$BASEPATH/$POKY-$IMAGE_VERSION"
|
|
BUILD_ROOT="$BUILD_ROOT_DIR/build"
|
|
|
|
OE_LAYER_NAME=meta-openembedded
|
|
OE_LAYER_GIT_URL=https://git.openembedded.org/meta-openembedded
|
|
OE_LAYER_PATCH_LIST=""
|
|
|
|
OE_CORE_LAYER_NAME=openembedded-core
|
|
OE_CORE_LAYER_GIT_URL=https://github.com/openembedded/openembedded-core.git
|
|
|
|
## Preset required branches and revs based on the selected image version
|
|
case "$IMAGE_VERSION" in
|
|
"3.2"|"3.2.4")
|
|
COMPATIBLE_TAG="$IMAGE_VERSION"
|
|
COMPATIBLE_BRANCH="gatesgarth"
|
|
YOCTO_SRCREV="bc71ec0"
|
|
PYTHON2_SRCREV="27d2aeb"
|
|
OE_SRCREV="f3f7a5f"
|
|
OE_LAYER_PATCH_LIST="0001-openembedded-disable-meta-python.patch 0002-openembedded-disable-openembedded-layer-meta-phyton.patch"
|
|
;;
|
|
*)
|
|
my_echo "\033[31;1mError: No valid configuration for the specified image version '$IMAGE_VERSION'.\033[0m"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# Check machine type
|
|
if [ $(is_valid_machine "$MACHINE") == false ]; then
|
|
my_echo "\033[31;1mNo valid machine defined.\033[0m"
|
|
my_echo "$HINT_MACHINES"
|
|
exit 1
|
|
fi
|
|
|
|
my_echo "------------------------------------------------------------------------------------------"
|
|
my_echo "Buildenv Version: \033[37;1m$BUILD_ENV_VERSION\033[0m "
|
|
my_echo "Image Version: \033[37;1m$IMAGE_VERSION\033[0m "
|
|
my_echo "Compatible OE-branch: \033[37;1m$COMPATIBLE_BRANCH\033[0m "
|
|
my_echo "Buildroot directory: \033[37;1m$BUILD_ROOT_DIR\033[0m "
|
|
my_echo "Update Server URL: \033[37;1m$UPDATE_SERVER_URL\033[0m "
|
|
my_echo "Dist directory: \033[37;1m$DIST_DIR\033[0m "
|
|
my_echo "Configured Machine(s): \033[37;1m$MACHINE\033[0m "
|
|
my_echo "Project Repository URL: \033[37;1m$PROJECT_URL\033[0m "
|
|
my_echo "SRCREV Yocto: \033[37;1m$YOCTO_SRCREV\033[0m "
|
|
my_echo "SRCREV OE: \033[37;1m$OE_SRCREV\033[0m "
|
|
my_echo "SRCREV Python2: \033[37;1m$PYTHON2_SRCREV\033[0m "
|
|
my_echo "------------------------------------------------------------------------------------------"
|
|
|
|
## reset build
|
|
if [[ $DO_RESET == "$true" ]]; then
|
|
do_reset "$MACHINES"
|
|
exit 0
|
|
fi
|
|
|
|
## Fetch meta sources
|
|
# fetch required branch from yocto
|
|
fetch_meta "" $COMPATIBLE_BRANCH $YOCTO_GIT_URL $YOCTO_SRCREV $BUILD_ROOT_DIR
|
|
|
|
# fetch required branch from openembedded
|
|
fetch_meta "" $COMPATIBLE_BRANCH $OE_LAYER_GIT_URL $OE_SRCREV $BUILD_ROOT_DIR/$OE_LAYER_NAME "$OE_LAYER_PATCH_LIST"
|
|
|
|
# fetch required branch of oe-core from openembedded
|
|
fetch_meta "" master $OE_CORE_LAYER_GIT_URL "" $BUILD_ROOT_DIR/$OE_CORE_LAYER_NAME
|
|
|
|
# fetch required branch for meta-python2
|
|
if [[ -n "$PYTHON2_SRCREV" ]]; then
|
|
PYTHON2_LAYER_NAME=meta-python2
|
|
PYTHON2_LAYER_GIT_URL=https://git.openembedded.org/$PYTHON2_LAYER_NAME
|
|
PYTHON2_PATCH_LIST="0001-local_conf_outcomment_line_15.patch"
|
|
fetch_meta "" $COMPATIBLE_BRANCH $PYTHON2_LAYER_GIT_URL $PYTHON2_SRCREV $BUILD_ROOT_DIR/$PYTHON2_LAYER_NAME "$PYTHON2_PATCH_LIST"
|
|
fi
|
|
|
|
# fetch required branch for meta-qt5
|
|
QT5_LAYER_NAME=meta-qt5
|
|
QT5_LAYER_GIT_URL=https://github.com/meta-qt5/$QT5_LAYER_NAME
|
|
fetch_meta "" $COMPATIBLE_BRANCH $QT5_LAYER_GIT_URL "" $BUILD_ROOT_DIR/$QT5_LAYER_NAME
|
|
|
|
# fetch required branch from meta-neutrino
|
|
TUXBOX_LAYER_NAME="meta-neutrino"
|
|
TUXBOX_LAYER_BRANCH="master"
|
|
TUXBOX_LAYER_SRCREV="ffc1b65ec3cfd2c6bbd339d3ce201d6b39abd527"
|
|
TUXBOX_LAYER_GIT_URL="${PROJECT_URL}/$TUXBOX_LAYER_NAME.git"
|
|
fetch_meta "" $TUXBOX_LAYER_BRANCH $TUXBOX_LAYER_GIT_URL "$TUXBOX_LAYER_SRCREV" $BUILD_ROOT_DIR/$TUXBOX_LAYER_NAME
|
|
safe_dir="$BUILD_ROOT_DIR/$TUXBOX_LAYER_NAME"
|
|
if ! git config --global --get safe.directory | grep -qxF "$safe_dir"; then
|
|
do_exec "git config --global --add safe.directory \"$safe_dir\""
|
|
fi
|
|
|
|
# fetch required branch from meta-airdigital
|
|
AIRDIGITAL_LAYER_NAME="meta-airdigital"
|
|
AIRDIGITAL_LAYER_BRANCH="master"
|
|
AIRDIGITAL_LAYER_SRCREV="ac8f769e35f839bbcf9c38d2b2b98513be907ac1"
|
|
AIRDIGITAL_LAYER_GIT_URL="$PROJECT_URL/$AIRDIGITAL_LAYER_NAME.git"
|
|
if [ "$MACHINE" == "all" ] || [ $(is_required_machine_layer "' $MACHINES_AIRDIGITAL '") == true ]; then
|
|
fetch_meta "" $AIRDIGITAL_LAYER_BRANCH $AIRDIGITAL_LAYER_GIT_URL "$AIRDIGITAL_LAYER_SRCREV" $BUILD_ROOT_DIR/$AIRDIGITAL_LAYER_NAME
|
|
fi
|
|
|
|
# fetch required branch from meta-gfutures
|
|
GFUTURES_LAYER_NAME=meta-gfutures
|
|
GFUTURES_LAYER_BRANCH="master"
|
|
GFUTURES_LAYER_SRCREV="bfceb9d2f79a8403ce1bdf1ad14a1714f781fed3"
|
|
GFUTURES_LAYER_GIT_URL="$PROJECT_URL/$GFUTURES_LAYER_NAME.git"
|
|
if [ "$MACHINE" == "all" ] || [ $(is_required_machine_layer "' $MACHINES_GFUTURES '") == true ]; then
|
|
# gfutures
|
|
fetch_meta "" $GFUTURES_LAYER_BRANCH $GFUTURES_LAYER_GIT_URL "$GFUTURES_LAYER_SRCREV" $BUILD_ROOT_DIR/$GFUTURES_LAYER_NAME
|
|
fi
|
|
|
|
# fetch required branch from meta-ceryon
|
|
CERYON_LAYER_NAME=meta-ceryon
|
|
CERYON_LAYER_BRANCH="master"
|
|
CERYON_LAYER_SRCREV="4a02145fc4c233b64f6110d166c46b59ebe73371"
|
|
CERYON_LAYER_GIT_URL="$PROJECT_URL/$CERYON_LAYER_NAME.git"
|
|
if [ "$MACHINE" == "all" ] || [ $(is_required_machine_layer "' $MACHINES_CERYON '") == true ]; then
|
|
fetch_meta "" $CERYON_LAYER_BRANCH $CERYON_LAYER_GIT_URL "$CERYON_LAYER_SRCREV" $BUILD_ROOT_DIR/$CERYON_LAYER_NAME
|
|
fi
|
|
|
|
# fetch required branch from meta-hisilicon #TODO: move into gfutures
|
|
HISI_LAYER_NAME=meta-hisilicon #TODO: move into gfutures
|
|
HISI_LAYER_BRANCH="master"
|
|
HISI_LAYER_SRCREV="e85e1781704d96f5dfa0c554cf81d24c147d888c"
|
|
HISI_LAYER_GIT_URL="$PROJECT_URL/$HISI_LAYER_NAME.git"
|
|
if [ "$MACHINE" == "all" ] || [ $(is_required_machine_layer "' $MACHINES_HISI '") == true; then
|
|
fetch_meta "" $HISI_LAYER_BRANCH $HISI_LAYER_GIT_URL "$HISI_LAYER_SRCREV" $BUILD_ROOT_DIR/$HISI_LAYER_NAME
|
|
fi
|
|
|
|
# fetch required branch from meta-edision
|
|
EDISION_LAYER_NAME=meta-edision
|
|
EDISION_LAYER_BRANCH="master"
|
|
EDISION_LAYER_SRCREV="1b2c422d9218e86ca1cd9d20431d42e716b1d714"
|
|
EDISION_LAYER_GIT_URL="$PROJECT_URL/$EDISION_LAYER_NAME.git"
|
|
if [ "$MACHINE" == "all" ] || [ $(is_required_machine_layer "' $MACHINES_EDISION '") == true ]; then
|
|
fetch_meta '' $EDISION_LAYER_BRANCH $EDISION_LAYER_GIT_URL "$EDISION_LAYER_SRCREV" $BUILD_ROOT_DIR/$EDISION_LAYER_NAME
|
|
fi
|
|
|
|
## Configure buildsystem
|
|
# Create included config file from sample file
|
|
if test ! -f $LOCAL_CONFIG_FILE_INC_PATH; then
|
|
my_echo "\033[37;1mCONFIG:\033[0mCreate $LOCAL_CONFIG_FILE_INC_PATH as include file for local layer configuration ..."
|
|
do_exec "cp -v $LOCAL_CONFIG_FILE_INC_PATH.sample $LOCAL_CONFIG_FILE_INC_PATH"
|
|
do_exec "sed -i -e 's|#UPDATE_SERVER_URL = \"http://@hostname@\"|UPDATE_SERVER_URL = \"${UPDATE_SERVER_URL}\"|' $LOCAL_CONFIG_FILE_INC_PATH"
|
|
fi
|
|
|
|
# Create configuration for machine
|
|
my_echo "\033[37;1mCreate configurations ...\033[0m"
|
|
if [ "$MACHINE" == "all" ]; then
|
|
for M in $MACHINES ; do
|
|
create_local_config $M;
|
|
done
|
|
my_echo "\033[32;1mdone!\033[0m\n"
|
|
else
|
|
create_local_config $MACHINE;
|
|
my_echo "\033[32;1mdone!\033[0m\n"
|
|
fi
|
|
|
|
## Create distribution structure
|
|
create_dist_tree;
|
|
|
|
## Distribution directory inside httpd directory for online update
|
|
my_echo "\033[37;1mLocal setup for package online update.\033[0m"
|
|
my_echo "------------------------------------------------------------------------------------------------"
|
|
my_echo "If you want to use online update for your devices, please configure your webserver and use the"
|
|
my_echo "content of $DIST_DIR"
|
|
my_echo "as destination for your webserver (e.g. apache, nginx, lighttpd or what ever you want)"
|
|
my_echo ""
|
|
|
|
## Show results
|
|
my_echo "\033[32;1m\nSummary:\033[0m"
|
|
my_echo "\033[32;1m------------------------------------------------------------------------------------------------\033[0m"
|
|
my_echo ""
|
|
my_echo "\033[37;1mLocal environment setup was created\033[0m"
|
|
my_echo "------------------------------------------------------------------------------------------------"
|
|
my_echo "On 1st call of $0 Your config was created at this file from the template sample file"
|
|
my_echo ""
|
|
my_echo "\033[37;1m\t$BASEPATH/local.conf.common.inc\033[0m"
|
|
my_echo ""
|
|
my_echo "If this file has already exists some entries could be migrated or added on this file."
|
|
my_echo "You should check $BASEPATH/local.conf.common.inc and modify it if required."
|
|
my_echo ""
|
|
my_echo "Unlike here: Please check this files for modifications or upgrades:"
|
|
my_echo ""
|
|
my_echo "\033[37;1m\t$BUILD_ROOT/<machine>/bblayer.conf\033[0m"
|
|
my_echo "\033[37;1m\t$BUILD_ROOT/<machine>/local.conf\033[0m"
|
|
|
|
my_echo ""
|
|
my_echo "\033[37;1mUpdating build evironment and meta-layers\033[0m"
|
|
my_echo "------------------------------------------------------------------------------------------------"
|
|
my_echo ""
|
|
my_echo "\033[37;1m\texecute: $USER_CALL\033[0m \033[32;1m--update\033[0m"
|
|
my_echo ""
|
|
my_echo "------------------------------------------------------------------------------------------------"
|
|
|
|
my_echo "\033[32;1mDONE!\033[0m"
|
|
|
|
my_echo ""
|
|
my_echo "\033[37;1mStart build\033[0m"
|
|
my_echo "------------------------------------------------------------------------------------------------"
|
|
my_echo "Now you are ready to build your own images and packages."
|
|
my_echo "Selectable machines are:"
|
|
my_echo ""
|
|
my_echo "\033[37;1m\t$MACHINES\033[0m"
|
|
my_echo ""
|
|
my_echo "Select your favorite machine (or identical) and the next steps are:\033[37;1m"
|
|
my_echo ""
|
|
my_echo "\tcd $BUILD_ROOT_DIR && . ./oe-init-build-env build/<machine>"
|
|
my_echo "\tbitbake neutrino-image"
|
|
my_echo "\033[0m"
|
|
|
|
my_echo "For more information and next steps take a look at the README.md!"
|
|
|
|
exit 0
|