Domjudge

From A-Eskwiki
Revision as of 01:19, 10 October 2017 by Arnold (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Domjudge wordt gebruikt voor programmeerwedstrijden, dus het UKP en BAPC. De ESCapade organiseert de wedstrijden, de sysop zorgt ervoor dat domjudge correct draait. Domdjudge heeft een webinterface waar de score van de teams wordt bijgehouden. Ook worden de oplossingen van problemen via de webinterface aan domjudjge doorgegeven. Bij A-Eskwadraat gebruiken we URL http://judge.a-eskwadraat.nl/ voor domjudge. We draaien een judgeserver en judgehost. Deze draaien op haskell, namelijk de VM's Judgehost en Judgeserver.


Judgeserver

De judgeserver verzorgt de front-end, oftewel de webinterface. Deze moet draaien, zodat iedereen bij de webpagina kan en daar dingen kan doen. Inzendingen kunnen ingestuurd worden, maar er moet ook een judgehost draaien om deze na te kunnen kijken.

Op de judgeserver moeten de mysql en apache services draaien.

Judgehost

Op de judgehost worden inzendingen gestuurd vanaf de judgeserver. De judgehost kijkt deze dan na. Op de judgehost moet dan wel judgedeamon actief draaien.


Judgeserver & Judgehost instaleren

De makkelijkste manier om een judgeserver & judgehost te maken is door de live image van domjudge te converteren naar qcow2, en vervolgens aan de hypervisor te hangen. Het converteren van de image kun je het beste op een zoo doen, omdat de benodigde tools niet op Haskell staan (zorg er wel voor dat deze zoo genoeg storage space heeft voor de images). Download daarom de image op een zoo waarop de "libguestfs-tools" geïnstalleerd staan of installeer het "libguestfs-tools" package. Voor je de image kunt converteren moet je dan ook nog het "libvirt" package downloaden en in qemu config (/etc/libvirt/qemu.conf) de regels voor "user = "root"" en "group = "root"" uncommenten. Vervolgens start je de "libvirtd" service en kun je verdergaan met onderstaande stappen:

Download de image van:

https://www.domjudge.org/live/

Pak deze uit.

bzip2 -d {domjudgeimage.bz2}

We willen eerst het image vergroten. We maken een nieuwe img file aan van 8GB

truncate -s 8G {resized.img}

En dan resizen we het orginele file naar een groter file format

virt-resize --expand /dev/sda2 {original.img} {resized.img}

Converteer deze vervolgens naar qcow2 formaat:

qemu-img convert {input file} -c -O qcow2 {output file}

Voor gemak maak je er dan een snapshot layer omheen, zodat je makkelijk kunt reverten naar de originele image:

qemu-img create -o backing_file={output file} -f qcow2 judgeserver.qcow2

We vervangen nu de qcow image van de oude domdjudge server (of host) door deze nieuwe qcow op haskell. (bij /var/lib/vz/images/{virtual host nummer}). Het virtual host nummer is te zien in de webinterface van haskell. Vervolgens moet de config file van de VM op haskell (/etc/pve/qemu-server/{vm-id}.conf}) nog aangepast worden om naar de juiste image te wijzen. Pas hiervoor de volgende regel zo aan:

scsi0: storage-vm-vz:{vm-id}/{naam van image},cache=writethrough,size={size}

Doe hierna een rescan, om de nieuwe image te vinden.

qm rescan -vmid {vm-id}

Om de live image te updaten dient de configuratie voor apt aangepast te worden. Hierbij moet de ingestelde proxy uitgezet worden in:

/etc/apt/apt.conf

De stappen zijn voor de judgeserver en judgehost hetzelfde. Om de judgehost de judgeserver te kunnen laten vinden moet je er nog voor zorgen dat de restapi file (/etc/domjdudge/restapi.secret) overeenkomt met die op de judgeserver en dat in deze file niet naar de localhost maar naar judge.a-eskwadraat.nl verwezen wordt.

Meer info is hier te vinden.

Het is verder belangrijk dat de judgeserver en judgehost alleen als domserver respectievelijk judgehost booten, dit kun je instellen door in de grub config file (/etc/default/grub) de volgende lijn aan te passen:

GRUB_DEFAULT={nummer}

Hierbij correspondeert het nummer met de boot-entry in het grub boot menu, beginnend bij 0 (deze kun je bereiken door op proxmox vlak na het opstarten van de VM een console naar de VM te openen). Verander dit nummer naar het entry nummer van of de domserver of de judgehost. En update grub daarna met deze nieuwe configuratie.

update-grub

Stappen bij een programeerwedstrijd

  • Zorg voor een nieuwe domjudge installatie of gebruik een oude
    • Als je een oude gebruikt, ruim de oude judgings op, op de judgehost. Ga naar de judgehost en gebruik het "$du / -aS | sort -nr | head -25" commando om te zien waar de grote files zich bevinden. het "$df" commando laat zien hoeveel ruimte je nog hebt
    • In /var/lib/domjudge/judgings bevinden zich de judgings. Deze kunnen verwijderd worden om ruimte vrij te maken op de judgehost
  • Zorg dat de judgehost en de judgeserver allebei aanstaan. (login is standaard)
  • De site werkt nu op judge.a-eskwadraat.nl
  • De ESCapade moet nu de teams en opdrachten in de website instellen
  • Op de wedstrijddag zelf, blijf beschikbaar voor het geval er dingen mis gaan. (Met voorkeur bij A-Eskwadraat zelf, zodat je direct bij de server kan)

Installeer een verse domjudge

Nog te doen

Links

[1]