You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ha...@apache.org on 2018/08/14 13:53:23 UTC

[ambari] branch trunk updated: [AMBARI-24465] Warnings during ambari-agent, ambari-server upgrade (dgrinenko)

This is an automated email from the ASF dual-hosted git repository.

hapylestat pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ambari.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 6d8c53b  [AMBARI-24465] Warnings during ambari-agent, ambari-server upgrade (dgrinenko)
6d8c53b is described below

commit 6d8c53b8429de2f4c77e4cf00c06f884575e18b6
Author: Dmitry Grinenko <ha...@gmail.com>
AuthorDate: Tue Aug 14 14:51:17 2018 +0300

    [AMBARI-24465] Warnings during ambari-agent, ambari-server upgrade (dgrinenko)
---
 ambari-agent/conf/unix/install-helper.sh           | 271 ++++++++++-------
 ambari-agent/pom.xml                               |   4 +
 ambari-agent/src/main/package/deb/control/postrm   |  16 +-
 ambari-agent/src/main/package/deb/control/preinst  |  61 ++--
 ambari-agent/src/main/package/deb/control/prerm    |   1 +
 .../package/rpm/{preremove.sh => postremove.sh}    |   9 +-
 .../src/main/package/rpm/posttrans_agent.sh        |   4 +-
 ambari-agent/src/main/package/rpm/preinstall.sh    |  55 ++--
 ambari-agent/src/main/package/rpm/preremove.sh     |   1 -
 ambari-server/conf/unix/install-helper.sh          | 329 ++++++++++++---------
 ambari-server/pom.xml                              |   4 +
 ambari-server/src/main/package/deb/control/postrm  |  14 +
 ambari-server/src/main/package/deb/control/preinst | 190 +++++-------
 ambari-server/src/main/package/deb/control/prerm   |   5 +-
 ambari-server/src/main/package/rpm/postinstall.sh  |   4 +-
 .../{deb/control/prerm => rpm/postremove.sh}       |  12 +-
 ambari-server/src/main/package/rpm/preinstall.sh   | 205 ++++++-------
 ambari-server/src/main/package/rpm/preremove.sh    |   5 +-
 18 files changed, 629 insertions(+), 561 deletions(-)

diff --git a/ambari-agent/conf/unix/install-helper.sh b/ambari-agent/conf/unix/install-helper.sh
index 2d4af1f..d333331 100644
--- a/ambari-agent/conf/unix/install-helper.sh
+++ b/ambari-agent/conf/unix/install-helper.sh
@@ -18,18 +18,28 @@
 #                      AGENT INSTALL HELPER                      #
 ##################################################################
 
-INSTALL_HELPER_SERVER="/var/lib/ambari-server/install-helper.sh"
-COMMON_DIR="/usr/lib/ambari-agent/lib/ambari_commons"
-RESOURCE_MANAGEMENT_DIR="/usr/lib/ambari-agent/lib/resource_management"
-JINJA_DIR="/usr/lib/ambari-agent/lib/ambari_jinja2"
-SIMPLEJSON_DIR="/usr/lib/ambari-agent/lib/ambari_simplejson"
-OLD_OLD_COMMON_DIR="/usr/lib/ambari-agent/lib/common_functions"
-AMBARI_AGENT="/usr/lib/ambari-agent/lib/ambari_agent"
+# WARNING. Please keep the script POSIX compliant and don't use bash extensions
+
+AMBARI_UNIT="ambari-agent"
+ACTION=$1
+AMBARI_AGENT_ROOT_DIR="/usr/lib/${AMBARI_UNIT}"
+AMBARI_SERVER_ROOT_DIR="/usr/lib/ambari-server"
+COMMON_DIR="${AMBARI_AGENT_ROOT_DIR}/lib/ambari_commons"
+RESOURCE_MANAGEMENT_DIR="${AMBARI_AGENT_ROOT_DIR}/lib/resource_management"
+JINJA_DIR="${AMBARI_AGENT_ROOT_DIR}/lib/ambari_jinja2"
+SIMPLEJSON_DIR="${AMBARI_AGENT_ROOT_DIR}/lib/ambari_simplejson"
+OLD_OLD_COMMON_DIR="${AMBARI_AGENT_ROOT_DIR}/lib/common_functions"
+AMBARI_AGENT="${AMBARI_AGENT_ROOT_DIR}/lib/ambari_agent"
 PYTHON_WRAPER_TARGET="/usr/bin/ambari-python-wrap"
-AMBARI_AGENT_VAR="/var/lib/ambari-agent"
-AMBARI_AGENT_BINARY="/etc/init.d/ambari-agent"
-AMBARI_AGENT_BINARY_SYMLINK="/usr/sbin/ambari-agent"
+AMBARI_AGENT_VAR="/var/lib/${AMBARI_UNIT}"
+AMBARI_AGENT_BINARY="/etc/init.d/${AMBARI_UNIT}"
+AMBARI_AGENT_BINARY_SYMLINK="/usr/sbin/${AMBARI_UNIT}"
+AMBARI_ENV_RPMSAVE="/var/lib/${AMBARI_UNIT}/ambari-env.sh.rpmsave"
+AMBARI_HELPER="/var/lib/ambari-agent/install-helper.sh.orig"
 
+LOG_FILE=/dev/null
+
+CLEANUP_MODULES="resource_management;ambari_commons;ambari_agent;ambari_ws4py;ambari_stomp;ambari_jinja2;ambari_simplejson"
 
 OLD_COMMON_DIR="/usr/lib/python2.6/site-packages/ambari_commons"
 OLD_RESOURCE_MANAGEMENT_DIR="/usr/lib/python2.6/site-packages/resource_management"
@@ -37,14 +47,89 @@ OLD_JINJA_DIR="/usr/lib/python2.6/site-packages/ambari_jinja2"
 OLD_SIMPLEJSON_DIR="/usr/lib/python2.6/site-packages/ambari_simplejson"
 OLD_AMBARI_AGENT_DIR="/usr/lib/python2.6/site-packages/ambari_agent"
 
+
+resolve_log_file(){
+ local log_dir=/var/log/${AMBARI_UNIT}
+ local log_file="${log_dir}/${AMBARI_UNIT}-pkgmgr.log"
+
+ if [ ! -d "${log_dir}" ]; then
+   mkdir "${log_dir}" 1>/dev/null 2>&1
+ fi
+
+ if [ -d "${log_dir}" ]; then
+   touch ${log_file} 1>/dev/null 2>&1
+   if [ -f "${log_file}" ]; then
+    LOG_FILE="${log_file}"
+   fi
+ fi
+
+ echo "--> Install-helper custom action log started at $(date '+%d/%m/%y %H:%M') for '${ACTION}'" 1>>${LOG_FILE} 2>&1
+}
+
 clean_pyc_files(){
   # cleaning old *.pyc files
-  find ${RESOURCE_MANAGEMENT_DIR:?} -name *.pyc -exec rm {} \;
-  find ${COMMON_DIR:?} -name *.pyc -exec rm {} \;
-  find ${AMBARI_AGENT:?} -name *.pyc -exec rm {} \;
-  find ${AMBARI_AGENT_VAR:?} -name *.pyc -exec rm {} \;
+  local lib_dir="${AMBARI_AGENT_ROOT_DIR}/lib"
+
+  echo ${CLEANUP_MODULES} | tr ';' '\n' | while read item; do
+    local item="${lib_dir}/${item}"
+    echo "Cleaning pyc files from ${item}..."
+    if [ -d "${item}" ]; then
+      find ${item:?} -name *.pyc -exec rm {} \; 1>>${LOG_FILE} 2>&1
+    else
+      echo "Skipping ${item} pyc cleaning, as package not existing"
+    fi
+  done
 }
 
