Ir para o conteúdo

Configuração

Configurando apache cgi-bin

Primeiramente acesse o arquivo de configuração do apache:

$ sudo nano /etc/apache2/apache2.conf

Adicione as seguintes linhas no final do arquivo:

  <Directory /home/$USER/cdmoj/moj-pagina/>
      Options +ExecCGI
      AddHandler cgi-script .cgi .sh
  </Directory>

Execute o seguinte comando para permitir que o apache execute cgi:

$ sudo ln -s /etc/apache2/mods-available/cgi.load /etc/apache2/mods-enabled/cgi.load

Acesse o arquivo do servidor cgi-bin:

$ sudo nano /etc/apache2/conf-available/serve-cgi-bin.conf

Dentro desse arquivo há um trecho parecido com esse:

<IfModule mod_alias.c>
        <IfModule mod_cgi.c>
                Define ENABLE_USR_LIB_CGI_BIN
        </IfModule>

        <IfModule mod_cgid.c>
                Define ENABLE_USR_LIB_CGI_BIN
        </IfModule>

        <IfDefine ENABLE_USR_LIB_CGI_BIN>
                ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
                <Directory "/usr/lib/cgi-bin/">
                        AllowOverride None
                        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                        Require all granted
                </Directory>
        </IfDefine>
    </IfModule>

Modifique as seguintes linhas e salve o arquivo:

ScriptAlias /cgi-bin/  /home/$USER/cdmoj/moj-pagina/cgi-bin/
<Directory "/home/$USER/cdmoj/moj-pagina/cgi-bin/">

Crie um arquivo para o site cd-moj:

$ sudo nano /etc/apache2/sites-available/moj.conf

Esse arquivo deve se parecer com o seguinte:

<VirtualHost *:80>
        ServerName moj.com.br

        ServerAdmin webmaster@localhost
        DocumentRoot /home/$USER/cdmoj/moj-pagina/

        ErrorLog ${APACHE_LOG_DIR}/moj.com.br-error.log
        CustomLog ${APACHE_LOG_DIR}/moj.com.br-access.log combined

        Include conf-available/serve-cgi-bin.conf

        ScriptAlias /cgi-bin/ /home/$USER/cdmoj/moj-pagina/cgi-bin/
<Directory "/">
        Options Indexes FollowSymLinks MultiViews Includes
        Require all granted
</Directory>
</VirtualHost>

Desative o site padrão:

$ sudo a2dissite 000-default

Habilite o site do cd-moj:

$ sudo a2ensite moj

Reinicie o serviço apache:

$ sudo systemctl reload apache2

Configurando do CD-MOJ

Edite o arquivo common.conf que está dentro do diretório moj-serverside:

$ sudo nano $HOME/cdmoj/moj-serverside/etc/common.conf

Esse arquivo deve se parecer com o seguinte:

CACHEDIR=$HOME/tmp
CONTESTSDIR=$HOME/cdmoj/contests
SUBMISSIONDIR=$HOME/cdmoj/submissions
BASEURL="http://localhost"
HTMLDIR=$HOME/cdmoj/moj-pagina

Criando um administrador

Para criar um contest é necessário um usuário administrador para poder enviar um arquivo com contest ou submeter um formulário com os dados necessários. Para isso é preciso criar um diretório dentro do caminho /moj/contests/ chamado admin, logo após crie dois arquivos chamados conf e passwd. Segue o exemplo dos arquivos:

conf

CONTEST_ID="admin"
CONTEST_NAME="admin"
CONTEST_START=Gere uma data de inicio utilizando o comando "date --date="15:00:00 today" +%s"
CONTEST_END=Gere uma data de termino utilizando o comando "date --date="15:00:00 today" +%s"

passwd

usuario.admin:senhaAdmin:Usuario Administrador

Erros Comuns

Permissões

Abaixo seguem algumas permissões necessárias para que seja possível rodar o CD-MOJ com sucesso localmente.

cd cdmoj
mkdir contests
chown -R www-data:www-data ./contests
chown -R $USER.$USER ./contests/
mkdir submissions
sudo chmod 777 submissions/

Caso esteja utilizando o ubuntu 22.04, estas permissões podem ser úteis:

sudo chmod +x /home/
sudo chmod +x /home/$USER/
sudo chmod +x /home/$USER/cdmoj/

Logs de erros

Se houve algum erro ao criar um contest em uma instância local certifique se os steps foram seguidos corretamente Daemons, Exercícios e Contest. Para mais informações entrar no root do seu pc utilizando os comandos abaixo:

sudo -i
tail -f /var/log/apache2/*.log