Yleistä

Tämä ohje ei pyri olemaan kattava, vaan paremminkin tajunnanvirtaa kehitysosastolta ;)

ViHassa käytettyjä termejä:

TermiMerkitys
AlueMaantieteellinen alue, johon voi kuulua esimerkiksi operaatioita, kalustoa jne.
HenkilöLuonnollinen henkilö, joka ottaa osaa toimintaan. Henkilö voi kuulua korkeintaan yhteen ryhmään.
HälytysryhmäYhteen järjestöön kuuluvista henkilöistä koostuva ryhmä, joka ottaa osaa operaatioon.
JärjestöJokainen henkilö kuuluu yhteen järjestöön. Järjestöt saapuvat operaatioihin yksitellen.
OperaatioEtsintä, ensiapupäivystys tai vastaava tapahtuma. Operaatiossa voi olla mukana useita ryhmiä ja henkilöitä.
SijaintiRyhmä on aina jossakin paikassa, jota kuvataan termillä sijainti.
RyhmäOperaatiossa toimiva yksikkö, toimintaryhmä. Ryhmä kuuluu yhteen operaatioon.
TilaRyhmä ja henkilö ovat aina jossakin tilassa, joka kuvaa kulloinkin tapahtuvaa toimintaa. Ks. Tilat
KalustoViestivälineet ja tavarat (muu kalusto). Keskenään samanlaiset on eriteltävä tunnisteella (juokseva numero tms).
ViestivälineetRadiolaitteet ja muu sellainen kalusto, joka toimii pääasiallisesti yhdessä tietyssä viestiverkossa (esim. antennit)
TavaratKalusto, joka ei ole viestivälineitä.

Tekniikkaa

Tuotantoympäristössä ViHaa käytetään normaalisti SSL-suojatulla yhteydellä. Testiympäristössä ja tilanteen niin vaatiessa voidaan käyttää salaamatontakin yhteyttä.

Käyttäjätunnuksia ei välttämättä tarvita kuin yksi, mutta jäljitettävyyden takia olisi suotavaa että ne olisivat henkilö- tai roolikohtaisia. Sama käyttäjä voi ongelmitta käyttää järjestelmää monesta eri paikasta.

Ohjelmistoa on kehittänyt vuodesta 2003 saakka Riku Kalinen, OH2RK. Arvokasta palautetta on tullut kaikilta käyttäjiltä.

Ohjelmisto on palvelin-asiakaspohjainen. Asiakasohjelmistona voi toimia lähes mikä hyvänsä WWW-selain millä hyvänsä alustalla.

Käytettävän selaimen on tuettava evästeitä (cookies) ja taulukoita. Taulukoiden suhteen riittää, jos niiden sisältö pystytään näyttämään. Lähes kaikki markkinoilla olevat selaimet täyttävät nämä ehdot.

Palvelimessa käytetään Open Source - ratkaisuja (OpenBSD, Linux, MySQL, Apache, PHP).

CVS-jakelussa tagilla rel-* varustetut versiot ovat tuotantokelpoisia.

Tietokannan ja ohjelmaversion yhteensopivuus varmistetaan ja mikäli versiot eivät ole keskenään yhteensopivia, tulee tästä joko selkeä tai kryptinen virheilmoitus.

Jakelupaketissa tulevaa alusta - skriptiä käytetään kannan alustamiseen. Se osaa alustaa sekä tuotanto- että harjoitusympäristöt perusasetuksiin tai mallitiedoilla.

alusta - ottaa mysql - pääkäyttäjän ja kantojen salasanat /etc/viha - hakemistoon talletetuista tiedostoista. Oletussalasanat onkin syytä muuttaa (jos kannan salasana vaihdetaan, pitää perustaa myös config.php ja tallettaa po salasana sinne).

Turvallisuudesta

Järjestelmää ei ole rakennettu vihamielistä ympäristöä silmällä pitäen, eli kaikkien käyttäjien tulee olla luotettavia.

Erityisesti operaatiokohtaisia lisämateriaaleja ei ole pakotettu vain tietyn operaation käyttöön.

Järjestelmä pystyy huolehtimaan omin päin käyttäjätunnusten hallinnasta. On huomioitava että käyttäjänhallintakoodi on ajettava joka PHP-tiedoston alussa, esimerkiksi common.php:sta. Ainoa poikkeus tästä on logoff.php.