+remove_ambari_unit_dir(){
+  # removing empty dirs, which left after cleaning pyc files
+
+  find "${AMBARI_AGENT_ROOT_DIR}" -type d | tac | while read item; do
+    echo "Removing empty dir ${item}..."
+    rmdir --ignore-fail-on-non-empty ${item} 1>/dev/null 2>&1
+  done
+
+  rm -rf ${AMBARI_HELPER}
+  find "${AMBARI_AGENT_VAR}" -type d | tac | while read item; do
+    echo "Removing empty dir ${item}..."
+    rmdir --ignore-fail-on-non-empty ${item} 1>/dev/null 2>&1
+  done
+}
+
+remove_autostart(){
+  which chkconfig
+  if [ "$?" -eq 0 ] ; then
+    chkconfig --list | grep ambari-server && chkconfig --del ambari-agent
+  fi
+  which update-rc.d
+  if [ "$?" -eq 0 ] ; then
+    update-rc.d -f ambari-agent remove
+  fi
+}
+
+install_autostart(){
+  which chkconfig 1>>${LOG_FILE} 2>&1
+  if [ "$?" -eq 0 ] ; then
+    chkconfig --add ambari-agent
+  fi
+  which update-rc.d 1>>${LOG_FILE} 2>&1
+  if [ "$?" -eq 0 ] ; then
+    update-rc.d ambari-agent defaults
+  fi
+}
+
+locate_python(){
+  local python_binaries="/usr/bin/python;/usr/bin/python2;/usr/bin/python2.7"
+
+  echo ${python_binaries}| tr ';' '\n' | while read python_binary; do
+    ${python_binary} -c "import sys ; ver = sys.version_info ; sys.exit(not (ver >= (2,7) and ver<(3,0)))" 1>>${LOG_FILE} 2>/dev/null
+
+    if [ $? -eq 0 ]; then
+      echo "${python_binary}"
+      break
+    fi
+  done
+}
 
 do_install(){
   if [ -d "/etc/ambari-agent/conf.save" ]; then
@@ -53,135 +138,115 @@ do_install(){
   fi
 
   # these symlinks (or directories) where created in ambari releases prior to ambari-2.6.2. Do clean up.   
-  rm -rf "$OLD_COMMON_DIR" "$OLD_RESOURCE_MANAGEMENT_DIR" "$OLD_JINJA_DIR" "$OLD_SIMPLEJSON_DIR" "$OLD_OLD_COMMON_DIR" "$OLD_AMBARI_AGENT_DIR"
+  rm -rf "${OLD_COMMON_DIR}" "${OLD_RESOURCE_MANAGEMENT_DIR}" "${OLD_JINJA_DIR}" "${OLD_SIMPLEJSON_DIR}" "${OLD_OLD_COMMON_DIR}" "${OLD_AMBARI_AGENT_DIR}"
 
   # setting up /usr/sbin/ambari-agent symlink
-  rm -f "$AMBARI_AGENT_BINARY_SYMLINK"
-  ln -s "$AMBARI_AGENT_BINARY" "$AMBARI_AGENT_BINARY_SYMLINK"
+  rm -f "${AMBARI_AGENT_BINARY_SYMLINK}"
+  ln -s "${AMBARI_AGENT_BINARY}" "${AMBARI_AGENT_BINARY_SYMLINK}"
 
   # on nano Ubuntu, when umask=027 those folders are created without 'x' bit for 'others'.
   # which causes failures when hadoop users try to access tmp_dir
-  chmod a+x $AMBARI_AGENT_VAR
-
-  chmod 1777 $AMBARI_AGENT_VAR/tmp
-  chmod 700 $AMBARI_AGENT_VAR/keys
-  chmod 700 $AMBARI_AGENT_VAR/data
+  chmod a+x ${AMBARI_AGENT_VAR}
 
-  #TODO we need this when upgrading from pre 2.4 versions to 2.4, remove this when upgrade from pre 2.4 versions will be
-  #TODO unsupported
-  clean_pyc_files
+  chmod 1777 ${AMBARI_AGENT_VAR}/tmp
+  chmod 700 ${AMBARI_AGENT_VAR}/keys
+  chmod 700 ${AMBARI_AGENT_VAR}/data
 
-  which chkconfig > /dev/null 2>&1
-  if [ "$?" -eq 0 ] ; then
-    chkconfig --add ambari-agent
-  fi
-  which update-rc.d > /dev/null 2>&1
-  if [ "$?" -eq 0 ] ; then
-    update-rc.d ambari-agent defaults
-  fi
+  install_autostart 1>>${LOG_FILE} 2>&1
 
   # remove old python wrapper
-  rm -f "$PYTHON_WRAPER_TARGET"
-
-  AMBARI_PYTHON=""
-  python_binaries=( "/usr/bin/python" "/usr/bin/python2" "/usr/bin/python2.7" "/usr/bin/python2.6" )
-  for python_binary in "${python_binaries[@]}"
-  do
-    $python_binary -c "import sys ; ver = sys.version_info ; sys.exit(not (ver >= (2,6) and ver<(3,0)))" 1>/dev/null 2>/dev/null
-
-    if [ $? -eq 0 ] ; then
-      AMBARI_PYTHON="$python_binary"
-      break;
-    fi
-  done
+  rm -f "${PYTHON_WRAPER_TARGET}"
 
-  BAK=/etc/ambari-agent/conf/ambari-agent.ini.old
-  ORIG=/etc/ambari-agent/conf/ambari-agent.ini
-  UPGRADE_AGENT_CONFIGS_SCRIPT=/var/lib/ambari-agent/upgrade_agent_configs.py
+  local ambari_python=$(locate_python)
+  local bak=/etc/ambari-agent/conf/ambari-agent.ini.old
+  local orig=/etc/ambari-agent/conf/ambari-agent.ini
+  local upgrade_agent_configs_script=/var/lib/ambari-agent/upgrade_agent_configs.py
 
-  if [ -z "$AMBARI_PYTHON" ] ; then
-    >&2 echo "Cannot detect python for Ambari to use. Please manually set $PYTHON_WRAPER_TARGET link to point to correct python binary"
-    >&2 echo "Cannot upgrade agent configs because python for Ambari is not configured. The old config file is saved as $BAK . Execution of $UPGRADE_AGENT_CONFIGS_SCRIPT was skipped."
+  if [ -z "${ambari_python}" ] ; then
+    >&2 echo "Cannot detect python for Ambari to use. Please manually set ${PYTHON_WRAPER_TARGET} link to point to correct python binary"
+    >&2 echo "Cannot upgrade agent configs because python for Ambari is not configured. The old config file is saved as ${bak} . Execution of ${upgrade_agent_configs_script} was skipped."
   else
-    ln -s "$AMBARI_PYTHON" "$PYTHON_WRAPER_TARGET"
+    ln -s "${ambari_python}" "${PYTHON_WRAPER_TARGET}"
 
-    if [ -f $BAK ]; then
-      if [ -f "$UPGRADE_AGENT_CONFIGS_SCRIPT" ]; then
-        $UPGRADE_AGENT_CONFIGS_SCRIPT
+    if [ -f ${bak} ]; then
+      if [ -f "${upgrade_agent_configs_script}" ]; then
+        ${upgrade_agent_configs_script}
       fi
-      mv $BAK ${BAK}_$(date '+%d_%m_%y_%H_%M').save
+      mv ${bak} ${bak}_$(date '+%d_%m_%y_%H_%M').save
     fi
   fi
 
-  if [ -f "$AMBARI_ENV_RPMSAVE" ] ; then
-    PYTHON_PATH_LINE='export PYTHONPATH=/usr/lib/ambari-agent/lib:$PYTHONPATH'
-    grep "^$PYTHON_PATH_LINE\$" "$AMBARI_ENV_RPMSAVE" > /dev/null
+  if [ -f "${AMBARI_ENV_RPMSAVE}" ] ; then
+    PYTHON_PATH_LINE="export PYTHONPATH=${AMBARI_AGENT_ROOT_DIR}/lib:\$\{PYTHONPATH\}"
+    grep "^${PYTHON_PATH_LINE}\$" "${AMBARI_ENV_RPMSAVE}" >>${LOG_FILE}
     if [ $? -ne 0 ] ; then
-      echo -e "\n$PYTHON_PATH_LINE" >> $AMBARI_ENV_RPMSAVE
+      echo -e "\n${PYTHON_PATH_LINE}" 1>>${AMBARI_ENV_RPMSAVE}
     fi
   fi
 }
 
-do_remove(){
-  /usr/sbin/ambari-agent stop > /dev/null 2>&1
+copy_helper(){
+  cp -f /var/lib/ambari-agent/install-helper.sh ${AMBARI_HELPER} 1>/dev/null 2>&1
+}
 
-  clean_pyc_files
+do_remove(){
+  /usr/sbin/ambari-agent stop 1>>${LOG_FILE} 2>&1
 
-  rm -f "$AMBARI_AGENT_BINARY_SYMLINK"
+  rm -f "${AMBARI_AGENT_BINARY_SYMLINK}" 1>>${LOG_FILE} 2>&1
 
   if [ -d "/etc/ambari-agent/conf.save" ]; then
     mv /etc/ambari-agent/conf.save /etc/ambari-agent/conf_$(date '+%d_%m_%y_%H_%M').save
   fi
-  mv /etc/ambari-agent/conf /etc/ambari-agent/conf.save
-
-  if [ -f "$PYTHON_WRAPER_TARGET" ]; then
-    rm -f "$PYTHON_WRAPER_TARGET"
-  fi
+  # first step / label: config_backup
+  cp -rf /etc/ambari-agent/conf /etc/ambari-agent/conf.save
 
-  if [ -d "$COMMON_DIR" ]; then
-    rm -rf $COMMON_DIR
-  fi
+  remove_autostart 1>>${LOG_FILE} 2>&1
+  copy_helper 1>>${LOG_FILE} 2>&1
+}
 
-  if [ -d "$RESOURCE_MANAGEMENT_DIR" ]; then
-    rm -rf $RESOURCE_MANAGEMENT_DIR
-  fi
+do_cleanup(){
+  # do_cleanup is a function, which called after do_remove stage and is supposed to be save place to
+  # remove obsolete files generated by application activity
 
-  if [ -d "$JINJA_DIR" ]; then
-    rm -rf $JINJA_DIR
-  fi
+  clean_pyc_files 1>>${LOG_FILE} 2>&1
 
-  if [ -d "$SIMPLEJSON_DIR" ]; then
-    rm -rf $SIMPLEJSON_DIR
-  fi
+  # second step / label: config_backup
+  rm -rf /etc/ambari-agent/conf
 
-  # if server package exists, restore their settings
-  if [ -f "$INSTALL_HELPER_SERVER" ]; then  #  call server shared files installer
-    $INSTALL_HELPER_SERVER install
+  if [ ! -d "${AMBARI_SERVER_ROOT_DIR}" ]; then
+    echo "Removing ${PYTHON_WRAPER_TARGET} ..." 1>>${LOG_FILE} 2>&1
+    rm -f ${PYTHON_WRAPER_TARGET} 1>>${LOG_FILE} 2>&1
   fi
 
-  which chkconfig > /dev/null 2>&1
-  if [ "$?" -eq 0 ] ; then
-    chkconfig --list | grep ambari-server && chkconfig --del ambari-agent
-  fi
-  which update-rc.d > /dev/null 2>&1
-  if [ "$?" -eq 0 ] ; then
-    update-rc.d -f ambari-agent remove
-  fi
+  remove_ambari_unit_dir 1>>${LOG_FILE} 2>&1
 }
 
 do_upgrade(){
   do_install
 }
 
+do_backup(){
+  # ToDo: find a way to move backup logic here from preinstall.sh and preinst scripts
+  # ToDo: general problem is that still no files are installed on step, when backup is supposed to be done
+  echo ""
+}
 
-case "$1" in
-install)
-  do_install
-  ;;
-remove)
-  do_remove
-  ;;
-upgrade)
-  do_upgrade
-;;
+resolve_log_file
+
+case "${ACTION}" in
+  install)
+    do_install
+    ;;
+  remove)
+    do_remove
+    ;;
+  upgrade)
+    do_upgrade
+    ;;
+  cleanup)
+    do_cleanup
+    ;;
+  *)
+    echo "Wrong command given"
+    ;;
 esac
diff --git a/ambari-agent/pom.xml b/ambari-agent/pom.xml
index 3dfb385..9930475 100644
--- a/ambari-agent/pom.xml
+++ b/ambari-agent/pom.xml
@@ -296,6 +296,10 @@
             <scriptFile>src/main/package/rpm/posttrans_agent.sh</scriptFile>
             <fileEncoding>utf-8</fileEncoding>
           </posttransScriptlet>
+          <postremoveScriptlet>
+            <scriptFile>src/main/package/rpm/postremove.sh</scriptFile>
+            <fileEncoding>utf-8</fileEncoding>
+          </postremoveScriptlet>
 
           <needarch>x86_64</needarch>
           <autoRequires>false</autoRequires>
diff --git a/ambari-agent/src/main/package/deb/control/postrm b/ambari-agent/src/main/package/deb/control/postrm
index 16d5b7c..d2dcc14 100644
--- a/ambari-agent/src/main/package/deb/control/postrm
+++ b/ambari-agent/src/main/package/deb/control/postrm
@@ -14,11 +14,15 @@
 # See the License for the specific language governing permissions and
 # limitations under the License
 
