Difference between revisions of "Инсталляция ejudge 3.9.2+ на Fedora 34+ с нуля"
|  (Created page with "Навигация: Главная страница/Система ejudge/Инсталляция/Инсталляция ejudge 3.9.2+ на Fedora 34+...") |  (updated) | ||
| Line 2: | Line 2: | ||
| Данный документ описывает инсталляцию ejudge [[Изменения в версии 3.9.2|3.9.2]] и более поздних на чистую систему Fedora 34 и более позних (35, 36). | Данный документ описывает инсталляцию ejudge [[Изменения в версии 3.9.2|3.9.2]] и более поздних на чистую систему Fedora 34 и более позних (35, 36). | ||
| + | Он отличается от [[Инсталляция ejudge на Fedora с нуля|предыдущей версии]] | ||
| + | тем, что убраны шаги установки и настройки mongo. В качестве базы | ||
| + | данных используется только mariadb (mysql). | ||
| Перед началом действий по инсталляции ejudge необходимо | Перед началом действий по инсталляции ejudge необходимо | ||
| Line 47: | Line 50: | ||
|   # init 6 |   # init 6 | ||
| − | 6 | + | 6. Включите русскую локаль в glibc | 
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
|   # dnf install glibc-locale-source |   # dnf install glibc-locale-source | ||
|   # localedef -v -c -i ru_RU -f UTF-8 ru_RU.UTF-8 |   # localedef -v -c -i ru_RU -f UTF-8 ru_RU.UTF-8 | ||
| − | + | 7. Установите mariadb | |
|   # dnf install mariadb mariadb-connect-engine mariadb-connector-c-devel mariadb-connector-odbc mariadb-devel mariadb-server mariadb-server-utils mariadb-backup mariadb-common mariadb-errmsg |   # dnf install mariadb mariadb-connect-engine mariadb-connector-c-devel mariadb-connector-odbc mariadb-devel mariadb-server mariadb-server-utils mariadb-backup mariadb-common mariadb-errmsg | ||
| Line 70: | Line 61: | ||
|   # systemctl start mariadb.service |   # systemctl start mariadb.service | ||
| − | + | 8. Настройте инсталляцию mariadb. Нужно будет задать новый пароль | |
| для пользователя root в mariadb. Обозначим этот пароль как | для пользователя root в mariadb. Обозначим этот пароль как | ||
| <code>MYSQL_ROOT_PASSWORD</code> | <code>MYSQL_ROOT_PASSWORD</code> | ||
|   # mysql_secure_installation |   # mysql_secure_installation | ||
| − | + | 9. Установите много разных пакетов с библиотеками и языками программирования | |
|   # dnf install -y libmongo-client-devel libmongocrypt-devel mongo-c-driver-devel mongo-c-driver-libs mongo-cxx-driver-devel libmongocrypt mongo-cxx-driver-bsoncxx-devel libbson-devel |   # dnf install -y libmongo-client-devel libmongocrypt-devel mongo-c-driver-devel mongo-c-driver-libs mongo-cxx-driver-devel libmongocrypt mongo-cxx-driver-bsoncxx-devel libbson-devel | ||
|   # dnf install -y httpd httpd-devel httpd-tools |   # dnf install -y httpd httpd-devel httpd-tools | ||
| Line 89: | Line 80: | ||
|   # dnf install libnfs libnfs-utils libnfsidmap nfs-stats-utils nfs-utils nfswatch  nfs4-acl-tools |   # dnf install libnfs libnfs-utils libnfsidmap nfs-stats-utils nfs-utils nfswatch  nfs4-acl-tools | ||
| − | + | 10. Установите и сконфигурируйте golang | |
|   # dnf install golang |   # dnf install golang | ||
|   # alternatives --config go |   # alternatives --config go | ||
| Line 95: | Line 86: | ||
| Выберите <code>/usr/lib/golang/bin/go</code> | Выберите <code>/usr/lib/golang/bin/go</code> | ||
| − | + | 11. Установите и сконфигурируйте java | |
|   # dnf install java-latest-openjdk java-latest-openjdk-devel java-latest-openjdk-headless java-latest-openjdk-jmods |   # dnf install java-latest-openjdk java-latest-openjdk-devel java-latest-openjdk-headless java-latest-openjdk-jmods | ||
|   # alternatives --config java |   # alternatives --config java | ||
| − | Выберите java-17 | + | Выберите java-17 или более старшую версию (java-18 и т. д.) | 
|   # alternatives --config javac |   # alternatives --config javac | ||
| − | Выберите java-17 | + | Выберите java-17 или более старшую версию (java-18 и т. д.) | 
|   # alternatives --config java_sdk_openjdk |   # alternatives --config java_sdk_openjdk | ||
| − | Выберите java-17 | + | Выберите java-17 или более старшую версию (java-18 и т. д.) | 
|   # alternatives --config jre_openjdk |   # alternatives --config jre_openjdk | ||
| − | Выберите java-17 | + | Выберите java-17 или более старшую версию (java-18 и т. д.) | 
| − | + | 12. Настройте обработку core dumps | |
|   # cat <<EOF > /etc/sysctl.d/51-coredump.conf |   # cat <<EOF > /etc/sysctl.d/51-coredump.conf | ||
|   kernel.core_pattern=core |   kernel.core_pattern=core | ||
| Line 115: | Line 106: | ||
| В секции <code>[Coredump]</code> должно быть <code>Storage=none</code> | В секции <code>[Coredump]</code> должно быть <code>Storage=none</code> | ||
| − | + | 13. Создание пользователей для ejudge | |
|   # adduser -c 'ejudge user' -s /bin/bash ejudge |   # adduser -c 'ejudge user' -s /bin/bash ejudge | ||
|   # adduser -c 'ejudge executor' -d / -M -s /sbin/nologin ejexec |   # adduser -c 'ejudge executor' -d / -M -s /sbin/nologin ejexec | ||
| Line 126: | Line 117: | ||
| без пароля с помощью ключей ssh. | без пароля с помощью ключей ssh. | ||
| − | + | 14. Создание каталогов | |
|   # mkdir /opt/ejudge |   # mkdir /opt/ejudge | ||
|   # chown user:user /opt/ejudge |   # chown user:user /opt/ejudge | ||
| Line 143: | Line 134: | ||
|   # cd /home/judges; ln -s /var/log/ejudge var |   # cd /home/judges; ln -s /var/log/ejudge var | ||
| − | + | 15. Компиляция ejudge | |
|   [user]$ cd |   [user]$ cd | ||
|   [user]$ git clone https://github.com/blackav/ejudge.git |   [user]$ git clone https://github.com/blackav/ejudge.git | ||
| Line 151: | Line 142: | ||
|   [user]$ make install |   [user]$ make install | ||
| − | + | 16. Настройка прав | |
|   # /opt/ejudge/bin/ejudge-suid-setup |   # /opt/ejudge/bin/ejudge-suid-setup | ||
|   # /opt/ejudge/bin/ejudge-upgrade-web |   # /opt/ejudge/bin/ejudge-upgrade-web | ||
| − | + | 17. Настройка httpd | |
|   # vim /etc/httpd/conf/httpd.conf |   # vim /etc/httpd/conf/httpd.conf | ||
| Line 181: | Line 172: | ||
|   </Directory> |   </Directory> | ||
| − | + | 18. Запустите httpd | |
|   # systemctl enable httpd |   # systemctl enable httpd | ||
|   # systemctl start httpd |   # systemctl start httpd | ||
| − | + | 19. Создайте базу данных ejudge | |
|   # mysql -p |   # mysql -p | ||
| Line 201: | Line 192: | ||
| Он потребуется на следующем шаге. | Он потребуется на следующем шаге. | ||
| − | + | 20. Запустите конфигуратор ejudge | |
|   [ejudge]$ cd |   [ejudge]$ cd | ||
|   [ejudge]$ /opt/ejudge/bin/ejudge-setup |   [ejudge]$ /opt/ejudge/bin/ejudge-setup | ||
| Line 214: | Line 205: | ||
| и выйдите из программы конфигурирования. | и выйдите из программы конфигурирования. | ||
| − | + | 21. Запустите установочный скрипт | |
|   # ~ejudge/ejudge-install.sh |   # ~ejudge/ejudge-install.sh | ||
| − | + | 22. Еще раз обновите языки программирования | |
|   [ejudge]$ /opt/ejudge/bin/ejudge-configure-compilers |   [ejudge]$ /opt/ejudge/bin/ejudge-configure-compilers | ||
| − | + | 23. Донастройте конфигурационный файл ejudge.xml. | |
|   [ejudge]$ vim /home/judges/data/ejudge.xml |   [ejudge]$ vim /home/judges/data/ejudge.xml | ||
| В элемент config пропишите использование контейнеров: | В элемент config пропишите использование контейнеров: | ||
| Line 229: | Line 220: | ||
|     <default_rundb_plugin>mysql</default_rundb_plugin> |     <default_rundb_plugin>mysql</default_rundb_plugin> | ||
|     <default_clardb_plugin>mysql</default_clardb_plugin> |     <default_clardb_plugin>mysql</default_clardb_plugin> | ||
| − |     <default_status_plugin> | + |     <default_status_plugin>mysql</default_status_plugin> | 
| − |     <default_avatar_plugin> | + |     <default_avatar_plugin>mysql</default_avatar_plugin> | 
| − |     <default_xuser_plugin> | + |     <default_xuser_plugin>mysql</default_xuser_plugin> | 
| Убедитесь, что плагины настроены правильно: | Убедитесь, что плагины настроены правильно: | ||
| Line 253: | Line 244: | ||
|        <config /> |        <config /> | ||
|      </plugin> |      </plugin> | ||
| − |      <plugin type="xuser" name=" | + |      <plugin type="xuser" name="mysql" load="yes"> | 
|        <config/> |        <config/> | ||
|      </plugin> |      </plugin> | ||
| − |      <plugin type="avatar" name=" | + |      <plugin type="avatar" name="mysql" load="yes"> | 
|        <config/> |        <config/> | ||
|      </plugin> |      </plugin> | ||
| − |      <plugin type="status" name=" | + |      <plugin type="status" name="mysql" load="yes"> | 
|        <config/> |        <config/> | ||
|      </plugin> |      </plugin> | ||
| − | + | 24. Все сделано, можно запускать ejudge | |
|   [ejudge]$ /opt/ejudge/bin/ejudge-control start |   [ejudge]$ /opt/ejudge/bin/ejudge-control start | ||
Revision as of 21:56, 8 August 2022
Навигация: Главная страница/Система ejudge/Инсталляция/Инсталляция ejudge 3.9.2+ на Fedora 34+ с нуля
Данный документ описывает инсталляцию ejudge 3.9.2 и более поздних на чистую систему Fedora 34 и более позних (35, 36). Он отличается от предыдущей версии тем, что убраны шаги установки и настройки mongo. В качестве базы данных используется только mariadb (mysql).
Перед началом действий по инсталляции ejudge необходимо
проинсталлировать операционную систему.
Для компиляции системы ejudge и вообще для работы
потребуется какой-то непривилегированный пользователь,
назовем его user. Создайте его перед началом
инсталляции. Кроме того, в процессе инсталляции будет
создано еще несколько пользователей, которые используются
для работы самой ejudge.
Далее все команды, которые необходимо выполнить пользователем root
будут обозначены как #. Например:
# dnf update -y
Все команды, которые необходмо выполнить пользователем ejudge
будут обозначены как [ejudge]$. Например:
[ejudge]$ ejudge-configure-compilers
Все команды, которые необходимо выполнить пользователем user
будут обозначены как [user]$.
Система ejudge будет исталлироваться в каталог /opt/ejudge,
а каталог турниров будет размещаться в /home/judges.
При желании вы можете поменять эти пути, тогда соответствующим образом
измените команды.
Первоначальная настройка операционной системы
1. Установите редактор nano, vim или любой другой.
# dnf install -y vim nano
2. Отключите selinux. Для этого в файле /etc/selinux/config
найдите строку, устанавливающую значение SELINUX,
и отредактируете ее, чтобы она стала строкой
SELINUX=disabled
3. Для отключения selinux измените опции загрузки
# grubby --update-kernel ALL --args selinux=0
4. Обновите систему
# dnf update -y
5. Перезагрузите систему
# init 6
6. Включите русскую локаль в glibc
# dnf install glibc-locale-source # localedef -v -c -i ru_RU -f UTF-8 ru_RU.UTF-8
7. Установите mariadb
# dnf install mariadb mariadb-connect-engine mariadb-connector-c-devel mariadb-connector-odbc mariadb-devel mariadb-server mariadb-server-utils mariadb-backup mariadb-common mariadb-errmsg # systemctl enable mariadb # systemctl start mariadb.service
8. Настройте инсталляцию mariadb. Нужно будет задать новый пароль
для пользователя root в mariadb. Обозначим этот пароль как
MYSQL_ROOT_PASSWORD
# mysql_secure_installation
9. Установите много разных пакетов с библиотеками и языками программирования
# dnf install -y libmongo-client-devel libmongocrypt-devel mongo-c-driver-devel mongo-c-driver-libs mongo-cxx-driver-devel libmongocrypt mongo-cxx-driver-bsoncxx-devel libbson-devel # dnf install -y httpd httpd-devel httpd-tools # dnf install -y net-tools wget tar bzip2 p7zip fuse-devel openvpn htop # dnf install -y make gcc glibc-devel glibc-static bison flex gawk sed file zlib zlib-devel ncurses ncurses-devel expat expat-devel gettext gettext-devel libzip libzip-devel libcurl libcurl-devel libuuid libuuid-devel openssl openssl-devel git tmux bc # dnf install -y firefox vim screen wget ncftp mc fuse-sshfs patch kernel-tools kernel-devel gcc strace subversion gdb valgrind gcc-c++ libstdc++-static python python3 gcc-gfortran libgfortran-static gcc-go libgo-static nasm libstdc++-devel # dnf install -y glibc-devel.i686 glibc-static.i686 libstdc++-devel.i686 libstdc++-static.i686 # dnf install -y libtool autoconf automake # dnf install -y clang clang-devel clang-libs # dnf install -y fpc ghc gprolog php python2 pypy pypy3 ruby rust scala nodejs # dnf install -y mono-addins-devel mono-basic-devel mono-complete # dnf install -y dotnet dotnet-runtime-5.0 dotnet-sdk-5.0 # dnf install libnfs libnfs-utils libnfsidmap nfs-stats-utils nfs-utils nfswatch nfs4-acl-tools
10. Установите и сконфигурируйте golang
# dnf install golang # alternatives --config go
Выберите /usr/lib/golang/bin/go
11. Установите и сконфигурируйте java
# dnf install java-latest-openjdk java-latest-openjdk-devel java-latest-openjdk-headless java-latest-openjdk-jmods # alternatives --config java
Выберите java-17 или более старшую версию (java-18 и т. д.)
# alternatives --config javac
Выберите java-17 или более старшую версию (java-18 и т. д.)
# alternatives --config java_sdk_openjdk
Выберите java-17 или более старшую версию (java-18 и т. д.)
# alternatives --config jre_openjdk
Выберите java-17 или более старшую версию (java-18 и т. д.)
12. Настройте обработку core dumps
# cat <<EOF > /etc/sysctl.d/51-coredump.conf kernel.core_pattern=core fs.suid_dumpable=0 EOF
# vim /etc/systemd/coredump.conf
В секции [Coredump] должно быть Storage=none
13. Создание пользователей для ejudge
# adduser -c 'ejudge user' -s /bin/bash ejudge # adduser -c 'ejudge executor' -d / -M -s /sbin/nologin ejexec # adduser -c 'ejudge executor 1' -d / -M -s /sbin/nologin ejexec1 # adduser -c 'ejudge executor 2' -d / -M -s /sbin/nologin ejexec2 # adduser -c 'ejudge executor 3' -d / -M -s /sbin/nologin ejexec3 # adduser -c 'ejudge compiler' -d /home/judges/compile -M -s /sbin/nologin ejcompile
Скорее всего еще потребуется настроить вход в пользователя ejudge без пароля с помощью ключей ssh.
14. Создание каталогов
# mkdir /opt/ejudge # chown user:user /opt/ejudge # mkdir /home/judges # chown ejudge:ejudge /home/judges # mkdir /home/ej-compile-spool # chown ejudge:ejcompile /home/ej-compile-spool # chmod 6775 /home/ej-compile-spool # mkdir /home/ej-run-spool # chown ejudge:ejudge /home/ej-run-spool # chmod 755 /home/ej-run-spool # mkdir /var/lib/ejudge # chown ejudge:ejudge /var/lib/ejudge # mkdir /var/log/ejudge # chown ejudge:ejudge /var/log/ejudge # cd /home/judges; ln -s /var/log/ejudge var
15. Компиляция ejudge
[user]$ cd [user]$ git clone https://github.com/blackav/ejudge.git [user]$ cd ejudge [user]$ ./configure --prefix=/opt/ejudge --enable-charset=utf-8 --with-httpd-cgi-bin-dir=/var/www/cgi-bin --with-httpd-htdocs-dir=/var/www/html --enable-ajax --enable-local-dir=/var/lib/ejudge --enable-hidden-server-bins --with-primary-user=ejudge --with-exec-user=ejexec --with-compile-user=ejcompile --enable-compile-spool-dir --enable-run-spool-dir --enable-contests-status-dir [user]$ make [user]$ make install
16. Настройка прав
# /opt/ejudge/bin/ejudge-suid-setup # /opt/ejudge/bin/ejudge-upgrade-web
17. Настройка httpd
# vim /etc/httpd/conf/httpd.conf
В этом файле найдите строку ScriptAlias /cgi-bin/ "/var/www/cgi-bin/". После нее допишите текст:
     ScriptAlias /master   "/var/www/cgi-bin/new-master"
     ScriptAlias /client   "/var/www/cgi-bin/new-client"
     ScriptAlias /new-judge "/var/www/cgi-bin/new-judge"
     ScriptAlias /new-master "/var/www/cgi-bin/new-master"
     ScriptAlias /new-client "/var/www/cgi-bin/new-client"
     ScriptAlias /judge    "/var/www/cgi-bin/new-judge"
     ScriptAlias /serve-control "/var/www/cgi-bin/serve-control"
     ScriptAlias /users    "/var/www/cgi-bin/users"
     ScriptAlias /register "/var/www/cgi-bin/new-register"
     ScriptAlias /new-register "/var/www/cgi-bin/new-register"
     ScriptAliasMatch ^/ej/.+ /var/www/cgi-bin/new-client