Salasanat talletetaan kantaan crypt()attuina. Salasana eikä salasanatiiviste ei voi olla tyhjä.

Konfigurointitiedosto

Konfigurointitiedosto on nimeltään config.php. Normaali asennus ei koskaan ylikirjoita tätä. Pohja on tiedostossa config-sample.php. Tiedosto on php-koodia, ja siellä voi asettaa seuraavat muuttujat:

MuuttujaOletusarvoVaikutus
config_mysql_server 127.0.0.1:3306 tietokantapalvelimen nimi tai IP-numero ja portti
config_mysql_user viha käyttäjätunnus tietokantapalvelimeen, tarpeellinen jos samassa palvelimessa useita erillisiä ViHa-instansseja
config_mysql_pass salasana tietokantapalvelimeen
config_db tilanne3 käytettävä tietokanta, tarpeellinen jos samassa palvelimessa useita erillisiä ViHa-instansseja
config_realm ViHa mitä näytetään kirjautumisikkunassa
config_main_title Pääsivu pääsivun otsikko
config_main_h1 Viestin hallintajärjestelmä ViHa pääsivun ensimmäinen otsikko
config_main_motd näytetään tekstikappaleena pääsivulla ensimmäisen otsikon jälkeen
config_debug 0 talletetaanko ylimääräistä informaatiota vianselvitystä varten (1 = vähän, 2 = enemmän, ...)
config_prefix viha_ evästeiden etuliite, tarpeellinen jos samassa palvelimessa useita erillisiä ViHa-instansseja

Käyttöoikeuksista

Käyttäjän käyttöoikeus operaatioon, kalustoon, henkilöstöön jne selvitetään seuraavassa järjestyksessä. Kun yhteen kohtaan tulee osuma, ei seuraavia enää tutkita:

  1. Jos käyttäjällä on pääkäyttäjän oikeudet (kayttaja.root), hänellä on pääsy.
  2. Jos käyttäjä on aluevastaava (paivystys.alue_id, kayttaja_alue), hänellä on pääsy.
  3. Jos käyttäjällä on oikeus operaatioon (kayttaja_paivystys), hänellä on pääsy.
  4. Muutoin käyttäjällä ei ole pääsyä.

Tämän tarkastuksen ja eräitä muita yleisiä tarkastuksia toteuttavat funktiot permission_ids(alue_id,paivystys_id) ja permission_tab(taulu,id), joiden paluuarvot ovat linjassa muiden tarkastusfunktioiden kanssa.

Käyttöoikeuksia voidaan määritellä kolmella tasolla:

  1. Käyttäjä voidaan määritellä pääkäyttäjäksi jolloin hänellä on pääsy kaikkialle ja oikeus jakaa kaikkia oikeuksia edelleen sekä oikeus perustaa ja muokata käyttäjätunnuksia.
  2. Ellei käyttäjä ole pääkäyttäjä, hän voi olla yhden tai useamman alueen aluevastaava, jolloin hänellä on automaattisesti pääsy kaikkiin alueensa operaatioihin.
  3. Lisäksi käyttäjällä voi olla pääsy operaatioon. Tätä oikeutta ei voi luovuttaa edelleen.

Tietokantarivien oikeuksia tarkastellaan normaalikäyttäjälle seuraavasti:

  1. Jos alue_id == 2 (kaikki), rivi näkyy.
  2. Jos alue_id == oma ja paivystys_id == 2, rivi näkyy.
  3. Jos alue_id == oma ja paivystys_id == oma, rivi näkyy.
  4. Muuten rivi ei näy.

Sellaisissa näytöissä, joissa käsitellään vain yhteen operaatioon kuuluvia tietoja, näytetään vain kyseiseen operaatioon kuuluvat tiedot.

Alueiden olisi hyvä olla selvyyden vuoksi sellaisia, että ne eivät mene päällekkäin. Pakkoa tähän ei ole, mutta päällekkäin osuvat alueet vaikeuttavat käyttöoikeuksien hahmottamista.

Omien tila- ja sijaintikoodien valinnasta

Mikäli omia tila- ja/tai sijaintikoodeja luodaan, kannattaa muistaa seuraavat nyrkkisäännöt:

Monen operaation tuki