-if [ "$1" == "upgrade" ]; # Action is upgrade
-then
-  if [ -d "/etc/ambari-agent/conf.save" ]
-  then
-      cp -f /etc/ambari-agent/conf.save/* /etc/ambari-agent/conf
-      mv /etc/ambari-agent/conf.save /etc/ambari-agent/conf_$(date '+%d_%m_%y_%H_%M').save
+INSTALL_HELPER="/var/lib/ambari-agent/install-helper.sh"
+
+if [ "$1" == "upgrade" ]; then
+  if [ -f "${INSTALL_HELPER}" ]; then
+    ${INSTALL_HELPER} upgrade
+  fi
+else
+  if  [ -f "/var/lib/ambari-agent/install-helper.sh.orig" ]; then
+    /var/lib/ambari-agent/install-helper.sh.orig cleanup
+    rm -f /var/lib/ambari-agent/install-helper.sh.orig 1>/dev/null 2>&1
   fi
 fi
diff --git a/ambari-agent/src/main/package/deb/control/preinst b/ambari-agent/src/main/package/deb/control/preinst
index a36ed51..ad6153f 100644
--- a/ambari-agent/src/main/package/deb/control/preinst
+++ b/ambari-agent/src/main/package/deb/control/preinst
@@ -14,42 +14,31 @@
 # See the License for the specific language governing permissions and
 # limitations under the License
 
-STACKS_FOLDER="/var/lib/ambari-agent/cache/stacks"
-STACKS_FOLDER_OLD=/var/lib/ambari-agent/cache/stacks_$(date '+%d_%m_%y_%H_%M').old
 
-COMMON_SERVICES_FOLDER="/var/lib/ambari-agent/cache/common-services"
-COMMON_SERVICES_FOLDER_OLD=/var/lib/ambari-agent/cache/common-services_$(date '+%d_%m_%y_%H_%M').old
-
-AMBARI_ENV="/var/lib/ambari-agent/ambari-env.sh"
-AMBARI_ENV_OLD="$AMBARI_ENV.rpmsave"
-
-if [ -d "/etc/ambari-agent/conf.save" ]
-then
-    mv /etc/ambari-agent/conf.save /etc/ambari-agent/conf_$(date '+%d_%m_%y_%H_%M').save
-fi
-
-BAK=/etc/ambari-agent/conf/ambari-agent.ini.old
-ORIG=/etc/ambari-agent/conf/ambari-agent.ini
-
-BAK_SUDOERS=/etc/sudoers.d/ambari-agent.bak
-ORIG_SUDOERS=/etc/sudoers.d/ambari-agent
-
-[ -f $ORIG ] && mv -f $ORIG $BAK
-[ -f $ORIG_SUDOERS ] && echo "Moving $ORIG_SUDOERS to $BAK_SUDOERS. Please restore the file if you were using it for ambari-agent non-root functionality" && mv -f $ORIG_SUDOERS $BAK_SUDOERS
-
-if [ -d "$STACKS_FOLDER" ]
-then
-    mv -f "$STACKS_FOLDER" "$STACKS_FOLDER_OLD"
-fi
-
-if [ -d "$COMMON_SERVICES_FOLDER" ]
-then
-    mv -f "$COMMON_SERVICES_FOLDER" "$COMMON_SERVICES_FOLDER_OLD"
-fi
-
-if [ -f "$AMBARI_ENV" ]
-then
-    mv -f "$AMBARI_ENV" "$AMBARI_ENV_OLD"
-fi
+do_backups(){
+  local etc_dir="/etc/ambari-agent"
+  local var_dir="/var/lib/ambari-agent"
+  local sudoers_dir="/etc/sudoers.d"
+
+  # format: title note source target
+  local backup_folders="stack folders::${var_dir}/cache/stacks:${var_dir}/cache/stacks_$(date '+%d_%m_%y_%H_%M').old
+common services folder::${var_dir}/cache/common-services:${var_dir}/cache/common-services_$(date '+%d_%m_%y_%H_%M').old
+ambari-agent.ini::${etc_dir}/conf/ambari-agent.ini:${etc_dir}/conf/ambari-agent.ini.old
+sudoers:Please restore the file if you were using it for ambari-agent non-root functionality:${sudoers_dir}/ambari-agent:${sudoers_dir}/ambari-agent.bak"
+
+  echo ${backup_folders} | while IFS=: read title notes source target; do
+    if [ -d "${source}" ] || [ -f "${source}" ]; then
+      echo -n "Moving ${title}: ${source} -> ${target}"
+      if [ ! -z notes ]; then
+        echo ", ${notes}"
+      else
+        echo ""
+      fi
+      mv -f "${source}" "${target}"
+    fi
+  done
+}
+
+do_backups
 
 exit 0
diff --git a/ambari-agent/src/main/package/deb/control/prerm b/ambari-agent/src/main/package/deb/control/prerm
index 8da949c..f0f3d18 100644
--- a/ambari-agent/src/main/package/deb/control/prerm
+++ b/ambari-agent/src/main/package/deb/control/prerm
@@ -18,6 +18,7 @@
 # during package update. See http://www.ibm.com/developerworks/library/l-rpm2/
 # for details
 
+
 if [ "$1" == "remove" ]; then # Action is uninstall
     if [ -f "/var/lib/ambari-agent/install-helper.sh" ]; then
       /var/lib/ambari-agent/install-helper.sh remove
diff --git a/ambari-agent/src/main/package/rpm/preremove.sh b/ambari-agent/src/main/package/rpm/postremove.sh
similarity index 75%
copy from ambari-agent/src/main/package/rpm/preremove.sh
copy to ambari-agent/src/main/package/rpm/postremove.sh
index e266114..2298ece 100644
--- a/ambari-agent/src/main/package/rpm/preremove.sh
+++ b/ambari-agent/src/main/package/rpm/postremove.sh
@@ -13,14 +13,11 @@
 # See the License for the specific language governing permissions and
 # limitations under the License
 
-# WARNING: This script is performed not only on uninstall, but also
-# during package update. See http://www.ibm.com/developerworks/library/l-rpm2/
-# for details
-
 
 if [ "$1" -eq 0 ]; then  # Action is uninstall
-    if [ -f "/var/lib/ambari-agent/install-helper.sh" ]; then
-      /var/lib/ambari-agent/install-helper.sh remove
+    if [ -f "/var/lib/ambari-agent/install-helper.sh.orig" ]; then
+      /var/lib/ambari-agent/install-helper.sh.orig cleanup
+      rm -f /var/lib/ambari-agent/install-helper.sh.orig 1>/dev/null 2>&1
     fi
 fi
 
diff --git a/ambari-agent/src/main/package/rpm/posttrans_agent.sh b/ambari-agent/src/main/package/rpm/posttrans_agent.sh
index 35ec59a..b185ddd 100644
--- a/ambari-agent/src/main/package/rpm/posttrans_agent.sh
+++ b/ambari-agent/src/main/package/rpm/posttrans_agent.sh
@@ -18,8 +18,8 @@ AMBARI_AGENT_BINARY="/etc/init.d/ambari-agent"
 AMBARI_AGENT_BINARY_SYMLINK="/usr/sbin/ambari-agent"
 
 # setting ambari-agent binary symlink
-if [ ! -f "$AMBARI_AGENT_BINARY_SYMLINK" ]; then
-  ln -s "$AMBARI_AGENT_BINARY" "$AMBARI_AGENT_BINARY_SYMLINK"
+if [ ! -f "${AMBARI_AGENT_BINARY_SYMLINK}" ]; then
+  ln -s "${AMBARI_AGENT_BINARY}" "${AMBARI_AGENT_BINARY_SYMLINK}"
 fi
 
 exit 0
\ No newline at end of file
diff --git a/ambari-agent/src/main/package/rpm/preinstall.sh b/ambari-agent/src/main/package/rpm/preinstall.sh
index f57b3bc..ff6dd3c 100644
--- a/ambari-agent/src/main/package/rpm/preinstall.sh
+++ b/ambari-agent/src/main/package/rpm/preinstall.sh
@@ -13,34 +13,33 @@
 # See the License for the specific language governing permissions and
 # limitations under the License
 
-STACKS_FOLDER="/var/lib/ambari-agent/cache/stacks"
-STACKS_FOLDER_OLD=/var/lib/ambari-agent/cache/stacks_$(date '+%d_%m_%y_%H_%M').old
 
-COMMON_SERVICES_FOLDER="/var/lib/ambari-agent/cache/common-services"
-COMMON_SERVICES_FOLDER_OLD=/var/lib/ambari-agent/cache/common-services_$(date '+%d_%m_%y_%H_%M').old
-
-if [ -d "/etc/ambari-agent/conf.save" ]
-then
-    mv /etc/ambari-agent/conf.save /etc/ambari-agent/conf_$(date '+%d_%m_%y_%H_%M').save
-fi
-
-BAK=/etc/ambari-agent/conf/ambari-agent.ini.old
-ORIG=/etc/ambari-agent/conf/ambari-agent.ini
-
-BAK_SUDOERS=/etc/sudoers.d/ambari-agent.bak
-ORIG_SUDOERS=/etc/sudoers.d/ambari-agent
-
-[ -f $ORIG ] && mv -f $ORIG $BAK
-[ -f $ORIG_SUDOERS ] && echo "Moving $ORIG_SUDOERS to $BAK_SUDOERS. Please restore the file if you were using it for ambari-agent non-root functionality" && mv -f $ORIG_SUDOERS $BAK_SUDOERS
-
-if [ -d "$STACKS_FOLDER" ]
-then
-    mv -f "$STACKS_FOLDER" "$STACKS_FOLDER_OLD"
-fi
-
-if [ -d "$COMMON_SERVICES_FOLDER" ]
-then
-    mv -f "$COMMON_SERVICES_FOLDER" "$COMMON_SERVICES_FOLDER_OLD"
-fi
+do_backups(){
+  local etc_dir="/etc/ambari-agent"
+  local var_dir="/var/lib/ambari-agent"
+  local sudoers_dir="/etc/sudoers.d"
+
+  # format: title note source target
+  local backup_folders="stack folders::${var_dir}/cache/stacks:${var_dir}/cache/stacks_$(date '+%d_%m_%y_%H_%M').old
+common services folder::${var_dir}/cache/common-services:${var_dir}/cache/common-services_$(date '+%d_%m_%y_%H_%M').old
+ambari-agent.ini::${etc_dir}/conf/ambari-agent.ini:${etc_dir}/conf/ambari-agent.ini.old
+sudoers:Please restore the file if you were using it for ambari-agent non-root functionality:${sudoers_dir}/ambari-agent:${sudoers_dir}/ambari-agent.bak"
+
+  echo "${backup_folders}" | while IFS=: read title notes source target; do
+    if [ -d "${source}" ] || [ -f "${source}" ]; then
+      echo -n "Moving ${title}: ${source} -> ${target}"
+
+      if [ ! -z ${notes} ]; then
+        echo ", ${notes}"
+      else
+        echo ""
+      fi
+
+      mv -f "${source}" "${target}"
+    fi
+  done
+}
+
+do_backups
 
 exit 0
diff --git a/ambari-agent/src/main/package/rpm/preremove.sh b/ambari-agent/src/main/package/rpm/preremove.sh
index e266114..4fb4829 100644
--- a/ambari-agent/src/main/package/rpm/preremove.sh
+++ b/ambari-agent/src/main/package/rpm/preremove.sh
@@ -17,7 +17,6 @@
 # during package update. See http://www.ibm.com/developerworks/library/l-rpm2/
 # for details
 
-
 if [ "$1" -eq 0 ]; then  # Action is uninstall
     if [ -f "/var/lib/ambari-agent/install-helper.sh" ]; then
       /var/lib/ambari-agent/install-helper.sh remove
diff --git a/ambari-server/conf/unix/install-helper.sh b/ambari-server/conf/unix/install-helper.sh
index 954db74..bd0efb7 100644
--- a/ambari-server/conf/unix/install-helper.sh
+++ b/ambari-server/conf/unix/install-helper.sh
@@ -13,40 +13,44 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-#########################################postinstall.sh#########################
+##################################################################
 #                      SERVER INSTALL HELPER                     #
 ##################################################################
+
+# WARNING. Please keep the script POSIX compliant and don't use bash extensions
+
 ROOT_DIR_PATH="${RPM_INSTALL_PREFIX}"
 ROOT=`echo "${RPM_INSTALL_PREFIX}" | sed 's|/$||g'` # Customized folder, which ambari-server files are installed into ('/' or '' are default).
-
-OLD_COMMON_DIR="${ROOT}/usr/lib/python2.6/site-packages/ambari_commons"
-OLD_RESOURCE_MANAGEMENT_DIR="${ROOT}/usr/lib/python2.6/site-packages/resource_management"
-OLD_JINJA_DIR="${ROOT}/usr/lib/python2.6/site-packages/ambari_jinja2"
-OLD_SIMPLEJSON_DIR="${ROOT}/usr/lib/python2.6/site-packages/ambari_simplejson"
-OLD_AMBARI_SERVER_DIR="${ROOT}/usr/lib/python2.6/site-packages/ambari_server"
-
-COMMON_DIR="${ROOT}/usr/lib/ambari-server/lib/ambari_commons"
-RESOURCE_MANAGEMENT_DIR="${ROOT}/usr/lib/ambari-server/lib/resource_management"
-JINJA_DIR="${ROOT}/usr/lib/ambari-server/lib/ambari_jinja2"
-SIMPLEJSON_DIR="${ROOT}/usr/lib/ambari-server/lib/ambari_simplejson"
-AMBARI_SERVER="${ROOT}/usr/lib/ambari-server/lib/ambari_server"
-
-
-INSTALL_HELPER_AGENT="/var/lib/ambari-agent/install-helper.sh"
-CA_CONFIG="${ROOT}/var/lib/ambari-server/keys/ca.config"
-COMMON_DIR_SERVER="${ROOT}/usr/lib/ambari-server/lib/ambari_commons"
-RESOURCE_MANAGEMENT_DIR_SERVER="${ROOT}/usr/lib/ambari-server/lib/resource_management"
-JINJA_SERVER_DIR="${ROOT}/usr/lib/ambari-server/lib/ambari_jinja2"
-SIMPLEJSON_SERVER_DIR="${ROOT}/usr/lib/ambari-server/lib/ambari_simplejson"
-AMBARI_PROPERTIES="${ROOT}/etc/ambari-server/conf/ambari.properties"
-AMBARI_ENV_RPMSAVE="${ROOT}/var/lib/ambari-server/ambari-env.sh.rpmsave" # this turns into ambari-env.sh during ambari-server start
-AMBARI_SERVER_KEYS_FOLDER="${ROOT}/var/lib/ambari-server/keys"
-AMBARI_SERVER_KEYS_DB_FOLDER="${ROOT}/var/lib/ambari-server/keys/db"
-AMBARI_SERVER_NEWCERTS_FOLDER="${ROOT}/var/lib/ambari-server/keys/db/newcerts"
-
-PYTHON_WRAPER_DIR="${ROOT}/usr/bin/"
+AMBARI_UNIT="ambari-server"
+ACTION=$1
+
+
+OLD_PYLIB_PATH="${ROOT}/usr/lib/python2.6/site-packages"
+OLD_PY_MODULES="ambari_commons;resource_management;ambari_jinja2;ambari_simplejson;ambari_server"
+
+AMBARI_SERVER_ROOT_DIR="${ROOT}/usr/lib/${AMBARI_UNIT}"
+AMBARI_AGENT_ROOT_DIR=="${ROOT}/usr/lib/ambari-agent"
+AMBARI_SERVER="${AMBARI_SERVER_ROOT_DIR}/lib/ambari_server"
+
+CA_CONFIG="${ROOT}/var/lib/${AMBARI_UNIT}/keys/ca.config"
+COMMON_DIR_SERVER="${ROOT}/usr/lib/${AMBARI_UNIT}/lib/ambari_commons"
+RESOURCE_MANAGEMENT_DIR_SERVER="${ROOT}/usr/lib/${AMBARI_UNIT}/lib/resource_management"
+JINJA_SERVER_DIR="${ROOT}/usr/lib/${AMBARI_UNIT}/lib/ambari_jinja2"
+SIMPLEJSON_SERVER_DIR="${ROOT}/usr/lib/${AMBARI_UNIT}/lib/ambari_simplejson"
+AMBARI_PROPERTIES="${ROOT}/etc/${AMBARI_UNIT}/conf/ambari.properties"
+AMBARI_ENV_RPMSAVE="${ROOT}/var/lib/${AMBARI_UNIT}/ambari-env.sh.rpmsave" # this turns into ambari-env.sh during ambari-server start
+AMBARI_SERVER_KEYS_FOLDER="${ROOT}/var/lib/${AMBARI_UNIT}/keys"
+AMBARI_SERVER_KEYS_DB_FOLDER="${ROOT}/var/lib/${AMBARI_UNIT}/keys/db"
+AMBARI_SERVER_NEWCERTS_FOLDER="${ROOT}/var/lib/${AMBARI_UNIT}/keys/db/newcerts"
+CLEANUP_MODULES="resource_management;ambari_commons;ambari_server;ambari_ws4py;ambari_stomp;ambari_jinja2;ambari_simplejson"
+AMBARI_SERVER_VAR="${ROOT}/var/lib/${AMBARI_UNIT}"
+AMBARI_HELPER="${ROOT}/var/lib/ambari-server/install-helper.sh.orig"
+
+PYTHON_WRAPER_DIR="${ROOT}/usr/bin"
 PYTHON_WRAPER_TARGET="${PYTHON_WRAPER_DIR}/ambari-python-wrap"
 
+LOG_FILE=/dev/null
+
 AMBARI_SERVER_EXECUTABLE_LINK="${ROOT}/usr/sbin/ambari-server"
 AMBARI_SERVER_EXECUTABLE="${ROOT}/etc/init.d/ambari-server"
 
@@ -55,143 +59,192 @@ AMBARI_CONFIGS_DIR_SAVE="${ROOT}/etc/ambari-server/conf.save"
 AMBARI_CONFIGS_DIR_SAVE_BACKUP="${ROOT}/etc/ambari-server/conf_$(date '+%d_%m_%y_%H_%M').save"
 AMBARI_LOG4J="${AMBARI_CONFIGS_DIR}/log4j.properties"
 
-clean_pyc_files(){
-  # cleaning old *.pyc files
-  find ${RESOURCE_MANAGEMENT_DIR:?} -name *.pyc -exec rm {} \;
-  find ${COMMON_DIR:?} -name *.pyc -exec rm {} \;
-  find ${AMBARI_SERVER:?} -name *.pyc -exec rm {} \;
-}
-
 
-do_install(){
-  rm -f "$AMBARI_SERVER_EXECUTABLE_LINK"
-  ln -s "$AMBARI_SERVER_EXECUTABLE" "$AMBARI_SERVER_EXECUTABLE_LINK"
- 
-rm -rf "$OLD_COMMON_DIR" "$OLD_RESOURCE_MANAGEMENT_DIR" "$OLD_JINJA_DIR" "$OLD_SIMPLEJSON_DIR" "$OLD_COMMON_DIR" "$OLD_AMBARI_SERVER_DIR"
+resolve_log_file(){
+ local log_dir=/var/log/${AMBARI_UNIT}
+ local log_file="${log_dir}/${AMBARI_UNIT}-pkgmgr.log"
 
-  #TODO we need this when upgrading from pre 2.4 versions to 2.4, remove this when upgrade from pre 2.4 versions will be
-  #TODO unsupported
-  clean_pyc_files
+ if [ ! -d "${log_dir}" ]; then
+   mkdir "${log_dir}" 1>/dev/null 2>&1
+ fi
 
-  # remove old python wrapper
-  rm -f "$PYTHON_WRAPER_TARGET"
+ if [ -d "${log_dir}" ]; then
+   touch ${log_file} 1>/dev/null 2>&1
+   if [ -f "${log_file}" ]; then
+    LOG_FILE="${log_file}"
+   fi
+ fi
 
-  AMBARI_PYTHON=""
-  python_binaries=( "/usr/bin/python" "/usr/bin/python2" "/usr/bin/python2.7" "/usr/bin/python2.6" )
-  for python_binary in "${python_binaries[@]}"
-  do
-    $python_binary -c "import sys ; ver = sys.version_info ; sys.exit(not (ver >= (2,6) and ver<(3,0)))" 1>/dev/null 2>/dev/null
+ echo "--> Install-helper custom action log started at $(date '+%d/%m/%y %H:%M') for '${ACTION}'" 1>>${LOG_FILE} 2>&1
+}
 
-    if [ $? -eq 0 ] ; then
-      AMBARI_PYTHON="$python_binary"
-      break;
+clean_pyc_files(){
+  # cleaning old *.pyc files
+  local lib_dir="${AMBARI_SERVER_ROOT_DIR}/lib"
+
+  echo ${CLEANUP_MODULES} | tr ';' '\n' | while read item; do
+    local item="${lib_dir}/${item}"
+    echo "Cleaning pyc files from ${item}..."
+    if [ -d "${item}" ]; then
+      find ${item:?} -name *.pyc -exec rm {} \; 1>>${LOG_FILE} 2>&1
+    else
+      echo "Skipping ${item} pyc cleaning, as package not existing"
     fi
   done
+}
 
-  if [ -z "$AMBARI_PYTHON" ] ; then
-    >&2 echo "Cannot detect python for ambari to use. Please manually set $PYTHON_WRAPER link to point to correct python binary"
-  else
-	mkdir -p "$PYTHON_WRAPER_DIR"
-    ln -s "$AMBARI_PYTHON" "$PYTHON_WRAPER_TARGET"
-  fi
+remove_ambari_unit_dir(){
+  # removing empty dirs, which left after cleaning pyc files
 
-  sed -i "s|ambari.root.dir\s*=\s*/|ambari.root.dir=${ROOT_DIR_PATH}|g" "$AMBARI_LOG4J"
-  sed -i "s|root_dir\s*=\s*/|root_dir = ${ROOT_DIR_PATH}|g" "$CA_CONFIG"
-  sed -i "s|^ROOT=\"/\"$|ROOT=\"${ROOT_DIR_PATH}\"|g" "$AMBARI_SERVER_EXECUTABLE"
+  find "${AMBARI_SERVER_ROOT_DIR}" -type d | tac | while read item; do
+    echo "Removing empty dir ${item}..."
+    rmdir --ignore-fail-on-non-empty ${item} 1>/dev/null 2>&1
+  done
 
