The following is a summary of the tests I have done.
In /etc/profile.local, I am sourcing 3 script files of mines :
source /backup_sys/000_COMMON/Bin/system_common_general_env_var
source /backup_sys/000_COMMON/Bin/system_common_function_3
source /backup_sys/000_COMMON/Bin/system_common_function
At the beginning, the code in file system_common_function_3 was contained in file system_common_function.
I have discovered the faulty function and have remove it and put it in the separate file “system_common_function_3”
1°) Changing source order of file N°2 and file N°3 does not make different behavior.
2-1°) The file “/system_common_general_env_var” start with :
DOLLAR_ZERO="${0}"
logger -t JCD_SYSTEM_COMMON_BIN "/backup_sys/000_COMMON/Bin/system_common_general_env_var DOLLAR_ZERO : $DOLLAR_ZERO"
BASH__SOURCE="${BASH_SOURCE[0]}"
logger -t JCD_SYSTEM_COMMON_BIN "/backup_sys/000_COMMON/Bin/system_common_general_env_var BASH_SOURCE : $BASH__SOURCE"
PARENT_CALLER="$(ps -f -p $PPID | tail -1 | awk '{print $F}')"
logger -t JCD_SYSTEM_COMMON_BIN "/backup_sys/000_COMMON/Bin/system_common_general_env_var PARENT_CALLER : $PARENT_CALLER"
#
2-2°) The file “/system_common_general_env_var” contains declarations like :
declare -i GENERAL_FAILURE=255 CUR_GENERAL_FAILURE=$GENERAL_FAILURE GLOB_ERR=$GENERAL_FAILURE GLOB_RETURN_CODE=$GENERAL_FAILURE RETURN_CODE=$GENERAL_FAILURE CUR_ERR=$GENERAL_FAILURE CUR_RETURN_CODE=$GENERAL_FAILURE
export GENERAL_FAILURE CUR_GENERAL_FAILURE GLOB_ERR GLOB_RETURN_CODE RETURN_CODE CUR_ERR CUR_RETURN_CODE
#
2-3°) and contains some pair key=value declarations like :
G_STRING_RETURN="¤"
IS_CRYPTED="CRYPTED"
NO_SHELL_PATH="--shell /bin/false"
NO_CREATE_HOME="-M"
#
# --- FREENX VARIABLES ---
PTA_REPO="PLEASE_TRY_AGAIN"
MY_OPENSUSE_CUR_PTA="12.2"
PTA_REP=${PTA_REPO}_${MY_OPENSUSE_CUR_PTA}
#
SYSTEMD_DIR_FILE="/etc/systemd/system"
#
export G_STRING_RETURN IS_CRYPTED NO_SHELL_PATH NO_CREATE_HOME PTA_REPO MY_OPENSUSE_CUR_PTA PTA_REP SYSTEMD_DIR_FILE
3-1°) Le fichier source /backup_sys/000_COMMON/Bin/system_common_function start with :
DOLLAR_ZERO="${0}"
logger -t JCD_SYSTEM_COMMON_BIN "/backup_sys/000_COMMON/Bin/system_common_function DOLLAR_ZERO : $DOLLAR_ZERO"
BASH__SOURCE="${BASH_SOURCE[0]}"
logger -t JCD_SYSTEM_COMMON_BIN "/backup_sys/000_COMMON/Bin/system_common_function BASH_SOURCE : $BASH__SOURCE"
PARENT_CALLER="$(ps -f -p $PPID | tail -1 | awk '{print $F}')"
logger -t JCD_SYSTEM_COMMON_BIN "/backup_sys/000_COMMON/Bin/system_common_function PARENT_CALLER : $PARENT_CALLER"
#
3-2°) Le fichier source /backup_sys/000_COMMON/Bin/system_common_function contains function declarations like :
function date2stamp_full {
# "016-11-27__14-14-04"
date --date "$1" +%Y-%m-%d__%H-%M-%S
}
function my_get_salt {
# "1480252649890900860"
date --date "$1" +%s%N
}
function ask_YyRr {
#
local L_REPLY="" L_PARAM1=" "
#
if $# -gt 0 ]] ; then
L_PARAM1="$1"
fi
#
read -n 1 -r -p "$L_PARAM1 [y]" L_REPLY
if -z $L_REPLY ]] ; then
echo
return $ANSW_NULL # 0=null
elif $L_REPLY =~ ^[Yy]$ ]] ; then
echo
return $ANSW_Y # 1=yes
else
if $MY_DEBUG -ne 0 ]] ; then
echo " -->> Reject ..."
fi
return $ANSW_No # 2=no ==> Not null and Not (Yy]
fi
echo
}
......................
......................
......................
......................
export -f date2stamp_full my_get_salt ask_YyRr .............
I started the final test with a small block of code in system_common_function_3 :
DOLLAR_ZERO="${0}"
logger -t JCD_SYSTEM_COMMON_BIN "/backup_sys/000_COMMON/Bin/system_common_function_3 DOLLAR_ZERO : $DOLLAR_ZERO"
BASH__SOURCE="${BASH_SOURCE[0]}"
logger -t JCD_SYSTEM_COMMON_BIN "/backup_sys/000_COMMON/Bin/system_common_function_3 BASH_SOURCE : $BASH__SOURCE"
PARENT_CALLER="$(ps -f -p $PPID | tail -1 | awk '{print $F}')"
logger -t JCD_SYSTEM_COMMON_BIN "/backup_sys/000_COMMON/Bin/system_common_function_3 PARENT_CALLER : $PARENT_CALLER"
#
#
# ===================================================================
#
# FUNCTION BEGIN
#
# ===================================================================
#set -x
#
#+++++++++++++++++++++++++++++++++++++++++++++
#
# print_var
#
# ++++++++++++++++++++++++++++++++++++++++++++
#
function print_var {
#set -x
echo "echo ARRAY_MAIN_REPO_LEAP : ${ARRAY_MAIN_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_DISABLED_REPO_LEAP : ${ARRAY_DISABLED_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_MY_OPENSUSE_REPO_LEAP : ${ARRAY_MY_OPENSUSE_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_LIST_PREFERED_MY_REPO : ${ARRAY_LIST_PREFERED_MY_REPO@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_LIST_OTHER_MY_REPO : ${ARRAY_LIST_OTHER_MY_REPO@]} " >> /tmp/print_var_log.txt
chmod 777 /tmp/print_var_log.txt
#
#set +x
}
#
#+++++++++++++++++++++++++++++++++++++++++++++
#
# print_var_to_file
#
# ++++++++++++++++++++++++++++++++++++++++++++
#
function print_var_to_file {
print_var
TIMESTAMP=$(date2stamp2 now)
cat /tmp/print_var_log.txt > "/tmp/000_system_common_server_env_var_log_$TIMESTAMP.txt"
}
#
export -f print_var print_var_to_file
#
Then I add a block of the same code, then reboot the system, then test if the problem exists or not.
If not, i add another block of code and repeat the process.
Finally when the file “system_common_function_3” is like this, the problem occure.
#!/bin/bash
#
############################
# #
# {config_jcd} #
# #
# /backup_sys/000_COMMON/Bin/system_common_function_3
# #
# §2017_05_31§ #
# #
# ¨version:12¨ #
# #
############################
#
# system common parameter and functions
#
########################################################
#
DOLLAR_ZERO="${0}"
logger -t JCD_SYSTEM_COMMON_BIN "/backup_sys/000_COMMON/Bin/system_common_function_3 DOLLAR_ZERO : $DOLLAR_ZERO"
BASH__SOURCE="${BASH_SOURCE[0]}"
logger -t JCD_SYSTEM_COMMON_BIN "/backup_sys/000_COMMON/Bin/system_common_function_3 BASH_SOURCE : $BASH__SOURCE"
PARENT_CALLER="$(ps -f -p $PPID | tail -1 | awk '{print $F}')"
logger -t JCD_SYSTEM_COMMON_BIN "/backup_sys/000_COMMON/Bin/system_common_function_3 PARENT_CALLER : $PARENT_CALLER"
#
#
# ===================================================================
#
# FUNCTION BEGIN
#
# ===================================================================
#set -x
#
#+++++++++++++++++++++++++++++++++++++++++++++
#
# print_var
#
# ++++++++++++++++++++++++++++++++++++++++++++
#
function print_var {
#set -x
echo "echo ARRAY_MAIN_REPO_LEAP : ${ARRAY_MAIN_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_DISABLED_REPO_LEAP : ${ARRAY_DISABLED_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_MY_OPENSUSE_REPO_LEAP : ${ARRAY_MY_OPENSUSE_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_LIST_PREFERED_MY_REPO : ${ARRAY_LIST_PREFERED_MY_REPO@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_LIST_OTHER_MY_REPO : ${ARRAY_LIST_OTHER_MY_REPO@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_MAIN_REPO_LEAP : ${ARRAY_MAIN_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_DISABLED_REPO_LEAP : ${ARRAY_DISABLED_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_MY_OPENSUSE_REPO_LEAP : ${ARRAY_MY_OPENSUSE_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_LIST_PREFERED_MY_REPO : ${ARRAY_LIST_PREFERED_MY_REPO@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_LIST_OTHER_MY_REPO : ${ARRAY_LIST_OTHER_MY_REPO@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_MAIN_REPO_LEAP : ${ARRAY_MAIN_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_DISABLED_REPO_LEAP : ${ARRAY_DISABLED_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_MY_OPENSUSE_REPO_LEAP : ${ARRAY_MY_OPENSUSE_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_LIST_PREFERED_MY_REPO : ${ARRAY_LIST_PREFERED_MY_REPO@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_LIST_OTHER_MY_REPO : ${ARRAY_LIST_OTHER_MY_REPO@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_MAIN_REPO_LEAP : ${ARRAY_MAIN_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_DISABLED_REPO_LEAP : ${ARRAY_DISABLED_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_MY_OPENSUSE_REPO_LEAP : ${ARRAY_MY_OPENSUSE_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_LIST_PREFERED_MY_REPO : ${ARRAY_LIST_PREFERED_MY_REPO@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_LIST_OTHER_MY_REPO : ${ARRAY_LIST_OTHER_MY_REPO@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_MAIN_REPO_LEAP : ${ARRAY_MAIN_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_DISABLED_REPO_LEAP : ${ARRAY_DISABLED_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_MY_OPENSUSE_REPO_LEAP : ${ARRAY_MY_OPENSUSE_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_LIST_PREFERED_MY_REPO : ${ARRAY_LIST_PREFERED_MY_REPO@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_LIST_OTHER_MY_REPO : ${ARRAY_LIST_OTHER_MY_REPO@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_MAIN_REPO_LEAP : ${ARRAY_MAIN_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_DISABLED_REPO_LEAP : ${ARRAY_DISABLED_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_MY_OPENSUSE_REPO_LEAP : ${ARRAY_MY_OPENSUSE_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_LIST_PREFERED_MY_REPO : ${ARRAY_LIST_PREFERED_MY_REPO@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_LIST_OTHER_MY_REPO : ${ARRAY_LIST_OTHER_MY_REPO@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_MAIN_REPO_LEAP : ${ARRAY_MAIN_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_DISABLED_REPO_LEAP : ${ARRAY_DISABLED_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_MY_OPENSUSE_REPO_LEAP : ${ARRAY_MY_OPENSUSE_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_LIST_PREFERED_MY_REPO : ${ARRAY_LIST_PREFERED_MY_REPO@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_LIST_OTHER_MY_REPO : ${ARRAY_LIST_OTHER_MY_REPO@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_MAIN_REPO_LEAP : ${ARRAY_MAIN_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_DISABLED_REPO_LEAP : ${ARRAY_DISABLED_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_MY_OPENSUSE_REPO_LEAP : ${ARRAY_MY_OPENSUSE_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_LIST_PREFERED_MY_REPO : ${ARRAY_LIST_PREFERED_MY_REPO@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_LIST_OTHER_MY_REPO : ${ARRAY_LIST_OTHER_MY_REPO@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_MAIN_REPO_LEAP : ${ARRAY_MAIN_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_DISABLED_REPO_LEAP : ${ARRAY_DISABLED_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_MY_OPENSUSE_REPO_LEAP : ${ARRAY_MY_OPENSUSE_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_LIST_PREFERED_MY_REPO : ${ARRAY_LIST_PREFERED_MY_REPO@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_LIST_OTHER_MY_REPO : ${ARRAY_LIST_OTHER_MY_REPO@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_MAIN_REPO_LEAP : ${ARRAY_MAIN_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_DISABLED_REPO_LEAP : ${ARRAY_DISABLED_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_MY_OPENSUSE_REPO_LEAP : ${ARRAY_MY_OPENSUSE_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_LIST_PREFERED_MY_REPO : ${ARRAY_LIST_PREFERED_MY_REPO@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_LIST_OTHER_MY_REPO : ${ARRAY_LIST_OTHER_MY_REPO@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_MAIN_REPO_LEAP : ${ARRAY_MAIN_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_DISABLED_REPO_LEAP : ${ARRAY_DISABLED_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_MY_OPENSUSE_REPO_LEAP : ${ARRAY_MY_OPENSUSE_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_LIST_PREFERED_MY_REPO : ${ARRAY_LIST_PREFERED_MY_REPO@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_LIST_OTHER_MY_REPO : ${ARRAY_LIST_OTHER_MY_REPO@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_MAIN_REPO_LEAP : ${ARRAY_MAIN_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_DISABLED_REPO_LEAP : ${ARRAY_DISABLED_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_MY_OPENSUSE_REPO_LEAP : ${ARRAY_MY_OPENSUSE_REPO_LEAP@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_LIST_PREFERED_MY_REPO : ${ARRAY_LIST_PREFERED_MY_REPO@]} " >> /tmp/print_var_log.txt
echo "echo ARRAY_LIST_OTHER_MY_REPO : ${ARRAY_LIST_OTHER_MY_REPO@]} " >> /tmp/print_var_log.txt
chmod 777 /tmp/print_var_log.txt
#
#set +x
}
#
#+++++++++++++++++++++++++++++++++++++++++++++
#
# print_var_to_file
#
# ++++++++++++++++++++++++++++++++++++++++++++
#
function print_var_to_file {
print_var
TIMESTAMP=$(date2stamp2 now)
cat /tmp/print_var_log.txt > "/tmp/000_system_common_server_env_var_log_$TIMESTAMP.txt"
}
#
export -f print_var print_var_to_file
#
#
# ==========================================================================================
#
# FUNCTION END
#
# ==========================================================================================
#
#
#set +x
#
logger -t JCD_SYSTEM_COMMON_BIN "/backup_sys/000_COMMON/Bin/system_common_function_3 - END - USER : $USER "
When the problem occur :
- Not all the functions exported are visible ( The code
env | grep BASH_ | sort
does not show all functions.
- On a system running leap 42.3, you cannot log in because of this error
Loading stage "initial" 282
startkde: Starting up...
/usr/bin/kdeinit5: Bad address
startkde: Could not start kdeinit5. Check your installation.
Any help is welcome.
If you need more tests, asks.