ViHa tukee useita operaatioita yhtä aikaa. Käyttäjän oikeuksista riippuu, mitä operaatioita hän näkee. Mikäli käyttäjällä on oikeus useampaan operaatioon, hän voi siirrellä lähes kaikkea tietoa näiden operaatioiden välillä. Oikeus käsitellä useampaa operaatiota tuo käyttäjälle laajemman päävalikon.

Operaatioista yksi on kulloinkin valittuna ja perustoiminnot kohdistuvat siihen.

Operaatiokohtaista materiaalia voidaan tallettaa sovelluksen juurihakemiston alla olevaan hakemistoon operaatio/id, missä id on operaation numerokoodi (paivystys.id). Jos tällainen hakemisto on olemassa, siellä olevat tiedostot näytetään päävalikossa. Näihin tiedostoihin ei ole tehty operaatiokohtaisia pääsyrajoituksia, eli sinne ei saa tallettaa tietoa jonka tulee pysyä vain yhden operaation tiedossa.

Ohjelman sisäisestä rakenteesta

Tietojen peruskäsittely

Tietojen peruskäsittelyä voidaan tehdä kahdella tasolla: taulu.php olettaa operaatioksi valitun ja alueeksi valitun operaation alueen. taulu0.php antaa mahdollisuuden käsitellä myös operaatiota ja aluetta. Tarkastusfunktiot huolehtivat siitä, että operaatio ja alue pysyvät keskenään synkronoituina.

Valintalistat

Valintalistat järjestetään normaalisti valittavan kohteen mukaan aakkosjärjestykseen. Jos listalla näytetään muutakin tietoa (alue, operaatio), järjestetään lista ensisijassa alueen, toissijaisesti operaation ja kolmanneksi valittavan kohteen mukaan.

Henkilön asemakoodit lajitellaan kuitenkin aina prioriteetin (=arvoasema) mukaan.

Tietokannan rakenteen muuttaminen

Mikäli tietokannan rakennetta muutetaan, tulee tarkastaa myös tiedostot tarkasta-kanta.php, ohje-guru.html (taulukko synkronoinnista) ja sync.php .

Operaation miehitys ja hälytysryhmät

Sarake jarjesto.paivystys_id ei ole enää käytössä eikä ohjelmisto välitä sen arvosta.

Järjestön katsotaan olevan mukana operaatiossa jos yksikin siihen kuuluva henkilö on mukana operaatiossa.

Operaation miehittäminen - hlo-oper.php

Aina kun henkilö otetaan operaatioon, asetetaan hänet hälyryhmän jäseneksi (hlo.halyssa = 1, hlo.paivystys_id = paivystys.id).

Otettaessa tai vapautettaessa täytyy huomioida hlo.ryhma_id ja hlo.hlo_tila_di.

Aina kun henkilö vapautetaan, hänet poistetaan myös hälyryhmästä (hlo.halyssa = 0, hlo.paivystys_id = 1).

Järjestöjen hälytysryhmät - jarjesto-takt.php

Aina kun henkilö otetaan hälyryhmään, otetaan hänet samalla operaatioon (hlo.halyssa = 1, hlo.paivystys_id = paivystys.id).

Aina kun henkilö poistetaan hälyryhmästä, hänet vapautetaan myös operaatiosta (hlo.halyssa = 0, hlo.paivystys_id = 1).

Päävalikon profiilit

Päävalikossa voidaan valita sivun lopussa olevilla linkeillä erilaisia profiileja, jotka on taulukoitu ohessa:

ProfiiliKaikkiJohtoSihteeriViesti
conf 0 100 200 300
tilanne X X X X
tilanne-taysiXX X X
tilanne-kalustoXX X
lapset-taysiX X X X
taktinen-lokiXX X X
tyotunnitX X X
ryhma-taktX X
hlo-taktX X X
tap-taktX X X X
ryhma-miehitysXX X X
hlo-operX X X
jarjesto-taktX X X
laite-operX X
kalusto-taktX X
kadonnutX X X X
tap X X X X
hlo X X X
ryhma X X X X
verkko X X
jarjestoX X X
laite X X
tavara X X
paivystys-taktXX X X
paivystys-valintaXXX X
paivystys-loppuXX X
paivystysX X X
kayttajatX
salasanaX X X X
logoff X X X X
tarkasta-kantaX X
hlo_tilaX X
hlo_asemaX X
ryhma_tilaX X
paikka X X X
laite_tyyppiX X
tavara_tyyppiX X
tilanne0X X
hlo0 X X X
ryhma0 X X X
kadonnut0X X X X
tap0 X X X
hlo_tila0X
ryhma_tila0X
paikka0 X X X
laite0 X X
tavara0 X X
hlo_ajat0X X
alue X
osaaminenX
tekninen-lokiX X
replicateX X
sync X
ohje X X X X
ohje-guruX X
viha-esitysX
historiaX X
lisenssiX X X X
testaus X