-  AUTOSTART_SERVER_CMD="" 
+  rm -rf ${AMBARI_HELPER}
+  find "${AMBARI_SERVER_VAR}" -type d | tac | while read item; do
+    echo "Removing empty dir ${item}..."
+    rmdir --ignore-fail-on-non-empty ${item} 1>/dev/null 2>&1
+  done
+}
+
+remove_autostart(){
+   which chkconfig > /dev/null 2>&1
+  if [ "$?" -eq 0 ] ; then
+    chkconfig --list | grep ambari-server && chkconfig --del ambari-server
+  fi
+  which update-rc.d > /dev/null 2>&1
+  if [ "$?" -eq 0 ] ; then
+    update-rc.d -f ambari-server remove
+  fi
+}
+
+install_autostart(){
+  local autostart_server_cmd=""
   which chkconfig > /dev/null 2>&1
   if [ "$?" -eq 0 ] ; then
-    AUTOSTART_SERVER_CMD="chkconfig --add ambari-server"
+    autostart_server_cmd="chkconfig --add ambari-server"
   fi
   which update-rc.d > /dev/null 2>&1
   if [ "$?" -eq 0 ] ; then
-    AUTOSTART_SERVER_CMD="update-rc.d ambari-server defaults"
+    autostart_server_cmd="update-rc.d ambari-server defaults"
   fi
-    
+
   # if installed to customized root folder, skip ambari-server service actions,
   # as no file in /etc/init.d/ambari-server is present
-  if [ ! "${ROOT}/" -ef "/" ] ; then 
-	echo "Not adding ambari-server service to startup, as installed to customized root."
-	echo "If you need this functionality run the commands below, which create ambari-server service and configure it to run at startup: "
-	echo "sudo ln -s ${AMBARI_SERVER_EXECUTABLE} /etc/init.d/ambari-server"
-	echo "sudo $AUTOSTART_SERVER_CMD"
+  if [ ! "${ROOT}/" -ef "/" ]; then
+    echo "Not adding ambari-server service to startup, as installed to customized root."
+    echo "If you need this functionality run the commands below, which create ambari-server service and configure it to run at startup: "
+    echo "sudo ln -s ${AMBARI_SERVER_EXECUTABLE} /etc/init.d/ambari-server"
+    echo "sudo ${autostart_server_cmd}"
   else
-	$AUTOSTART_SERVER_CMD
+    ${autostart_server_cmd}
   fi
+}
+
+locate_python(){
+  local python_binaries="/usr/bin/python;/usr/bin/python2;/usr/bin/python2.7"
 
-  if [ -d "$AMBARI_SERVER_KEYS_FOLDER" ]
-  then
-      chmod 700 "$AMBARI_SERVER_KEYS_FOLDER"
-      if [ -d "$AMBARI_SERVER_KEYS_DB_FOLDER" ]
-      then
-          chmod 700 "$AMBARI_SERVER_KEYS_DB_FOLDER"
-          if [ -d "$AMBARI_SERVER_NEWCERTS_FOLDER" ]
-          then
-              chmod 700 "$AMBARI_SERVER_NEWCERTS_FOLDER"
+  echo ${python_binaries}| tr ';' '\n' | while read python_binary; do
+    ${python_binary} -c "import sys ; ver = sys.version_info ; sys.exit(not (ver >= (2,7) and ver<(3,0)))" 1>>${LOG_FILE} 2>/dev/null
 
+    if [ $? -eq 0 ]; then
+      echo "${python_binary}"
+      break
+    fi
+  done
+}
+
+do_install(){
+
+  rm -f "${AMBARI_SERVER_EXECUTABLE_LINK}"
+  ln -s "${AMBARI_SERVER_EXECUTABLE}" "${AMBARI_SERVER_EXECUTABLE_LINK}"
+
+  echo ${OLD_PY_MODULES} | tr ';' '\n' | while read item; do
+   local old_path="${OLD_PYLIB_PATH}/${item}"
+   if [ -d "${old_path}" ]; then
+     echo "Removing old python module ${old_path}..."  1>>${LOG_FILE} 2>&1
+     rm -rf ${old_path} 1>/dev/null 2>&1
+   fi
+  done
+
+  # remove old python wrapper
+  rm -f "${PYTHON_WRAPER_TARGET}"
+
+  local ambari_python=$(locate_python)
+
+  if [ -z "${ambari_python}" ]; then
+    >&2 echo "Cannot detect Python for Ambari to use. Please manually set ${PYTHON_WRAPER_TARGET} link to point to correct Python binary"
+  else
+    mkdir -p "${PYTHON_WRAPER_DIR}"
+    ln -s "${ambari_python}" "${PYTHON_WRAPER_TARGET}"
+  fi
+
+  sed -i "s|ambari.root.dir\s*=\s*/|ambari.root.dir=${ROOT_DIR_PATH}|g" "${AMBARI_LOG4J}"
+  sed -i "s|root_dir\s*=\s*/|root_dir = ${ROOT_DIR_PATH}|g" "${CA_CONFIG}"
+  sed -i "s|^ROOT=\"/\"$|ROOT=\"${ROOT_DIR_PATH}\"|g" "${AMBARI_SERVER_EXECUTABLE}"
+
+  install_autostart |tee -a ${LOG_FILE}
+
+  if [ -d "${AMBARI_SERVER_KEYS_FOLDER}" ]; then
+      chmod 700 "${AMBARI_SERVER_KEYS_FOLDER}"
+      if [ -d "${AMBARI_SERVER_KEYS_DB_FOLDER}" ]; then
+          chmod 700 "${AMBARI_SERVER_KEYS_DB_FOLDER}"
+          if [ -d "${AMBARI_SERVER_NEWCERTS_FOLDER}" ]; then
+              chmod 700 "${AMBARI_SERVER_NEWCERTS_FOLDER}"
           fi
       fi
   fi
 
-  if [ -f "$AMBARI_ENV_RPMSAVE" ] ; then
-    PYTHON_PATH_LINE='export PYTHONPATH=/usr/lib/ambari-server/lib:$PYTHONPATH'
-    grep "^$PYTHON_PATH_LINE\$" "$AMBARI_ENV_RPMSAVE" > /dev/null
-    if [ $? -ne 0 ] ; then
-      echo -e "\n$PYTHON_PATH_LINE" >> $AMBARI_ENV_RPMSAVE
+  if [ -f "${AMBARI_ENV_RPMSAVE}" ]; then
+    local python_path_line="export PYTHONPATH=${AMBARI_SERVER_ROOT_DIR}/lib:\$\{PYTHONPATH\}"
+    grep "^${python_path_line}\$" "${AMBARI_ENV_RPMSAVE}" > /dev/null
+    if [ $? -ne 0 ]; then
+      echo -e "\n${python_path_line}" >> ${AMBARI_ENV_RPMSAVE}
     fi
   fi
 }
 
