SIO/Adminisztráció
A MathWikiből
Tartalomjegyzék |
Telepítés
Egyelőre csak vázlat
A SIO telepítése során egy szerverre és opcionálisan több tesztgépre lesz szükségünk. A tesztgép akár lehet ugyanaz a gép, amelyiken a szerver van, de ez biztonsági szempontból ellenjavalt.
A következőekben egy Debian / Ubuntu gépre mutatjuk be a telepítés alapvető lépéseit.
- A szerver gépen LAMP szerverre lesz szükségünk, ezt konfiguráljuk is megfelelően be (nem üres MySQL root jelszó, Apache könyvtárak, SSL hitelesítés, stb.)
- Ha nem ilyen rendszert telepítettünk, apt-get install apache-ssl libapache-mod-php4 mysql-5.0
- A webes felülethez az Apache gyökér könyvtárát vagy egy alkönyvtárát állítsuk be /vol/sio/www-ra
- Ha még nem futnának, indítsuk el az Apache és Mysql szolgáltatásokat.
- A legegyszerűbb, ha a szerver gépen fordítjuk a szükséges SIO binárisokat (utána eltávolíthatjuk a nem szükséges fordítókönyvtárakat)
- A fordításhoz apt-get install g++ gcc make patch libmysqlclient15-dev
- A 4-es GCC kicsit szigorúbb, mint a korábbi változatok, ezért cseréljük az execl.* függvények utolsó paramétereit 0-áról NULL-ra.
- (ehhez patch, stb.)
- Szerkesszük meg a helyi beállításaiknak megfelelően a forrásfájlokat az spr könyvtárban (pl. e-mailek feladói, stb.)
- Fordítsunk, telepítsünk cd spr ; make ; sudo make install
- (Találtam debian csomagot készítő részt is, de ez javításra szorul, kapásból nem működött)
- sudo ln -s /vol/sio/etc/sio /etc/init.d
- Szerkesszük meg a helyi beállításaiknak megfelelően a PHP fájlokat a /vol/sio/www könyvtárban
- Ezek után elindíthatjuk a SIO szervert, sőt érdemes lehet minden rendszerindításkor automatikusan elindítani
- Állítsuk be a /vol/sio/etc/sio_config fájlban, hogy
RUN_SERVER=yes
RUN_LJUDGE=no
RUN_NJUDGE=no - sudo /etc/init.d/sio start
- sudo update-rc.d sio start 2 3 4 5 .
- Állítsuk be a /vol/sio/etc/sio_config fájlban, hogy
- A tesztgép(ek)en ismételjük meg a 2. lépést
- Itt a /vol/sio/etc/sio_config fájlban ezt állítsuk be:
RUN_SERVER=no
RUN_LJUDGE=no
RUN_NJUDGE=yes - A /vol/sio/etc/judge.conf fájlban állítsuk be a megfelelő judge managert (azaz a szervergépet)
- A /vol/sio/etc/judge.conf fájlban állítsuk be a megfelelő chroot könyvtárakat a fordításhoz és teszteléshez
- sandbox=/vol/sio/sandbox
- sandbox_exec=/vol/sio/sandbox_exec
- Telepítsük a megfelelő chroot rendszereket a fordításhoz és a teszteléshez (vagy az előző pontban megadott alapértelmezett helyekre, vagy ahova megadtuk)
- Itt a /vol/sio/etc/sio_config fájlban ezt állítsuk be:
- Végül a 3. lépést is ismételjük meg a tesztgép(ek)en
Karbantartás
Új felhasználók
Regisztráció
Ha engedélyeztük ezt, és nem járt még le a jelentkezés az adott kurzusra / versenyra, akkor a felhasználók maguk tudnak regisztrálni.
Felhasználók hozzáadása adminisztrátorként
Sajnos ez a funkcionalitás nincs lekódolva az üzleti logikában, ezért közvetlenül az adatbázisba kell belenyúljunk.
insert into users(login, pass, user_type, first_name, last_name, e_mail, reg_mode) values(’<login>’, md5(’<password>’), 1000, ’<first_name>’, ’<last_name>’, ’’, 0);
Például
insert into users(login, pass, user_type, first_name, last_name, e_mail, reg_mode) values(’user1’, md5(’qwerty’), 1000, ’Mici’, ’Mackó’, ’’, 0);
A felhasználótípusok (user_type) a következőek lehetnek:
kód | megnevezés |
---|---|
0 | adminisztrátor |
100 | zsűri |
1000 | felhasználó (résztvevő) |
5000 | megfigyelő |
9999 | vendég |
Majd az új felhasználó létrejöttét követően, ha a contests.id 1000 valamint az users.id 13
insert into users_pref (user) values(13); insert into users_info (user) values(13);
Késő hallgatók listázása
SELECT users.login, COUNT(DISTINCT tasks.id) AS solvedc, GROUP_CONCAT(DISTINCT tasks.name ORDER BY tasks.name) AS solved FROM users LEFT OUTER JOIN (submits, tasks, contest_tasks) ON submits.user=users.id AND submits.e_result=1 AND submits.task=tasks.id AND contest_tasks.task=tasks.id AND contest_tasks.subcontest=1 WHERE users.user_type=1000 AND users.login NOT LIKE '%proba%' GROUP BY users.login HAVING solvedc<5;