Найдите строку <Directory "/var/www/cgi-bin">. Отредактируйте
дальнейший текст, чтобы он был таким:
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options FollowSymLinks
    Require all granted
</Directory>
18. Запустите httpd
# systemctl enable httpd
# systemctl start httpd
19. Создайте базу данных ejudge
# mysql -p
Введите пароль пользователя root от mysql.
Enter password: ******
В командной строке mysql создайте базу ejudge и пользователя ejudge
MariaDB [(none)]> create user 'ejudge'@'localhost' identified by 'PASSWORD';
MariaDB [(none)]> create database `ejudge`;
MariaDB [(none)]> grant all on `ejudge` . * to 'ejudge'@'localhost';
MariaDB [(none)]> flush privileges;
Здесь PASSWORD это пароль для пользователя ejudge в БД.
Он потребуется на следующем шаге.
20. Запустите конфигуратор ejudge
[ejudge]$ cd
[ejudge]$ /opt/ejudge/bin/ejudge-setup
В разделе 'Edit global settings' в поле 'Sendmail program' введите /bin/false, если там ничего нет. Это поле будет отмечено восклицательным знаком.
В разделе 'Edit MySQL settings' в поле 'User password' введите пароль
пользователя ejudge от MySQL (см. предыдущий шаг).
После этого выполните
'Save setup script', назовите его ejudge-install.sh,
и выйдите из программы конфигурирования.
21. Запустите установочный скрипт
# ~ejudge/ejudge-install.sh
22. Еще раз обновите языки программирования
[ejudge]$ /opt/ejudge/bin/ejudge-configure-compilers
23. Донастройте конфигурационный файл ejudge.xml.
[ejudge]$ vim /home/judges/data/ejudge.xml
В элемент config пропишите использование контейнеров:
<config l10n="yes" enable_compile_container="yes" force_container="yes">
Пропишите плагины хранения данных по умолчанию.
  <default_rundb_plugin>mysql</default_rundb_plugin>
  <default_clardb_plugin>mysql</default_clardb_plugin>
  <default_status_plugin>mysql</default_status_plugin>
  <default_avatar_plugin>mysql</default_avatar_plugin>
  <default_xuser_plugin>mysql</default_xuser_plugin>
Убедитесь, что плагины настроены правильно:
   <plugin type="common" name="mysql" load="yes">
     <config>
       <password_file>mysql_password</password_file>
       <database>ejudge</database>
     </config>
   </plugin>
   <plugin type="uldb" name="mysql" load="yes" default="yes">
     <config/>
   </plugin>
   <plugin type="cldb" name="mysql" load="yes">
     <config/>
   </plugin>
   <plugin type="rldb" name="mysql" load="yes">
     <config/>
   </plugin>
   <plugin type="common" name="mongo" load="yes">
     <config />
   </plugin>
   <plugin type="xuser" name="mysql" load="yes">
     <config/>
   </plugin>
   <plugin type="avatar" name="mysql" load="yes">
     <config/>
   </plugin>
   <plugin type="status" name="mysql" load="yes">
     <config/>
   </plugin>
24. Все сделано, можно запускать ejudge
[ejudge]$ /opt/ejudge/bin/ejudge-control start