-do_remove(){
-  $AMBARI_SERVER_EXECUTABLE stop > /dev/null 2>&1
+copy_helper(){
+  local install_helper="${RPM_INSTALL_PREFIX}/var/lib/ambari-server/install-helper.sh"
+  cp -f ${install_helper} ${AMBARI_HELPER} 1>/dev/null 2>&1
+}
 
-  clean_pyc_files
+do_remove(){
+  ${AMBARI_SERVER_EXECUTABLE} stop > /dev/null 2>&1
 
-  if [ -d "$AMBARI_CONFIGS_DIR_SAVE" ]; then
-    mv "$AMBARI_CONFIGS_DIR_SAVE" "$AMBARI_CONFIGS_DIR_SAVE_BACKUP"
-  fi
-  # Remove link created during install
-  rm -f "$AMBARI_SERVER_EXECUTABLE_LINK"
-  mv "$AMBARI_CONFIGS_DIR" "$AMBARI_CONFIGS_DIR_SAVE"
-    
-  if [ -f "$PYTHON_WRAPER_TARGET" ]; then
-    rm -f "$PYTHON_WRAPER_TARGET"
+  if [ -d "${AMBARI_CONFIGS_DIR_SAVE}" ]; then
+    mv "${AMBARI_CONFIGS_DIR_SAVE}" "${AMBARI_CONFIGS_DIR_SAVE_BACKUP}"
   fi
+  # part.1 Remove link created during install AMBARI_ENV_RPMSAVE
+  rm -f "${AMBARI_SERVER_EXECUTABLE_LINK}"
+  cp -rf "${AMBARI_CONFIGS_DIR}" "${AMBARI_CONFIGS_DIR_SAVE}"
 
-  if [ -d "$COMMON_DIR" ]; then
-    rm -f $COMMON_DIR
-  fi
+  remove_autostart 1>>${LOG_FILE} 2>&1
+  copy_helper
+}
 
-  if [ -d "$RESOURCE_MANAGEMENT_DIR" ]; then
-    rm -f $RESOURCE_MANAGEMENT_DIR
-  fi
 
-  if [ -d "$JINJA_DIR" ]; then
-    rm -f $JINJA_DIR
-  fi
+do_cleanup(){
+  # do_cleanup is a function, which called after do_remove stage and is supposed to be save place to
+  # remove obsolete files generated by application activity
 
-  if [ -d "$SIMPLEJSON_DIR" ]; then
-    rm -f $SIMPLEJSON_DIR
-  fi
+  clean_pyc_files 1>>${LOG_FILE} 2>&1
+  remove_ambari_unit_dir 1>>${LOG_FILE} 2>&1
 
-  if [ -d "$AMBARI_SERVER" ]; then
-    rm -rf "$AMBARI_SERVER"
+  if [ ! -d "${AMBARI_AGENT_ROOT_DIR}" ]; then
+    echo "Removing ${PYTHON_WRAPER_TARGET} ..." 1>>${LOG_FILE} 2>&1
+    rm -f ${PYTHON_WRAPER_TARGET} 1>>${LOG_FILE} 2>&1
   fi
 
-  # if server package exists, restore their settings
-  if [ -f "$INSTALL_HELPER_AGENT" ]; then  #  call agent shared files installer
-    $INSTALL_HELPER_AGENT install
-  fi
+  # part.2 Remove link created during install AMBARI_ENV_RPMSAVE
+  rm -rf "${AMBARI_CONFIGS_DIR}" 1>>${LOG_FILE} 2>&1
+}
 
-  which chkconfig > /dev/null 2>&1
-  if [ "$?" -eq 0 ] ; then
-    chkconfig --list | grep ambari-server && chkconfig --del ambari-server
-  fi
-  which update-rc.d > /dev/null 2>&1
-  if [ "$?" -eq 0 ] ; then
-    update-rc.d -f ambari-server remove
-  fi
+do_backup(){
+  # ToDo: find a way to move backup logic here from preinstall.sh and preinst scripts
+  # ToDo: general problem is that still no files are installed on step, when backup is supposed to be done
+  echo ""
 }
 
 do_upgrade(){
@@ -199,14 +252,22 @@ do_upgrade(){
   do_install
 }
 
-case "$1" in
-	install)
-	  do_install
-	  ;;
-	remove)
-	  do_remove
-	  ;;
-	upgrade)
-	  do_upgrade
-	  ;;
+resolve_log_file
+
+case "${ACTION}" in
+    install)
+      do_install
+      ;;
+    remove)
+      do_remove
+      ;;
+    upgrade)
+      do_upgrade
+      ;;
+    cleanup)
+      do_cleanup
+      ;;
+    *)
+      echo "Wrong command given"
+      ;;
 esac
