SIO/Adminisztráció

A MathWikiből
A lap korábbi változatát látod, amilyen SzaboPeter (vitalap | szerkesztései) 2007. április 1., 20:02-kor történt szerkesztése után volt.
(eltér) ←Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)

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.

  1. 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.
  2. 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
  3. 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 .
  4. 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)
  5. 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;
Személyes eszközök