diff --git a/scripts/upgrade/sql/6.1.0/mysql/update.sql b/scripts/upgrade/sql/6.1.0/mysql/update.sql new file mode 100644 index 00000000..2483fb33 --- /dev/null +++ b/scripts/upgrade/sql/6.1.0/mysql/update.sql @@ -0,0 +1,23 @@ +ALTER TABLE share_fileshare MODIFY token varchar(100); + +ALTER TABLE share_uploadlinkshare MODIFY token varchar(100); + +CREATE TABLE IF NOT EXISTS `institutions_institutionquota` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `quota` bigint(20) NOT NULL, + `institution_id` int(11) NOT NULL, + PRIMARY KEY (`id`), + KEY `i_institution_id_2ca7c89373390e2c_fk_institutions_institution_id` (`institution_id`), + CONSTRAINT `i_institution_id_2ca7c89373390e2c_fk_institutions_institution_id` FOREIGN KEY (`institution_id`) REFERENCES `institutions_institution` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `admin_log_adminlog` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `email` varchar(254) NOT NULL, + `operation` varchar(255) NOT NULL, + `detail` longtext NOT NULL, + `datetime` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `admin_log_adminlog_0c83f57c` (`email`), + KEY `admin_log_adminlog_f7235a61` (`operation`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; \ No newline at end of file diff --git a/scripts/upgrade/sql/6.1.0/sqlite3/update.sql b/scripts/upgrade/sql/6.1.0/sqlite3/update.sql new file mode 100644 index 00000000..8fc476d9 --- /dev/null +++ b/scripts/upgrade/sql/6.1.0/sqlite3/update.sql @@ -0,0 +1,7 @@ +CREATE TABLE "admin_log_adminlog" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "email" varchar(254) NOT NULL, "operation" varchar(255) NOT NULL, "detail" text NOT NULL, "datetime" datetime NOT NULL); + +CREATE TABLE "institutions_institutionquota" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "quota" bigint NOT NULL, "institution_id" integer NOT NULL REFERENCES "institutions_institution" ("id")); + +CREATE INDEX "admin_log_adminlog_0c83f57c" ON "admin_log_adminlog" ("email"); +CREATE INDEX "admin_log_adminlog_f7235a61" ON "admin_log_adminlog" ("operation"); +CREATE INDEX "institutions_institutionquota_a964baeb" ON "institutions_institutionquota" ("institution_id"); \ No newline at end of file diff --git a/scripts/upgrade/upgrade_6.0_6.1.sh b/scripts/upgrade/upgrade_6.0_6.1.sh new file mode 100755 index 00000000..45450923 --- /dev/null +++ b/scripts/upgrade/upgrade_6.0_6.1.sh @@ -0,0 +1,210 @@ +#!/bin/bash + +SCRIPT=$(readlink -f "$0") # haiwen/seafile-server-1.3.0/upgrade/upgrade_xx_xx.sh +UPGRADE_DIR=$(dirname "$SCRIPT") # haiwen/seafile-server-1.3.0/upgrade/ +INSTALLPATH=$(dirname "$UPGRADE_DIR") # haiwen/seafile-server-1.3.0/ +TOPDIR=$(dirname "${INSTALLPATH}") # haiwen/ +default_ccnet_conf_dir=${TOPDIR}/ccnet +default_conf_dir=${TOPDIR}/conf +seafile_server_symlink=${TOPDIR}/seafile-server-latest +seahub_data_dir=${TOPDIR}/seahub-data +seahub_settings_py=${TOPDIR}/seahub_settings.py + +manage_py=${INSTALLPATH}/seahub/manage.py + +export CCNET_CONF_DIR=${default_ccnet_conf_dir} +export SEAFILE_CENTRAL_CONF_DIR=${default_conf_dir} +export 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 +export PYTHONPATH=${INSTALLPATH}/seafile/lib/python2.7/site-packages:${INSTALLPATH}/seafile/lib64/python2.7/site-packages:$PYTHONPATH +export SEAFILE_LD_LIBRARY_PATH=${INSTALLPATH}/seafile/lib/:${INSTALLPATH}/seafile/lib64:${LD_LIBRARY_PATH} + +prev_version=6.0 +current_version=6.1 + +echo +echo "-------------------------------------------------------------" +echo "This script would upgrade your seafile server from ${prev_version} to ${current_version}" +echo "Press [ENTER] to contiune" +echo "-------------------------------------------------------------" +echo +read dummy + +function check_python_executable() { + if [[ "$PYTHON" != "" && -x $PYTHON ]]; then + return 0 + fi + + if which python2.7 2>/dev/null 1>&2; then + PYTHON=python2.7 + elif which python27 2>/dev/null 1>&2; then + PYTHON=python27 + else + echo + echo "Can't find a python executable of version 2.7 or above in PATH" + echo "Install python 2.7+ before continue." + echo "Or if you installed it in a non-standard PATH, set the PYTHON enviroment varirable to it" + echo + exit 1 + fi +} + +function read_seafile_data_dir () { + seafile_ini=${default_ccnet_conf_dir}/seafile.ini + if [[ ! -f ${seafile_ini} ]]; then + echo "${seafile_ini} not found. Now quit" + exit 1 + fi + seafile_data_dir=$(cat "${seafile_ini}") + if [[ ! -d ${seafile_data_dir} ]]; then + echo "Your seafile server data directory \"${seafile_data_dir}\" is invalid or doesn't exits." + echo "Please check it first, or create this directory yourself." + echo "" + exit 1; + fi + + export SEAFILE_CONF_DIR=$seafile_data_dir +} + +function ensure_server_not_running() { + # test whether seafile server has been stopped. + if pgrep seaf-server 2>/dev/null 1>&2 ; then + echo + echo "seafile server is still running !" + echo "stop it using scripts before upgrade." + echo + exit 1 + elif pgrep -f "${manage_py} run_gunicorn" 2>/dev/null 1>&2 \ + || pgrep -f "seahub.wsgi:application" 2>/dev/null 1>&2; then + echo + echo "seahub server is still running !" + echo "stop it before upgrade." + echo + exit 1 + elif pgrep -f "${manage_py} runfcgi" 2>/dev/null 1>&2 ; then + echo + echo "seahub server is still running !" + echo "stop it before upgrade." + echo + exit 1 + fi +} + +function migrate_avatars() { + echo + echo "migrating avatars ..." + echo + media_dir=${INSTALLPATH}/seahub/media + orig_avatar_dir=${INSTALLPATH}/seahub/media/avatars + dest_avatar_dir=${TOPDIR}/seahub-data/avatars + + # move "media/avatars" directory outside + if [[ ! -d ${dest_avatar_dir} ]]; then + mkdir -p "${TOPDIR}/seahub-data" + mv "${orig_avatar_dir}" "${dest_avatar_dir}" 2>/dev/null 1>&2 + ln -s ../../../seahub-data/avatars "${media_dir}" + + elif [[ ! -L ${orig_avatar_dir} ]]; then + mv "${orig_avatar_dir}"/* "${dest_avatar_dir}" 2>/dev/null 1>&2 + rm -rf "${orig_avatar_dir}" + ln -s ../../../seahub-data/avatars "${media_dir}" + fi + echo "Done" +} + +function update_database() { + echo + echo "Updating seafile/seahub database ..." + echo + + db_update_helper=${UPGRADE_DIR}/db_update_helper.py + if ! $PYTHON "${db_update_helper}" 6.1.0; then + echo + echo "Failed to upgrade your database" + echo + exit 1 + fi + echo "Done" +} + +function upgrade_seafile_server_latest_symlink() { + # update the symlink seafile-server to the new server version + if [[ -L "${seafile_server_symlink}" || ! -e "${seafile_server_symlink}" ]]; then + echo + printf "updating \033[33m${seafile_server_symlink}\033[m symbolic link to \033[33m${INSTALLPATH}\033[m ...\n\n" + echo + if ! rm -f "${seafile_server_symlink}"; then + echo "Failed to remove ${seafile_server_symlink}" + echo + exit 1; + fi + + if ! ln -s "$(basename ${INSTALLPATH})" "${seafile_server_symlink}"; then + echo "Failed to update ${seafile_server_symlink} symbolic link." + echo + exit 1; + fi + fi +} + +function make_media_custom_symlink() { + media_symlink=${INSTALLPATH}/seahub/media/custom + if [[ -L "${media_symlink}" ]]; then + return + + elif [[ ! -e "${media_symlink}" ]]; then + ln -s ../../../seahub-data/custom "${media_symlink}" + return + + + elif [[ -d "${media_symlink}" ]]; then + cp -rf "${media_symlink}" "${seahub_data_dir}/" + rm -rf "${media_symlink}" + ln -s ../../../seahub-data/custom "${media_symlink}" + fi + +} + +function move_old_customdir_outside() { + # find the path of the latest seafile server folder + if [[ -L ${seafile_server_symlink} ]]; then + latest_server=$(readlink -f "${seafile_server_symlink}") + else + return + fi + + old_customdir=${latest_server}/seahub/media/custom + + # old customdir is already a symlink, do nothing + if [[ -L "${old_customdir}" ]]; then + return + fi + + # old customdir does not exist, do nothing + if [[ ! -e "${old_customdir}" ]]; then + return + fi + + # media/custom exist and is not a symlink + cp -rf "${old_customdir}" "${seahub_data_dir}/" +} + +################# +# The main execution flow of the script +################ + +check_python_executable; +read_seafile_data_dir; +ensure_server_not_running; + +update_database; +migrate_avatars; + +move_old_customdir_outside; +make_media_custom_symlink; +upgrade_seafile_server_latest_symlink; + +echo +echo "-----------------------------------------------------------------" +echo "Upgraded your seafile server successfully." +echo "-----------------------------------------------------------------" +echo