1#!/usr/local/bin/bash
2
3SCRIPT=$(readlink -f "$0") # haiwen/seafile-server-1.3.0/upgrade/upgrade_xx_xx.sh
4UPGRADE_DIR=$(dirname "$SCRIPT") # haiwen/seafile-server-1.3.0/upgrade/
5INSTALLPATH=$(dirname "$UPGRADE_DIR") # haiwen/seafile-server-1.3.0/
6TOPDIR=$(dirname "${INSTALLPATH}") # haiwen/
7default_ccnet_conf_dir=${TOPDIR}/ccnet
8default_seafile_data_dir=${TOPDIR}/seafile-data
9default_seahub_db=${TOPDIR}/seahub.db
10
11export CCNET_CONF_DIR=${default_ccnet_conf_dir}
12export PYTHONPATH=${INSTALLPATH}/seafile/lib/python2.6/site-packages:${INSTALLPATH}/seafile/lib64/python2.6/site-packages:${INSTALLPATH}/seafile/lib/python2.7/site-packages:${INSTALLPATH}/seahub/thirdpart:$PYTHONPATH
13export PYTHONPATH=${INSTALLPATH}/seafile/lib/python2.7/site-packages:${INSTALLPATH}/seafile/lib64/python2.7/site-packages:$PYTHONPATH
14
15prev_version=1.4
16current_version=1.5
17
18echo
19echo "-------------------------------------------------------------"
20echo "This script would upgrade your seafile server from ${prev_version} to ${current_version}"
21echo "Press [ENTER] to contiune"
22echo "-------------------------------------------------------------"
23echo
24read dummy
25
26function check_python_executable() {
27    if [[ "$PYTHON" != "" && -x $PYTHON ]]; then
28        return 0
29    fi
30
31    if which python2.7 2>/dev/null 1>&2; then
32        PYTHON=python2.7
33    elif which python27 2>/dev/null 1>&2; then
34        PYTHON=python27
35    elif which python2.6 2>/dev/null 1>&2; then
36        PYTHON=python2.6
37    elif which python26 2>/dev/null 1>&2; then
38        PYTHON=python26
39    else
40        echo
41        echo "Can't find a python executable of version 2.6 or above in PATH"
42        echo "Install python 2.6+ before continue."
43        echo "Or if you installed it in a non-standard PATH, set the PYTHON enviroment varirable to it"
44        echo
45        exit 1
46    fi
47}
48
49function read_seafile_data_dir () {
50    seafile_ini=${default_ccnet_conf_dir}/seafile.ini
51    if [[ ! -f ${seafile_ini} ]]; then
52        echo "${seafile_ini} not found. Now quit"
53        exit 1
54    fi
55    seafile_data_dir=$(cat "${seafile_ini}")
56    if [[ ! -d ${seafile_data_dir} ]]; then
57        echo "Your seafile server data directory \"${seafile_data_dir}\" is invalid or doesn't exits."
58        echo "Please check it first, or create this directory yourself."
59        echo ""
60        exit 1;
61    fi
62}
63
64check_python_executable
65read_seafile_data_dir
66
67export SEAFILE_CONF_DIR=$seafile_data_dir
68
69# test whether seafile server has been stopped.
70if pgrep seaf-server 2>/dev/null 1>&2 ; then
71    echo
72    echo "seafile server is still running !"
73    echo "stop it using scripts before upgrade."
74    echo
75    exit 1
76elif pgrep -f "manage.py run_gunicorn" 2>/dev/null 1>&2 ; then
77    echo
78    echo "seahub server is still running !"
79    echo "stop it before upgrade."
80    echo
81    exit 1
82fi
83
84echo
85echo "------------------------------"
86echo "migrating avatars ..."
87echo
88media_dir=${INSTALLPATH}/seahub/media
89orig_avatar_dir=${INSTALLPATH}/seahub/media/avatars
90dest_avatar_dir=${TOPDIR}/seahub-data/avatars
91
92# move "media/avatars" directory outside
93if [[ ! -d ${dest_avatar_dir} ]]; then
94    mkdir -p "${TOPDIR}/seahub-data"
95    mv "${orig_avatar_dir}" "${dest_avatar_dir}" 2>/dev/null 1>&2
96    ln -s ../../../seahub-data/avatars ${media_dir}
97
98elif [[ ! -L ${orig_avatar_dir} ]]; then
99    mv ${orig_avatar_dir}/* "${dest_avatar_dir}" 2>/dev/null 1>&2
100    rm -rf "${orig_avatar_dir}"
101    ln -s ../../../seahub-data/avatars ${media_dir}
102fi
103
104echo "DONE"
105echo "------------------------------"
106echo