@@ -18,6 +18,13 @@ alias section_start='trace_off ; section_start_internal '
18
18
alias section_end=' trace_off ; section_end_internal '
19
19
20
20
export version=" $1 "
21
+ db=${2:- install}
22
+ phpversion=" ${3:- 8.1} "
23
+ # If this script is called from unit-tests.sh, we use the test environment
24
+ export APP_ENV=" ${4:- prod} "
25
+
26
+ # In the test environment, we need to use a different database
27
+ [ " $APP_ENV " = " prod" ] && DATABASE_NAME=domjudge || DATABASE_NAME=domjudge_test
21
28
22
29
MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:- root}
23
30
@@ -38,8 +45,11 @@ sudo apt install -y acl zip unzip nginx php php-fpm php-gd \
38
45
python3-yaml latexmk curl
39
46
section_end
40
47
41
- PHPVERSION=$( php -r ' echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION."\n";' )
42
- export PHPVERSION
48
+ if [ -z " $phpversion " ]; then
49
+ phpversion=$( php -r ' echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION."\n";' )
50
+ fi
51
+
52
+ show_phpinfo " $phpversion "
43
53
44
54
section_start " Install composer"
45
55
php -r " copy('https://getcomposer.org/installer', 'composer-setup.php');"
@@ -60,18 +70,41 @@ section_end
60
70
61
71
section_start " Install domserver"
62
72
make configure
63
- ./configure --with-baseurl=' https://localhost/domjudge/' --enable-doc-build=no --prefix=" /opt/domjudge"
64
-
65
- make domserver
66
- sudo make install-domserver
73
+ if [ " $version " = " all" ]; then
74
+ # Note that we use http instead of https here as python requests doesn't
75
+ # like our self-signed cert. We should fix this separately.
76
+ ./configure \
77
+ --with-baseurl=' http://localhost/domjudge/' \
78
+ --with-domjudge-user=domjudge \
79
+ --with-judgehost-chrootdir=/chroot/domjudge | tee " $ARTIFACTS " /configure.txt
80
+ make build-scripts domserver judgehost docs
81
+ make install-domserver install-judgehost install-docs
82
+ else
83
+ ./configure \
84
+ --with-baseurl=' https://localhost/domjudge/' \
85
+ --with-domjudge-user=root \
86
+ --enable-doc-build=no \
87
+ --enable-judgehost-build=no | tee " $ARTIFACTS " /configure.txt
88
+ make domserver
89
+ make install-domserver
90
+ rm -rf /opt/domjudge/domserver/webapp/public/doc
91
+ cp -r doc /opt/domjudge/domserver/webapp/public/
92
+ find /opt/domjudge/domserver -name DOMjudgelogo.pdf
93
+ fi
67
94
section_end
68
95
69
- section_start " Explicit start mysql + install DB"
70
- sudo /etc/init.d/mysql start
96
+ section_start " SQL settings"
97
+ cat > ~ /.my.cnf << EOF
98
+ [client]
99
+ host=sqlserver
100
+ user=root
101
+ password=${MYSQL_ROOT_PASSWORD}
102
+ EOF
103
+ cat ~ /.my.cnf
71
104
72
- mysql_root " CREATE DATABASE IF NOT EXISTS \` domjudge \` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
105
+ mysql_root " CREATE DATABASE IF NOT EXISTS \` $DATABASE_NAME \` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
73
106
mysql_root " CREATE USER IF NOT EXISTS \` domjudge\` @'%' IDENTIFIED BY 'domjudge';"
74
- mysql_root " GRANT SELECT, INSERT, UPDATE, DELETE ON \` domjudge \` .* TO 'domjudge'@'%';"
107
+ mysql_root " GRANT SELECT, INSERT, UPDATE, DELETE ON \` $DATABASE_NAME \` .* TO 'domjudge'@'%';"
75
108
mysql_root " FLUSH PRIVILEGES;"
76
109
77
110
# Show some MySQL debugging
@@ -80,7 +113,9 @@ mysql_root "SELECT CURRENT_USER();"
80
113
mysql_root " SELECT USER();"
81
114
mysql_root " SELECT user,host FROM mysql.user"
82
115
mysql_root " SET GLOBAL max_allowed_packet=1073741824"
83
- echo " unused:sqlserver:domjudge:domjudge:domjudge:3306" > /opt/domjudge/domserver/etc/dbpasswords.secret
116
+ mysql_root " SHOW GLOBAL STATUS LIKE 'Connection_errors_%'"
117
+ mysql_root " SHOW VARIABLES LIKE '%_timeout'"
118
+ echo " unused:sqlserver:$DATABASE_NAME :domjudge:domjudge:3306" > /opt/domjudge/domserver/etc/dbpasswords.secret
84
119
mysql_user " SELECT CURRENT_USER();"
85
120
mysql_user " SELECT USER();"
86
121
section_end
@@ -107,7 +142,7 @@ cp /proc/cmdline "$ARTIFACTS"/cmdline.txt
107
142
section_end
108
143
109
144
section_start " Setup webserver"
110
- sudo cp /opt/domjudge/domserver/etc/domjudge-fpm.conf /etc/php/$PHPVERSION /fpm/pool.d/domjudge.conf
145
+ cp /opt/domjudge/domserver/etc/domjudge-fpm.conf /etc/php/" $phpversion " /fpm/pool.d/domjudge.conf
111
146
112
147
sudo rm -f /etc/nginx/sites-enabled/*
113
148
sudo cp /opt/domjudge/domserver/etc/nginx-conf /etc/nginx/sites-enabled/domjudge
@@ -121,34 +156,41 @@ sudo nginx -t
121
156
section_end
122
157
123
158
section_start " Show webserver is up"
124
- for service in nginx php${PHPVERSION } -fpm; do
125
- sudo systemctl restart $service
126
- sudo systemctl status $service
159
+ for service in nginx php${phpversion } -fpm; do
160
+ service " $service " restart
161
+ service " $service " status
127
162
done
128
163
section_end
129
164
130
165
if [ " ${db} " = " install" ]; then
131
166
section_start " Install the example data"
167
+ if [ " $version " = " unit" ]; then
168
+ # Make sure admin has no team associated so we will not insert submissions during unit tests.
169
+ mysql_root " UPDATE user SET teamid=null WHERE userid=1;" $DATABASE_NAME
170
+ fi
132
171
/opt/domjudge/domserver/bin/dj_setup_database -uroot -p${MYSQL_ROOT_PASSWORD} install-examples | tee -a " $ARTIFACTS /mysql.txt"
133
172
section_end
134
173
fi
135
174
136
175
section_start " Setup user"
137
176
# We're using the admin user in all possible roles
138
- echo " DELETE FROM userrole WHERE userid=1;" | mysql -uroot -proot domjudge
177
+ mysql_root " DELETE FROM userrole WHERE userid=1;" $DATABASE_NAME
139
178
if [ " $version " = " team" ]; then
140
179
# Add team to admin user
141
- echo " INSERT INTO userrole (userid, roleid) VALUES (1, 3);" | mysql -uroot -proot domjudge
142
- echo " UPDATE user SET teamid = 1 WHERE userid = 1;" | mysql -uroot -proot domjudge
180
+ mysql_root " INSERT INTO userrole (userid, roleid) VALUES (1, 3);" $DATABASE_NAME
181
+ mysql_root " UPDATE user SET teamid = 1 WHERE userid = 1;" $DATABASE_NAME
143
182
elif [ " $version " = " jury" ]; then
144
183
# Add jury to admin user
145
- echo " INSERT INTO userrole (userid, roleid) VALUES (1, 2);" | mysql -uroot -proot domjudge
184
+ mysql_root " INSERT INTO userrole (userid, roleid) VALUES (1, 2);" $DATABASE_NAME
146
185
elif [ " $version " = " balloon" ]; then
147
186
# Add balloon to admin user
148
- echo " INSERT INTO userrole (userid, roleid) VALUES (1, 4);" | mysql -uroot -proot domjudge
187
+ mysql_root " INSERT INTO userrole (userid, roleid) VALUES (1, 4);" $DATABASE_NAME
149
188
elif [ " $version " = " admin" ]; then
150
189
# Add admin to admin user
151
- echo " INSERT INTO userrole (userid, roleid) VALUES (1, 1);" | mysql -uroot -proot domjudge
190
+ mysql_root " INSERT INTO userrole (userid, roleid) VALUES (1, 1);" $DATABASE_NAME
191
+ elif [ " $version " = " all" ] || [ " $version " = " unit" ]; then
192
+ mysql_root " INSERT INTO userrole (userid, roleid) VALUES (1, 1);" $DATABASE_NAME
193
+ mysql_root " INSERT INTO userrole (userid, roleid) VALUES (1, 3);" $DATABASE_NAME
194
+ mysql_root " UPDATE user SET teamid = 1 WHERE userid = 1;" $DATABASE_NAME
152
195
fi
153
196
section_end
154
-
0 commit comments