diff --git a/ambari-server/pom.xml b/ambari-server/pom.xml
index b50e19b..3e90e77 100644
--- a/ambari-server/pom.xml
+++ b/ambari-server/pom.xml
@@ -556,6 +556,10 @@
             <scriptFile>src/main/package/rpm/posttrans_server.sh</scriptFile>
             <fileEncoding>utf-8</fileEncoding>
           </posttransScriptlet>
+          <postremoveScriptlet>
+            <scriptFile>src/main/package/rpm/postremove.sh</scriptFile>
+            <fileEncoding>utf-8</fileEncoding>
+          </postremoveScriptlet>
           <needarch>x86_64</needarch>
           <mappings>
             <mapping>
diff --git a/ambari-server/src/main/package/deb/control/postrm b/ambari-server/src/main/package/deb/control/postrm
index 21a01fa..37d62c8 100644
--- a/ambari-server/src/main/package/deb/control/postrm
+++ b/ambari-server/src/main/package/deb/control/postrm
@@ -13,3 +13,17 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License
+
+INSTALL_HELPER="${RPM_INSTALL_PREFIX}/var/lib/ambari-server/install-helper.sh"
+INSTALL_HELPER_ORIG="${RPM_INSTALL_PREFIX}/var/lib/ambari-server/install-helper.sh.orig"
+
+if [ "$1" == "upgrade" ]; then
+  if [ -f "${INSTALL_HELPER}" ]; then
+    ${INSTALL_HELPER} upgrade
+  fi
+else
+  if [ -f "${INSTALL_HELPER_ORIG}" ]; then
+    ${INSTALL_HELPER_ORIG} cleanup
+    rm -f ${INSTALL_HELPER_ORIG} 1>/dev/null 2>&1
+  fi
+fi
\ No newline at end of file
diff --git a/ambari-server/src/main/package/deb/control/preinst b/ambari-server/src/main/package/deb/control/preinst
index 080e592..5b7841b 100644
--- a/ambari-server/src/main/package/deb/control/preinst
+++ b/ambari-server/src/main/package/deb/control/preinst
@@ -1,4 +1,3 @@
-#!/bin/bash
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -14,127 +13,94 @@
 # See the License for the specific language governing permissions and
 # limitations under the License
 
-ROOT="${RPM_INSTALL_PREFIX}"
+ROOT=`echo "${RPM_INSTALL_PREFIX}" | sed 's|/$||g'`
 
-STACKS_FOLDER="${ROOT}/var/lib/ambari-server/resources/stacks"
-STACKS_FOLDER_OLD=${ROOT}/var/lib/ambari-server/resources/stacks_$(date '+%d_%m_%y_%H_%M').old
 
