Postavitev Jobe strežnika

3.2 Postavitev Jobe strežnika
Čeprav ima CodeRunner preprosto in fleksibilno strukturo, ki omogoča najrazličnejše načine preverjanja študentove kode, ga trenutno podpira samo eno zaščiteno okolje (v nadaljevanju peskovnik ali sandbox) – Jobe sandbox. Ta peskovnik uporablja ločen strežnik, razvit posebej za uporabo CodeRunnerja, ki se imenuje Jobe. Privzeto se uporablja strežnik Jobe z Univerze v Canterburyju z Nove Zelandije, ki je primeren za prvotno testiranje in spoznavanje CodeRunnerja. Omejitev na privzetem strežniku je zaradi možnosti preobremenitve postavljena na 100 nalog na uro. Zato je za samostojno uporabo sistema smiselno postaviti svoj strežnik Jobe.
Strežnik Jobe deluje samo v operacijskem sistemu Linux, na katerem mora biti nameščen strežnik Apache. Predhodno moramo imeti nameščene tudi programske jezike Python3 in C.
Na povezavi https://github.com/trampgeek/jobe poglavje (Instalation) sledimo navodilom za postavitev strežnika Jobe. Navodila so napisana v angleškem jeziku. Vsi ukazi (če ni eksplicitno napisano drugače) se izvajajo v konzolnem oknu operacijskega sistema Linux Debian. Označeni so z modro barvo.
V konzolnem oknu poženemo ukaz
# apt-get install php libapache2-mod-php php-mcrypt mysql-server
php-mysql php-cli octave nodejs
git python3 build-essential openjdk-8-jre openjdk-8-jdk python3-pip
fp-compiler pylint3
S tem ukazom namestimo na naš računalnik vse potrebne pakete (Java, Python3, Octave, Pylint...).
Za začetno konfiguracijo Pylinta izvršimo ukaz
/var/www/html# pylint --reports=no --generate-rcfile > /etc/pylintrc
Ta ukazje potreben le, če bomo testirali kakovost kode s sistemom Pylint.
V privzetem imeniku za streženje spletnih strani /var/www/html namestimo Jobe strežnik s spodnjim ukazom:
/var/www/html#git clone https://github.com/trampgeek/jobe.git
Ta ukaz v imenik /var/www/html prenese datoteke, potrebne za delovanje strežnika Jobe. Prenese jih v podimenik jobe. V tem podimeniku potem poženemo skripto install.
/var/www/html/jobe# ./install
Ta ukaz uredi vse potrebno za namestitev.
V vrstici JOBE_SERVER = 'localhost' zamenjamo vrednost 'localhost' z našim IP naslovom (v našem primeru 10.0.0.3).
Nato testiramo namestitev. To storimo z zagonom ukaza
/var/www/html/jobe# python3 testsubmit.py
V tem koraku imamo Jobe strežnik pripravljen za uporabo.
3.2.1 Zaščita strežnika z API-ključem
Na Univerzi Canterbury dovolijo uporabo njihovega Jobe strežnika, vendar je avtentikacija ter avtorizacija urejena preko API-ključa. Zaradi varnosti in preobremenitve svojega strežnika so z API ključem, ki je priložen pri sami namestitvi CodeRunnerja, določili omejitev izvajanj na 100 ukazov na uro. Pametno je zaščititi tudi naš Jobe strežnik, sicer ga lahko uporablja vsak, kar lahko vodi do zlorabe in preobremenitve.
Za nastavitev API-ključa sledimo navodilom na strani https://github.com/trampgeek/jobe, poglavje Securing with API keys.
Najprej moramo namestiti Mysql strežnik. V terminalu poženemo ukaz
# apt-get install mysql-server
Potem ustvarimo bazo podatkov z imenom "jobe". Da si bomo lažje zapomnili uporabniške podatke, ki jih bomo vnesli, bomo vse poimenovali z "jobe". Torej ustvarimo uporabnika "jobe" z geslom "jobe", ki ima vse pravice na bazi podatkov z imenom "jobe". Ukazi se izvršijo v Mysql konzoli.
CREATE USER 'jobe'@'localhost' IDENTIFIED BY 'jobe';
CREATE DATABASE jobe;
GRANT ALL PRIVILEGES ON jobe . * TO 'jobe'@'localhost';
Nato uredimo datoteko application/config/database.php v skladu z nastavitvami v prejšnji točki. Uredimo še datoteko application/config/rest.php v skladu z zgornjimi nastavitvami in nastavimo parameter rest_enable_keys na 1.
Potem ustvarimo tabeli "keys" in "limits", kot je opisano v datoteki rest.php.
CREATE TABLE `keys` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`key` varchar(40) NOT NULL,
`level` int(2) NOT NULL,
`ignore_limits` tinyint(1) NOT NULL DEFAULT '0',
`is_private_key` tinyint(1) NOT NULL DEFAULT '0',
`ip_addresses` TEXT NULL DEFAULT NULL,
`date_created` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `limits` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`uri` varchar(255) NOT NULL,
`count` int(10) NOT NULL,
`hour_started` int(11) NOT NULL,
`api_key` varchar(40) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Nato v tabelo "keys" v polje "key" shranimo vrednost našega API-ključa. Za geslo smo si izbrali nasesupervarnogeslo.
mysql> INSERT INTO `keys` ( `key` ) VALUES ( 'nasesupervarnogeslo' );
Ponovno zaženemo spletni strežnik Apache, da se upoštevajo vse novo nastale nastavitve. Strežnik ponovno zaženemo z ukazom
# service apache2 restart
Sedaj bi moral biti naš API-ključ ustrezno nastavljen. Potrebna je še nastavitev Jobe strežnika in API-ključa v sistemu Moodle. Za urejanje teh nastavitev moramo imeti administratorske pravice.
V meniju Site administration kliknemo na Plugins / Question type / CodeRunner. Slika 12 prikazuje nastavitve vtičnika CodeRunner.
Slika 12: Nastavitve vtičnika CodeRunner
Spremeniti moramo vrednost v okencu Jobe server. Vnesemo naslov našega Jobe strežnika (iz jobe2.cosc.canterbury.ac.nz nastavimo na 10.0.0.3). Spremeniti moramo še API-ključ, ki je privzeto nastavljen na 2AAA7A5415B4A9B394B54BF1D2E9D.
V okencu Jobe API-key: spremenimo vrednost 2AAA7A5415B4A9B394B54BF1D2E9D na
nasesupervarnogeslo. Okenca sta na Sliki 12 označena z rdečim okvirjem.
|