Compare commits
	
		
			25 Commits
		
	
	
		
			729778043a
			...
			szeged_pre
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 5bca1f498b | |||
| 2d1f11fd74 | |||
| 2d76b37e5d | |||
| b5b3aa7e34 | |||
| e3403b2ddd | |||
| 82d6dc643a | |||
| ef4d27eb91 | |||
| 215b155f2d | |||
| 901fa4c319 | |||
| e356456fb5 | |||
| bcc96a388f | |||
| 8f50f62a52 | |||
| 847c58afc8 | |||
| 2abdf963ac | |||
| 96d76b856a | |||
| 9eff70b780 | |||
| 2a8be547a8 | |||
| 17521771e3 | |||
| 515c77bed4 | |||
| f2617d8151 | |||
| 4f9c6155e1 | |||
| 33511a5bcb | |||
| bd0d07f56f | |||
| b8bc61daea | |||
| 27cd99f96a | 
							
								
								
									
										149
									
								
								git_helpers
									
									
									
									
									
								
							
							
						
						
									
										149
									
								
								git_helpers
									
									
									
									
									
								
							| @@ -57,6 +57,18 @@ revert_to_commit_before_pull () { | ||||
| } | ||||
| # revert_to_commit_before_pull | ||||
|  | ||||
| git_branch () { | ||||
|     # always relative to a git repository | ||||
|     echo $(git branch -a | grep '*' | awk '{ print $2 }') | ||||
| } | ||||
|  | ||||
| git_customer_branch () { | ||||
|     if cd_customer_repository; then | ||||
|         customer_branch=$(git_branch) | ||||
|         cd_home; | ||||
|         echo $customer_branch | ||||
|     fi | ||||
| } | ||||
| # clone the customer repository in ./workspace. | ||||
| # this is done only once. | ||||
| #  | ||||
| @@ -70,94 +82,104 @@ revert_to_commit_before_pull () { | ||||
| # | ||||
| clone_customer_repository () { | ||||
|     local func="${FUNCNAME[0]}" | ||||
|     if [ "$PWD" = "$WORKING_DIRECTORY" ]; then | ||||
|     if [ "$PWD" != "$WORKING_DIRECTORY" ]; then | ||||
|         log_fatal "$func:${LINENO} PD != WD ($PWD != $WORKING_DIRECTORY)" | ||||
|     fi | ||||
|     | ||||
|     mkdir -p "./$WORKSPACE_DIR" | ||||
|     # check if the directory is empty. If so, clone the | ||||
|     # customer repository | ||||
|     if ! find ./$WORKSPACE_DIR -mindepth 1 -maxdepth 1 | read; then | ||||
|             log_debug "$func:${LINENO} cloning ${1} ..." | ||||
|             if cd "./$WORKSPACE_DIR" | ||||
|             then | ||||
|                 $(exec_git_command git clone "$1") | ||||
|                 if [ $? -eq 0 ]; then | ||||
|         log_info "$func:${LINENO} cloning ${1} into ${PWD}/${WORKSPACE_DIR}..." | ||||
|         if ! cd "./$WORKSPACE_DIR"; then | ||||
|             update_psa_clone_error  # message to ISMAS | ||||
|             log_fatal "$func:${LINENO} can not change to $WORKSPACE_DIR" | ||||
|         fi | ||||
|         if ! exec_git_command git clone "$1"; then | ||||
|             update_psa_clone_error  # message to ISMAS | ||||
|             log_fatal "$func:${LINENO} can not clone $1" | ||||
|         fi | ||||
|         ##########################  CLONING DONE   ############################ | ||||
|         log_debug "$func:${LINENO} cloning ${1} done" | ||||
|                     GIT_CLONE_EXECUTED=1 | ||||
|                     rm -f $GIT_PULL_TMP | ||||
|                     rm -f $OPKG_CMDS_TMP | ||||
|         # after cloning, cd into repository, and re-initialize, | ||||
|         # setting the work-tree as "/". This has the effect that | ||||
|         # a "git pull" will automatically fetched files in the | ||||
|         # corresponding sytem-folders. | ||||
|                     if cd ${CUSTOMER_ID_BASE_DIR}; then | ||||
|                         # configure hooks directory | ||||
|                         exec_git_command git config core.hooksPath .githooks | ||||
|                         exec_git_command git checkout "$LOCAL_BRANCH" | ||||
|                         if [[ $? -eq 0 ]]; then | ||||
|         #######################  CD INTO REPOSITORY  ########################## | ||||
|         if ! cd ${CUSTOMER_ID_BASE_DIR}; then | ||||
|             update_psa_clone_error  # message to ISMAS | ||||
|             log_fatal "$func:${LINENO} can not change to $CUSTOMER_ID_BASE_DIR" | ||||
|         fi | ||||
|         log_debug "$func:${LINENO} cd into $CUSTOMER_ID_BASE_DIR" | ||||
|         ##################### CONFIGURE HOOKS DIRECTORY  ###################### | ||||
|         if ! exec_git_command git config core.hooksPath .githooks; then | ||||
|             update_psa_clone_error  # message to ISMAS | ||||
|             log_fatal "$func:${LINENO} can not configure hooks directory" | ||||
|         fi | ||||
|         ###################### CHECKOUT LOCAL BRANCH  ######################### | ||||
|         if ! exec_git_command git checkout "$LOCAL_BRANCH"; then | ||||
|             update_psa_clone_error  # message to ISMAS | ||||
|             log_fatal "$func:${LINENO} can not checkout $LOCAL_BRANCH" | ||||
|         fi | ||||
|         log_debug "$func:${LINENO} checked out local branch $LOCAL_BRANCH" | ||||
|                             exec_git_command git config core.worktree "/" | ||||
|                             if [[ $? -eq 0 ]]; then | ||||
|                             	log_debug "$func:${LINENO} configured worktree" | ||||
|                                 exec_git_command git fetch --all | ||||
|                        	        if [[ $? -eq 0 ]]; then | ||||
|         ######################## CONFIGURE WORKTREE  ########################## | ||||
|         if ! exec_git_command git config core.worktree "/"; then | ||||
|             update_psa_clone_error  # message to ISMAS | ||||
|             log_fatal "$func:${LINENO} can not configure worktree '/'" | ||||
|         fi | ||||
|         log_debug "$func:${LINENO} configured worktree '/'" | ||||
|         ########################### FETCH ALL ################################# | ||||
|         if ! exec_git_command git fetch --all; then | ||||
|             update_psa_clone_error  # message to ISMAS | ||||
|             log_fatal "$func:${LINENO} can not fetch --all for $LOCAL_BRANCH" | ||||
|         fi | ||||
|         log_debug "$func:${LINENO} fetch repository" | ||||
|                                     exec_git_command git reset --hard "$LOCAL_BRANCH" | ||||
|                        	            if [[ $? -eq 0 ]]; then | ||||
|         ########################## RE-INIT REPOSITORY  ######################## | ||||
|         if ! exec_git_command git reset --hard "$LOCAL_BRANCH"; then | ||||
|             update_psa_clone_error  # message to ISMAS | ||||
|             log_fatal "$func:${LINENO} re-init of $LOCAL_BRANCH failed" | ||||
|         fi | ||||
|         log_debug "$func:${LINENO} reset --hard $LOCAL_BRANCH" | ||||
|                                         CLONE_CUSTOMER_REPOSITORY=true | ||||
|         INITIAL_CLONE=true | ||||
|         log_debug "$func:${LINENO} re-init of ${1} done" | ||||
|                                         cd_home; return 0 | ||||
| 			                        fi | ||||
| 		    	                fi | ||||
|                             fi | ||||
| 		                fi | ||||
|                     fi | ||||
|                 fi | ||||
|                 cd_home; return 1 | ||||
|             fi | ||||
|         update_psa_clone_customer_repository | ||||
|     else | ||||
|         # the directory is not empty, so we assume the | ||||
|         # customer-repository has been cloned already | ||||
|         if ! [[ -d "./${WORKSPACE_DIR}/$CUSTOMER_ID" ]]; then | ||||
|             log_fatal "$func:${LINENO} $PWD $WORKSPACE_DIR/$CUSTOMER_ID"\ | ||||
|                 "wrong repository: $(ls -d './${WORKSPACE_DIR}/*')" | ||||
|             else | ||||
|         fi | ||||
|         local __m="./${WORKSPACE_DIR}/$CUSTOMER_ID exists" | ||||
|                 log_debug "$func:${LINENO} $__m" | ||||
|                 return 0 | ||||
|             fi | ||||
|         fi | ||||
|         log_info "$func:${LINENO} $__m, no clone necessary" | ||||
|     fi | ||||
|  | ||||
|     update_psa_clone_error  # message to ISMAS | ||||
|     return $?  | ||||
|     cd_home | ||||
| } | ||||
| # clone_customer_repository -> | ||||
| # https://git.mimbach49.de/GerhardHoffmann/customer_281.git | ||||
|  | ||||
| cd_customer_repository () { | ||||
|     local func="${FUNCNAME[0]}" | ||||
|     # has to be called in WORKING_DIRECTORY | ||||
|     cd "$WORKING_DIRECTORY" | ||||
|     if [ "$PWD" = "${WORKING_DIRECTORY}" ]; then | ||||
|         repository_dir="./$WORKSPACE_DIR/$CUSTOMER_ID" | ||||
|         if ! [[ -d "$repository_dir" ]]; then | ||||
|             log_crit "$func:${LINENO}: $repository_dir does not exist!" | ||||
|             return 1 | ||||
|  | ||||
|     if [ "$PWD" != "$WORKING_DIRECTORY" ]; then | ||||
|         log_fatal "$func:${LINENO} PD != WD ($PWD != $WORKING_DIRECTORY)" | ||||
|     fi | ||||
|  | ||||
|         if ! { cd $repository_dir; } ; then | ||||
|             log_crit "$func:${LINENO}: cannot cd to $repository_dir!" | ||||
|             return 1 | ||||
|     if ! [[ -d "$CUSTOMER_ID_BASE_DIR" ]]; then | ||||
|         log_fatal "$func:${LINENO}: $CUSTOMER_ID_BASE_DIR does not exist!" | ||||
|     fi | ||||
|      | ||||
|         log_debug "$func:${LINENO}: cd to $repository_dir!" | ||||
|     if ! cd "$CUSTOMER_ID_BASE_DIR"; then | ||||
|         log_fatal "$func:${LINENO}: cannot cd to $CUSTOMER_ID_BASE_DIR !!!" | ||||
|     fi | ||||
|  | ||||
|     log_debug "$func:${LINENO}: cd to $CUSTOMER_ID_BASE_DIR" | ||||
|     return 0 | ||||
|     fi | ||||
|     return 1 | ||||
| } | ||||
|  | ||||
| cd_home () { | ||||
|     if cd - &>/dev/null ; then | ||||
|     if cd "$WORKING_DIRECTORY" &>/dev/null ; then | ||||
|         return 0 | ||||
|     fi | ||||
|     return 1 | ||||
| @@ -170,26 +192,19 @@ pull_customer_repository () { | ||||
|         return 1 | ||||
|     fi | ||||
|  | ||||
|     #local commit_before_pull=$(latest_commit) | ||||
|     #if [ -z $commit_before_pull ]; then | ||||
|     #    log_warn "$func:${LINENO}: commit_before_pull empty" | ||||
|     #    cd_home ; return 1 | ||||
|     #fi | ||||
|     #log_debug "$func:${LINENO}: commit_before_pull=$commit_before_pull" | ||||
|  | ||||
|     rm -f "$OPKG_CMDS_TMP" | ||||
|     rm -f "$GIT_PULL_TMP" | ||||
|  | ||||
|     log_debug "$func:${LINENO}: executing 'git pull'..." | ||||
|     log_crit "$func:${LINENO}: executing 'git pull'..." | ||||
|     exec_git_command 'git pull' | ||||
|  | ||||
|     # GIT_PULL_TMP created by hook post-merge. it contains the names of the | ||||
|     # changed files. | ||||
|     if [[ -f $GIT_PULL_TMP ]]; then | ||||
|     # GIT_UPDATE_LOG updated by hook post-merge. it contains the names of the | ||||
|     # changed files or opkg-commands to execute. | ||||
|     # If 'git pull' has fetched new data, then there are lines starting with | ||||
|     # DOWNLOAD or EXECUTE. | ||||
|     if grep -qE "^[[:space:]]*(DOWNLOAD|EXECUTE)" "$GIT_UPDATE_LOG"; then | ||||
|         log_info "$func:${LINENO}: new data fetched from repository" | ||||
|         cd_home; return 0 | ||||
|     fi | ||||
|       | ||||
|     log_warn "$func:${LINENO}: no data fetched form repository" | ||||
|     log_warn "$func:${LINENO}: no data fetched from repository" | ||||
|     cd_home; return 1 | ||||
| } | ||||
| # pull_customer_repository customer_281 | ||||
|   | ||||
							
								
								
									
										36
									
								
								log_helpers
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								log_helpers
									
									
									
									
									
								
							| @@ -1,10 +1,6 @@ | ||||
| #!/bin/bash | ||||
| # set -x  | ||||
|  | ||||
| RED='\e[0;31m' | ||||
| GREEN='\e[0;32m' | ||||
| NC='\e[0m' # No Color | ||||
|  | ||||
| if [ "${log_helpers_sourced:-1}" = "1" ]; then    # include only once | ||||
|     readonly log_helpers_sourced=${BASH_SOURCE[0]} | ||||
|  | ||||
| @@ -21,7 +17,8 @@ if [ "${log_helpers_sourced:-1}" = "1" ]; then    # include only once | ||||
|     readonly FATAL=5 | ||||
|     readonly MAX_DEBUG_LEVEL=6 | ||||
|  | ||||
|     log_level=0 | ||||
|     log_level=$INFO | ||||
|     FATAL_FAILURE=false | ||||
|  | ||||
|     set_dbg_level () { | ||||
|         if [ $1 < $MAX_DEBUG_LEVEL ]; then | ||||
| @@ -33,50 +30,61 @@ if [ "${log_helpers_sourced:-1}" = "1" ]; then    # include only once | ||||
|         return $log_level | ||||
|     } | ||||
|  | ||||
|     log() { | ||||
|     log_to_file() { | ||||
|         if [[ $(("$(wc -l < $log_file)")) -ge $((100000)) ]]; then | ||||
|             # remove first line | ||||
|             sed -e 1d -i $log_file | ||||
|         fi | ||||
|         local msg="$(date +'%Y-%m-%d_%T'): $*" | ||||
|         echo "log:$msg" >&2 | ||||
|         echo "$msg" >> $log_file | ||||
|     } | ||||
|  | ||||
|     log() { | ||||
|         local msg="$(date +'%Y-%m-%d_%T'): $*" | ||||
|         echo "log:$msg" >&2 | ||||
|     } | ||||
|  | ||||
|     log_debug() { | ||||
|         if [ $log_level = $DEBUG ]; then | ||||
|         log_to_file "DEBUG $*" | ||||
|         if [ $log_level -le $DEBUG ]; then | ||||
|             log "DEBUG $*" | ||||
|         fi | ||||
|     } | ||||
|  | ||||
|     log_info() { | ||||
|         log_to_file "INFO $*" | ||||
|         if [ $log_level -le $INFO ]; then | ||||
|             log "${GREEN}INFO  $*" | ||||
|             log "INFO  $*" | ||||
|         fi | ||||
|     } | ||||
|  | ||||
|     log_warn() { | ||||
|         log_to_file "WARN $*" | ||||
|         if [ $log_level -le $WARN ]; then | ||||
|             log "${RED}WARN  $*" | ||||
|             log "WARN  $*" | ||||
|         fi | ||||
|     } | ||||
|  | ||||
|     log_crit() { | ||||
|         log_to_file "CRIT $*" | ||||
|         if [ $log_level -le $CRIT ]; then | ||||
|             log "${RED}CRIT  $*" | ||||
|             log "CRIT  $*" | ||||
|         fi | ||||
|     } | ||||
|  | ||||
|     log_error() { | ||||
|         log_to_file "ERROR $*" | ||||
|         if [ $log_level -le $ERROR ]; then | ||||
|             log "${RED}ERROR  $*" | ||||
|             log "ERROR  $*" | ||||
|         fi | ||||
|     } | ||||
|  | ||||
|     log_fatal() { | ||||
|         log_to_file "FATAL $*" | ||||
|         if [ $log_level -le $FATAL ]; then | ||||
|             log "${RED}FATAL  $*" | ||||
|             log "${RED}exiting ..." | ||||
|             log "FATAL  $*" | ||||
|             log "exiting ..." | ||||
|             FATAL_FAILURE=true | ||||
|             exit 1 | ||||
|         fi | ||||
|     } | ||||
|   | ||||
| @@ -2,7 +2,8 @@ | ||||
|  | ||||
| source ./log_helpers | ||||
|  | ||||
| if [ ${news_to_ismas_sourced:-1} = "1" ]; then    # include only once | ||||
| if [ "${news_from_ismas_sourced:-1}" = "1" ]; then    # include only once | ||||
|     readonly news_from_ismas_sourced=${BASH_SOURCE[0]} | ||||
|     readonly APISM_DIRECT_PORT=7778 | ||||
|  | ||||
|     updates_available () { | ||||
|   | ||||
| @@ -2,7 +2,8 @@ | ||||
|  | ||||
| source ./log_helpers | ||||
|  | ||||
| if [ ${news_to_ismas_sourced:-1} = "1" ]; then    # include only once | ||||
| if [ "${news_to_ismas_sourced:-1}" = "1" ]; then    # include only once | ||||
|     readonly news_to_ismas_sourced=${BASH_SOURCE[0]} | ||||
|  | ||||
|     readonly APISM_DB_PORT=7777 | ||||
|     readonly UPDATE_ISMAS_PROGRESS="U0010" | ||||
| @@ -70,6 +71,18 @@ if [ ${news_to_ismas_sourced:-1} = "1" ]; then    # include only once | ||||
|     ###########################################################################  | ||||
|     ###########################################################################  | ||||
|      | ||||
|     update_psa_clone_customer_repository () { | ||||
|         PERCENT=10 | ||||
|         local params=("U0010"                                   # event | ||||
|                       $PERCENT                                  # percent | ||||
|                       $RC_SUCCESS                               # resultcode | ||||
|                       "clone_customer_repository"               # step | ||||
|                       "git cloned $CUSTOMER_REPOSITORY_PATH"    # step_result | ||||
|                       "")                                       # version | ||||
|         news_to_ismas ${params[*]} | ||||
|         return $? | ||||
|     } | ||||
|     | ||||
|     update_psa_pull_customer_repository () { | ||||
|         PERCENT=10 | ||||
|         local params=("U0010"                                   # event | ||||
|   | ||||
							
								
								
									
										40
									
								
								read_config
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								read_config
									
									
									
									
									
								
							| @@ -22,23 +22,21 @@ if [ ${read_config_sourced:-1} = "1" ]; then    # include only once | ||||
|     readonly UPDATEPSABEGIN=./.updatepsa/begin | ||||
|     readonly UPDATEPSAEND=./.updatepsa/end | ||||
|  | ||||
|     readonly OPKG_CMDS_TMP=/tmp/opkg_commands | ||||
|     readonly GIT_PULL_TMP=/tmp/git_pull | ||||
|     # name of file containing the logs following a 'git pull': | ||||
|     # basically, there are two kinds of entries: | ||||
|     readonly GIT_UPDATE_LOG=/opt/app/tools/atbupdate/update_log.csv | ||||
|  | ||||
|     readonly PROGRAM=`basename $0` | ||||
|     readonly WORKSPACE_DIR=workspace | ||||
|  | ||||
|     EXITCODE=$RC_SUCCESS | ||||
|     CLONE_CUSTOMER_REPOSITORY=false | ||||
|  | ||||
|     GIT_CLONE_EXECUTED=0 | ||||
|     INITIAL_CLONE=false | ||||
|     APISM_RUNNING=0 | ||||
|  | ||||
|     # read config file (JSON syntax) | ||||
|     read_config() { | ||||
|         local func="${FUNCNAME[0]}" | ||||
|      | ||||
|         WORKING_DIRECTORY=${PWD} | ||||
|         CONFIGFILENAME=${CONFIGFILENAME:-'update_psa.conf'} | ||||
|  | ||||
|         if ! [ -f "$CONFIGFILENAME" ]; then | ||||
| @@ -50,13 +48,6 @@ if [ ${read_config_sourced:-1} = "1" ]; then    # include only once | ||||
|          | ||||
|         local readonly cf="$CONFIGFILENAME" | ||||
|  | ||||
|         ### TODO: wieso wird hier in das verzeichnis gewechselt | ||||
|         if cd $WORKING_DIRECTORY ; then | ||||
|             log_debug "$func:${LINENO}: cd to $WORKING_DIRECTORY" | ||||
|         else | ||||
|             log_fatal "$func:${LINENO}: cannot cd to $WORKING_DIRECTORY" | ||||
|         fi | ||||
|          | ||||
|         readonly GIT_SSL_NO_VERIFY="$(cat "$cf" | jq -r .GIT_SSL_NO_VERIFY)" | ||||
|         assert_s GIT_SSL_NO_VERIFY | ||||
|  | ||||
| @@ -97,10 +88,23 @@ if [ ${read_config_sourced:-1} = "1" ]; then    # include only once | ||||
|         # Zone aus /etc/zone_nr auslesen | ||||
|         # | ||||
|         readonly ZONE_GROUP=1 | ||||
|         readonly ZONE=1 | ||||
|         local __zone=1 | ||||
|         readonly ZONE_FILE="$(cat "$cf" | jq -r .zone)" | ||||
|         if [ -f "$ZONE_FILE" ]; then | ||||
|             __zone=$(cat "$ZONE_FILE") | ||||
|             __zone=$((__zone)) | ||||
|         fi | ||||
|  | ||||
|         readonly ZONE=$__zone | ||||
|         readonly LOCAL_BRANCH="$(cat "$cf" | jq -r .local_branches[$ZONE])" | ||||
|  | ||||
|         if [ -z "$WORKING_DIRECTORY" ]; then | ||||
|             log_fatal "${func}:${LINENO}: empty WORKING_DIRECTORY" | ||||
|         fi | ||||
|         if ! cd "$WORKING_DIRECTORY"; then | ||||
|             log_fatal "${func}:${LINENO}: cannot cd to $WORKING_DIRECTORY" | ||||
|         fi | ||||
|         log_debug "${func}:${LINENO}: cd to $WORKING_DIRECTORY" | ||||
|         return 0 | ||||
|     } | ||||
| ############################################################################### | ||||
| @@ -129,6 +133,10 @@ if [ ${read_config_sourced:-1} = "1" ]; then    # include only once | ||||
|     check_sanity_of_repository () { | ||||
|         local func="${FUNCNAME[0]}" | ||||
|      | ||||
|         if [ "$PWD" != "$WORKING_DIRECTORY" ]; then | ||||
|             log_fatal "$func:${LINENO} PD != WD ($PWD != $WORKING_DIRECTORY)" | ||||
|         fi | ||||
|          | ||||
|         assert_d CUSTOMER_ID_BASE_DIR | ||||
|          | ||||
|         CUSTOMER_LOCATION_DIR="$CUSTOMER_ID_BASE_DIR" | ||||
| @@ -195,7 +203,7 @@ if [ ${read_config_sourced:-1} = "1" ]; then    # include only once | ||||
|         readonly              SYSCONF_INI="sysconfig.ini" | ||||
|         readonly              SYSCTRL_INI="SystemControl.ini" | ||||
|         readonly           TARIFF_CURRENT="tariff.current" | ||||
|         readonly                       DC="dc2c.hex" | ||||
|         readonly                       DC="dc2c.bin" | ||||
|         readonly            TARIFF_SUMMER="summer_tariff.json" | ||||
|         readonly            TARIFF_WINTER="winter_tariff.json" | ||||
|          | ||||
| @@ -214,7 +222,7 @@ if [ ${read_config_sourced:-1} = "1" ]; then    # include only once | ||||
|         readonly SYSCTRL_ETC_SYS_INI_FILE="${ETC_SYS_DIR}/$SYSCTRL_INI" | ||||
|         readonly SYSCTRL_ATB_SYS_INI_FILE="${ATB_SYS_DIR}/$SYSCTRL_INI" | ||||
|         readonly SYSCTRL_SCF_SYS_INI_FILE="${SYSCONFIG_SYS_DIR}/$SYSCTRL_INI" | ||||
|         readonly                ZONE_FILE="$ETC_SYS_DIR/zone_nr" | ||||
|         # readonly                ZONE_FILE="$ETC_SYS_DIR/zone_nr" | ||||
|         readonly             CUST_ID_FILE="$ETC_SYS_DIR/cust_nr" | ||||
|         readonly           TC_SYS_TC_FILE="${ATBAPP_SYS_DIR}/$TARIFF_CURRENT" | ||||
|         readonly       OPKG_CMDS_SYS_FILE="${OPKG_SYS_DIR}/opkg_commands" | ||||
|   | ||||
							
								
								
									
										36
									
								
								update_psa
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								update_psa
									
									
									
									
									
								
							| @@ -5,6 +5,7 @@ | ||||
| #                                UPDATE PSA | ||||
| # Usage: | ||||
| #   update_psa [ --? ] | ||||
| #              [ -m  ] | ||||
| #              [ --help ] | ||||
| #              [ --wdir "working_directory" ] | ||||
| #              [ --file "config_file" ] | ||||
| @@ -23,9 +24,15 @@ if [ -z $IFS ]; then | ||||
|     IFS=$'\n' | ||||
| fi | ||||
|  | ||||
| MAINTENANCE="NO" | ||||
| WORKING_DIRECTORY=${PWD} | ||||
|  | ||||
| # parse commandline parameters | ||||
| while test $# -gt 0; do | ||||
|     case $1 in | ||||
|         --maintenance | -m ) | ||||
|             MAINTENANCE="YES" | ||||
|             ;; | ||||
|         --file | --fil | --fi | --f | -file | -fil | -fi | -f ) | ||||
|             shift | ||||
|             CONFIGFILENAME="$1" | ||||
| @@ -36,7 +43,11 @@ while test $# -gt 0; do | ||||
|             ;; | ||||
|         --wdir | --wdi | --wd | --w | -wdir | -wdi | -wd | -w ) | ||||
|             shift | ||||
|             if [ "$1" = "." ]; then | ||||
|                 WORKING_DIRECTORY="$PWD" | ||||
|             else | ||||
|                 WORKING_DIRECTORY="$1" | ||||
|             fi | ||||
|             ;; | ||||
|         --help | -hel | --he | --h | '--?' | -help | -hel | -he | -h | '-?' ) | ||||
|             usage_and_exit 0 | ||||
| @@ -47,6 +58,7 @@ while test $# -gt 0; do | ||||
|             exit 0 | ||||
|             ;; | ||||
|         --dbg | --db | --d | -dbg | -db | -d ) | ||||
|             shift | ||||
|             set_dbg_level $DEBUG | ||||
|             ;;  | ||||
|         -*) | ||||
| @@ -59,31 +71,11 @@ while test $# -gt 0; do | ||||
|     shift | ||||
| done | ||||
|      | ||||
| if cd "$WORKING_DIRECTORY"; then | ||||
| source ./update_psa_impl | ||||
|  | ||||
|     if read_config | ||||
|     then | ||||
|         check_default_route | ||||
|         check_route_to_repository "185.191.219.134" # git.mimbach.de | ||||
|         check_for_running_apism | ||||
|         if clone_customer_repository ${CUSTOMER_REPOSITORY_PATH} | ||||
| 	    then  | ||||
|             check_sanity_of_repository | ||||
|  | ||||
|             #set_updates_available | ||||
|             #while : | ||||
|             #do | ||||
|             #    sleep 5 | ||||
|             #    updates_available && break | ||||
|             #done  | ||||
|  | ||||
|             # update_psa "testing" | ||||
| if read_config; then | ||||
|     update_psa | ||||
|         fi | ||||
|     fi | ||||
|     exit 0 | ||||
| fi | ||||
|  | ||||
| exit -1 | ||||
| exit 1 | ||||
| ############################################################################### | ||||
|   | ||||
| @@ -13,7 +13,7 @@ | ||||
|  | ||||
|     ""                      :   "local branches", | ||||
|     "local_branches"        :   ["master", | ||||
|                                  "zg1/zone1", "zg1/zone2", "zg1/zone3"], | ||||
|                                  "zg1/zone1", "zg1/zone2", "zg1/zone3", "zg1/zone4"], | ||||
|  | ||||
|     ""                      :   "customer number of PSA", | ||||
|     "customer_id_"          :   "/etc/cust_nr", | ||||
| @@ -26,7 +26,7 @@ | ||||
|     ""                      :   "0-index used as size of following array", | ||||
|     ""                      :   ".zg[0]: #n of zones_groups", | ||||
|     ""                      :   ".zg[1].z[0]: #n of zones in zg[1]", | ||||
|     "zg"                    :   [   1, { "z" : [ 3, 1, 2, 3] } ], | ||||
|     "zg"                    :   [   1, { "z" : [ 4, 1, 2, 4] } ], | ||||
|  | ||||
|     ""                      :   "url of customer repository", | ||||
|     "cust_repository_path"  :   "https://git.mimbach49.de/GerhardHoffmann/customer_281.git" | ||||
|   | ||||
| @@ -378,7 +378,7 @@ check_for_running_apism () { | ||||
|     if nc localhost 7778 | ||||
|     then | ||||
|         APISM_RUNNING=1 | ||||
|         log_debug "$func:${LINENO}: APISM running..." | ||||
|         log_info "$func:${LINENO}: APISM is running..." | ||||
|         return 0 | ||||
|     fi | ||||
|     log_fatal "$func:${LINENO}: !!! APISM NOT RUNNING !!!" | ||||
| @@ -388,7 +388,7 @@ check_default_route () { | ||||
|     local func="${FUNCNAME[0]}" | ||||
|     if ip route | head -n 1 | grep -q '^default' | ||||
|     then | ||||
|         log_debug "$func:${LINENO}: default route set" | ||||
|         log_info "$func:${LINENO}: default route set" | ||||
|         return 0 | ||||
|     fi | ||||
|     log_fatal "$func:${LINENO}: !!! NO DEFAULT ROUTE SET !!!" | ||||
| @@ -400,7 +400,7 @@ check_route_to_repository () { | ||||
|     # 185.191.219.134 via 192.168.5.254 ... | ||||
|     if test "$#" -eq 1 && ip route get "$1" | head -n 1 | grep -q "^$1" | ||||
|     then | ||||
|         log_debug "$func:${LINENO}: route to repository available" | ||||
|         log_info "$func:${LINENO}: route to repository available" | ||||
|         return 0 | ||||
|     fi | ||||
|     log_fatal "$func:${LINENO}: !!! NO ROUTE TO REPO SET !!!" | ||||
|   | ||||
							
								
								
									
										131
									
								
								update_psa_impl
									
									
									
									
									
								
							
							
						
						
									
										131
									
								
								update_psa_impl
									
									
									
									
									
								
							| @@ -13,6 +13,8 @@ trap collect_current_configuration EXIT | ||||
| collect_current_configuration () { | ||||
|     local func="${FUNCNAME[0]}" | ||||
|  | ||||
|     $FATAL_FAILURE && return 1 | ||||
|  | ||||
|     # TODO: eventuell muss die version neu berechnet werden | ||||
|     current_settings_to_ismas | ||||
|  | ||||
| @@ -28,24 +30,43 @@ collect_current_configuration () { | ||||
|     #done | ||||
| } | ||||
|  | ||||
| update_psa() { # calling with a parameter is used for testing | ||||
|  | ||||
|     if [ $# -eq 0 ]; then | ||||
|         if ! updates_available; then    # check for false alarm | ||||
|             update_psa_false_alarm "update requested, but no WAIT state detected" | ||||
|             exit $EXITCODE | ||||
|         fi | ||||
|     fi | ||||
|  | ||||
| update_psa() { | ||||
|     update_psa_activated    # message to ISMAS | ||||
|              | ||||
|     local func="${FUNCNAME[0]}" | ||||
|      | ||||
|     check_default_route | ||||
|     check_route_to_repository "185.191.219.134" # git.mimbach.de | ||||
|     # even for a git clone a running APISM is needed  | ||||
|     check_for_running_apism | ||||
|  | ||||
|     # an initial clone of the customer-repository (e.g. customer_281) is  | ||||
|     # always possible, even without a ISMAS-WAIT-button | ||||
|     clone_customer_repository ${CUSTOMER_REPOSITORY_PATH} | ||||
|     check_sanity_of_repository | ||||
|     $INITIAL_CLONE && return 0 | ||||
|  | ||||
|     if [ "$MAINTENANCE" = "NO" ]; then | ||||
|         log_info "update_psa:${LINENO}: MAINTENANCE OFF. Checking for updates..." | ||||
|         # someone must have activated the WAIT-button in ISMAS.  | ||||
|         # Request the status of this button in updates_available(). | ||||
|         if ! updates_available; then  | ||||
|             update_psa_false_alarm "update requested, but no WAIT state detected !!!" | ||||
|             log_fatal "update_psa:${LINENO}: update requested, but no WAIT state detected !!!" | ||||
|         fi | ||||
|     else | ||||
|         # simulate an activated WAIT-button | ||||
|         set_updates_available | ||||
|         while : | ||||
|         do | ||||
|             sleep 5 | ||||
|             updates_available && break | ||||
|         done  | ||||
|     fi | ||||
|  | ||||
|     log_debug "$func:${LINENO}: fetch/merge updates..." | ||||
|     | ||||
|     # Fetch new updates (using git). but only when repository has already been | ||||
|     # cloned. | ||||
|     if [ $GIT_CLONE_EXECUTED -eq 0 ]; then | ||||
|     if ! fetch_customer_updates; then | ||||
|         log_error "$func:${LINENO}: fetch no data for $customer_id"\ | ||||
| 	    "-> no files to update -> no psa update" | ||||
| @@ -53,95 +74,7 @@ update_psa() { # calling with a parameter is used for testing | ||||
| 	    "update request, but no change in $CUSTOMER_REPOSITORY_PATH" | ||||
|         # TODO | ||||
|     fi | ||||
|     fi | ||||
|              | ||||
|     update_psa_pull_customer_repository # message to ISMAS | ||||
|  | ||||
|     # no backup necessary as saved in git-repo | ||||
|      | ||||
|     # local changed_files=$(changed_file_names) | ||||
|     | ||||
|     if [[ -f "$GIT_PULL_TMP" ]]; then  | ||||
|         # TODO | ||||
|         if ! check_hardware_compatibility "$files_to_copy" ; then | ||||
|             local __r=$? | ||||
|             log_error "$func:${LINENO}: json/ini-files not fit for PSA" | ||||
|             revert_customer_repository | ||||
|             exit $__r | ||||
|         fi | ||||
|     fi | ||||
|  | ||||
|     if [[ -f "$OPKG_CMDS_TMP" ]]; then | ||||
|         local commands="$(cat ${OPKG_CMDS_TMP} | tr '\n' '; ')" | ||||
|         log_info "$func:${LINENO}: executed opkg commands" | ||||
|         update_psa_install_opkg_packages $UPDATE_ISMAS_PROGRESS \ | ||||
|             $RC_SUCCESS "$commands" | ||||
|     else | ||||
|         log_info "$func:${LINENO}: no opkg commands to execute" | ||||
|         update_psa_install_opkg_packages $UPDATE_ISMAS_PROGRESS \ | ||||
|             $RC_SUCCESS "no opkg commands to execute" | ||||
|     fi | ||||
|          | ||||
|     # check if the opkg-command-file has been changed during 'git pull' | ||||
|     #if grep -qE ".*opkg_commands.*?" <<< $changed_files; then | ||||
|     #    # read opkg_cmds: each line respresents an opkg-command | ||||
|     #    readarray opkg_commands < <(cat $OPKG_CMDS_PSA_FILE) | ||||
|     #    for opkg_c in "${opkg_commands[@]}"; do | ||||
|     #        if grep -qE "^\s*[#]+.*$" <<< $opkg_c; then | ||||
|     #            continue    # found comment line | ||||
|     #        fi | ||||
|  | ||||
|     #        # package manipulation commands without package: | ||||
|     #        local cwp="update|upgrade|clean" | ||||
|     #        # informational commands without package: | ||||
|     #        cwp="${cwp}|list|list-installed|list-upgradable" | ||||
|  | ||||
|     #        if grep -qE "^.*\s+($cwp)\s+.*$" <<< $opkg_c; then | ||||
|     #            local p=$(printf '%s' "$opkg_c" | awk '{ print $NF }') | ||||
|     #            local opkg_output=() | ||||
|     #            if ! exec_opkg_info "$p" opkg_output; then | ||||
|     #                log_error "$func:${LINENO}: opkg info $opkg_c failed" | ||||
|     #                revert_customer_repository ; exit 1 | ||||
|     #            fi | ||||
|  | ||||
|     #            if ! check_md5_for_opkg_packages opkg_output; then | ||||
|     #                log_error "$func:${LINENO}: "\ | ||||
|     #                    "wrong md5sum for opkg packages" | ||||
|     #                revert_customer_repository ; exit 1 | ||||
|     #            fi | ||||
|     #        fi | ||||
|     #         | ||||
|     #        # perform a dry-run and check if everything might work as expected.  | ||||
|     #        if ! exec_opkg_noaction $opkg_c; then | ||||
|     #                log_error "$func:${LINENO}: "\ | ||||
|     #                    "opkg --noaction $opkg_c failed" | ||||
|     #        fi | ||||
|  | ||||
|     #        # Actually execute the opkg command | ||||
|     #        if ! exec_opkg $opkg_c; then | ||||
|     #            log_error "$func:${LINENO}: exec_opkg $opkg_c failed" | ||||
|     #            fallback_to_previous_version | ||||
|     #            revert_customer_repository ; exit 1 | ||||
|     #        fi | ||||
|     #    done | ||||
|     #else | ||||
|     #    log_info "$func:${LINENO}: no opkg commands to execute" | ||||
|     #    update_psa_install_opkg_packages $UPDATE_ISMAS_PROGRESS \ | ||||
|     #            $RC_SUCCESS "no opkg commands to execute" | ||||
|     #fi | ||||
|      | ||||
|     # Cleanup. | ||||
|     #if ! cleanup_previous_version; then | ||||
|     #    log_error "$func:${LINENO}: cleanup_previous_version failed" | ||||
|     #fi | ||||
|  | ||||
|     # compute version string for current (i.e. new) version | ||||
|     compute_version | ||||
|  | ||||
|     update_psa_cleanup $UPDATE_ISMAS_PROGRESS \ | ||||
|         $RC_SUCCESS "cleanup after psa update" | ||||
|  | ||||
|     # TODO | ||||
|     exit 0 | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user