Päivityksistä

Päivitettäessä ViHaa versioon, joka aiheuttaa tietokannan muutoksen, tulee samalla ajaa kerran päivitysskripti, joka tekee kantaan vastaavat muutokset. Päivitysskriptit on nimetty kanta-v.vv.mysql. Vaihtoehtoisesti kannan voi alustaa kokonaan uudelleen mutta tällöin syötetyt tiedot häviävät.

Kantamuutosskriptejä ei voi jättää väliin vaan kaikki tarvittavat on ajettava järjestyksessä.

5.00

Päivitettäessä ViHaa aiemmista versioista 5.00:aan ja sen jälkeisiin versioihin on huomattava, että käyttäjätunnusten hallinta muuttuu kokonaan sovelluksen vastuulle. Www-palvelimesta on avattava pääsy ViHa-hakemistoon.

Päivitysskripti asettaa kaikille saman salasanan, joka käy ilmi itse skriptistä. Salasanat on syytä muuttaa mitä pikimmin.

Myös käyttöoikeuksien hallinta muuttuu. Oikeudet on syytä tarkastaa päivityksen jälkeen.

Päivitysskripti perustaa uuden alueen, "Määrittelemätön alue", johon sijoitellaan kaikki objektit jotka vaativat tietyn alueen. Tämä alue on tarkoitettu käytettäväksi siirtymäkaudella.

Tapahtumakirjaukset tulee käsin tai SQL:llä sijoittaa oikeisiin operaatioihin (ryhmän mukaan), mikäli ne kuuluvat operaatioihin, joiden ID-numero (4.14 version kannassa) on > 9. Pienemmillä ID-numeroilla varustetut operaatiot käsittelee päivitysskripti.

5.16 (5.16alpha-5.18alpha)

Tietokannan oletussalasanojen ja tietokannan käyttäjätunnusten käsittelyä on muutettu niin, että erilaiset salasanat talletetaan nyt /etc/viha - hakemistossa olevista tiedostoista. Harjoitus- ja pääkannalle asetetaan eri käyttäjätunnukset (ja pitäisi asettaa eri salasanat). Oletuskäyttäjätunnus kantaan on nyt "viha" ja read only - tunnus on poistettu.

Tässä yhteydessä kannasta on syytä poistaa (nyt tarpeettomat) tunnukset ts ja tu, vaikkapa komennolla "DROP USER ts@localhost, tu@localhost".

5.21 (5.20-5.21alpha)

Kantaan tulee lisätä uudenlaiset read only - tunnukset, jotka ovat muotoa kantatunnus_ro. Näille asetetaan sama salasana kuin vastaavalle kantatunnukselle mutta ainoastaan SELECT-oikeus. Valmis apuskripti do-5.21 suorittaa tämän sekä tekee kantaan muut tarvittavat muutokset.

Replikointia varten tarvitaan uusi hakemisto (oletus: /home/viha).

taktinen_loki.id on jatkossa yksilöllinen. Muuntoskripti yrittää tehdä tämän siististi.

Replikointi

Replikointi tarkoittaa sitä, että itsenäinen ViHa-instanssi (etä-viha) hakee kopion verkossa olevan ViHa-instanssin (pää-viha) datasta määräajoin.

Kun replikointi on päällä, tietoja voidaan etä-vihassa selailla mutta ei päivittää. Tämä toteutetaan kirjautumalla tietokantaan tunnuksella, joka ei mahdollista tietojen päivittämistä. Päivitysyritys aiheuttaa enemmän tai vähemmän kryptisen virheilmoituksen.