-COMMON_SERVICES_FOLDER="${ROOT}/var/lib/ambari-server/resources/common-services"
-COMMON_SERVICES_FOLDER_OLD=${ROOT}/var/lib/ambari-server/resources/common-services_$(date '+%d_%m_%y_%H_%M').old
+do_backups(){
+  local etc_dir="${ROOT}/etc/ambari-server"
+  local var_dir="${ROOT}/var/lib/ambari-server"
+  local usr_dir="${ROOT}/usr/lib/ambari-server"
+  local usr_backup_dir="${ROOT}/usr/lib/ambari-server-backups"
 
-MPACKS_FOLDER="${ROOT}/var/lib/ambari-server/resources/mpacks"
-MPACKS_FOLDER_OLD=${ROOT}/var/lib/ambari-server/resources/mpacks_$(date '+%d_%m_%y_%H_%M').old
+  local stacks_backup_folder="${var_dir}/resources/stacks_$(date '+%d_%m_%y_%H_%M').old"
+  local common_service_backup_folder="${var_dir}/resources/common-services_$(date '+%d_%m_%y_%H_%M').old"
 
-AMBARI_PROPERTIES="${ROOT}/etc/ambari-server/conf/ambari.properties"
-AMBARI_PROPERTIES_OLD="$AMBARI_PROPERTIES.rpmsave"
+  #  backup configuration
 
-AMBARI_ENV="${ROOT}/var/lib/ambari-server/ambari-env.sh"
-AMBARI_ENV_OLD="$AMBARI_ENV.rpmsave"
+  # data format:  "title:source:destination"; each new record on new line
+  local backup_folders="configs:${etc_dir}/conf.save:${etc_dir}/conf_$(date '+%d_%m_%y_%H_%M').save
+Ambari properties:${etc_dir}/conf/ambari.properties:${etc_dir}/conf/ambari.propertie.rpmsave
+Ambari properties:${var_dir}/ambari-env.sh:${var_dir}/ambari-env.sh.rpmsave
+JAAS login file:${etc_dir}/conf/krb5JAASLogin.conf:${etc_dir}/conf/krb5JAASLogin.conf.rpmsave
+stacks directory:${var_dir}/resources/stacks:${stacks_backup_folder}
+common-services directory:${var_dir}/resources/common-services:${common_service_backup_folder}"
 
-AMBARI_KRB_JAAS_LOGIN_FILE="${ROOT}/etc/ambari-server/conf/krb5JAASLogin.conf"
-AMBARI_KRB_JAAS_LOGIN_FILE_OLD="$AMBARI_KRB_JAAS_LOGIN_FILE.rpmsave"
+ echo "${backup_folders}"| while IFS=: read title source destination; do
+   if [ -d "${source}" ]; then
+     echo "Backing up ${title}: ${source} -> ${destination}"
+     mv -f "${source}" "${destination}"
+   fi
+ done
 
-AMBARI_VIEWS_FOLDER="${ROOT}/var/lib/ambari-server/resources/views"
-AMBARI_VIEWS_BACKUP_FOLDER="$AMBARI_VIEWS_FOLDER/backups"
+  # backup mpacks
 
-AMBARI_SERVER_JAR_FILES="/usr/lib/ambari-server/ambari-server-*.jar"
-AMBARI_SERVER_JAR_FILES_BACKUP_FOLDER="/usr/lib/ambari-server-backups"
-SERVER_CONF_SAVE="${ROOT}/etc/ambari-server/conf.save"
-SERVER_CONF_SAVE_BACKUP="${ROOT}/etc/ambari-server/conf_$(date '+%d_%m_%y_%H_%M').save"
+  local mpacks_folder="${ROOT}/var/lib/ambari-server/resources/mpacks"
+  local mpacks_folder_old=${ROOT}/var/lib/ambari-server/resources/mpacks_$(date '+%d_%m_%y_%H_%M').old
 
-if [ -d "$SERVER_CONF_SAVE" ]
-then
-    echo "Backing up configs $SERVER_CONF_SAVE -> $SERVER_CONF_SAVE_BACKUP"
-    mv "$SERVER_CONF_SAVE" "$SERVER_CONF_SAVE_BACKUP"
-fi
-
-if [ -f "$AMBARI_PROPERTIES" ]
-then
-    echo "Backing up Ambari properties $AMBARI_PROPERTIES -> $AMBARI_PROPERTIES_OLD"
-    mv -f "$AMBARI_PROPERTIES" "$AMBARI_PROPERTIES_OLD"
-fi
-
-if [ -f "$AMBARI_ENV" ]
-then
-    echo "Backing up Ambari properties $AMBARI_ENV -> $AMBARI_ENV_OLD"
-    mv -f "$AMBARI_ENV" "$AMBARI_ENV_OLD"
-fi
-
-if [ -f "$AMBARI_KRB_JAAS_LOGIN_FILE" ]
-then
-    echo "Backing up JAAS login file $AMBARI_KRB_JAAS_LOGIN_FILE -> $AMBARI_KRB_JAAS_LOGIN_FILE_OLD"
-    mv -f "$AMBARI_KRB_JAAS_LOGIN_FILE" "$AMBARI_KRB_JAAS_LOGIN_FILE_OLD"
-fi
-
-if [ -d "$STACKS_FOLDER" ]
-then
-    echo "Backing up stacks directory $STACKS_FOLDER -> $STACKS_FOLDER_OLD"
-    mv -f "$STACKS_FOLDER" "$STACKS_FOLDER_OLD"
-fi
-
-if [ -d "$COMMON_SERVICES_FOLDER" ]
-then
-    echo "Backing up common-services directory $COMMON_SERVICES_FOLDER -> $COMMON_SERVICES_FOLDER_OLD"
-    mv -f "$COMMON_SERVICES_FOLDER" "$COMMON_SERVICES_FOLDER_OLD"
-fi
-
-if [ -d "$MPACKS_FOLDER" ]
-then
+  if [ -d "${mpacks_folder}" ]; then
     # Make a copy of mpacks folder
-    if [ ! -d "$MPACKS_FOLDER_OLD" ]; then
-        echo "Backing up mpacks directory $MPACKS_FOLDER -> $MPACKS_FOLDER_OLD"
-        cp -R "$MPACKS_FOLDER" "$MPACKS_FOLDER_OLD"
+    if [ ! -d "${mpacks_folder_old}" ]; then
+      echo "Backing up mpacks directory: ${mpacks_folder} -> ${mpacks_folder_old}"
+      cp -R "${mpacks_folder}" "${mpacks_folder_old}"
     fi
 
-    # Update symlinks in $STACKS_FOLDER_OLD to point to $MPACKS_FOLDER_OLD
-    if [ -d "$STACKS_FOLDER_OLD" ]; then
-        for link in $(find "$STACKS_FOLDER_OLD" -type l)
-        do
-            target=`readlink $link`
-            if grep -q "$MPACKS_FOLDER/"<<<$target; then
-                new_target="${target/$MPACKS_FOLDER/$MPACKS_FOLDER_OLD}"
-                echo "Updating symlink $link -> $new_target"
-                ln -snf $new_target $link
-            fi
+    local symlink_update_folders="${stacks_backup_folder};${common_service_backup_folder}"
+
+    echo ${symlink_update_folders}| tr ';' '\n'| while read item; do
+      if [ -d "${item}" ]; then
+        for link in $(find "${item}" -type l); do
+          local target=`readlink ${link}`
+          echo ${target}|grep -q "${mpacks_folder}/" 1>/dev/null 2>&1
+          if [ $? -eq 0 ]; then
+            local new_target="${target/$mpacks_folder/$mpacks_folder_old}"
+            echo "Updating symlink ${link} -> ${new_target}"
+            ln -snf ${new_target} ${link}
+          fi
         done
-    fi
-
-    # Update symlinks in $COMMON_SERVICES_FOLDER_OLD to point to $MPACKS_FOLDER_OLD
-    if [ -d "$COMMON_SERVICES_FOLDER_OLD" ]; then
-    for link in $(find "$COMMON_SERVICES_FOLDER_OLD" -type l)
-        do
-            target=`readlink $link`
-            if grep -q "$MPACKS_FOLDER/"<<<$target; then
-                new_target="${target/$MPACKS_FOLDER/$MPACKS_FOLDER_OLD}"
-                echo "Updating symlink $link -> $new_target"
-                ln -snf $new_target $link
-            fi
-        done
-    fi
-fi
-
-if [ ! -d "$AMBARI_VIEWS_BACKUP_FOLDER" ] && [ -d "$AMBARI_VIEWS_FOLDER" ]
-then
-    mkdir "$AMBARI_VIEWS_BACKUP_FOLDER"
-fi
-
-if [ -d "$AMBARI_VIEWS_FOLDER" ] && [ -d "$AMBARI_VIEWS_BACKUP_FOLDER" ]
-then
-    echo "Backing up Ambari view jars $AMBARI_VIEWS_FOLDER/*.jar -> $AMBARI_VIEWS_BACKUP_FOLDER/"
-    cp -u $AMBARI_VIEWS_FOLDER/*.jar $AMBARI_VIEWS_BACKUP_FOLDER/
-fi
-
-for f in $AMBARI_SERVER_JAR_FILES;
-do
-    if [ -f "$f" ]
-    then
-        if [ ! -d "$AMBARI_SERVER_JAR_FILES_BACKUP_FOLDER" ]
-        then
-            mkdir -p "$AMBARI_SERVER_JAR_FILES_BACKUP_FOLDER"
-        fi
-        echo "Backing up Ambari server jar $f -> $AMBARI_SERVER_JAR_FILES_BACKUP_FOLDER/"
-        mv -f $f $AMBARI_SERVER_JAR_FILES_BACKUP_FOLDER/
-    fi
-done
-
-exit 0
+      fi
+    done
+  fi
+
+  # backup Ambari Views
+
+  local ambari_views_folder="${var_dir}/resources/views"
+  local ambari_views_backup_folder="${ambari_views_folder}/backups"
+
+  if [ ! -d "${ambari_views_backup_folder}" ] && [ -d "${ambari_views_folder}" ]; then
+    mkdir "${ambari_views_backup_folder}"
+  fi
+
+  ls ${ambari_views_folder}/*.jar > /dev/null 2>&1
+  local jars_exist=$?
+  if [ -d "${ambari_views_folder}" ] && [ -d "${ambari_views_backup_folder}" ] && [ ${jars_exist} -eq 0 ]; then
+      echo "Backing up Ambari view jars: ${ambari_views_folder}/*.jar -> ${ambari_views_backup_folder}/"
+      cp -u ${ambari_views_folder}/*.jar "${ambari_views_backup_folder}/" 1>/dev/null 2>&1
+  fi
+
+  # backup Ambari Server Jar
+
+  local ambari_server_jar_files=${usr_dir}/ambari-server-*.jar
+  local ambari_server_jar_files_backup_folder="${usr_backup_dir}"
+
+  for f in ${ambari_server_jar_files}; do
+      if [ -f "${f}" ]; then
+          if [ ! -d "${ambari_server_jar_files_backup_folder}" ]; then
+              mkdir -p "${ambari_server_jar_files_backup_folder}"
+          fi
+          echo "Backing up Ambari server jar: ${f} -> ${ambari_server_jar_files_backup_folder}/"
+          mv -f "${f}" "${ambari_server_jar_files_backup_folder}/"
+      fi
+  done
+}
+
+do_backups
\ No newline at end of file
diff --git a/ambari-server/src/main/package/deb/control/prerm b/ambari-server/src/main/package/deb/control/prerm
index b85bd3b..3a51e34 100644
--- a/ambari-server/src/main/package/deb/control/prerm
+++ b/ambari-server/src/main/package/deb/control/prerm
@@ -18,9 +18,10 @@
 
 INSTALL_HELPER="${RPM_INSTALL_PREFIX}/var/lib/ambari-server/install-helper.sh"
 
+
 if [ "$1" == "remove" ] ; then # Action is uninstall
-    if [ -f "$INSTALL_HELPER" ]; then
-      $INSTALL_HELPER remove
+    if [ -f "${INSTALL_HELPER}" ]; then
+      ${INSTALL_HELPER} remove
     fi
 fi
 
diff --git a/ambari-server/src/main/package/rpm/postinstall.sh b/ambari-server/src/main/package/rpm/postinstall.sh
index 1e8e0f0..bdf3799 100644
--- a/ambari-server/src/main/package/rpm/postinstall.sh
+++ b/ambari-server/src/main/package/rpm/postinstall.sh
@@ -20,12 +20,12 @@ INSTALL_HELPER="${RPM_INSTALL_PREFIX}/var/lib/ambari-server/install-helper.sh"
 case "$1" in
   1) # Action install
     if [ -f "$INSTALL_HELPER" ]; then
-        $INSTALL_HELPER install
+        ${INSTALL_HELPER} install
     fi
   ;;
   2) # Action upgrade
     if [ -f "$INSTALL_HELPER" ]; then
-        $INSTALL_HELPER upgrade
+        ${INSTALL_HELPER} upgrade
     fi
   ;;
 esac
diff --git a/ambari-server/src/main/package/deb/control/prerm b/ambari-server/src/main/package/rpm/postremove.sh
similarity index 78%
copy from ambari-server/src/main/package/deb/control/prerm
copy to ambari-server/src/main/package/rpm/postremove.sh
index b85bd3b..468dd4a 100644
--- a/ambari-server/src/main/package/deb/control/prerm
+++ b/ambari-server/src/main/package/rpm/postremove.sh
@@ -1,4 +1,3 @@
-#!/bin/bash
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -14,13 +13,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License
 
-# Warning: don't add changes to this script directly, please add changes to install-helper.sh.
+INSTALL_HELPER="${RPM_INSTALL_PREFIX}/var/lib/ambari-server/install-helper.sh.orig"
 
-INSTALL_HELPER="${RPM_INSTALL_PREFIX}/var/lib/ambari-server/install-helper.sh"
-
-if [ "$1" == "remove" ] ; then # Action is uninstall
-    if [ -f "$INSTALL_HELPER" ]; then
-      $INSTALL_HELPER remove
+if [ "$1" -eq 0 ]; then  # Action is uninstall
+    if [ -f "${INSTALL_HELPER}" ]; then
+      ${INSTALL_HELPER} cleanup
+      rm -f ${INSTALL_HELPER} 1>/dev/null 2>&1
     fi
 fi
 
diff --git a/ambari-server/src/main/package/rpm/preinstall.sh b/ambari-server/src/main/package/rpm/preinstall.sh
index cdb1081..5b7841b 100644
--- a/ambari-server/src/main/package/rpm/preinstall.sh
+++ b/ambari-server/src/main/package/rpm/preinstall.sh
@@ -15,127 +15,92 @@
 
 ROOT=`echo "${RPM_INSTALL_PREFIX}" | sed 's|/$||g'`
 
-STACKS_FOLDER="${ROOT}/var/lib/ambari-server/resources/stacks"
-STACKS_FOLDER_OLD="${ROOT}/var/lib/ambari-server/resources/stacks_$(date '+%d_%m_%y_%H_%M').old"
-
-COMMON_SERVICES_FOLDER=${ROOT}"/var/lib/ambari-server/resources/common-services"
-COMMON_SERVICES_FOLDER_OLD="${ROOT}/var/lib/ambari-server/resources/common-services_$(date '+%d_%m_%y_%H_%M').old"
-
-MPACKS_FOLDER="${ROOT}/var/lib/ambari-server/resources/mpacks"
-MPACKS_FOLDER_OLD=${ROOT}/var/lib/ambari-server/resources/mpacks_$(date '+%d_%m_%y_%H_%M').old
-
-AMBARI_PROPERTIES="${ROOT}/etc/ambari-server/conf/ambari.properties"
-AMBARI_PROPERTIES_OLD="$AMBARI_PROPERTIES.rpmsave"
-
-AMBARI_ENV="${ROOT}/var/lib/ambari-server/ambari-env.sh"
-AMBARI_ENV_OLD="$AMBARI_ENV.rpmsave"
-
-AMBARI_KRB_JAAS_LOGIN_FILE="${ROOT}/etc/ambari-server/conf/krb5JAASLogin.conf"
-AMBARI_KRB_JAAS_LOGIN_FILE_OLD="$AMBARI_KRB_JAAS_LOGIN_FILE.rpmsave"
-
-AMBARI_VIEWS_FOLDER="${ROOT}/var/lib/ambari-server/resources/views"
-AMBARI_VIEWS_BACKUP_FOLDER="$AMBARI_VIEWS_FOLDER/backups"
-
-AMBARI_SERVER_JAR_FILES="/usr/lib/ambari-server/ambari-server-*.jar"
-AMBARI_SERVER_JAR_FILES_BACKUP_FOLDER="/usr/lib/ambari-server-backups"
-SERVER_CONF_SAVE="${ROOT}/etc/ambari-server/conf.save"
-SERVER_CONF_SAVE_BACKUP="${ROOT}/etc/ambari-server/conf_$(date '+%d_%m_%y_%H_%M').save"
-
-if [ -d "$SERVER_CONF_SAVE" ]
-then
-    echo "Backing up configs $SERVER_CONF_SAVE -> $SERVER_CONF_SAVE_BACKUP"
-    mv "$SERVER_CONF_SAVE" "$SERVER_CONF_SAVE_BACKUP"
-fi
-
-if [ -f "$AMBARI_PROPERTIES" ]
-then
-    echo "Backing up Ambari properties $AMBARI_PROPERTIES -> $AMBARI_PROPERTIES_OLD"
-    cp -n "$AMBARI_PROPERTIES" "$AMBARI_PROPERTIES_OLD"
-fi
-
-if [ -f "$AMBARI_ENV" ]
-then
-    echo "Backing up Ambari properties $AMBARI_ENV -> $AMBARI_ENV_OLD"
-    cp -n "$AMBARI_ENV" "$AMBARI_ENV_OLD"
-fi
-
-if [ -f "$AMBARI_KRB_JAAS_LOGIN_FILE" ]
-then
-    echo "Backing up JAAS login file $AMBARI_KRB_JAAS_LOGIN_FILE -> $AMBARI_KRB_JAAS_LOGIN_FILE_OLD"
-    cp -n "$AMBARI_KRB_JAAS_LOGIN_FILE" "$AMBARI_KRB_JAAS_LOGIN_FILE_OLD"
-fi
-
-if [ -d "$STACKS_FOLDER" ]
-then
-    echo "Backing up stacks directory $STACKS_FOLDER -> $STACKS_FOLDER_OLD"
-    mv -f "$STACKS_FOLDER" "$STACKS_FOLDER_OLD"
-fi
-
-if [ -d "$COMMON_SERVICES_FOLDER" ]
-then
-    echo "Backing up common-services directory $COMMON_SERVICES_FOLDER -> $COMMON_SERVICES_FOLDER_OLD"
-    mv -f "$COMMON_SERVICES_FOLDER" "$COMMON_SERVICES_FOLDER_OLD"
-fi
-
-if [ -d "$MPACKS_FOLDER" ]
-then
-    # Make a copy of mpacks folder
-    if [ ! -d "$MPACKS_FOLDER_OLD" ]; then
-        echo "Backing up mpacks directory $MPACKS_FOLDER -> $MPACKS_FOLDER_OLD"
-        cp -R "$MPACKS_FOLDER" "$MPACKS_FOLDER_OLD"
-    fi
 
-    # Update symlinks in $STACKS_FOLDER_OLD to point to $MPACKS_FOLDER_OLD
-    if [ -d "$STACKS_FOLDER_OLD" ]; then
-        for link in $(find "$STACKS_FOLDER_OLD" -type l)
-        do
-            target=`readlink $link`
-            if grep -q "$MPACKS_FOLDER/"<<<$target; then
-                new_target="${target/$MPACKS_FOLDER/$MPACKS_FOLDER_OLD}"
-                echo "Updating symlink $link -> $new_target"
-                ln -snf $new_target $link
-            fi
-        done
-    fi
+do_backups(){
+  local etc_dir="${ROOT}/etc/ambari-server"
+  local var_dir="${ROOT}/var/lib/ambari-server"
+  local usr_dir="${ROOT}/usr/lib/ambari-server"
+  local usr_backup_dir="${ROOT}/usr/lib/ambari-server-backups"
 
-    # Update symlinks in $COMMON_SERVICES_FOLDER_OLD to point to $MPACKS_FOLDER_OLD
-    if [ -d "$COMMON_SERVICES_FOLDER_OLD" ]; then
-    for link in $(find "$COMMON_SERVICES_FOLDER_OLD" -type l)
-        do
-            target=`readlink $link`
-            if grep -q "$MPACKS_FOLDER/"<<<$target; then
-                new_target="${target/$MPACKS_FOLDER/$MPACKS_FOLDER_OLD}"
-                echo "Updating symlink $link -> $new_target"
-                ln -snf $new_target $link
-            fi
-        done
-    fi
-fi
-
-if [ ! -d "$AMBARI_VIEWS_BACKUP_FOLDER" ] && [ -d "$AMBARI_VIEWS_FOLDER" ]
-then
-    mkdir "$AMBARI_VIEWS_BACKUP_FOLDER"
-fi
-
-ls $AMBARI_VIEWS_FOLDER/*.jar > /dev/null 2>&1
-JARS_EXIST="$?"
-if [ -d "$AMBARI_VIEWS_FOLDER" ] && [ -d "$AMBARI_VIEWS_BACKUP_FOLDER" ] && [ "$JARS_EXIST" -eq 0 ]
-then
-    echo "Backing up Ambari view jars $AMBARI_VIEWS_FOLDER/*.jar -> $AMBARI_VIEWS_BACKUP_FOLDER/"
-    cp -u $AMBARI_VIEWS_FOLDER/*.jar $AMBARI_VIEWS_BACKUP_FOLDER/
-fi
-
-for f in $AMBARI_SERVER_JAR_FILES;
-do
-    if [ -f "$f" ]
-    then
-        if [ ! -d "$AMBARI_SERVER_JAR_FILES_BACKUP_FOLDER" ]
-        then
-            mkdir -p "$AMBARI_SERVER_JAR_FILES_BACKUP_FOLDER"
-        fi
-        echo "Backing up Ambari server jar $f -> $AMBARI_SERVER_JAR_FILES_BACKUP_FOLDER/"
-        mv -f $f $AMBARI_SERVER_JAR_FILES_BACKUP_FOLDER/
+  local stacks_backup_folder="${var_dir}/resources/stacks_$(date '+%d_%m_%y_%H_%M').old"
+  local common_service_backup_folder="${var_dir}/resources/common-services_$(date '+%d_%m_%y_%H_%M').old"
+
+  #  backup configuration
+
+  # data format:  "title:source:destination"; each new record on new line
+  local backup_folders="configs:${etc_dir}/conf.save:${etc_dir}/conf_$(date '+%d_%m_%y_%H_%M').save
+Ambari properties:${etc_dir}/conf/ambari.properties:${etc_dir}/conf/ambari.propertie.rpmsave
+Ambari properties:${var_dir}/ambari-env.sh:${var_dir}/ambari-env.sh.rpmsave
+JAAS login file:${etc_dir}/conf/krb5JAASLogin.conf:${etc_dir}/conf/krb5JAASLogin.conf.rpmsave
+stacks directory:${var_dir}/resources/stacks:${stacks_backup_folder}
+common-services directory:${var_dir}/resources/common-services:${common_service_backup_folder}"
+
+ echo "${backup_folders}"| while IFS=: read title source destination; do
+   if [ -d "${source}" ]; then
+     echo "Backing up ${title}: ${source} -> ${destination}"
+     mv -f "${source}" "${destination}"
+   fi
+ done
+
+  # backup mpacks
+
+  local mpacks_folder="${ROOT}/var/lib/ambari-server/resources/mpacks"
+  local mpacks_folder_old=${ROOT}/var/lib/ambari-server/resources/mpacks_$(date '+%d_%m_%y_%H_%M').old
+
+  if [ -d "${mpacks_folder}" ]; then
+    # Make a copy of mpacks folder
+    if [ ! -d "${mpacks_folder_old}" ]; then
+      echo "Backing up mpacks directory: ${mpacks_folder} -> ${mpacks_folder_old}"
+      cp -R "${mpacks_folder}" "${mpacks_folder_old}"
     fi
-done
 
-exit 0
+    local symlink_update_folders="${stacks_backup_folder};${common_service_backup_folder}"
+
+    echo ${symlink_update_folders}| tr ';' '\n'| while read item; do
+      if [ -d "${item}" ]; then
+        for link in $(find "${item}" -type l); do
+          local target=`readlink ${link}`
+          echo ${target}|grep -q "${mpacks_folder}/" 1>/dev/null 2>&1
+          if [ $? -eq 0 ]; then
+            local new_target="${target/$mpacks_folder/$mpacks_folder_old}"
+            echo "Updating symlink ${link} -> ${new_target}"
+            ln -snf ${new_target} ${link}
+          fi
+        done
+      fi
+    done
+  fi
+
+  # backup Ambari Views
+
+  local ambari_views_folder="${var_dir}/resources/views"
+  local ambari_views_backup_folder="${ambari_views_folder}/backups"
+
+  if [ ! -d "${ambari_views_backup_folder}" ] && [ -d "${ambari_views_folder}" ]; then
+    mkdir "${ambari_views_backup_folder}"
+  fi
+
+  ls ${ambari_views_folder}/*.jar > /dev/null 2>&1
+  local jars_exist=$?
+  if [ -d "${ambari_views_folder}" ] && [ -d "${ambari_views_backup_folder}" ] && [ ${jars_exist} -eq 0 ]; then
+      echo "Backing up Ambari view jars: ${ambari_views_folder}/*.jar -> ${ambari_views_backup_folder}/"
+      cp -u ${ambari_views_folder}/*.jar "${ambari_views_backup_folder}/" 1>/dev/null 2>&1
+  fi
+
+  # backup Ambari Server Jar
+
+  local ambari_server_jar_files=${usr_dir}/ambari-server-*.jar
+  local ambari_server_jar_files_backup_folder="${usr_backup_dir}"
+
+  for f in ${ambari_server_jar_files}; do
+      if [ -f "${f}" ]; then
+          if [ ! -d "${ambari_server_jar_files_backup_folder}" ]; then
+              mkdir -p "${ambari_server_jar_files_backup_folder}"
+          fi
+          echo "Backing up Ambari server jar: ${f} -> ${ambari_server_jar_files_backup_folder}/"
+          mv -f "${f}" "${ambari_server_jar_files_backup_folder}/"
+      fi
+  done
+}
+
+do_backups
\ No newline at end of file
diff --git a/ambari-server/src/main/package/rpm/preremove.sh b/ambari-server/src/main/package/rpm/preremove.sh
index bd20323..6a5b169 100644
--- a/ambari-server/src/main/package/rpm/preremove.sh
+++ b/ambari-server/src/main/package/rpm/preremove.sh
@@ -21,9 +21,10 @@
 
 INSTALL_HELPER="${RPM_INSTALL_PREFIX}/var/lib/ambari-server/install-helper.sh"
 
+
 if [ "$1" -eq 0 ]; then  # Action is uninstall
-    if [ -f "$INSTALL_HELPER" ]; then
-      $INSTALL_HELPER remove
+    if [ -f "${INSTALL_HELPER}" ]; then
+      ${INSTALL_HELPER} remove
     fi
 fi