#! /bin/bash . /usr/src/m2/framework/settings.sh . /usr/src/m2/framework/bash_functions.sh VERSION="1.5.4" SCRIPT_NAME="Script update" SCRIPTS_SRC_DIR="/usr/src/m2/scripts" SCRIPTS_DIR="/usr/local/m2" LOG_DIR="/var/log/m2" TMP_DIR="/tmp/m2" PCAP_DIR="/var/log/m2/pcap" QR_DIR="/tmp/m2/m2_quality_routing_stats" BACKUPS_DIR="/usr/local/m2/backups" HOSTNAME=$(hostname) install_script() { local script_name="$1" local additional_libs="$2" report "Installing $script_name" 3 cd $SCRIPTS_SRC_DIR || { report "Failed to enter directory: $SCRIPTS_SRC_DIR" 1; return; } # Delete old script rm -f "$script_name" &> /dev/null if [ "$additional_libs" != "" ]; then # Do not quote '$additional_libs' # shellcheck disable=SC2086 gcc -g -Wall -o "$script_name" "$script_name.c" -L/usr/lib/mysql -L/usr/lib64/mysql -lmysqlclient -lpthread -lm -lcurl $additional_libs else gcc -g -Wall -o "$script_name" "$script_name.c" -L/usr/lib/mysql -L/usr/lib64/mysql -lmysqlclient -lpthread -lm -lcurl fi if [ ! -e "$script_name" ]; then report "Failed to install $script_name" 1 return fi mv -f "$script_name" $SCRIPTS_DIR # Create log file touch "$LOG_DIR"/"$script_name".log chmod 777 "$LOG_DIR"/"$script_name".log } install_db_scripts_crons() { local cron_action="" $SCRIPTS_SRC_DIR/m2_alerts_dir/install.sh install_script m2_archive_old_calls install_script m2_background_tasks install_script m2_active_calls_data install_script m2_cdr_rerate install_script m2_delete_old_rates install_script m2_delete_old_calls install_script m2_tariff_generator install_script m2_destinations_fix install_script m2_cdr_export install_script m2_cdr_compare # And CDR clean script for GUI cp -fr /usr/src/m2/helpers/m2_clean_src_in_csv.sh $SCRIPTS_DIR/m2_clean_src_in_csv chmod +x $SCRIPTS_DIR/m2_clean_src_in_csv /usr/src/m2/helpers/m2_rates_effective_from_cache_control/m2_rates_effective_from_cache_control_install.sh &> /dev/null # Install cronjobs that should be run only on main database server # In order to add new cron, put cron file in /usr/src/m2/scripts/cronjobs dir and add cron # in appropriate GLOBAL variable (CRONS_FOR_ALL_SERVERS, CRONS_FOR_MAIN_DB, etc) in framework/settings.sh report "Installing cronjobs" 3 for cron_action in $M2_CRONS_FOR_MAIN_DB; do cp -fr "$SCRIPTS_SRC_DIR/cronjobs/$cron_action" /etc/cron.d/ chmod 0644 "/etc/cron.d/$cron_action" done } install_libxlsxwriter() { local zlib_tgz="zlib-1.2.11.tar.gz" local zlib_dir="/usr/src/zlib-1.2.11" local libxlsxwriter_tgz="libxlsxwriter-239f5.tar.gz" local libxlsxwriter_dir="/usr/src/libxlsxwriter-239f5afbd4e5d3afd2b288a9f86303851a5e13f5" cd /usr/src || { report "Failed to enter directory: /usr/src" 1; return; } # Delete old archives and dirs rm -f $zlib_tgz &> /dev/null rm -f $zlib_dir &> /dev/null rm -f $libxlsxwriter_tgz &> /dev/null rm -f $libxlsxwriter_dir &> /dev/null # Download zlib k_download_packet $zlib_tgz if [ ! -e $zlib_tgz ]; then report "Failed to download $zlib_tgz" 1 return fi # Download libxlsxwriter k_download_packet $libxlsxwriter_tgz if [ ! -e $libxlsxwriter_tgz ]; then report "Failed to download $libxlsxwriter_tgz" 1 return fi # Extract and install zlib cd /usr/src/ && tar zxf $zlib_tgz > /dev/null 2>&1 if cd $zlib_dir; then ./configure make make install else report "Failed to extract $zlib_tgz" 1 return fi # Extract and install libxlsxwriter cd /usr/src/ && tar zxf $libxlsxwriter_tgz > /dev/null 2>&1 if cd $libxlsxwriter_dir; then report "Installing libxlsxwriter" 3 make make install else report "Failed to extract $libxlsxwriter_tgz" 1 return fi # Link to default libs directory ln -s /usr/local/lib/libxlsxwriter.so /usr/lib/libxlsxwriter.so ldconfig # Remove downloaded archives and dirs rm -f $zlib_tgz &> /dev/null rm -f $zlib_dir &> /dev/null rm -f $libxlsxwriter_tgz &> /dev/null rm -f $libxlsxwriter_dir &> /dev/null } k_start "$@" k_config_details "$@" k_detect_os # Check arguments for arg in "$@" do arg_lower=$(echo "$arg" | awk '{print tolower($0)}') # Install specific script? if [[ "$arg_lower" =~ ^m2_.* ]]; then install_script "$arg_lower" exit 0 fi done # Update scripts if [ "$1" == "LATEST" ]; then report "Updating Scripts to LATEST revision" 3 svn update $SCRIPTS_SRC_DIR &> /dev/null else stable_rev=$(cat /usr/src/m2/gui/stable_revision) report "Updating Scripts to STABLE revision: $stable_rev" 3 svn -r "$stable_rev" update $SCRIPTS_SRC_DIR &> /dev/null fi # Create directories mkdir -p $SCRIPTS_DIR mkdir -p $LOG_DIR mkdir -p $TMP_DIR mkdir -p $PCAP_DIR mkdir -p $QR_DIR mkdir -p $BACKUPS_DIR # Give permissions chmod 777 -R $LOG_DIR chmod 777 $TMP_DIR chmod 777 $PCAP_DIR chmod 777 $QR_DIR chmod 777 $BACKUPS_DIR # Handle old scripts rm -fr /usr/local/m2/m2_aggregates &> /dev/null rm -fr /usr/local/m2/m2_aggregates_control &> /dev/null killall -9 m2_aggregates &> /dev/null killall -9 m2_aggregates_control &> /dev/null chkconfig --del m2_aggregates &> /dev/null rm -fr /etc/init.d/m2_aggregates &> /dev/null rm -fr /etc/cron.d/m2_aggregates &> /dev/null rm -fr /etc/cron.d/m2_aggregates_control &> /dev/null rm -fr /etc/cron.d/keep_aggregates_alive &> /dev/null rm -fr /etc/cron.d/m2_invoices_weekly &> /dev/null if [ ! -e $SCRIPTS_SRC_DIR ]; then report "Directory $SCRIPTS_SRC_DIR does not exist" 1 exit 1 fi # DB related stuff if [[ "$DB_PRESENT" == "1" ]]; then if [[ $MAIN_DB == "1" || $MAIN_DB == "-1" ]]; then if [[ $MAIN_DB == "1" ]]; then report "Main database present, installing DB related scripts and crons" 3 else report "MAIN_DB is not set, please set it in /etc/m2/system.conf" 2 report "Installing DB related scripts and crons" 3 fi install_db_scripts_crons elif [[ $MAIN_DB == "0" ]]; then report "MAIN_DB is not present, I will NOT install DB related scripts and crons" 3 fi else report "DB is not present, I will NOT install DB related scripts and crons" 3 fi if [ "$HOSTNAME" != "dev.kolmisoft.com" ]; then if [ ! -e /usr/lib/libxlsxwriter.so ]; then install_libxlsxwriter fi install_script m2_compare_tariffs "-lxlsxwriter" fi if [[ -e /usr/src/m2/helpers/m2_pcap_tshark/m2_pcap_wrapper.sh ]]; then rm -f m2_pcap &> /dev/null gcc -g -Wall -o m2_pcap m2_pcap.c -L/usr/lib/mysql -L/usr/lib64/mysql -lmysqlclient -lpthread -lm cp -f m2_pcap $SCRIPTS_DIR/m2_pcapsipdump cp -f /usr/src/m2/helpers/m2_pcap_tshark/m2_pcap_wrapper.sh $SCRIPTS_DIR/m2_pcap chmod +x $SCRIPTS_DIR/m2_pcap rm -f m2_pcap &> /dev/null else install_script m2_pcap fi install_script m2_call_log install_script m2_system_stats_report install_script m2_invoices install_script m2_invoices_report install_script m2_fraud_protection # These scripts can also be used by GUI directly # So install on all DB and GUI servers if [[ "$DB_PRESENT" == "1" ]] || [[ "$GUI_PRESENT" == "1" ]]; then install_script m2_rates_effective_from_cache install_script m2_rates_notification_data fi $SCRIPTS_SRC_DIR/m2_server_loadstats_dir/install.sh # install cronjobs # In order to add new cron, put cron file in /usr/src/m2/scripts/cronjobs dir and add cron # in appropriate GLOBAL variable (CRONS_FOR_ALL_SERVERS, CRONS_FOR_MAIN_DB, etc) in framework/settings.sh # 1) DB related crons are installed in install_db_scripts_crons function # 2) For GUI if [[ $GUI_PRESENT == "1" || $GUI_PRESENT == "-1" ]]; then apache_listen_on_https=$(netstat -antp | grep -F http | grep -cF :443) if [[ $GUI_PRESENT == "1" ]]; then report "GUI is present, installing GUI related crons" 3 else report "GUI_PRESENT is not set, please set it in /etc/m2/system.conf" 2 report "Installing GUI related crons" 3 fi for cron_action in $M2_CRONS_FOR_GUI; do cp -fr "/usr/src/m2/gui/cronjobs/$cron_action" /etc/cron.d/ if (( apache_listen_on_https > 0)); then sed -i 's#http:#https:#' /etc/cron.d/"$cron_action" fi chmod 0644 "/etc/cron.d/$cron_action" done fi # 3) FOR ES if [[ $ES_PRESENT == "1" || $ES_PRESENT == "-1" ]]; then if [[ $ES_PRESENT == "1" ]]; then report "ES is present, installing ES related scripts" 3 cp -f /usr/src/m2/elasticsearch/elasticsearch_restart.sh $SCRIPTS_DIR/ /usr/src/m2/elasticsearch/es_sync_control_install.sh &> /dev/null # Usage monitoring script /usr/src/k_framework/maintenance/usage_monitoring/install.sh &> /dev/null report "ES is present, installing ES related crons" 3 else report "ES_PRESENT is not set, please set it in /etc/m2/system.conf" 2 report "Installing ES related crons" 3 fi for cron_action in $M2_CRONS_FOR_ES; do cp -f "$SCRIPTS_SRC_DIR/cronjobs/$cron_action" /etc/cron.d/ chmod 0644 "/etc/cron.d/$cron_action" done fi # 4) FOR Radius (core) if [ "$RADIUS_PRESENT" == "1" ]; then report "Radius is present, installing Radius/core related scripts" 3 cp -f /usr/src/m2/db/core_failed_queries_import.sh $SCRIPTS_DIR/ for cron_action in $M2_CRONS_FOR_RADIUS; do cp -f "$SCRIPTS_SRC_DIR/cronjobs/$cron_action" /etc/cron.d/ chmod 0644 "/etc/cron.d/$cron_action" done fi # 5) Remaining crons should be available in all server for cron_action in $M2_CRONS_FOR_ALL_SERVERS; do cp -f "$SCRIPTS_SRC_DIR/cronjobs/$cron_action" /etc/cron.d/ chmod 0644 "/etc/cron.d/$cron_action" done # Email script /usr/src/k_framework/helpers/sendEmail/sendEmail_install.sh # Backup scripts report "Installing backup scripts" 3 cp -f $SCRIPTS_SRC_DIR/backups/* $BACKUPS_DIR/ # AWS check script cp -f /usr/src/m2/db/check_aws_connection.sh $SCRIPTS_DIR/ # Core dump report script /usr/src/k_framework/maintenance/core_dump_report/install.sh # Process control script /usr/src/k_framework/maintenance/process_control/install.sh # Restart cron /etc/init.d/crond restart &> /dev/null report "Script update completed" 0