Replikoinnin toteuttava shell-skripti sijaitsee www-palvelimen ulkopuolella, yleensä hakemistossa /home/viha . Sieltä ajetaan määräajoin cronilla shell-scripti do-autoreplicate, jota ohjaa kaksi konfigurointitiedostoa.

Replikoinnin pääkonfiguraatiotiedosto autoreplicate.conf sijaitsee replikoinnin kotihakemistossa, ja siellä on jokaista replikoitavaa tietokantaa kohden yksi rivi, jossa on seuraavat tiedot välilyönnillä tai tabulaattorilla erotettuina:

TietoEsimerkkiHuomattavaa
Lipputiedoston sijainti/var/www/htdocs/viha3/flagfile Tämän tiedoston nimi on toistaiseksi kovakoodattu palvelimeen, ainoastaan hakemiston nimeen tulee koskea
IP-osoite tai DNS-nimi, jossa pää-viha sijaitseebar.foo.fi
Käyttäjätunnus pää-viha - koneeseenviha
Käytettävän SSH-avaimen tiedostonimi.ssh/id_client
Replikoitavan tietokannan käyttäjätunnusviha
Replikoitavan tietokannan nimitilanne3
Paikallisen tietokannan nimitilanne3

Mikäli lipputiedostosta löytyy sana "yes", suoritetaan replikointi, muuten ei. Lipputiedoston tulee olla www-palvelimen kirjoitettavissa. Pääkäyttäjä voi kääntää replikointilipun päälle tai pois replikointi-näytön kautta. Huomattavaa on, että replikointi tapahtuu asynkronisesti cronista käsin. Tarvittaessa replikoinnin voi ajaa myös komentoriviltä.

Lipputiedoston sisältö ohjaa myös käytettävää tietokannan käyttäjätunnusta. Mikäli yes-sana löytyy, käytetään kantaan kirjautuessa read only - tunnusta. Tällöin päävalikkoon tulee ylimmäksi varoitusteksti siitä, että replikointi on päällä ja tietoja voi vain selailla.

Synkronointi

Synkronointi on tarkoitettu avuksi tilanteisiin, joissa toimitaan itsenäisen ViHa-instanssin (etä-viha) turvin tilanteessa, jossa verkkoyhteyttä ei ole tai verkossa oleva ViHa (pää-viha) ei ole käytettävissä.

Etä-viha tulee käyttöä odotellessa pitää replikoituna pää-vihasta ja synkronointi on tehtävä mahdollisimman nopeasti. Tämän jälkeen etä-viha pitää taas replikoida.

Ennen synkronointia tulee varmistua siitä, että sekä pää-vihan että etä-vihan tietokannoista on olemassa ajantasainen varmuuskopio.

Etä-vihan palvelimen kellon tulisi olla ajassa mahdollisimman tarkasti.

Synkronointi tapahtuu aina kahden ViHa-instanssin kesken. Kantojen versionumeroiden on oltava samat.

Synkronointi ei koskaan poista tietoja.

Kovakoodattuja ID-numeroita ei muuteta.

Instanssien kesken täysin identtiset tiedot jätetään ennalleen.

Jos tiedot ovat oleellisilta osiltaan samat, jätetään kantaan myöhempi tieto.

Jos tiedot ovat erilaiset, tehdään uusi tietue.

Käyttöoikeustietoja ei synkronoida. Taulu suoja tyhjennetään synkronoinnin yhteydessä molemmista päistä.

Tietoturvasyistä synkronointi olisi syytä tehdä esimerkiksi seuraavasti:

  1. Järjestetään pää-vihalle mahdollisuus kytkeytyä etä-vihan tietokantaan esimerkiksi ssh:n port forwarding - ominaisuutta käyttämällä. Valmis pohja löytyy tiedostosta do-sync-ssh.sample, joka asentuu replikointihakemistoon. Esimerkiksi:
    ssh -N -i id_client -R 127.0.0.1:3366:127.0.0.1:3306 viha@bar.foo.fi
        
  2. Kirjaudutaan pää-vihaan.
  3. Ajetaan synkronointi pää-vihasta käsin.

Synkronointijärjestys

Taulut käsitellään seuraavassa järjestyksessä:

