Skip to content

Commit 7b216b6

Browse files
committed
[server] Add upgrade script for 6.0.0.
1 parent 075202c commit 7b216b6

File tree

3 files changed

+338
-0
lines changed

3 files changed

+338
-0
lines changed
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
ALTER TABLE api2_tokenv2 ADD COLUMN wiped_at DATETIME DEFAULT NULL;
2+
ALTER TABLE api2_tokenv2 ADD COLUMN created_at DATETIME NOT NULL;
3+
4+
CREATE TABLE IF NOT EXISTS `base_filecomment` (
5+
`id` int(11) NOT NULL AUTO_INCREMENT,
6+
`repo_id` varchar(36) NOT NULL,
7+
`parent_path` longtext NOT NULL,
8+
`repo_id_parent_path_md5` varchar(100) NOT NULL,
9+
`item_name` longtext NOT NULL,
10+
`author` varchar(255) NOT NULL,
11+
`comment` longtext NOT NULL,
12+
`created_at` datetime NOT NULL,
13+
`updated_at` datetime NOT NULL,
14+
PRIMARY KEY (`id`),
15+
KEY `base_filecomment_9a8c79bf` (`repo_id`),
16+
KEY `base_filecomment_c5bf47d4` (`repo_id_parent_path_md5`),
17+
KEY `base_filecomment_02bd92fa` (`author`)
18+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
19+
20+
CREATE TABLE IF NOT EXISTS `termsandconditions_termsandconditions` (
21+
`id` int(11) NOT NULL AUTO_INCREMENT,
22+
`slug` varchar(50) NOT NULL,
23+
`name` longtext NOT NULL,
24+
`version_number` decimal(6,2) NOT NULL,
25+
`text` longtext,
26+
`info` longtext,
27+
`date_active` datetime DEFAULT NULL,
28+
`date_created` datetime NOT NULL,
29+
PRIMARY KEY (`id`),
30+
KEY `termsandconditions_termsandconditions_2dbcba41` (`slug`)
31+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
32+
33+
CREATE TABLE IF NOT EXISTS `termsandconditions_usertermsandconditions` (
34+
`id` int(11) NOT NULL AUTO_INCREMENT,
35+
`username` varchar(255) NOT NULL,
36+
`ip_address` char(39) DEFAULT NULL,
37+
`date_accepted` datetime NOT NULL,
38+
`terms_id` int(11) NOT NULL,
39+
PRIMARY KEY (`id`),
40+
UNIQUE KEY `termsandconditions_usertermsandcon_username_f4ab54cafa29322_uniq` (`username`,`terms_id`),
41+
KEY `e4da106203f3f13ff96409b55de6f515` (`terms_id`),
42+
CONSTRAINT `e4da106203f3f13ff96409b55de6f515` FOREIGN KEY (`terms_id`) REFERENCES `termsandconditions_termsandconditions` (`id`)
43+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
44+
45+
CREATE TABLE IF NOT EXISTS `two_factor_totpdevice` (
46+
`id` int(11) NOT NULL AUTO_INCREMENT,
47+
`user` varchar(255) NOT NULL,
48+
`name` varchar(64) NOT NULL,
49+
`confirmed` tinyint(1) NOT NULL,
50+
`key` varchar(80) NOT NULL,
51+
`step` smallint(5) unsigned NOT NULL,
52+
`t0` bigint(20) NOT NULL,
53+
`digits` smallint(5) unsigned NOT NULL,
54+
`tolerance` smallint(5) unsigned NOT NULL,
55+
`drift` smallint(6) NOT NULL,
56+
`last_t` bigint(20) NOT NULL,
57+
PRIMARY KEY (`id`),
58+
UNIQUE KEY `user` (`user`)
59+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
60+
61+
CREATE TABLE IF NOT EXISTS `two_factor_phonedevice` (
62+
`id` int(11) NOT NULL AUTO_INCREMENT,
63+
`user` varchar(255) NOT NULL,
64+
`name` varchar(64) NOT NULL,
65+
`confirmed` tinyint(1) NOT NULL,
66+
`number` varchar(40) NOT NULL,
67+
`key` varchar(40) NOT NULL,
68+
`method` varchar(4) NOT NULL,
69+
PRIMARY KEY (`id`),
70+
UNIQUE KEY `user` (`user`)
71+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
72+
73+
CREATE TABLE IF NOT EXISTS `two_factor_staticdevice` (
74+
`id` int(11) NOT NULL AUTO_INCREMENT,
75+
`user` varchar(255) NOT NULL,
76+
`name` varchar(64) NOT NULL,
77+
`confirmed` tinyint(1) NOT NULL,
78+
PRIMARY KEY (`id`),
79+
UNIQUE KEY `user` (`user`)
80+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
81+
82+
CREATE TABLE IF NOT EXISTS `two_factor_statictoken` (
83+
`id` int(11) NOT NULL AUTO_INCREMENT,
84+
`token` varchar(16) NOT NULL,
85+
`device_id` int(11) NOT NULL,
86+
PRIMARY KEY (`id`),
87+
KEY `two_fac_device_id_55a7b345293a7c6c_fk_two_factor_staticdevice_id` (`device_id`),
88+
KEY `two_factor_statictoken_94a08da1` (`token`),
89+
CONSTRAINT `two_fac_device_id_55a7b345293a7c6c_fk_two_factor_staticdevice_id` FOREIGN KEY (`device_id`) REFERENCES `two_factor_staticdevice` (`id`)
90+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
91+
92+
CREATE TABLE IF NOT EXISTS `invitations_invitation` (
93+
`id` int(11) NOT NULL AUTO_INCREMENT,
94+
`token` varchar(40) NOT NULL,
95+
`inviter` varchar(255) NOT NULL,
96+
`accepter` varchar(255) NOT NULL,
97+
`invite_time` datetime NOT NULL,
98+
`accept_time` datetime DEFAULT NULL,
99+
`invite_type` varchar(20) NOT NULL,
100+
`expire_time` datetime NOT NULL,
101+
PRIMARY KEY (`id`),
102+
KEY `invitations_invitation_d5dd16f8` (`inviter`),
103+
KEY `invitations_invitation_token_1961fbb98c05e5fd_uniq` (`token`)
104+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
CREATE TABLE IF NOT EXISTS "base_filecomment" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "repo_id" varchar(36) NOT NULL, "parent_path" text NOT NULL, "repo_id_parent_path_md5" varchar(100) NOT NULL, "item_name" text NOT NULL, "author" varchar(255) NOT NULL, "comment" text NOT NULL, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL);
2+
CREATE INDEX IF NOT EXISTS "base_filecomment_02bd92fa" ON "base_filecomment" ("author");
3+
CREATE INDEX IF NOT EXISTS "base_filecomment_9a8c79bf" ON "base_filecomment" ("repo_id");
4+
CREATE INDEX IF NOT EXISTS "base_filecomment_c5bf47d4" ON "base_filecomment" ("repo_id_parent_path_md5");
5+
6+
CREATE TABLE IF NOT EXISTS "termsandconditions_termsandconditions" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "slug" varchar(50) NOT NULL, "name" text NOT NULL, "version_number" decimal NOT NULL, "text" text NULL, "info" text NULL, "date_active" datetime NULL, "date_created" datetime NOT NULL);
7+
CREATE INDEX IF NOT EXISTS "termsandconditions_termsandconditions_2dbcba41" ON "termsandconditions_termsandconditions" ("slug");
8+
9+
CREATE TABLE IF NOT EXISTS "termsandconditions_usertermsandconditions" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "username" varchar(255) NOT NULL, "ip_address" char(39) NULL, "date_accepted" datetime NOT NULL, "terms_id" integer NOT NULL REFERENCES "termsandconditions_termsandconditions" ("id"), UNIQUE ("username", "terms_id"));
10+
CREATE INDEX IF NOT EXISTS "termsandconditions_usertermsandconditions_2ab34720" ON "termsandconditions_usertermsandconditions" ("terms_id");
11+
12+
CREATE TABLE IF NOT EXISTS "two_factor_phonedevice" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "user" varchar(255) NOT NULL UNIQUE, "name" varchar(64) NOT NULL, "confirmed" bool NOT NULL, "number" varchar(40) NOT NULL, "key" varchar(40) NOT NULL, "method" varchar(4) NOT NULL);
13+
CREATE TABLE IF NOT EXISTS "two_factor_staticdevice" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "user" varchar(255) NOT NULL UNIQUE, "name" varchar(64) NOT NULL, "confirmed" bool NOT NULL);
14+
CREATE TABLE IF NOT EXISTS "two_factor_statictoken" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "token" varchar(16) NOT NULL, "device_id" integer NOT NULL REFERENCES "two_factor_staticdevice" ("id"));
15+
CREATE TABLE IF NOT EXISTS "two_factor_totpdevice" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "user" varchar(255) NOT NULL UNIQUE, "name" varchar(64) NOT NULL, "confirmed" bool NOT NULL, "key" varchar(80) NOT NULL, "step" smallint unsigned NOT NULL, "t0" bigint NOT NULL, "digits" smallint unsigned NOT NULL, "tolerance" smallint unsigned NOT NULL, "drift" smallint NOT NULL, "last_t" bigint NOT NULL);
16+
CREATE INDEX IF NOT EXISTS "two_factor_statictoken_94a08da1" ON "two_factor_statictoken" ("token");
17+
CREATE INDEX IF NOT EXISTS "two_factor_statictoken_9379346c" ON "two_factor_statictoken" ("device_id");
18+
19+
CREATE TABLE IF NOT EXISTS "invitations_invitation" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "token" varchar(40) NOT NULL, "inviter" varchar(255) NOT NULL, "accepter" varchar(255) NOT NULL, "invite_time" datetime NOT NULL, "accept_time" datetime NULL, "invite_type" varchar(20) NOT NULL, "expire_time" datetime NOT NULL);
20+
CREATE INDEX IF NOT EXISTS "invitations_invitation_94a08da1" ON "invitations_invitation" ("token");
21+
CREATE INDEX IF NOT EXISTS "invitations_invitation_d5dd16f8" ON "invitations_invitation" ("inviter");
22+
23+
ALTER TABLE api2_tokenv2 ADD COLUMN wiped_at datetime DEFAULT NULL;
24+
ALTER TABLE api2_tokenv2 ADD COLUMN created_at datetime NOT NULL DEFAULT '0000-00-00 00:00:00';

