Hlavní konfigurační soubor serveru je uložen v hlavním adresáři serveru
(viz Adresářová struktura), jmenuje se server.xml,
je načítán vždy po spuštění serveru. Jedná se o soubor ve formátu pro Java-Properties
(viz DTD).
Následuje seznam a popis jednotlivých nastavení:
Poznámka: znak D před názvem položky znamená, že tato položka nemá globální platnost, ale lze ji předefinovat pro konkrétní doménu v konfiguračním souboru domény. Respektive je-li nadefinována v nastavení domény i serveru zároveň, bere se nastavení domény.
Název položky | Popis | |
---|---|---|
Hlavní nastavení serveru | ||
D | core.debug | 0/1. Určuje, zda je zapnut (=1) DEBUG režim, tj. zda se vypisují veškeré informace (ladící informace, Stack Trace, detailní pozice výskytu chyby) i do výstupů validace - tj. především do výstupních HTML souborů. Používat pouze při ladění. Default 0. |
D | core.do_cleanup | 0/1. Určuje, zda se budou po provedení validace mazat pracovní adresáře (podadresáře pod data\workdir). Default 0. |
core.data_dir | Udává název "data" adresáře, relativně k pracovnímu adresáři validačního serveru (tedy adresáře, ze kterého je server spuštěn - platí, že je to aktuální adresář systému v okamžiku spuštění validačního serveru). Doporučuje se nechat název "data". | |
core.domains_dir | Udává název adresáře "domains" relativně vůči adresáři data. Doporučuje se nechat "domains". | |
core.work_dir | Udává název adresáře "workdir" relativně vůči adresáři data. Doporučuje se nechat "workdir". | |
core.store_dir | Udává název adresáře "store" relativně vůči adresáři data. Doporučuje se nechat "store". | |
core.resource_bundle | Udává název tzv. ResourceBundle, tj. souboru s lokalizačními texty serveru. Doporučuje se nechat "cz.zcu.validationserver.nl.ValidationServer". | |
D | core.default_language | Udává výchozí jazyk serveru. Ten bude použit v případě, že klient validačního serveru neuvede svůj požadovaný jazyk. Příklad: "cs" či "en". (V současné době je k dispozici pouze čeština). |
D | core.default.charset | Znaková sada, která se použije při jakékoliv práci v serveru/doméně, kde je potřeba na znakovou sadu dbát. Tedy například v doménách při načítání libovolných souborů atd. Snaží se to tedy přebít použití Charset.defaultCharset() kdekoliv to je možné. Zároveň ovlivňuje i spouštění Java programů tak, že spouštěné programy obdrží default charset své Javy nastaven podle tohoto nastavení (-Dfile.encoding). Není-li uvedeno, použije se výchozí Charset Java JVM, což se nedoporučuje (může se měnit na různých instalacích/systémech). |
D | core.output_charset | Znaková sada, která se použije při generování jakýchkoliv výstupů (HTML, XML, ...). Doporučuje se UTF-8. Není-li uvedeno, použije se výchozí Charset Java JVM, což se nedoporučuje (může se měnit na různých instalacích/systémech). |
D | core.concurrency_disabled | Určuje, zda je zakázáno paralelní
zpracovávání více úloh (tj. zda může na serveru v jednu chvíli probíhat více validací).
Je-li 0, není zakázáno (a to je default). Je-li 1, pak jsou úlohy zpracovávány vždy
po sobě. Toto nastavení lze uvádět i u jednotlivých domén, platí však tyto pravidla:
|
D | core.invoke_user | Pod jakým uživatelem se budou spouštět zaslané (a přeložené) soubory - je-li uveden uživatel a je specifikován i parametr "core.sudo_path", pak jsou testované soubory vždy spouštěny pod touto identitou. Více viz kapitola o bezpečnosti. |
D | core.sudo_path | Cesta na příkaz "sudo". Tedy např. "/usr/bin/sudo" |
D | core.max_parallel_secured_invocations | Udává maximální
počet zároveň běžících spuštění programů pod "invoke user" - tj. těch zabezpečených.
Tj. slouží jako limit, kolik procesů může valiadční server spustit pod jiným (zabezpečeným)
uživatelem. Je-li 0, není omezeno.
Hodí se v případě, kdy je v linuxu (či jiném OS) tento uživatel nějak systémově omezen, například na maxmální množství procesů. Tímto lze zařídit, aby valiadční server například nikdy nespustil více než je nutno. Tj. aby pak nebyla kolize s daným nastavením. Je-li více domén a každá používá jiného "invoke_user", pak je toto omezení pro každého takového uživatele zvlášť, tj. per-user. |
D | core.process_kill_command | Cesta na externí script, který
má za úkol killovat procesy, které mohly zůstat v dané doméně (či celém serveru,
záleží na nastavení sudo) běžet.
Tento soubor může obsahovat scrip, který killnutí příslušných procesů zařídí. Server garantuje, že tento process killování bude spuštěn pouze v případě, kdy právě neběží žádná validace a dokud tento killovací script běží, budou všechny příchozí validace pozdrženy. Server spouští tento script v případě, že validace v dané doméně skončila TIMEOUTem. Problém v tom, že v případě použití sudo pro spouštění programů pod jiným uživatelem již není možné je normálně killnout (Javovskými mtodami - přenositelnými mezi platformami). Proto je potřeba speciálních scriptů. Ukázka scriptu, který killne všechny procesy uživatele 'vs-nobody' (tj. toho, pod kým se validované programy spouštějí) kromě procesů bash: sudo -u vs-nobody sh -c "ps xfuwwh | grep -v bash | grep -v xfuwwh | awk {'print \$2'} | xargs kill -9" |
D | core.c_references_script | Cesta na externí script, který
má za úkol zjistit seznam funkcí, které používá C zdroják. Server předává tomuto scriptu
jeden parametr - plnou cestu na tento zdroják. Script musí vrátit seznam funkcí
tak, že na každé řádce výstupu je na začátku řádky uveden název jedné funkce. Za ní
(a tedy za aspoň jedním bílým znakem) může být libovolný text, který je validačním
serverem ignorován.
Příklad pro linux: gcc -c $1 -o $1.o &>/dev/null nm -u -C -f posix $1.o | awk {'print $1'} |
D | core.c_denied_functions | Cesta na soubor, který obsahuje seznam nepovolených funkcí pro jazyk C. Formát souboru je jednoduchý - na každé řádce název jedné funkce. |
D | core.c_allowed_functions | Cesta na soubor, který obsahuje
seznam povolených funkcí pro jazyk C. Formát souboru je jednoduchý - na každé řádce
název jedné funkce.
Poznámka: Zde se pouze deklarují seznamy funkcí, ať povolených či nepovolených. To, jaká bude zvolena politika při konrole odevzdaných souborů (tj. zda se povolí všechny kromě zakázených či naopak povolí pouze povolené) záleží na validačním scriptu a tom, jaké použije funkce z API validačního serveru. |
D | core.java_path | Cesta na příkaz "java", který se bude používat pro spouštění přeložených Java souborů. Například "/usr/lib/jdk/jre/bin/java" či ve Windows "c:\program files\java\jre1.6.0_01\bin\java.exe". |
D | java.options | Případné další parametry pro spouštění Javy (např. "-Xmx128m" atd). |
core.admin_password | Obsahuje libovolný řetězec, který se považuje za heslo pro vzdálené provádění admin operací - například pro příkaz na reload domény atd. | |
Cache | ||
cache.maintain_interval | Určuje minimální čas v sekundách, po jakém se spouští vyprázdnění neplatných položek v cache. | |
Překladače | ||
D | compiler.pascal | Cesta na překladač Free Pascalu. Na Windows například "C:\FPC\2.0.4\bin\i386-win32\ppc386.exe" (pozor, nepoužívat fpc386.exe, zlobí přenos dat rourou). |
D | compiler.c | Cesta na překladač GCC. Na Windows například "C:\cygwin\bin\gcc.exe", na Linuxu "/usr/bin/gcc". |
Domény | ||
domain.properties_file | Název souboru v adresáři domén s jejich nastavením. Doporučuje se nechat "domain.xml". | |
domain.process_file | Název souboru v adresáři domén s definicí procesu validace. Doporučuje se nechat "process.xml". | |
domain.enabled | POZOR, změna, toto nastavení je zrušeno!
Dříve zde byl uveden seznam domén, které jsou aktivní. Bylo změněno tak, že nyní server při startu prochází všechny podadresáře v adresáři domén a aktivuje ty domény, v jejichž konfiguraci je uvedeno nastavení domain.enabled = 1. | |
Výstupy validovaných programů | ||
D | output.results_starter | Řetězec, kterým ve výstupech programů začíná část, která se porovnává. Defaultně je to "---Vysledky---" |
D | output.multiple_delimiter | Řetězec, který v souborech se vzorovými výstupy odděluje více možných vzorových výstupů. Tento řetězec musí být na začátku řádky a tato řádka se poté celá ignoruje (tj. i to, co je za ním se ještě nebere, až další řádka -> těch "rovnítek" může být i víc než pět). Default: "=====". |
D | output.double_cmp_precision | Přesnost při porovnávání desetinných hodnot ve výstupu. Default "0.01" |
RMI rozhraní | ||
rmi.port | Port RMI. Doporučuje se nechat defaultní 1099. | |
rmi.service_name | Název RMI služby. Doporučuje se nechat "VS2". | |
rmi.server_url | Celá RMI adresa serveru, v ní musí být použit zadaný port a název služby (toto bude časem přepracováno, je to zbytečná duplicita). Například: "rmi://vs.kiv.zcu.cz:1099/VS2". | |
WebConnector rozhraní - spojení pro studentské soutěže (SSP) | ||
web.connector.enabled | 0/1, zda je WebConnector aktivní (aktivní = 1). Default 0. | |
web.db.server_name | Název či IP serveru s MySQL. | |
web.db.database | Název databáze. | |
web.db.user_name | Uživatel pro přihlášení do databáze. | |
web.db.password | Heslo |
Pro ilustraci je k dispozici ukázkový soubor
server.xml.