Taulu Sarakkeet, joiden perusteella määritetään yksilöllisyys Kovakoodatut ID-numerot Päivitettävät taulut Erityistoimenpiteet
versio (kaikki) Jos eroa, anna virheilmoitus äläkä synkronoi.
juuei (kaikki) Jos eroa, anna virheilmoitus äläkä synkronoi.
hlo_ajat_tyyppi (kaikki) Jos eroa, anna virheilmoitus äläkä synkronoi.
suoja Tyhjennetään molemmista (sic!)
alue alue 1-3 hlo, hlo_ajat.variable_id, hlo_tila, jarjesto, kadonnut, kayttajat_alue, laite, loki, loytynyt, osaaminen, paikka, paivystys, ryhma, ryhma_tila, tap, tavara hlo_ajat.variable_id erikoiskäsittely
hlo nimi hlo_ajat, kayttajat, laite, osaaminen_hlo, tavara Jos synkronointien välillä eri instansseihin perustetaan samannimiset henkilöt, toinen katoaa. Tämä huomataan tosin seuraavan kerran kadonnutta henkilöä perustettaessa, kun perustaminen ei onnistu.
hlo_ajat hlo_id, hlo_ajat_tyyppi_id, variable_id, ts
hlo_asema hlo_asema 1-9 hlo, hlo_ajat.variable_id hlo_ajat.variable_id erikoiskäsittely
hlo_tila alue_id, paivystys_id, hlo_tila 1-5 hlo
jarjesto jarjesto, alue_id 1-2 hlo, laite, tavara
kadonnut nimi, kello
kayttajat 1-2 Ei synkronoida!
laite jarjesto_id,laite,tunniste
laite_tyyppi laite_tyyppi 1 laite
lapsi_tila lapsi_tila 1-4 kadonnut, loytynyt
loki alue_id, paivystys_id, data, ip, user, ts Data sisältää lainausmerkkejä, jotka hoidettava!
loytynyt nimi,kello
osaaminen alue_id, paivystys_id, osaaminen 1-18 osaaminen_hlo
paikka alue_id, paivystys_id, paikka 1-4 ryhma
paivystys alue_id, nimi, alkoi 1-2 hlo, hlo_ajat.variable_id, hlo_tila, jarjesto, kadonnut, kayttajat_paivystys, laite, loki, loytynyt, osaaminen, paikka, paivystys_tuki, ryhma, ryhma_tila, taktinen_loki, tap, tavara hlo_ajat.variable_id erikoiskäsittely
ryhma alue_id,paivystys_id,kutsu 1 hlo, hlo_ajat.variable_id, laite, paivystys.johto_ryhma_id, paivystys.viesti_ryhma_id, paivystys_tuki, tap, tavara, hlo_ajat.variable_id erikoiskäsittely
ryhma_tila alue_id,paivystys_id,ryhma_tila 1-13 ryhma
taktinen_loki paivystys_id,data,ip,user,ts
tap alue_id,paivystys_id,ryhma_id,tap,ts
tavara jarjesto_id,hlo_id,tavara,tunniste
tavara_tyyppi tavara 1-9
verkko verkko 1-8 laite,paivystys.oletus_verkko_id,ryhma
kayttajat_alue kayttajat_id, alue_id Päivittynyt kuntoon aiemmilla kierroksilla. (Jos duplikaatteja, poista vanhimmat)
kayttajat_paivystys kayttajat_id, paivystys_id Päivittynyt kuntoon aiemmilla kierroksilla. (Jos duplikaatteja, poista vanhimmat)
paivystys_tuki paivystys_id, ryhma_id Päivittynyt kuntoon aiemmilla kierroksilla. (Jos duplikaatteja, poista vanhimmat)
osaaminen_hlo hlo_id, osaaminen_id Päivittynyt kuntoon aiemmilla kierroksilla. (Jos duplikaatteja, poista vanhimmat)

Käännöksestä

Tähän taulukkoon on koottu ViHan keskeisimpiä termejä eri kielillä.

SuomeksiIn English
AlueArea
AluevastaavaArea manager
PääkäyttäjäAdministrator
HenkilöPerson
HälytysryhmäTeam
JärjestöOrganisation
OperaatioOperation
SijaintiLocation
RyhmäSquad
TilaStatus
KalustoEquipment
ViestivälineetRadio equipment
TavaratOther equipment

Monikulttuuristamisessa käytetään työkaluna gettext - kirjastoa.