@@ -18,6 +18,13 @@ alias section_start='trace_off ; section_start_internal '
1818alias section_end=' trace_off ; section_end_internal '
1919
2020export 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
2128
2229MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:- root}
2330
@@ -38,8 +45,11 @@ sudo apt install -y acl zip unzip nginx php php-fpm php-gd \
3845 python3-yaml latexmk curl
3946section_end
4047
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 "
4353
4454section_start " Install composer"
4555php -r " copy('https://getcomposer.org/installer', 'composer-setup.php');"
@@ -60,18 +70,41 @@ section_end
6070
6171section_start " Install domserver"
6272make 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
6794section_end
6895
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
71104
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;"
73106mysql_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'@'%';"
75108mysql_root " FLUSH PRIVILEGES;"
76109
77110# Show some MySQL debugging
@@ -80,7 +113,9 @@ mysql_root "SELECT CURRENT_USER();"
80113mysql_root " SELECT USER();"
81114mysql_root " SELECT user,host FROM mysql.user"
82115mysql_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
84119mysql_user " SELECT CURRENT_USER();"
85120mysql_user " SELECT USER();"
86121section_end
@@ -107,7 +142,7 @@ cp /proc/cmdline "$ARTIFACTS"/cmdline.txt
107142section_end
108143
109144section_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
111146
112147sudo rm -f /etc/nginx/sites-enabled/*
113148sudo cp /opt/domjudge/domserver/etc/nginx-conf /etc/nginx/sites-enabled/domjudge
@@ -121,34 +156,41 @@ sudo nginx -t
121156section_end
122157
123158section_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
127162done
128163section_end
129164
130165if [ " ${db} " = " install" ]; then
131166 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
132171 /opt/domjudge/domserver/bin/dj_setup_database -uroot -p${MYSQL_ROOT_PASSWORD} install-examples | tee -a " $ARTIFACTS /mysql.txt"
133172 section_end
134173fi
135174
136175section_start " Setup user"
137176# 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
139178if [ " $version " = " team" ]; then
140179 # 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
143182elif [ " $version " = " jury" ]; then
144183 # 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
146185elif [ " $version " = " balloon" ]; then
147186 # 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
149188elif [ " $version " = " admin" ]; then
150189 # 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
152195fi
153196section_end
154-
0 commit comments