scripts/upgrade/upgrade_5.1_6.0.sh

Lines changed: 210 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,210 @@
1+
#!/bin/bash
2+
3+
SCRIPT=$(readlink -f "$0") # haiwen/seafile-server-1.3.0/upgrade/upgrade_xx_xx.sh
4+
UPGRADE_DIR=$(dirname "$SCRIPT") # haiwen/seafile-server-1.3.0/upgrade/
5+
INSTALLPATH=$(dirname "$UPGRADE_DIR") # haiwen/seafile-server-1.3.0/
6+
TOPDIR=$(dirname "${INSTALLPATH}") # haiwen/
7+
default_ccnet_conf_dir=${TOPDIR}/ccnet
8+
default_conf_dir=${TOPDIR}/conf
9+
seafile_server_symlink=${TOPDIR}/seafile-server-latest
10+
seahub_data_dir=${TOPDIR}/seahub-data
11+
seahub_settings_py=${TOPDIR}/seahub_settings.py
12+
13+
manage_py=${INSTALLPATH}/seahub/manage.py
14+
15+
export CCNET_CONF_DIR=${default_ccnet_conf_dir}
16+
export SEAFILE_CENTRAL_CONF_DIR=${default_conf_dir}
17+
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
18+
export PYTHONPATH=${INSTALLPATH}/seafile/lib/python2.7/site-packages:${INSTALLPATH}/seafile/lib64/python2.7/site-packages:$PYTHONPATH
19+
export SEAFILE_LD_LIBRARY_PATH=${INSTALLPATH}/seafile/lib/:${INSTALLPATH}/seafile/lib64:${LD_LIBRARY_PATH}
20+
21+
prev_version=5.1
22+
current_version=6.0
23+
24+
echo
25+
echo "-------------------------------------------------------------"
26+
echo "This script would upgrade your seafile server from ${prev_version} to ${current_version}"
27+
echo "Press [ENTER] to contiune"
28+
echo "-------------------------------------------------------------"
29+
echo
30+
read dummy
31+
32+
function check_python_executable() {
33+
if [[ "$PYTHON" != "" && -x $PYTHON ]]; then
34+
return 0
35+
fi
36+
37+
if which python2.7 2>/dev/null 1>&2; then
38+
PYTHON=python2.7
39+
elif which python27 2>/dev/null 1>&2; then
40+
PYTHON=python27
41+
else
42+
echo
43+
echo "Can't find a python executable of version 2.7 or above in PATH"
44+
echo "Install python 2.7+ before continue."
45+
echo "Or if you installed it in a non-standard PATH, set the PYTHON enviroment varirable to it"
46+
echo
47+
exit 1
48+
fi
49+
}
50+
51+
function read_seafile_data_dir () {
52+
seafile_ini=${default_ccnet_conf_dir}/seafile.ini
53+
if [[ ! -f ${seafile_ini} ]]; then
54+
echo "${seafile_ini} not found. Now quit"
55+
exit 1
56+
fi
57+
seafile_data_dir=$(cat "${seafile_ini}")
58+
if [[ ! -d ${seafile_data_dir} ]]; then
59+
echo "Your seafile server data directory \"${seafile_data_dir}\" is invalid or doesn't exits."
60+
echo "Please check it first, or create this directory yourself."
61+
echo ""
62+
exit 1;
63+
fi
64+
65+
export SEAFILE_CONF_DIR=$seafile_data_dir
66+
}
67+
68+
function ensure_server_not_running() {
69+
# test whether seafile server has been stopped.
70+
if 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
76+
elif pgrep -f "${manage_py} run_gunicorn" 2>/dev/null 1>&2 \
77+
|| pgrep -f "seahub.wsgi:application" 2>/dev/null 1>&2; then
78+
echo
79+
echo "seahub server is still running !"
80+
echo "stop it before upgrade."
81+
echo
82+
exit 1
83+
elif pgrep -f "${manage_py} runfcgi" 2>/dev/null 1>&2 ; then
84+
echo
85+
echo "seahub server is still running !"
86+
echo "stop it before upgrade."
87+
echo
88+
exit 1
89+
fi
90+
}
91+
92+
function migrate_avatars() {
93+
echo
94+
echo "migrating avatars ..."
95+
echo
96+
media_dir=${INSTALLPATH}/seahub/media
97+
orig_avatar_dir=${INSTALLPATH}/seahub/media/avatars
98+
dest_avatar_dir=${TOPDIR}/seahub-data/avatars
99+
100+
# move "media/avatars" directory outside
101+
if [[ ! -d ${dest_avatar_dir} ]]; then
102+
mkdir -p "${TOPDIR}/seahub-data"
103+
mv "${orig_avatar_dir}" "${dest_avatar_dir}" 2>/dev/null 1>&2
104+
ln -s ../../../seahub-data/avatars "${media_dir}"
105+
106+
elif [[ ! -L ${orig_avatar_dir} ]]; then
107+
mv "${orig_avatar_dir}"/* "${dest_avatar_dir}" 2>/dev/null 1>&2
108+
rm -rf "${orig_avatar_dir}"
109+
ln -s ../../../seahub-data/avatars "${media_dir}"
110+
fi
111+
echo "Done"
112+
}
113+
114+
function update_database() {
115+
echo
116+
echo "Updating seafile/seahub database ..."
117+
echo
118+
119+
db_update_helper=${UPGRADE_DIR}/db_update_helper.py
120+
if ! $PYTHON "${db_update_helper}" 6.0.0; then
121+
echo
122+
echo "Failed to upgrade your database"
123+
echo
124+
exit 1
125+
fi
126+
echo "Done"
127+
}
128+
129+
function upgrade_seafile_server_latest_symlink() {
130+
# update the symlink seafile-server to the new server version
131+
if [[ -L "${seafile_server_symlink}" || ! -e "${seafile_server_symlink}" ]]; then
132+
echo
133+
printf "updating \033[33m${seafile_server_symlink}\033[m symbolic link to \033[33m${INSTALLPATH}\033[m ...\n\n"
134+
echo
135+
if ! rm -f "${seafile_server_symlink}"; then
136+
echo "Failed to remove ${seafile_server_symlink}"
137+
echo
138+
exit 1;
139+
fi
140+
141+
if ! ln -s "$(basename ${INSTALLPATH})" "${seafile_server_symlink}"; then
142+
echo "Failed to update ${seafile_server_symlink} symbolic link."
143+
echo
144+
exit 1;
145+
fi
146+
fi
147+
}
148+
149+
function make_media_custom_symlink() {
150+
media_symlink=${INSTALLPATH}/seahub/media/custom
151+
if [[ -L "${media_symlink}" ]]; then
152+
return
153+
154+
elif [[ ! -e "${media_symlink}" ]]; then
155+
ln -s ../../../seahub-data/custom "${media_symlink}"
156+
return
157+
158+
159+
elif [[ -d "${media_symlink}" ]]; then
160+
cp -rf "${media_symlink}" "${seahub_data_dir}/"
161+
rm -rf "${media_symlink}"
162+
ln -s ../../../seahub-data/custom "${media_symlink}"
163+
fi
164+
165+
}
166+
167+
function move_old_customdir_outside() {
168+
# find the path of the latest seafile server folder
169+
if [[ -L ${seafile_server_symlink} ]]; then
170+
latest_server=$(readlink -f "${seafile_server_symlink}")
171+
else
172+
return
173+
fi
174+
175+
old_customdir=${latest_server}/seahub/media/custom
176+
177+
# old customdir is already a symlink, do nothing
178+
if [[ -L "${old_customdir}" ]]; then
179+
return
180+
fi
181+
182+
# old customdir does not exist, do nothing
183+
if [[ ! -e "${old_customdir}" ]]; then
184+
return
185+
fi
186+
187+
# media/custom exist and is not a symlink
188+
cp -rf "${old_customdir}" "${seahub_data_dir}/"
189+
}
190+
191+
#################
192+
# The main execution flow of the script
193+
################
194+
195+
check_python_executable;
196+
read_seafile_data_dir;
197+
ensure_server_not_running;
198+
199+
update_database;
200+
migrate_avatars;
201+
202+
move_old_customdir_outside;
203+
make_media_custom_symlink;
204+
upgrade_seafile_server_latest_symlink;
205+
206+
echo
207+
echo "-----------------------------------------------------------------"
208+
echo "Upgraded your seafile server successfully."
209+
echo "-----------------------------------------------------------------"
210+
echo

0 commit comments

Comments
 (0)