#!/bin/bash # Runs at exit of this script function ensure { # Enable MOR Blocked Countries after updating the system if /sbin/iptables -n -L MOR-BLOCKED-COUNTRIES | grep -q RETURN; then /sbin/iptables -D MOR-BLOCKED-COUNTRIES -j RETURN fi } trap ensure EXIT QUIT INT TERM KILL # Disable MOR Blocked Countries while updating the system if ! /sbin/iptables -n -L MOR-BLOCKED-COUNTRIES | grep -q RETURN; then /sbin/iptables -I MOR-BLOCKED-COUNTRIES -j RETURN fi exec > >(tee -a update.log) exec 2> >(tee -a update.log >&2) # Important: Once this script is launched there is no way back to older MOR versions. You will have to reinstall the system in order to get older MOR version. . /usr/src/mor/framework/bash_functions.sh . /usr/src/mor/framework/framework.conf . /usr/src/mor/framework/mor_install_functions.sh . /usr/src/mor/framework/settings.sh version="x9" Version="X9" Previous_Version="X8" dir="/usr/src/mor/$version" report "Starting $version update/upgrade" 3 NO_SCREEN="$1" # Option to be tolerant on running without screen if [ "$NO_SCREEN" != "NO_SCREEN" ]; then # require to be running from screen from now on are_we_inside_screen if [ "$?" == "1" ]; then report "You have to run this script from 'screen' program. To do so - just run command 'screen' and launch the script again as usual" 1 exit 1 fi fi cd /usr/src/mor svn_update /usr/src/mor if ! /usr/src/k_framework/maintenance/centos6_repo_fix.sh; then # Explanation of what went wrong will be printed by the script itself report "Aborting..." 6 exit 1 fi $dir/maintenance/time_sync.sh report `date` 3 source "/etc/profile.d/rvm.sh" #proc1(){ #} # proc1 end # MK WIP - review till here #exit 0 # fix/make /etc/system.conf file $dir/maintenance/configuration_prepare.sh # Update to ruby 2.1.2 + passenger + bundles cd $dir/gui/ ./ruby_passenger_gui_update.sh STABLE rvm use 2.1.2 # very nasty hack to solve no bundle problem rm -fr /usr/local/bin/bundle &> /dev/null ln -s /usr/local/rvm/gems/ruby-2.1.2/wrappers/bundle /usr/local/bin/bundle &> /dev/null #=========== Main ================================================== mkdir -p /usr/local/mor/backups/GUI if [ $LOCAL_INSTALL == 0 ]; then svn co http://svn.kolmisoft.com/mor/install_script/trunk/ /usr/src/mor get_last_stable_mor_revision $version svn update -r $LAST_STABLE_GUI http://svn.kolmisoft.com/mor/install_script/trunk/db/$version/ /usr/src/mor/db/$version/ &> /dev/null randir=`date +%H%M%S%N` if [ -d /home/mor ]; then mor_gui_current_version mor_version_mapper "$MOR_VERSION" if [ "$MOR_MAPPED_VERSION_WEIGHT" -le "175" ]; then # BIG CHANGES.. New project structure, etc.... report "Full GUI upgrade" 3 mysql_connect_data_v2 # getting MySQL connection details # gui backup tar -cvf /usr/local/mor/backups/GUI/mor_"$MOR_VERSION"_before_migration_to_MOR_$version_$randir.tar.gz /home/mor --exclude "/home/mor/log" if [ -d /home/mor_"$MOR_VERSION"_BEFORE_MIGRATION_TO_MOR_$version ]; then report 'Sorry, but /home/mor_'$MOR_VERSION'_BEFORE_MIGRATION_TO_MOR_'$version' already exists. To avoid custom modifications you might have there I refuse to continue overwriting that directory. Remove or rename that directory if you are sure that no valuable information there is present' 1 exit 1 fi mv /home/mor /home/mor_"$MOR_VERSION"_BEFORE_MIGRATION_TO_MOR_$version #backup /etc/asterisk and /etc/httpd directories mkdir -p /home/mor_"$MOR_VERSION"_BEFORE_MIGRATION_TO_MOR_$version/etc cp -a /etc/asterisk /home/mor_"$MOR_VERSION"_BEFORE_MIGRATION_TO_MOR_$version/etc cp -a /etc/httpd /home/mor_"$MOR_VERSION"_BEFORE_MIGRATION_TO_MOR_$version/etc report "Checking out MOR $version GUI from svn.kolmisoft.com, last stable rev: $LAST_STABLE_GUI" 3 # some nasty svn hickup fix rm -fr /home/mor/app/views/shared # update svn co -r $LAST_STABLE_GUI --force http://svn.kolmisoft.com/mor/gui/branches/$version /home/mor > /dev/null svn update -r $LAST_STABLE_GUI --force --accept theirs-full /home/mor > /dev/null # preserving custom ivr_voices/ad_sounds/invoice_templates cp -R /home/mor_"$MOR_VERSION"_BEFORE_MIGRATION_TO_MOR_$version/public/ivr_voices /home/mor/public/ chmod 666 -R /home/mor/public/ivr_voices cp -R /home/mor_"$MOR_VERSION"_BEFORE_MIGRATION_TO_MOR_$version/public/ad_sounds /home/mor/public/ chmod 666 -R /home/mor/public/ad_sounds cp -a /home/mor_"$MOR_VERSION"_BEFORE_MIGRATION_TO_MOR_$version/public/invoice_templates /home/mor/public/ # new proper config files for GUI mkdir -p /home/mor/config # strict=false setting should come, if db settings were changed - gui will not work, change them back manually from mor/mor/mor cp -rf /home/mor_"$MOR_VERSION"_BEFORE_MIGRATION_TO_MOR_$version/config/database.yml /home/mor/config/database.yml #cp -fr /usr/src/mor/upgrade/$version/files/database.yml /home/mor/config/ cp -rf /home/mor_"$MOR_VERSION"_BEFORE_MIGRATION_TO_MOR_$version/config/environment.rb /home/mor/config/environment.rb if [ ! -s "/home/mor/public/fax2email" ]; then ln -s /var/spool/asterisk/faxes /home/mor/public/fax2email fi # Preserving Logos #mkdir -p /home/mor/app/assets/images/logo /home/mor/tmp rm -fr /home/mor_"$MOR_VERSION"_BEFORE_MIGRATION_TO_MOR_$version/public/images/logo/mor_logo.png cp -R /home/mor_"$MOR_VERSION"_BEFORE_MIGRATION_TO_MOR_$version/public/images/logo/* /home/mor/public/images/logo/ &> /dev/null chmod -R 777 /home/mor/public/images/logo #/home/mor/tmp mkdir -p /home/mor/log chmod -R 666 /home/mor/log chmod 755 /home/mor/log if [ "$?" == "0" ]; then report "MOR $version checkout from SVN" 0 else report "Failed to checkout MOR $version GUI from svn.kolmisoft.com. Please ensure that your DNS settings in /etc/resolv.conf are correct and you can access address svn.kolmisoft.com" 1 exit 1 fi else report "Simple GUI update to last stable release: $LAST_STABLE_GUI" 3 #echo "last stable release: $LAST_STABLE_GUI" # some nasty svn hickup fix rm -fr /home/mor/app rm -fr /home/mor/selenium #svn co -r $LAST_STABLE_GUI --force http://svn.kolmisoft.com/mor/gui/branches/$version /home/mor &> /dev/null svn update -r $LAST_STABLE_GUI --force --accept theirs-full /home/mor > /dev/null fi fi fi # bundle update cd /home/mor rvm use 2.1.2 bundle update &> /dev/null /etc/init.d/httpd restart # get db data mysql_connect_data_v2 # Adding symlinks appropriate upgrade files for gui # actually removing, will not use them anymore rm -rf /home/mor/gui_upgrade.sh /home/mor/gui_upgrade_light.sh &> /dev/null #report "Adding symlinks to /usr/src/mor/upgrade/$version/gui_upgrade_light.sh and /usr/src/mor/upgrade/$version/gui_upgrade.sh" 3 #ln -s /usr/src/mor/upgrade/$version/gui_upgrade_light.sh /home/mor/gui_upgrade_light.sh #ln -s /usr/src/mor/upgrade/$version/gui_upgrade.sh /home/mor/gui_upgrade.sh #chmod +x /home/mor/gui_upgrade_light.sh /home/mor/gui_upgrade.sh # db upgrade #$dir/db/update_x4/import_changes.sh #&> /dev/null # devices/codecs/etc upgrade /usr/src/mor/x6/db/db_update.sh STABLE #&> /dev/null # this is necessary when upgrading old x6 installations /usr/src/mor/x7/db/db_update.sh STABLE #&> /dev/null # this is necessary when upgrading old x7 installations $dir/db/db_update.sh STABLE #&> /dev/null $dir/db/disable_mysql_secure_file_priv.sh $dir/maintenance/test_fix_scripts/gui/database_yml_strict.sh # Memcached $dir/gui/memcached_install.sh # logrotates $dir/maintenance/logrotates_enable.sh # gui upgrade #$dir/gui/gui_upgrade.sh # all gems are rebundled here also # Update invoice template if needed $dir/gui/invoice_template_install.sh # Install ES on main GUI server read_mor_gui_settings if [ "$MAIN_GUI" == "1" ]; then #ES installation script goes here svn update /usr/src/mor/sh_scripts/elasticsearch /usr/src/mor/sh_scripts/elasticsearch/elasticsearch_install.sh fi # make backup of old configs if [ -e /etc/asterisk/ ]; then TIMESTAMP=`date +%Y%m%d_%H%M%S` mkdir -p /etc/asterisk/mor_backup/$TIMESTAMP cp -fr /etc/asterisk/*.conf /etc/asterisk/mor_backup/$TIMESTAMP fi # update configs #copy only if not present already if [ ! -f /etc/asterisk/asterisk.conf ]; then cp -fr $dir/asterisk/conf/asterisk.conf /etc/asterisk/ fi if [ ! -f /etc/asterisk/extensions_mor_custom.conf ]; then cp $dir/asterisk/conf/extensions_mor_custom.conf /etc/asterisk/ fi if [ ! -f /etc/asterisk/extensions_mor_didww.conf ]; then cp $dir/asterisk/conf/extensions_mor_didww.conf /etc/asterisk/ fi if [ ! -f /etc/asterisk/extensions_mor_didx.conf ]; then cp $dir/asterisk/conf/extensions_mor_didx.conf /etc/asterisk/ fi if [ ! -f /etc/asterisk/sip_didx.conf ]; then cp $dir/asterisk/conf/sip_didx.conf /etc/asterisk/ fi if [ ! -f /etc/asterisk/extensions_mor_external_did.conf ]; then cp $dir/asterisk/conf/extensions_mor_external_did.conf /etc/asterisk/ fi if [ ! -f /etc/asterisk/h323.conf ]; then cp -fr $dir/asterisk/conf/h323.conf /etc/asterisk/ fi if [ ! -f /etc/asterisk/iax.conf ]; then cp -fr $dir/asterisk/conf/iax.conf /etc/asterisk/ fi if [ ! -f /etc/asterisk/manager.conf ]; then cp -fr $dir/asterisk/conf/manager.conf /etc/asterisk/ fi if [ ! -f /etc/asterisk/res_config_mysql.conf ]; then cp -fr $dir/asterisk/conf/res_config_mysql.conf /etc/asterisk/ fi if [ ! -f /etc/asterisk/sip.conf ]; then cp -fr $dir/asterisk/conf/sip.conf /etc/asterisk/ fi #copy and force replace cp -fr $dir/asterisk/conf/cdr.conf /etc/asterisk/ cp -fr $dir/asterisk/conf/cli_aliases.conf /etc/asterisk/ cp -fr $dir/asterisk/conf/extconfig.conf /etc/asterisk/ cp -fr $dir/asterisk/conf/extensions_mor.conf /etc/asterisk/ cp -fr $dir/asterisk/conf/extensions_mor_ad.conf /etc/asterisk/ cp -fr $dir/asterisk/conf/extensions_mor_anipin.conf /etc/asterisk/ cp -fr $dir/asterisk/conf/extensions_mor_callingcard.conf /etc/asterisk/ cp -fr $dir/asterisk/conf/extensions_mor_ivr.conf /etc/asterisk/ cp -fr $dir/asterisk/conf/extensions_mor_pbxfunctions.conf /etc/asterisk/ cp -fr $dir/asterisk/conf/extensions_mor_stresstest.conf /etc/asterisk/ cp -fr $dir/asterisk/conf/extensions_mor_tests.conf /etc/asterisk/ cp -fr $dir/asterisk/conf/modules.conf /etc/asterisk/ cp -fr $dir/asterisk/conf/res_fax.conf /etc/asterisk/ cp -fr $dir/asterisk/conf/sip_didww.conf /etc/asterisk/ cp -fr $dir/asterisk/conf/udptl.conf /etc/asterisk/ asterisk -vvvvvvrx 'extensions reload' # agi fixes $dir/asterisk/agi/install.sh # ami $dir/asterisk/ami/install.sh # install queues $dir/asterisk/queues_install.sh # update asterisk logger config $dir/asterisk/asterisk_logger_config.sh # calllog #mkdir -p /var/log/mor/calllog #cp -fr /usr/src/mor/sh_scripts/backup_calllog.sh /usr/local/mor/ rm -f /usr/src/mor/sh_scripts/backup_calllog.sh # cronjobs cp -fr $dir/gui/cronjobs/* /etc/cron.d/ rm -rf /etc/cron.d/mor_ad /etc/init.d/crond restart # possible error fix if [ ! -L /usr/local/bin/lame ]; then ln -s /usr/bin/lame /usr/local/bin/lame &> /dev/null fi # update packets $dir/maintenance/packets_install.sh $dir/mysql/configure_mycnf.sh $dir/maintenance/folders_permissions_prepare.sh $dir/maintenance/test_fix_scripts/asterisk/sip_registrations.sh $dir/maintenance/test_fix_scripts/gui/recordings.sh $dir/maintenance/remove_tmpwatch_cron.sh # should go after all fixes from /maintenance $dir/maintenance/permissions_post_install.sh cp -f /usr/src/mor/framework/mor_install_functions.sh /usr/local/mor/ cp -f $dir/scripts/backups/make_restore.sh /usr/local/mor/ cp -f $dir/scripts/backups/make_backup.sh /usr/local/mor/ $dir/scripts/scripts_install.sh $dir/helpers/mor_gui_iptables/mor_gui_iptables_install.sh $dir/helpers/smpp_install.sh $dir/helpers/mor_blocked_countries/mor_blocked_countries_install.sh #pcap stuff read_mor_pcap_settings if [ $PCAP_ENABLED != "0" ]; then $dir/helpers/mor_pcap_control/install_mor_pcap_control.sh $dir/helpers/mor_pcap_control/install_mor_pcap_check_space.sh fi chmod -R 755 /usr/local/ #8950 #But make backups dir world writable chmod 777 /usr/local/mor/backups $dir/asterisk/sounds_install.sh $dir/core/core_install_10cc.sh #some scripts needs to use right version of ruby. Those will use following simlink which point to ruby-2.1.2 rm -rf /usr/local/mor/mor_ruby ln -s $dir/gui/misc/mor_ruby /usr/local/mor/mor_ruby chmod +x /usr/local/mor/mor_ruby # run info.sh here to make sure upgrade went ok $dir/info.sh # for invoices mkdir -p /tmp/mor/invoices chmod 777 -R /tmp/mor/invoices # missing gem fix cd /usr/src/mor/x5/gui/gems gem install --local active_processor-1.0.41.gem # hard way to restore missing new logo rm -fr /home/mor/public/images/logo/mor_logo.png svn update /home/mor/public/images/logo/mor_logo.png # disable iax2, h323 and g723 (if not used) $dir/asterisk/disable_iax2.sh $dir/asterisk/disable_h323.sh $dir/asterisk/disable_g723.sh # check for temporary tables $dir/db/check_temporary_tables.sh # hard way to change footer mysql -u mor -pmor mor -e "UPDATE conflines SET value = 'MOR $Version' WHERE value = 'MOR $Previous_Version';" ensure report "$Version update/upgrade completed" 0 report `date` 3