Jurij Stjepčević
RAZVOJ REŠITEV ZA ODPRTOKODNA
SPLETNA NAMIZJA
Diplomsko delo
Maribor, junij 2013
RAZVOJ REŠITEV ZA ODPRTOKODNA SPLETNA NAMIZJA
Diplomsko delo
Študent: Jurij Stjepčević
Študijski program: VS ŠP Računalništvo in informatika
Smer: Informatika
Mentor: izr. prof. dr. Aleš Ţivkovič
Lektorica: mag. Nataša Koraţija, prof. slov.
I
II
ZAHVALA
Zahvaljujem se mentorju izr. prof. dr. Alešu
Ţivkoviču za pomoč in nasvete pri izdelavi
diplomskega dela.
Zahvalil bi se podjetju DARS, ki mi je po
končanem študiju omogočilo praktično
usposabljanje v IT in ITS oddelku Slovenske
Konjice.
Posebna zahvala gre staršema, ki sta mi
omogočila študij, in vsem, ki ste mi pomagali
uresničiti moj cilj.
III
Razvoj rešitev za odprtokodna spletna namizja
Ključne besede: odprtokodna spletna namizja, razvoj rešitev, eyeos, lucid namizje
UDK: 004.43:004.738.5(043.2)
Povzetek:
Živimo v času informacijske dobe, kjer prisotnost interneta in računalniško podprtih
rešitev lahko spremljamo prav na vsakem koraku. Trend naraščanja uporabe spletnih
servisov se je v zadnjih letih še posebej povečal.
V diplomskem delu predstavljamo računalništvo v oblaku, katerega bistvo je ponujanje
storitev uporabnikom preko spleta, edina omejitev je internetna povezava. V nadaljevanju
bomo spoznali najbolj popularna odprtokodna spletna operacijska sistema EyeOS in
Lucid.
Skozi praktični del bomo prikazali razvoj rešitev za odprtokodna spletna namizja, v našem
primeru razvoj modula za krmiljenje in nadzor IP kamer ter integracijo z zgoraj
omenjenima spletnima operacijskima sistemoma.
IV
Developing solutions for open source web desktops
Key words: open source web desktops, developing solutions, eyeos, lucid desktop
UDK: 004.43:004.738.5(043.2)
Abstract:
We live in an information era, where the presence of the internet and computer supported
solutions follow us every moment of our lives.
The trend of using web services has risen quite a lot, especially in the last couple of years.
In this degree dissertation we will present cloud computing, which offers services to users
over the internet.
The only obstacle to cloud computing offering its service to an user would be the lack of an
internet connection. Further on, we will be comparing the most popular open source web
desktops EyeOS and Lucid.
Throughout the practical part,we will be showing you the development of solutions for
open source web desktops, in this case it is the development of a module for controlling IP
cameras in an environment of open source EyeOS and integrating them with the
aforementioned web based operating systems.
V
KAZALO VSEBINE:
1 UVOD ............................................................................................................................ 1
2 RAČUNALNIŠTVO V OBLAKU ................................................................................ 3
2.1 Zgodovina računalništva v oblaku .......................................................................... 4
2.2 Referenčni model in arhitektura oblaka .................................................................. 5
2.3 Infrastruktura kot servis (IaaS) ............................................................................... 8
2.4 Platforma kot servis (PaaS) ..................................................................................... 9
2.5 Programska oprema kot servis (SaaS) .................................................................. 10
2.6 Prednosti in slabosti oblaka .................................................................................. 11
3 SPLETNO NAMIZJE EyeOS ..................................................................................... 14
3.1 Arhitektura spletnega operacijskega sistema ........................................................ 14
3.2 Delovanje in prirejanje okolja ............................................................................... 16
3.2.1 Sistemski servisi ............................................................................................ 16
3.2.2 Knjiţnice ........................................................................................................ 21
4 RAZVOJ REŠITVE ZA KRMILJENJE IN VIDEONADZOR IP KAMER V EyeOS ..
..................................................................................................................................... 25
4.1 Specificiranje zahtev ............................................................................................. 26
4.2 Krmiljenje strojne opreme .................................................................................... 27
4.3 Priprava modula in implementacija funkcij .......................................................... 28
4.3.1 Krmiljenje kamer na daljavo ......................................................................... 31
4.3.2 Nastavitve kontrasta in svetlosti .................................................................... 33
4.3.3 Prikaz ţive slike ............................................................................................. 35
4.3.4 Funkcija pribliţevanja ................................................................................... 37
4.3.5 Prikaz ure in datume uporaba JQuery............................................................ 39
4.3.6 Video-detekcija in baza posnetkov ................................................................ 40
4.3.7 Nastavitev vira in konfiguracija .................................................................... 41
4.3.8 Resetiranje in inicializacija ............................................................................ 42
4.4 Sistemski in mreţni viri ........................................................................................ 44
4.4.1 Sistemski viri ................................................................................................. 45
4.4.2 Mreţni pretok ................................................................................................ 45
4.4.3 Spremljanje omreţne TCP komunikacije z orodjem Wireshark .................. 48
VI
4.5 Testiranje modula ................................................................................................. 48
5 SPLETNO NAMIZJE Lucid ....................................................................................... 50
5.1 Struktura spletnega namizja Lucid ....................................................................... 50
5.2 Delovanje in prirejanje okolja ............................................................................... 51
5.2.1 Knjiţnice in gradniki ..................................................................................... 51
5.3 Razvoj rešitev ....................................................................................................... 56
6 PRIMERJAVA ODPRTOKODNIH SPLETNIH NAMIZIJ ...................................... 58
6.1 Varnost in mehanizmi ........................................................................................... 59
7 O STROJNI IN PROGRAMSKI OPREMI V PROJEKTU ........................................ 62
7.1 Shema omreţja ...................................................................................................... 64
7.2 Nastavitev usmerjevalnika in preslikava vrat ....................................................... 64
8 SKLEP ......................................................................................................................... 66
9 VIRI IN LITERATURA .............................................................................................. 68
10 PRILOGE .................................................................................................................... 75
Priloga A: Potrdilo o lektoriranju diplomskega dela ....................................................... 75
Priloga B: Specifikacije ................................................................................................... 76
Priloga C: Naslov študenta .............................................................................................. 78
Priloga D: Kratek ţivljenjepis .......................................................................................... 78
Priloga E: Izjava o avtorstvu diplomskega dela ............................................................... 79
Priloga F: Izjava o ustreznosti diplomskega dela ............................................................ 80
Priloga G: Izjava o istovetnosti tiskane in elektronske verzije ........................................ 81
VII
KAZALO SLIK:
Slika 2-1: Referenčni model oblaka [26] 6
Slika 2-2: Delovanje modela odjemalec-streţnik 6
Slika 2-3: Mreţna arhitektura P2P in odjemalec-streţnik [31] 8
Slika 2-4: Hierarhični prikaz treh glavnih enot računalniškega oblaka 11
Slika 2-5: Napoved uporabe računalniškega oblaka v prihodnosti [47] 12
Slika 3-1: Arhitektura spletnega operacijskega sistema EyeOS[57] 15
Slika 3-2: Upravitelj procesov in aplikacija videonadzor v okolju EyeOS 19
Slika 3-3: Pregled XML datoteke v grid načinu 24
Slika 4-1: Diagram primerov uporabe za modul videonadzor 26
Slika 4-2: Diagram zaporedja za modul videonadzor 27
Slika 4-3: XML sestava glavnega menija eyeDock 30
Slika 4-4: XML glavni meni po spremembah 31
Slika 4-5: Funkcija premakni levo 33
Slika 4-6: Nastavitev kontrasta 35
Slika 4-7: Javascript funkcija za pribliţevanje 38
Slika 4-8: Prikaz slike v ţivo in uporaba funkcije pribliţevanja v okolju EyeOS 39
Slika 4-9: Programska oprema za detekcijo gibanja na streţniku 41
Slika 4-10: Nastavitve vira oz. streţnika 42
Slika 4-11: Prikaz delovanja funkcije za resetiranje in inicializacijo znotraj okolja EyeOS
43
Slika 4-12: Prikaz porabe sistemskih sredstev na streţniku 45
Slika 4-13: Sprejet omreţni paket IP Kamere 46
Slika 4-14: Promet, ustvarjen v roku ene ure v dnevnem načinu 47
Slika 4-15: Prikaz prometa, ustvarjenega v roku ene minute v nočnem načinu 47
Slika 4-16: Potek TCP komunikacije med streţnikom in opremo [71] 48
Slika 5-1: Struktura LucidDesktop 50
Slika 5-2: Pošiljanje sporočila s pomočjo servisa Crosstalk[11] 52
Slika 5-3: Pošiljanje sporočila drugi instanci oz. aplikaciji[11] 53
Slika 7-1: Uporabljene IP kamere v našem projektu [80] 63
Slika 7-2: Shema lokalnega omreţja (zaradi varnosti so podatki na sliki prikriti) 64
VIII
Slika 7-3: Preslikava vrat na usmerjevalniku 65
KAZALO TABEL:
Tabela 2-1: Prednosti in slabosti oblaka .............................................................................. 11
Tabela 3-1: Funkcije servisa proc ........................................................................................ 18
Tabela 4-1: Opis XML atributov iz datoteke eyeDock.xml ................................................ 30
Tabela 4-2: Parametri iz .js datoteke za krmiljenje ............................................................. 32
Tabela 4-3: Parametri za nastavitev kamere ........................................................................ 33
Tabela 4-4: Parametri pri videostream.cgi .......................................................................... 36
Tabela 4-5: Parametri pri videostream.asf ........................................................................... 36
Tabela 4-6: Parametri pri snapshot.cgi ................................................................................ 36
Tabela 4-7: Parametri za reboot.cgi skripto ob inicializaciji. .............................................. 44
Tabela 4-8: Captcha preverjanje .......................................................................................... 49
Tabela 4-9: Testiranje prijava v sistem EyeOS ................................................................... 49
Tabela 4-10: Testiranje vnosnih form ................................................................................. 49
Tabela 4-11: Test skalabilnosti ............................................................................................ 49
Tabela 6-1: Primerjava odprtokodnih spletnih namizij ....................................................... 58
Tabela 6-2: Primerjava domačega in spletnega namizja ..................................................... 58
Tabela 7-1: Usmerjevalna tabela ......................................................................................... 65
IX
UPORABLJENE KRATICE
SQL Structured Query Language
SCADA Supervisory Control And Data Acquisition
WEB 2.0 World Wide Web second generation
ARPANET Advanced Research Projects Agency
MIT Massachusetts Institute of Technology
DARPA Defense Advanced Research Projects Agency
QoS Quality of Service
SLA Service Level Agreement
TCP/IP Transmission Control Protocol / Internet Protocol
HTTP Hyper Text Transfer Protocol
P2P Peer to Peer
VLAN Virtual Local Area Network
VPN Virtual Private Network
ISO International Organization for Standardization
ISMS Information Security Management System
SSAE Statement on Standards for Attestation Engagements
ISAE International Standards for Assurance Engagements
CMS Content Management System
CRM Customer Relationship Management
B2C Business To Consumer
HRM Human Resource Management
ASP Application Service Provider
OS Operating System
GPL General Public License
PHP Hypertext Preprocessor
Javascript JS spletni skriptni jezik
HTML Hyper Text Markup Language
CSS Cascading Style Sheets
XML eXtensible Markup Language
MySQL My Structured Query Language
API Application Programming Interface
PID Process Identifier
HTTPS Hyper Text Transfer Protocol Secure
PTZ Pan Tilt Zoom
FW Firmware
CGI Common Gateway Interface
AJAX Asynchronous Javascript And XML
JQuery Javascript knjiţnica
X
IR InfraRed
RAW Header - surov način brez obdelovanja
AFL Academic Free License
HTACCESS HyperText Access
EIP Elastic IP Adressing
DHCP Dynamic Host Configuration Protocol
DDOS Denial Distribution of Service
JPEG Joint Photographic Experts Group
ACK Acknowledgment flag
SYN Synchronization flag
FIN Final flag
CAPTCHA Completely Automated Public Turing Computer Humans Apart
XSS Cross Site Scripting
Razvoj rešitev za odprtokodna spletna namizja
1
1 UVOD
21. stoletja si brez računalnikov skorajda ne moremo zamisliti. Ob morebitnem
tehnološkem mrku bi posledice občutili predvsem uporabniki, ki smo vajeni dosedanjih
navad in razvad. Z uvedbo interneta se je na računalniškem področju marsikaj spremenilo,
kajti danes je to zelo uporabljan komunikacijski medij za učenje, komuniciranje, nudenje
storitev z uporabo različnih protokolov [1]. Opazimo lahko, da narašča trend uporabe
spleta in informacijskih sistemov, saj se vedno več vsakdanjih opravil avtomatizira [2].
Aplikacije in nudenje storitev se selita na streţniško stran oz. računalniški oblak, kar nam
zagotavlja zelo dobro dostopnost, v zameno pa moramo vzeti v zakup, da smo v primerjavi
z lokalnimi rešitvami veliko bolj izpostavljeni celotnemu svetu in napadalcem [3].
Zagotoviti varnost, nemoteno delovanje, dobro skalabilnost sistema so eni izmed najbolj
pomembnih kriterijev, ki jih moramo upoštevati [4]. Ker spletne rešitve rastejo zelo hitro,
pa določeni razvijalci mnogokrat pozabljajo na varnost, katera je zelo pomemben del pred
javno objavo rešitve. Ne smemo pozabiti tudi dejstva, da so uporabniki vedno bolj
računalniško izkušeni in bo potrebno pri razvoju aplikacij še več časa nameniti varnostnim
mehanizmom, kar je ţe danes resen problem. Še posebej moramo biti previdni, kadar
imamo opravka z občutljivimi podatki, kot so imena, priimki, gesla, naslovi, ki so zaupne
narave. Poskrbeti moramo za enkripcijo podatkov v podatkovni bazi, preveriti Structured
Query Language (SQL) [5] ranljivosti, dolţino vnosnih polj oz. validacijo pred vpisom.
Vse več spletnih mest temelji na smernicah World Wide Web second generation (Web 2.0)
[6], katerega glavni cilji so uporabniško orientiran vmesnik, skupno delo, deljenje
informacij, druţbena omreţja. Predpostavljamo, da je čas razvoja spletne aplikacije
»kratek« v primerjavi s časom, ki ga porabimo za zagotavljanje varnosti.
Varnost je v današnjem času resen problem, kar je razvidno iz tega, da lahko testno
namestimo spletni streţnik in ne objavimo naslova javno na internetu ter smo tako ţe
Razvoj rešitev za odprtokodna spletna namizja
2
izpostavljeni napadalcem, ki naključno izvajajo odzivnost Internet Protocol (IP) naslovov
in pregled vrat (angl. scanning ports), napade na streţnike s poskušanjem (angl. bruteforce
attack), napade s slovarjem (angl. dictionary attack) in druge [7]. Menimo, da je ţe priklop
v svetovno omreţje brez ponujanja storitev navzven lahko tvegan. V nadaljevanju smo se
posvetili razvoju spletne rešitve za krmiljenje in nadzor IP kamer v okolju EyeOS (angl.
Eye Operating System). Nekaj znanja na to temo smo pridobili ţe iz praktičnega
usposabljanja, kjer smo ustvarili prototip namizne aplikacije za detekcijo s pomočjo
uporabe AForge programskega vmesnika [8] ter spoznali sisteme za krmiljenje opreme
SCADA (Supervisory Control And Data Acquisition) [9] v sklopu praktičnega
usposabljanja, zato ţelim s tem delom svoje dosedanje znanje še poglobiti. Diplomska
naloga bo prispevala k razumevanju in razvoju rešitev v okolju odprtokodnih spletnih
namizij. V nalogi smo se omejili na razvoj rešitev v privatnem oblaku in izvedbi modula za
krmiljenje oddaljene opreme preko spletnega operacijskega sistema EyeOS (Eye Operating
System) [10] in LucidDesktop [11].
Razvoj rešitev za odprtokodna spletna namizja
3
2 RAČUNALNIŠTVO V OBLAKU
V današnjem času je računalniški oblak (angl. cloud computing) moderna oblika ponujanja
storitev preko interneta, a korenine segajo kar daleč nazaj, in sicer v leto 1960 [12], ko je
nastal prvi koncept za omenjeno tehnologijo, vendar jim je takrat še ni uspelo realizirati
zaradi tehničnih razlogov [13].
Poimenovanje izvira iz besede »Cloud«, ki predstavlja v računalništvu kompleksno
strukturo med sabo povezanih računalniških sistemov. Glavni namen je ponujati storitve,
ki tečejo na streţniku in se izvajajo preko brskalnika, brez da bi ozadje delovanja občutili
končni uporabniki. Osnovo sestavljajo trije pristopi, in sicer virtualizacija, storitveno
orientirana arhitektura ter najem storitev. Poznamo tri vrste oblakov, in sicer privatne,
javne ter hibridne. Privatni oblak teče v internem okolju, npr. v podjetju, medtem ko ima
pri javnem oblaku dostop do storitev vsak, ki je registriran npr. Gmail.com [14],
Salesforce.com [15].
Hibridni oblak je skupek obeh zgoraj omenjenih, privaten je le del storitev [16]
Storitve so streţniško orientirane, kar pomeni, da uporabnik sluţi zgolj kot »vhod
podatkov«, saj se vse stvari obdelujejo neposredno na streţniku, ki je lahko tudi virtualno
porazdeljen. Potencialni naročnik ne potrebuje nobene namestitve, da bi lahko začel z
delom preko spletne rešitve. Prednost ponujanja storitev preko spletnih servisov je
zagotovo 24-urna dostopnost od kjerkoli, omejitev je zgolj, da imamo internetno povezavo.
Če upoštevamo, da so mobilne naprave in internet v velikem razcvetu, je torej dosegljivost
na voljo praktično na vsakem koraku, in to je bila tudi ideja načrtovalcev.
Pribliţek računalništvu v oblaku so bili v takratnem času »mainframe sistemi«, streţniki in
odjemalci oziroma terminali [17]. Omenjena tehnologija je do naročnika precej bolj
prijazna kot namizna rešitev, saj naročnik privarčuje na dragi računalniški opremi, t.j.
Razvoj rešitev za odprtokodna spletna namizja
4
streţnikih ter vzdrţevanju v lastnem okolju. Namizne rešitve se ponavadi prodajajo v celoti
kot programski paket, pri spletnih storitvah pa lahko zakupimo le določen del.
Sistemski integratorji in vzdrţevalci imajo v primerjavi z namiznimi rešitvami vedno manj
dela [18], saj v računalniškem oblaku ni več potrebna draga namestitev opreme, varnostne
kopije, integracija informacijskih sistemov za omenjene potrebe poskrbi podjetje oz.
informacijski sistem, ki ponuja storitev vsem naročnikom. V oblaku se ti procesi izvajajo
samodejno. Naročniki bodo seveda še naprej potrebovali uvajanje v novo tehnologijo,
svetovanje, prilagoditve. Razvijalci se trudijo razviti čim bolj razumljive aplikacije, da
uporabniki ne bi potrebovali navodil za uporabo. Kot kaţe, je to ţe uspelo podjetju Google.
Le kdo ne zna uporabljati njihovih storitev Google Apps? Z uvedbo smernic spleta 2.0 ter
3.0 verjetno po navodilih v prihodnje ne bomo posegali, saj temeljijo na prijazno
uporabniško orientiranem spletnem vmesniku, ki bo najverjetneje tudi v 3D obliki [19].
Bomo v prihodnosti uporabljali samo še storitve v oblaku? To je vprašanje, na katerega ne
vemo odgovora. Svetovalci nas seveda pozivajo k uporabi in prevzemu nove tehnologije,
vendar to ni vedno najboljše. Podjetja, ki investirajo v drago strojno in programsko
opremo, hočejo ustvariti enotno zbirko podatkov in uporabnike navaditi, da bi dnevno
uporabljali njihove storitve, ki so povezane v globalno okolje za vse uporabnike, vendar je
največje tveganje pri tem varnost in varstvo osebnih podatkov. Danes obstaja čedalje več
storitev v računalniškem oblaku, ki uporabljajo enako avtentikacijo za več storitev, npr.
Youtube [20], GoogleApps [21].
2.1 Zgodovina računalništva v oblaku
Prvi koraki računalništva v oblaku segajo v polovico 20. stoletja, natančneje v leto 1950.
Tehnologija je obstajala zgolj kot koncept in je bila v povojih. Pobudnika ideje Joseph Carl
Robnett Licllider in John McCarthy sta predlagala, da bi lahko omreţje in njegove storitve
trţili kot javne dobrine, npr. elektriko in vodo [22]. Omenjena računalniška znanstvenika
šestdesetih let sta sodelovala pri razvoju prvega omreţja ARPANET(Advanced research
projects agency network), skupaj s skupinama iz inštituta MIT (Massachusetts institute of
technology) in agencije DARPA (Defense advanced research project agency), ki je
uporabljal metodo preklapljanja paketov. Današnji internet deluje na temeljih omreţja
Razvoj rešitev za odprtokodna spletna namizja
5
ARPANET, iz česar sledi, da je bila ideja zelo dobro zastavljena, vendar je takrat
tehnološko niso mogli podpreti in je ostala zgolj na papirju [23]. Če pogledamo z drugega
zornega kota, si lahko oblak v preteklosti predstavljamo kot tovarno, ki je potrebovala za
obratovanje svojo elektrarno, inţenirje in mnogo drugih obveznosti. Danes se podjetja ves
čas posvečajo primarnim problemom in ne toliko preostalim, kajti npr. elektrika je javno
dobro. V oblaku imamo tudi veliko storitev, ki so javne, zato se pri razvoju novih rešitev
posvečamo zgolj ključnim problemom, kar pomeni da se bodo razvijalci vedno bolj
pribliţali zahtevam potrošnikov. Kar nekaj časa je preteklo, dokler je tehnologija postala
uporabna v vsakdanjem ţivljenju. Z razvojem omreţnega protokola TCP/IP je realizacija
oblaka uspela. Podjetje Salesforce je leta 1999 začel svoje storitve trţiti preko preproste
spletne strani z uporabo interneta. Storitev je postala uspešna in kaj kmalu zelo razširjena
[24]. Mnoga ostala velika podjetja so pričela s trţenjem preko spleta. Eden izmed uspešnih
gigantov je ameriško podjetje Amazon, ki je pričelo preko spletnega servisa trţiti storitve,
kot so prostor na oddaljenem računalniku, kalkulacije in podobno. Evolucijo pri
računalništvu v oblaku je napravilo podjetje Google, ki je leta 2009 z izdajo Google Apps
povsem osvojila uporabnike širom sveta s storitvami, kot so e-pošta, urejevalniki
dokumentov, prevajalnik, sistem za iskanje spletnih strani in ostalimi. Kaj kmalu so v igro
vstopila tudi večja podjetja, kot so IBM, Microsoft, Oracle, HP, kar dokazuje, da je danes
to prevladujoča tehnologija.
2.2 Referenčni model in arhitektura oblaka
Referenčni model temelji na 3 osnovnih slojih:
sistemskem nivoju, ki zajema strojno opremo in vire, ki so na voljo,
jedru oz. srednjemu nivoju vsebuje procese, ki zagotavljajo kakovost storitve; takšni
servisi so kvaliteta storitve (angl. Quality Of Service), plačilna politika (angl. Pricing),
nadziranje (angl. Monitoring), nivojsko upravljanje SLA(Service level agreement)
management, izvršno upravljanje (angl. Execution management), merjenje (angl.
Metering), računovodstvo (angl. Accounting), namestitev (angl. Deployment),
virtualizacija sistemov (angl. Virtual machine systems),
uporabniškem nivoju, ki zajema vmesnike za splet nove generacije Web 2.0, programske
knjiţnice API. Aplikacije, ki tečejo v oblaku, so večinoma poslovne, znanstvene in danes
Razvoj rešitev za odprtokodna spletna namizja
6
zelo priljubljena druţbena omreţja [25].
Slika 2-1: Referenčni model oblaka [26]
Arhitektura odjemalec-streţnik (angl. Client-server)
Slika 2-2: Delovanje modela odjemalec-streţnik
Razvoj rešitev za odprtokodna spletna namizja
7
Omenjen model je temelj današnjega interneta [27]. Na eni strani imamo streţnik oz.
gostitelje, na drugi strani pa odjemalce oz. uporabnike, ki ţelijo dostopati do vsebin, katere
so shranjene na oddaljenem računalniku. Pri dostopu do spletnih strani se uporablja Hyper
Text Transfer Protocol (HTTP), kateri deluje na vratih 80. Pošlje se zahteva za spletno
stran, streţnik vrne odgovor odjemalcu z omenjeno vsebino. Z razvojem tehnologij je
postal model kompleksnejši, imamo več sočasnih povezav s streţniki, z uvedbo
programskih aplikacijskih vmesnikov je razvoj aplikacij s programerskega stališča precej
laţji. Model odjemalec streţnik se je začel spreminjati z uvedbo centraliziranih streţnikov
oziroma računalniškega oblaka. Streţniki so naprimer locirani v ZDA, uporabnik pa
prihaja iz Rusije. Če uporabljamo kakšen servis, ki mora biti odziven v določenem
časovnem intervalu, lahko naletimo na teţave. Pri podjetju Google imajo razpršene
zrcaljene streţnike na več lokacijah po svetu z istimi podatki, ki so sinhronizirani [28]. V
računalniškem oblaku se podatki hranijo v tujini, kar lahko privede do različnih tveganj,
med drugim tudi zakonskih.
Obstaja tudi druga vrsta arhitekture, ki se imenuje Peer to Peer (P2P), ki deluje od
uporabnika do uporabnika. Vsak izmed sodelujočih ima enakovredno vlogo glede na
sprejemanje in oddajanje. Pri omenjeni arhitekturi je varnost zelo vprašljiva, saj se podatki
o nas nahajajo tudi na drugih računalnikih, ki morda niso dobro zaščiteni [29].
Danes se omenjena tehnologija najbolj uporablja pri izmenjevanju datotek s trenutno
popularnim programom torrent [30], ki uporablja protokol bittorrent [30] in omreţje P2P
[29].
Vsaka izmed teh dveh arhitektur ima svoje prednosti in slabosti. Katera je boljša, je
odvisno od problema, ki ga ţelimo realizirati. V današnjem času prevladuje predvsem
arhitektura odjemalec-streţnik z rahlimi modifikacijami, saj je ob razvoju računalniškega
oblaka le-ta postala bolj centralizirana.
Razvoj rešitev za odprtokodna spletna namizja
8
Slika 2-3: Mreţna arhitektura P2P in odjemalec-streţnik [31]
2.3 Infrastruktura kot servis (IaaS)
Pri tem servisu gre za ponujanje računalniške infrastrukture, ki jo najamemo oz. dobimo v
zakup. Prav tako za delovanje ni potreben nakup nobene programske opreme. S tem se
izognemo velikim stroškom postavitve in vzdrţevanjem lastnega podatkovnega centra.
Sistem lahko hitro prilagodimo za svoje rešitve, s tem imamo tudi moţnost postavitve
lastnih virtualnih streţnikov in dodeljevanja streţniških resursov. V omenjenem segmentu
delajo mreţni arhitekti in skrbniki sistemov [37]. Eden izmed prvih takšnih ponudnikov je
bilo podjetje Amazon, ki je s storitvijo Elastic Pay As You Go prebil led in postal uspešen
[32]. Rešitve omogočajo fizično in virtualno dodeljevanje resursov, kot so diskovni
prostor, spomin, procesorski čas, procesi/opravila, dovoljenja, Quality of Service (QoS).
Svoj deleţ k popularnosti IaaS so dodala tudi podjetja, ki ponujajo virtualne rešitve
VMWare, CitrixSystems, XenServer, IBM, Oracle, Microsoft Azure, Amazon EC2, KVM
[33]. Pri upravljanju domene in gostovanju ni več potrebna tretja oseba, ampak za to
skrbimo sami. Do virtualnih streţnikov dostopamo preko navideznega privatnega omreţja
oz. povezave Virtual Private Network (VPN). Znotraj našega računalniškega omreţja
lahko kreiramo navidezna zasebna podomreţja, imenovana Virtual Local Area Network
(VLAN).
Razvoj rešitev za odprtokodna spletna namizja
9
Pri znanih ponudnikih so se ţe tudi pojavile zlorabe v piratske namene, saj so s pomočjo
navideznih virtualnih streţnikov izvajali razbijanje gesel z metodami grobe sile (angl.
bruteforce) [34] in napadi s slovarji (angl. dictionary attack) [34]. Pri zlorabi
računalniškega oblaka oseba tudi pravno odgovarja, kršitelja je na internetu teţko
identificirati, odkrije se lahko na podlagi IP številke, ki je dodeljena vsakemu uporabniku,
in ta tudi odgovarja v primeru zlorabe. Obstajajo tudi metode prikrivanja in spreminjanja
IP naslovov, kar predstavlja pri odkrivanju kršiteljev dodaten problem.
V današnjem času je skoraj zmanjkalo IP naslovov [35] po alokaciji IPv4 (internet protocol
version 4), zato je pred vrati nova verzija, in sicer IPv6 (internet protocol version 6).
V oblaku dobimo elastično dodeljen IP naslov, ki je vezan na uporabniško ime. Ob
kreiranju novih instanc virtualnih sistemov uporabljamo Elastic Internet Protocol (EIP).
Tako so se izognili potrati le-teh. Amazon s storitvijo EC2 ponuja recimo 5 EIP naslovov,
vezanih na uporabniško ime, ki jih lahko dodelimo vsaki instanci virtualnega sistema [36].
2.4 Platforma kot servis (PaaS)
Je računalniško okolje z ţe vgrajenimi osnovnimi rešitvami in ni potrebno znanje niţjega
oz. sistemskega nivoja, ampak lahko pričnemo z implementacijo rešitve in gremo skozi cel
ţivljenjski cikel razvoja rešitve ter ga ponudimo kot spletni servis [38]. V tem segmentu
delajo razvijalci programske opreme. Platforma nam omogoča, da ne pričnemo rešitve
razvijati od začetka, ampak uporabimo ţe uspešne pogone, katerim sprogramiramo lastne
funkcije za potrebe razvoja lastnih informacijskih rešitev. Ponudniki omenjenih storitev so
VMware SpringSource, GoogleAppEngine, Microsoft Azure, Engine Yard [39]. S
pojavom servisa imajo razvijalci na voljo več virov, kot če bi to počeli z lastno izvedbo.
Glavna skrb Platform as a Service (PaaS) je zagotavljanje virtualizacije in delovanja kot
streţnik. Najbolj pomembna je danes prav varnost, zato moramo preveriti ali ponudniki
stremijo k omenjenim varnostnim smernicam, katere so zapisane v dokumentih ISO 27001
information security management system (ISMS) [40], Statement on Standards for
Attestation Engagements (SSAE16) [41], International Standards for Assurance
Razvoj rešitev za odprtokodna spletna namizja
10
Engagements (ISAE) 3402 [42].
2.5 Programska oprema kot servis (SaaS)
Preko tega sloja ponudnik svoje storitve trţi na zahtevo, kar pomeni, da zajema celoten
paket za delovanje, tako infrastrukturo kot programsko opremo. Eni izmed najbolj
uspešnih ponudnikov so SalesForce, SAP, Microsoft Office 365, Oracle, Google Apps
[43]. Ta segment je posvečen končnim uporabnikom, ki za dostop potrebujejo le brskalnik,
ostala vsebina se nahaja v računalniškem oblaku. Omenjen način najdemo predvsem v
podjetniških rešitvah, kot so Content management system (CMS), Customer relationship
management (CRM), Business to customer (B2C), Enterprise resource planning (ERP),
Management information systems (MIS), Human resource management (HRM) [44].
Omenjen princip je nekoč ţe bil v uporabi, in sicer pri podjetju IBM okoli leta 1960 [45]. Z
razvojem interneta je tehnologija ponovno oţivela, od začetka s storitvami preko
Application service provider (ASP), sedaj pa masovno preko računalniškega oblaka.
S pojavitvijo računalniškega oblaka so se odprle nove moţnosti za razvoj aplikacij, kjer se
vse stvari izvajajo na streţniški strani. Za razvoj spletne strani lahko uporabimo ţe vnaprej
pripravljene odprtokodne brezplačne CMS pogone, kot so Joomla, Drupal in druge. Tudi
za razvoj lastne internetne trgovine imamo ţe vnaprej pripravljene rešitve, kot so
OSCommerce, OpenCart, PrestaShop, Magento, Agora Cart, Zen Cart in druge [46].
Razvoj rešitev za odprtokodna spletna namizja
11
2.6 Prednosti in slabosti oblaka
Tabela 2-1: Prednosti in slabosti oblaka
Prednosti Slabosti
-dosegljivost do podatkov 24/7 -prenos večjih količin podatkov
-prilagodljivost -zanesljivost 99,x%?
-manjši stroški vzdrţevanja -tehnične napake
-plačilo po uporabi -ni lastnega nadzora nad podatki (so v oblaku)
-veliko število platform -zaklep storitev ob napadu na sistem
-avtomatska integracija z obstoječimi
storitvami, samodejna integracija
podatkovne baze
-ranljivost in izpostavljenost vdorom
-avtomatsko arhiviranje -slabša odzivnost kot pri namiznem OS
-zmogljivi streţniki
-neomejena kapaciteta shranjevanja
-globalizacija in promocija
-nadzor storitev in statistika
Slika 2-4: Hierarhični prikaz treh glavnih enot računalniškega oblaka
Podjetja, ki trţijo svoje storitve preko centraliziranih streţnikov, so močno povečala
dobičke, saj vedno več naročnikov uporablja njihove storitve, ker s tem zmanjšajo svoje
stroške in plačajo glede na porabo.
Razvoj rešitev za odprtokodna spletna namizja
12
Slika 2-5: Napoved uporabe računalniškega oblaka v prihodnosti [47]
Spletni portal InsuranceCanada.com je objavil anketo, v kateri sprašuje računalniške
strokovnjake o trenutnem stanju in uporabi rešitev v oblaku. Rezultati ankete so sledeči:
17% anketiranih meni, da je to zgolj marketinška poteza in priloţnost za hiter
zasluţek.
18% vprašanih ugotavlja, da gre za preimenovanje starega koncepta, ki je ţe bil v
uporabi.
22% je brez pravega odgovora in da je prehitro presojati, ali je omenjen model
sprejemljiv.
25% se jih strinja, da je to zanimiv koncept, vendar ga v podjetju nebi sprejeli.
17% jih podpira to zelo perspektivno rešitev, vendar ima še premalo razvitih
servisov.
10% jih podpira omenjeno tehnologijo in vidi v njej odlične priloţnosti za razvoj
[47].
Sklep: Kot vsaka nova tehnologija, ima tudi omenjena svoje prednosti in pomanjkljivosti.
Razvoj rešitev za odprtokodna spletna namizja
13
Omogoča nam nove moţnosti dostopa do informacij oz. servisov. Če jo uporabljamo
nepremišljeno, nam lahko povzroči tudi škodo v našem sistemu. Trend uporabe omenjene
tehnologije raste iz dneva v dan, s tem pa seveda sprejmemo tudi določen riziko.
Razvoj rešitev za odprtokodna spletna namizja
14
3 SPLETNO NAMIZJE EyeOS
Je odprtokodna rešitev, ki je izdana pod licenco, imenovano GPL (General Public License)
[48]. Iz tehničnega vidika je to spletna platforma, preko katere lahko trţimo svoje storitve,
ki jih vgradimo v omenjeni spletni operacijski sistem. V današnjem času so v porastu
spletni informacijski sistemi, zato je omenjena platforma zelo dobra začetna točka za
trţenje naših servisov. Pri razvoju komponent za omenjen sistem je potrebno dobro
poznavanje spletnih jezikov, kot so HyperText PreProcessor (PHP) [49], Javascript [50],
HyperText Markup Language (HTML) [51], Cascade Styling Sheets (CSS) [52]. Za
shranjevanje podatkov se večinoma uporablja eXtensible markup language (XML) [53] in
My Structured Query Language (MySQL) [54]. Pri delu z grafično podobo moramo
obvladati uporabo jezika Javascript z vključitvenimi knjiţnicami in Application
programming interface (API) [55] Qooxdoo [56]. Na voljo imamo mnogo brskalnikov, ki
različno interpretirajo določene ukaze, zato moramo pri razvoju aplikacije poskrbeti za
kompatibilnost. Za delovanje potrebujemo streţnik Apache verzije 2.x, PHP verzije 5 ali
novejšo, baza je XML, zaţelena je tudi podpora podatkovni bazi MySQL [57].
3.1 Arhitektura spletnega operacijskega sistema
Sistem deluje po principu odjemalec-streţnik, kjer smo odjemalec mi oz. spletni brskalnik.
Glavni sestavni del operacijskega sistema je jedro, ki skrbi za komunikacijo in izvajanje
procesov. Potrebno je poznavanje, kako jedro streţe aplikaciji, da lahko razvijemo svoj
servis znotraj okolja [57].
Razvoj rešitev za odprtokodna spletna namizja
15
Slika 3-1: Arhitektura spletnega operacijskega sistema EyeOS[57]
Jedro je najpomembnejši del spletnega operacijskega sistema in dodeljuje vire ter streţe
sistemskim klicem iz aplikacij. Servis NetSync skrbi za povezavo v realnem času, medtem
ko aplikacijski programski vmesnik RestApi omogoča laţjo komunikacijo po protokolu
[57].
Programska sestava:
korenska mapa/apps/imeaplikacije/info.xml (datoteka mora obstajati, vsebuje informacije o
aplikaciji),
korenska mapa/apps/imeaplikacije/imeaplikacije.php (sprejema sporočila grafičnega
vmesnika Qooxdoo),
korenska mapa/apps/imeaplikacije/extern/(vsebuje datoteke, ki so javno dostopne slike,
dokumenti),
korenska mapa/apps/imeaplikacije/imeaplikacije.js (koda grafičnega spletnega vmesnika
oz. funkcije),
korenska mapa/apps/imeaplikacije (glavni direktorij določene aplikacije),
Razvoj rešitev za odprtokodna spletna namizja
16
korenska mapa/apps/ (glavna mapa kjer so zbrane vse aplikacije).
Glavni direktoriji sistema EyeOS so:
/apps/ (aplikacije oz. spletni servisi),
/extern/ (datoteke, ki so vidne navzven – za brskalnik),
/extras/ (posebne datoteke),
/system/ (sistemske in konfiguracijske datoteke),
/users/ (uporabniki),
/workgroups/ (skupine),
Glavna konfiguracijska datoteka se nahaja znotraj glavne mape EyeOS in se imenuje
settings.php. V njej so zapisani parametri, ki so potrebni za povezavo s podatkovno bazo
MySQL.
define('SQL_DB_NAME','MojCloudSistem');
define('SQL_USERNAME','root');
define('SQL_PASSWORD','mojegeslo');
3.2 Delovanje in prirejanje okolja
Za razvoj modulov oz. aplikacij znotraj okolja je potrebno poznavanje programskih
aplikacijskih vmesnikov oz. API-jev. V tem projektu se je bilo potrebno še soočiti s strojno
opremo, torej IP kamerami in usmerjevalnikom ter streţnikom. Najprej smo delujočo
verzijo naredili za lokalno omreţje.
3.2.1 Sistemski servisi
Spletni operacijski sistem EyeOS vsebuje 8 servisov, preko katerih se opravlja določene
naloge. Nekateri izmed njih izvajajo tudi nizko nivojska opravila, kot so zapisovanje
fizično na disk. Za komuniciranje z jedrom je potrebno uporabljati predpono oz. funkcijo
service, katera ob klicu zahteva vnos treh parametrov [57]. Prvi parameter je ime aplikacije
nato ime funkcije ter vsebina. Definirana je v:
Razvoj rešitev za odprtokodna spletna namizja
17
Eyeroot/system/kernel/kernel.eyecodedatoteki. Sintaksa za klic servisa je sledeča:
service(string $ime_servisa, string $imefunkcije, [array $parametri]);
Processes (PROC)
Servis je odgovoren za upravljanje in izvajanje procesov v okolju EyeOS. Vsak proces ima
svojo Process identifier digit(PID) petmestno procesno identifikacijsko številko in enolično
primarno številko, ki ji ni moţno ustvariti duplikata in se hrani v spremenljivki checknum,
ID procesa pa v myPid.
Vsebuje metode, kot so end, launch, list, processes in druge. Ob zagonu aplikacije se
vsakemu procesu dodeli PID in checknum, ki skrbi za identifikacijo procesa pri
komuniciranju z odjemalcem in streţnikom. Če ţelimo videti ime aplikacije, ki teče pod
določeno številko PID, lahko to storimo s klicem funkcije [58].
Primer:
findPidByName(62470)
Rezultat funkcije: Videonadzor
Service('proc','launch',array('Videonadzor');
Service('proc','close',array($pid);
Razvoj rešitev za odprtokodna spletna namizja
18
Funkcija Sintaksa Rezultat funkcije (return)
close service('proc','close',array($pid)
Proc('close',array($pid))
Če ni procesa, vrne true, sicer
poţene end funkcijo.
end service('proc','end')
Proc('end')
Zapre proces, iz katerega je
bila funkcija klicana.
launch service('proc','launch',array('Vid
eonadzor');
Zaţene proces (vrne vrednost
true/false).
setProcessUser service('proc','setProcessUser',ar
ray($myPid));
Uporabniško definiran proces.
findChecknum proc('findChecknum',array($my
CheckNum)
Najde številko preverjanja.
findChecknumByName findChecknumByName($param
s)
Najde verifikacijsko številko
po imenu. Če je najdeno, vrne
checkNum, drugače vrne false.
findNameByPid $appName=
service('proc','findNameByPid',a
rray($key));
Najde ime aplikacije po PID
številki.
findChecknumByPid service('proc','findChecknumBy
Pid);
Najde verifikacijsko številko
po PID.
findPid service('proc','findPid'); Najde številko PID.
findPidByName $pid=
service('proc','findPidByName',a
rray('eyeX'));
Najde številko PID po imenu.
Tabela 3-1: Funkcije servisa proc
Razvoj rešitev za odprtokodna spletna namizja
19
Slika 3-2: Upravitelj procesov in aplikacija videonadzor v okolju EyeOS
Virtual File System (VFS)
Je navidezni datotečni sistem, ki zagotavlja delo s datotekami in mapami. Omenjen proces
je eden izmed najpomembnejših servisov, ki tečejo v spletnem operacijskem sistemu
EyeOS. Uporabniku omogoča branje in pisanje v datoteke. Če aplikacija preko funkcije
pokliče datoteko in uporabnik nima pravic za branje ali pisanje, nam to sporoči preko
parametra VFS_Insufficient_permissions [58].
Primer dostopa do gesel:
$pot='/etc/passwd'
$dostop = service ('vfs','open',array($pot));
if($dostop== false)
{ if(dostop == VPS_FILE_NOT_EXISTS)
{ service('eyeX','messageBox',array('content'=>''Datoteka ne obstaja'')); }
else if(dostop == VPS_INSUFFICIENT_PERMISSIONS)
{service('eyeX',messageBox',array('content'=>''Nimate dovoljenja' za dostop')); }
else{service('eyeX',messageBox',array('content'=>''Neznana napaka''));}
return false;}
else { //Imas dostop do datoteke, funkcije vfs open je vrnila true v spremenljivko dostop}
EyeX servis (EyeX)
Uporaba omenjene komponente skrbi za osnovna izrisovanja na uporabniškem vmesniku
na gostiteljevi strani. Sluţi za dostavo odgovorov, ki prihajajo od streţnika do odjemalca,
ko ta pošlje zahtevo. Vsa sporočila se pošljejo v obliki XML.
Razvoj rešitev za odprtokodna spletna namizja
20
V prvi fazi brskalnik pošlje zahtevo na streţnik, nato streţnik odgovori s sporočilom, ki ga
nato brskalnik interpretira ter prikaţe. Osnovni dve operaciji tega servisa sta izris slike in
odpiranje novih pogovornih oken [58].
Primer komunikacije:
Uporabnik klikne gumb, zahteva se pošlje na streţnik, ki vrne odgovor in odpre novo
okno, katero nato glede na uporabnikovo ţeljo ponovno kliče druge funkcije.
service('eyeX','messageBox',array('content'=>'Krmiljenje IP Kamere 2'));
User Manager (UM)
Je servis, pri katerem upravljamo z uporabniki, vsebuje pa tudi ostale funkcije, kot so
prijava v sistem, registriranje novih uporabnikov, pozabljeno geslo, pridobitev lokacije na
streţniku, t.i. home direktorij [58].
Primer uporabe:
$pot =service('um','getCurrentUserDir'); //Funkcija pridobi pot do uporabnikove mape
$pot.='MojaAplikacija';
$pot.='nastavitve/seznam_ipkam.txt';
service('vfs','create',array($pot)); //Kreiramo datoteko s pomočjo servisa vfs
dodaj//vpis vseh v seznam
service('vfs','open',array('nastavitve.txt','r')); //Vrstica za branje nastavitev
parser //branje datoteke vrstično
Zelo pomembna je globalna spremenljivka CurrentUser. Dostop do nje je mogoč vsaki
aplikaciji, iz nje lahko razberemo, kateri uporabnik je pognal določen proces.
Primer hrambe podatkov o uporabniku
JurijStjepčević
4f5f3a8XYZHash_vrednost_gesla735689
Jurij Stjepčević
05102012
0 // 0 uporabniku račun nikoli ne poteče
Razvoj rešitev za odprtokodna spletna namizja
21
1 //privilegiji
public
25122012
Definicija XML datoteke, ki hrani podatke o določenem uporabniku v EyeOS sistemu,
vsebuje atribute uporabniško ime, geslo, ki je zapisano v hash vrednosti, e-pošta, polno
ime, datum, kdaj je bil uporabnik kreiran, privilegiji, skupina, v katero sodi, in zadnja
prijava.
Message Mapping (MMAP)
Je del sistema, ki je odgovoren za dostavo sporočil od uporabnika do streţnika in obratno.
Deluje kot avtomatski proces, kar pomeni, da pri razvoju rešitve programer ne potrebuje
polagati pozornosti na dostavo in preverjanje, saj to zanj zagotovi spletni operacijski
sistem.
Za primer vzemimo spletno pošto, kjer sortiramo pošto glede na pomembnost in naslov. Ta
servis skrbi za dostavo sporočil točno določeni aplikaciji [58].
Security (SEC)
Je še en avtomatski proces in deluje samostojno, skrbi za delovanje v varnem načinu. Pri
PHP namestitvi na streţniku je potrebno onemogočiti spremenljivki register_globals in
magic_quotes. Razvijalcu ni potrebno nastavljati PHP konfiguracijske datoteke, temveč se
avtomatsko zahteva preko servisa ob namestitvi [58].
Logging (LOG)
Dnevnik je avtonomni proces, ki beleţi vsako uporabnikovo dejanje s pribeleţenim časom.
Nima nobene interakcije z uporabnikom ali razvijalcem [58].
3.2.2 Knjiţnice
Knjiţnica je zbirka podprogramov oziroma funkcij, ki programerju omogoči laţje delo pri
razvoju rešitve, saj lahko uporabi ţe izdelane in preizkušene dele programske kode.
Razvoj rešitev za odprtokodna spletna namizja
22
Knjiţnice v EyeOS ne omogočajo opravil na nizkem sistemskem nivoju. V okolju jih
kličemo s predpono reqLib, nato vpišemo ime knjiţnice, funkcijo, parameter oz. vsebino
[58].
Sintaksa:
reqLib(string $ime_knjiznice, string $imefunkcije, [array $parametri]);
EyeXML
S pomočjo te knjiţnice imamo precej laţji dostop do podatkov. XML je shramba v
tekstovno datoteko, ki je v spletnem namizju EyeOS pogosto uporabljana za hrambo
konfiguracij, branje in prenašanje sporočil in ostala opravila.
Omenjen način shranjevanja in pridobivanja podatkov ne potrebuje zunanje podatkovne
baze, ampak za nas to obdela razčlenjevalnik (angl. parser). Glavni funkciji sta xml2array
in array2xml. Prva skrbi za pretvorbo xml datoteke v polje, druga pa ravno obratno [58].
EyeWidgets
Olajša delo z grafičnim vmesnikom, saj ponuja razrede, ki imajo ţe implementirane
funkcije. Kreiramo lahko tabele, slike, gumbe, napise [58].
errorCodes
Koda napake se pojavi, kadar se funkcija izvede delno oz. nepopolno ali za to nimamo
ustreznih pravic. Za razvijalca sta najbolj pomembni funkciji SetErrorCode, s katero
nastavimo številko napake in getErrorCode, ki nam vrne vsebino napake.
Npr. 403 zavrnjeno; 404 napaka strani
Nekatere številke so rezervirane za znane napake, programerju pa ostaja moţnost, da jih
nekaj priredi tudi za svoje potrebe [58].
Prevajalnik i18n
Vgrajen je avtomatski prevajalnik besed i18n, ki skrbi za večjezično podporo.
Razvoj rešitev za odprtokodna spletna namizja
23
Tekst v originalu mora biti v angleškem jeziku. Znotraj datoteke npr. sl.eyeCode imamo
zapisan ključ v angleškem jeziku in prevedeno v slovenskem. V spletnem operacijskem
sistemu lahko izberemo jezik, katerega ţelimo, in besede bodo avtomatsko prevedene v
ţelen jezik [58].
Primer:
Prevajamo tekst z dinamično spremenljivko, zato uporabimo zapis %s, torej se po
prevajanju doda omenjen tekst. Z uporabo knjiţnice i18n lahko prevajamo tudi celotno
spletno stran.
$MojTekst=''You are currently logged with username =>%s'';
$spremenljivka=array($currentUser);
$MojTekstPreveden=reqLib('i18n','translate',array($MojTekst,spremenljivka));
//Trenutno si prijavljen pod uporabniškim računom Jure
$MojTekst=''Monday'';//Vpišemo tekst za prevod
$MojTekstPreveden=reqLib('i18n','translate',array($MojTekst));
Prevod besed se nahaja v datoteki XML, pot do omenjene datoteke je naslednja:
eyeOS/apps/share/eyeControl/translate/system/langs
Razvoj rešitev za odprtokodna spletna namizja
24
Slika 3-3: Pregled XML datoteke v grid načinu
Z orodjem Altova XML Spy [59] smo preverili zgradbo datoteke, kjer imamo zapisane
besede in posamičen prevod po principu servisa Google translate.
Znotraj oznake content se nahaja beseda v izvornem jeziku oz. angleščini.
Prevod je zapisan znotraj oznake vsebina, dolţina slovenskega prevoda je
5.310 vrstic.
Primer XML zapisa:
Error while uploading file "%s"! Transfer aborted.
Napaka pri nalaganju datoteke "%s"! Prenos prekinjen.
Razvoj rešitev za odprtokodna spletna namizja
25
4 RAZVOJ REŠITVE ZA KRMILJENJE IN
VIDEONADZOR IP KAMER V EyeOS
Modul je del informacijske rešitve in je implementiran znotraj sistema. V EyeOS se moduli
nahajajo v podmapi apps. Ustvarili smo novo mapo z imenom videonadzor, ki vsebuje
datoteke:
app.eyecode,
events.eyecode,
info.xml.
Datoteka app.eyecode vsebuje funkcijo Videonadzor_run, ki vsebuje parametre za prikaz
vmesnika. Posebno vlogo ima globalna spremenljivka proces_id oz. PID, pod katero sistem
vodi aplikacijo videonadzor. Vnesti je potrebno tudi absolutno pot (t.i. absolute path) do
modula. V omenjeni datoteki se kreira tudi uporabniški vmesnik, za katerega skrbi
objektno orientirano ogrodje (angl. framework) Qooxdoo [56]. Znotraj novega okna v
spletnem operacijskem sistemu, kateri ima svoj PID, se zaţene aplikacija za krmiljenje IP
kamer. Funkcija Videonadzor_end poskrbi za zaprtje tega PID v procesnem seznamu [58].
Datoteka events.eyecode zajema dogodke ob kliku na določen gumb znotraj te aplikacije.
Glavne funkcije so:
videonadzor_on_loadPage,
videonadzor_on_Resize,
videonadzor_on_fullScreen,
videonadzor_on_Close.
Razvoj rešitev za odprtokodna spletna namizja
26
4.1 Specificiranje zahtev
Diagram primerov uporabe za modul videonadzor v spletnem namizju EyeOS prikazuje
funkcionalnosti sistema, ki so na voljo posameznemu akterju.
Slika 4-1: Diagram primerov uporabe za modul videonadzor
Diagram zaporedja prikazuje osnovno interakcijo uporabnika s spletnim operacijskim
sistemom in modulom za krmiljenje ter videonadzor (narisano s programom Pacestar UML
Diagrammer) [66].
Razvoj rešitev za odprtokodna spletna namizja
27
Slika 4-2: Diagram zaporedja za modul videonadzor
4.2 Krmiljenje strojne opreme
Za potrebe krmiljenja in videonadzora moramo omogočiti dostop do opreme v smeri
interneta.
S tem se pojavi problem, saj imamo sistem povezan lokalno. Če ţelimo ustvariti rešitev, ki
bo delovala v internetnem okolju, moramo omogočiti vrata za komunikacijo na
usmerjevalniku za dostop do tega lokalnega IP naslova in vrat. V nadaljevanju je opisan
tudi problem, kako pošiljati ukaze na oddaljeno strojno opremo in razvoj lastnih
programskih funkcij za krmiljenje v spletnem skriptnem jeziku Javascript.
Primer:
IP kamera 1
Lokalni IP naslov: 192.168.1.190
Razvoj rešitev za odprtokodna spletna namizja
28
Lokalna vrata:80
Zunanji IP naslov: http://upime:[email protected]:1337
/video.cgi&user=uporime&pwd=mojegeslo?nextUrl=http://povezava_nazaj
IP Kamera 2 deluje na vratih 1338, IP Kamera 3 na vratih 1339.
Podrobnejši opis delovanja in preslika vrat (angl. port mapping) se nahaja v poglavju 7.2.
Z uporabo protokola HTTPS (Hyper Text Transfer Protocol Secure) [74] in kodiranjem
izvorne kode precej zmanjšamo moţnost za krajo pomembnih podatkov. V ta namen smo
uporabili prostodostopno orodje yuiCompressor [60], ki zelo optimizira Javascript kodo.
Na voljo je tudi produkt HTML Encrypter [61] za kodiranje HTML spletne vsebine.
4.3 Priprava modula in implementacija funkcij
Pri izdelavi novega sklopa smo ustvarili tri glavne datoteke, katere potrebujemo pri zagonu
modula. Najbolj pomembna je funkcija run, katera se ob zagonu prva izvrši. Definirati in
razviti moramo funkcionalnosti modula ter proţenje funkcij ob dogodkih.
App.eyecode
Ob zagonu aplikacije se proţi glavna funkcija run, ki v našem primeru ne vsebuje
parametrov. V njej so podatki o grafični podobi modula, poţenejo se vsi potrebni procesi
za prikaz. Vzpostavi se povezava s kamero in navigacijski meni za upravljanje.
function Videonadzor_run($params=null)
{
global $proces_id, $prev;
$ime_aplikacije = "Videonadzor";
$pot_do_aplikacije = "http://127.0.0.1/Sistem/Videonadzor"; //vir
$naslov = 'krmiljenje in nadzor IP Kamer - Jurij Stjepčević - FERI';
$info_datoteka = EYE_ROOT.'/'.APP_DIR.'/Videonadzor/info.xml';
//Info datoteka o modulu
$trenutni_up = ROOTUSER;
$pod_xml = reqLib('eyeXML', 'getXMLfile', array($info_datoteka));
http://upime:[email protected]:1337/video.cgi&user=uporime&pwd=mojegeslo?nextUrl=http://povezavahttp://upime:[email protected]:1337/video.cgi&user=uporime&pwd=mojegeslo?nextUrl=http://povezava
Razvoj rešitev za odprtokodna spletna namizja
29
//http://wiki.eyeos.org/Widget_Window
Ustvarjanje glavnega okna aplikacije poteka preko objekta Window, definiramo ga preko
parametrov, ki so zapisani v seznamu:
$okno_glavno = new Window(array(
'name'=>'videonadz_glavno_okno',
'father'=>'eyeApps',//nadskupina
'cent'=>1, //center pozicija = true
'width'=>1000,'height'=>730,'title'=>$naslov,'sendResizeMsg'=>1,
'sigResize'=>'Resize','removeWin'=>2,'savePosition' => 1,
'minWidth'=>1000,'minHeight'=>730));
$okno_glavno->show();//prikaz našega primerka
//funkcija run -> prikaz in preverjanja...
}
function Videonadzor_end($params=null)
{reqLib('eyeWidgets','unserialize');}
Info.xml
Znotraj omenjene datoteke so zapisane podrobnosti o posameznem modulu, vsebino
hranimo v obliki XML strukture.
Videonadzor in krmiljenje IP kamer v Cloud okolju
EyeOSMojeAplikacije
1.3.3.7
krmiljenje IP kamer in videonadzor -> na oddaljeni opremi
J.S. & GPL
Jurij Stjepčević ; EyeOScore = GPL licenca
Application
1
Events.eyeCode
V datoteko Events smo zapisali, katere metode naj se proţijo ob določenem dogodku.
function videonadzor_on_fullScreen()
{global $proces_id;$GLOBALS['videonadz_glavno_okno']->setFullScreen();}
Razvoj rešitev za odprtokodna spletna namizja
30
Če izberemo gumb zapri, se izvrši funkcija onClose. Uporaba servisa proc in komande end
sluţi za zaprtje procesa.
function videonadzor_on_Close()
{eyeConverter('cleanTmp'); //zbriši začasne datoteke
proc('end');//končaj proces - uniči pid
}
function is_on_Message($params="")
{reqLib('eyeWidgets','updateContent',$params)}
Oznaka Opis
Group ustvarjanje nove skupine v XML
Name ime skupine primer: MojeAplikacije
Icon mojeaplikacije.png
Items oznaka, znotraj katere dodajamo nove elemente
Item element, znotraj katerega imamo spodaj navedene atribute
Name ime aplikacije Videonadzor
Desc opis aplikacije
Icon ikona videonadzor.png
Exec ime našega modula, v našem primeru videonadzor in IS (interni imenik)
Tabela 4-1: Opis XML atributov iz datoteke eyeDock.xml
Slika 4-3: XML sestava glavnega menija eyeDock
Razvoj rešitev za odprtokodna spletna namizja
31
Šele na podlagi vseh zapisanih atributov je moţno zagnati modul, še posebej pomembna je
oznaka exec, s katero povemo, na kateri modul se naš element v meniju navezuje.
Slika 4-4: XML glavni meni po spremembah
4.3.1 Krmiljenje kamer na daljavo
Za upravljanje kamer na daljavo potrebujemo administratorski dostop in poznati moramo
opremo, s katero imamo opravka. V našem primeru moramo seveda najprej preslikati
lokalna vrata v javna, kar storimo na usmerjevalniku, kamor je oprema fizično
priklopljena.
Uporabljene kamere v tem projektu imajo moţnost premika v vse smeri in zoom funkcijo.
To po angleško imenujemo Pan Tilt Zoom (PTZ). Takšne kontrole ima ponavadi samo
profesionalna oprema, za potrebe diplomske naloge smo uporabili cenejšo opremo.
Za krmiljenje je bilo potrebno spoznati strojno opremo in parametre za upravljanje. V
pomoč so bile Javascript datoteke, ki so bile povzete iz izvorne kode spletnega vmesnika
kamere.
Sintaksa za klic:
/decoder_control.cgi?command=MojaKomanda&next_url=http://backlink_do_applikacije
Razvoj rešitev za odprtokodna spletna namizja
32
Spremenljivka
v izvorni kodi
Klicni
parameter
Opis
PTZ_STOP 1 Ustavi
TILT_UP 0 Premik navzgor
STOP_UP 1 Ustavi premik navzgor
TILT_DOWN 2 Premik navzdol
STOP_DOWN 3 Ustavi premik navzdol
PAN_LEFT 4 Premik levo
STOP_LEFT 5 Ustavi premik levo
PAN_RIGHT 6 Premik desno
STOP_RIGHT 7 Ustavi premik desno
PTZ_LEFT_UP 90 Premik levo poševno gor
PTZ_RIGHT_UP 91 Premik desno poševno gor
PTZ_LEFT_DOWN 92 Premik levo poševno navzdol
PTZ_RIGHT_DOWN 93 Premik desno poševno navzdol
PTZ_CENTER 25 Prestavi na začetno pozicijo
PTZ_VPATROL 26 Krmili navzgor in navzdol (navpično)
PTZ_VPATROL_STOP 27 Ustavi krmiljenje(navpično)
PTZ_HPATROL 28 Krmili levo in desno (vodoravno)
PTZ_HPATROL_STOP 29 Ustavi krmiljenje (vodoravno)
IO_ON 94 Vklop alarma vhodno-izhodnega priključka
IO_OFF 95 Izklop alarma vhodno-izhodnega priključka
Rezervirani 8 do 24 Rezervirani parametri
Tabela 4-2: Parametri iz .js datoteke za krmiljenje
Rotacija desno klic: http://uporabniskoime:[email protected]:1337/decoder_control.cgi?command=6&user=uporabnisk
oime&pwd=mojegeslo?nextUrl=HttpNazajdoMojeApp.php
Razvoj rešitev za odprtokodna spletna namizja
33
Slika 4-5: Funkcija premakni levo
4.3.2 Nastavitve kontrasta in svetlosti
Z uvedbo te funkcionalnosti lahko direktno spreminjamo nastavitve slikovnega tipala,
integriranega v samo kamero. Predpogoj je, da mora biti uporabnik tipa »operator«. Le
tako lahko ureja parametre. Uvedli smo tudi funkcijo avtomatske nastavitve svetlosti glede
na uro, kar pomeni, da ponoči pojačamo svetlost, medtem ko podnevi ta parameter malce
spustimo. Čeprav ima ţe sama kamera vgrajeno avtomatsko ostrenje, lahko v določenih
situacijah omenjeni parameter dobro izkoristimo.
Sintaksa za klic:
http://uporabniskoime:[email protected]:1337/camera_control.cgi?param=X&value=Y&nextUrl=
HttpNazajdoMojeApp.php
Parameter(param) Ukaz (value) Opis
0 – resolution 8 = 320x240 ; 64 = 640x480 resolucija
1 – brightness 0-255 svetlost
2 – contrast (0-6) 0-6 kontrast
3 – mode 0-50Hz
1-60Hz
2-zunanji način
frekvenca
osveţevanja
5 – flip & mirror 0-tovarniško privzeta nastavitev
1-obrni
2-zrcali
3-obrni in zrcali
sprememba
pozicije slike
Tabela 4-3: Parametri za nastavitev kamere
Razvoj rešitev za odprtokodna spletna namizja
34
function p_svetlost (form)
{
var vhodni_param = form.vhod.value;
if(vhodni_param >255|| vhodni_param < 1)
{return false;}
if(isNaN(vhodni_param))
{
alert("Pri svetlosti je potrebno vpisati številko v razponu 1 do 255!");
return false;
}
else
window.open('http://uporabniskoime:[email protected]:1337/camera_control.cgi
?param=1&value='+vhodni_param,'jav','width=310,height=310,directories=0,titlebar=0,to
olbar=0,location=0,status=0,menubar=0,scrollbars=no,resizable=no,');
} //konec funkcije
funkcija za nastavitev svetlosti in validacija polja
function kontrast (form)
{ var vh_param = form.vhod_k.value;
if(vh_param > 5||vh_param < 1)
return false;
if(isNaN(vh_param))
{
alert("Pri kontrastu je potrebno vpisati številko v razponu 1 do 5!");
return false;
}
window.open(''http://uporabniskoime:[email protected]_parameter_streznik:vrata1337/camera_con
trol.cgi?param=2&value='+vh_param,'jav','width=312,height=310,directories=0,titlebar=0,toolbar=0,location
=0,status=0,menubar=0,scrollbars=no,resizable=no,');
}
Funkcija za nastavitev kontrasta in validacija polja
Razvoj rešitev za odprtokodna spletna namizja
35
Slika 4-6: Nastavitev kontrasta
Implementirali smo preverjanje vnosnih podatkov. To je pomembno, saj zmanjšuje
varnostna tveganja pri krmiljenju oddaljene opreme in pri podatkovnih bazah. Če
validacije nebi zajeli, smo izpostavljeni resnim varnostnim groţnjam, saj je to eden izmed
osnovnih pogojev za zagotavljanje varnosti. V našem primeru ima tovarniški program
kamere (angl. Firmware) ţe zaščito proti vnosu nedovoljenih parametrov. Če smo postavili
spremenljivko na 500, je sistem vzel največjo vrednost, ki je 255. Pri vhodni vrednosti npr.
-1 je parameter postavil na 0. Pri podatkovnih bazah pa tvegamo izgubo ali krajo podatkov,
saj lahko z metodo vrinjanja izvedemo celo SQL ukaz, ki lahko poţene zlonamerno kodo
in tako povzroči škodo.
Primer SQL injection:
INSERT INTO UPORABNIKI (uporabnik,geslo)
VALUES ('jazadministrator','napad')
Morebitni dostop do nivoja operacijskega sistema:
http://www.testnistreznik.com/porocilo.xyz?izdelek=../../etc/passwd
4.3.3 Prikaz ţive slike
Prikaz ţive slike (angl. live streaming) je mogoč preko treh načinov in sicer preko
Common Gateway Interface (CGI) skript.
Videostream.cgi
Razvoj rešitev za odprtokodna spletna namizja
36
Z uporabo skripte streţnik s pomočjo metode push neprestano pošilja sliko do uporabnika
(ne glede ali je ciljni računalnik uspešno sprejel paket). Hitrost do maksimum 30 slik na
sekundo.
sintaksa: /videostream.cgi[?user=&pwd=&resolution=]
Parameter Opis
User Uporabniško ime
Pwd Geslo
resolution 8=320x240 ; 64=640x480
Tabela 4-4: Parametri pri videostream.cgi
Videostream.asf
Omenjeno prikazovanje »live stream« po protokolu asf omogočata video predvajalnika
VLC Player [62] in MPlayer [63].
sintaksa: /videostream.asf[?user=&pwd=&resolution=]
Parameter Opis
User Uporabniško ime
Pwd Geslo
Resolution 8=320x240 ; 64=640x480
Tabela 4-5: Parametri pri videostream.asf
Snapshot.cgi
S pomočjo skripte smo pridobili statični posnetek slike v ţivo, ki se samodejno osveţuje.
sintaksa: /snapshot.cgi[?user=&pwd=&next_url=]
Parameter Opis
User Uporabniško ime
Pwd Geslo
Next_url naslov za preusmeritev
Tabela 4-6: Parametri pri snapshot.cgi
Razvoj rešitev za odprtokodna spletna namizja
37
Če ne uporabljamo parametra next_url, se shrani posnetek pod imenom
id(naprava)_trenutni_cas.jpg.
Če uporabimo parameter za preusmeritev npr. next_url=1, je ime slike v tem primeru 1.jpg.
Pri uporabi next_url=3 je moţno uporabiti dve metodi za prijavo, http basic64 encode ali
preko uporabniškega imena in gesla z uporabo parametra user in pwd.
4.3.4 Funkcija pribliţevanja
Za moţnost pribliţevanja ţive slike smo uporabili javascript knjiţnici Shiftzoom [64] in
TJPZoom [65], kateri vsebujeta preverjene funkcije za delo s slikami.
Vključitvena datoteka:
Razvoj rešitev za odprtokodna spletna namizja
38
-
Slika 4-7: Javascript funkcija za pribliţevanje
Klic funkcije v aplikaciji
[ZOOM] je izklopljen (klik)
Če je vklopljena funkcija pribliţevanja, izpis vklop, sicer izklop.
Povezava na administracijski vmesnik
Prikaz statične slike in osveţevanje
Razvoj rešitev za odprtokodna spletna namizja
39
Slika 4-8: Prikaz slike v ţivo in uporaba funkcije pribliţevanja v okolju EyeOS
4.3.5 Prikaz ure in datume uporaba JQuery
Datum in uro prikazujemo s pomočjo Javascript knjiţnice JQuery [67], ki nam omogoča
laţji spoj med HTML in tehnologijami, kot so Asynchronous Javascript And XML
(AJAX) animacije in manipuliranje s podatki [67].
Z uporabo API si programerji precej olajšamo delo, saj so funkcije za naše potrebe ţe
večinoma implementirane. Knjiţnica je zdruţljiva z ogromno brskalniki, tako da ni teţav s
kompatibilnostjo pri razvoju aplikacij [67].
Primer klica lokalne skripte s vhodnim parametrom številka paketa. Nato dobimo preko
klica funkcije s parametrom vrnjeno stanje.
Razvoj rešitev za odprtokodna spletna namizja
40
$.ajax({url: "/api/lociraj_paket",
data: {stevilka_paketa:SI13371338},
success: function(data)
{$("#stanje").html("Paket senahajav:""+data+"");}
});
Pridobivam podatke..
var datum=new Date()
var leto=datum.getYear()if (leto< 1000)
leto+=1900var dan=datum.getDay()
var mesec=datum.getMonth()+1
if (mesec
Razvoj rešitev za odprtokodna spletna namizja
41
Slika 4-9: Programska oprema za detekcijo gibanja na streţniku
Detekcijski algoritmi so uporabni predvsem na področjih, kjer je potrebno zagotavljati
varnost npr. v avtocestnih tunelih, bankah, skladiščih, trgovinah in drugje. S pomočjo
avtomatske detekcije zaznamo predmet v gibanju, s tem pa se aktivira določen ukrep.
Primer: Ob voţnji skozi predor v napačno smer se aktivira opozorilna signalizacija,
nadzorni center je obveščen o dogodku.
Če zaznamo premikajoč se objekt, lahko programsko postavimo kamero na določeno
pozicijo in pričnemo snemati. Z integracijo detekcijskega algoritma v spletno verzijo bi
lahko modul izpopolnili ter uporabili v več namenov. V naši rešitvi to opravlja naknadno
naloţena programska oprema na streţniku. V okviru obveznega praktičnega usposabljanja
smo spoznali delo s knjiţnicami AForge [8] in testirali nekaj detekcijskih algoritmov ter
razvili aplikacijo v Microsoftovem programskem orodju Visual Studio [69].
4.3.7 Nastavitev vira in konfiguracija
Funkcijo najdemo pod zavihek nastavitve, kjer lahko nastavimo vir za prikazovanje. S
pomočjo podatkovne baze MySQL smo ustvarili bazo streţnikov. V testnem okolju smo
uporabljali lokalne IP naslove. S pomočjo te funkcionalnosti pa lahko dinamično dodajamo
in brišemo vire po seznamu.
Razvoj rešitev za odprtokodna spletna namizja
42
Slika 4-10: Nastavitve vira oz. streţnika
4.3.8 Resetiranje in inicializacija
V sistem smo vgradili tudi funkcijo oddaljenega ponovnega zagona IP kamer, ki ga
izvedemo preko pošiljanja parametrov reboot.cgi skripti. V primeru uspešne izvedbe
funkcija vrne na zaslon izpis OK, kar pomeni, da je naprava v fazi ponovnega zagona.
Sintaksa klic
http://uporabniskoime:[email protected]:1337/reboot.cgi?nextUrl=Aplikacij.php
http://uporabniskoime:[email protected]:1337/reboot.cgi?nextUrl=Aplikacij.php
Razvoj rešitev za odprtokodna spletna namizja
43
Slika 4-11: Prikaz delovanja funkcije za resetiranje in inicializacijo znotraj okolja EyeOS
Nastavitev spremenljivk, ki se inicializirajo ob vsakem ponovnem zagonu kamere:
set_misc.cgi?
[led_mode=&ptz_center_onstart=&ptz_auto_patrol_interval=&ptz_auto_patrol_type=&ptz
_patrol_h_rounds=&ptz_patrol_v_rounds=&next_url=]
Razvoj rešitev za odprtokodna spletna namizja
44
Parameter Value (vrednost) Opis
Led_mode 0-način1
1-način2
2-ugasni utripanje led diode
stanje led diode na kameri
Ptz_center_onstart 0-izklop
1-vklop
postavljanje na sredino ob
inicializaciji
Ptz_auto_patrol_interval 0-izklop
1-vklop
interval premika avtomatsko
nadziranje
Ptz_auto_patrol_type 0-izklop samodejnega premika
1-vodoravno
2-navpično
3-vodoravno in navpično
Opcije samodejnega premika:
-navpično
-vodoravno
-vodoravno in navpično hkrati
Ptz_patrol_h_round 0-neskončno kroţenje vodoravno
Ptz_patrol_v_round 0-neskončno kroţenje navpično
Ptz_patrol_up_rate 0-100 (0 počasi, 100 hitro) hitrost premika navzgor
Ptz_patrol_down_rate 0-100 (0 počasi, 100 hitro) hitrost premika navzdol
Ptz_patrol_left_rate 0-100 (0 počasi, 100 hitro) hitrost premika levo
Ptz_patrol_right_rate 0-100 (0 počasi, 100 hitro) hitrost premika desno
Ptz_patrol_rate 0-100 (0 hitro, 100 počasi) hitrost premika v ostale smeri
Tabela 4-7: Parametri za reboot.cgi skripto ob inicializaciji.
Ob inicializaciji kamera pošlje zahtevo usmerjevalniku za dodelitev IP naslova DHCP za
obdobje 24h. Ko poteče čas zakupa (angl. lease time) IP naslova, se zahteva za obnovitev
naslova ponovno pošlje.
4.4 Sistemski in mreţni viri
Vsaka aplikacija, ki jo razvijemo, ima določene zahteve, ki so lahko glede na platformo
programske ali povezane s sistemskimi in mreţnimi viri.
Razvoj rešitev za odprtokodna spletna namizja
45
4.4.1 Sistemski viri
Našem primeru smo imeli streţnik, ki teče na Windows 2003 Server operacijskem sistemu.
Uporabili smo odprtokodne programske opreme, spletni streţnik Apache [68] s podporo
skriptnemu jeziku PHP in podatkovni bazi MySQL. Streţnik ima moţnost oddajanja
10Mbps in sprejemanja 100Mbps, saj se nahaja na optični povezavi.
Kapaciteta diska znaša 320GB, kar nam je za potrebe razvoja praktičnega dela diplomske
naloge več kot zadoščalo.
Slika 4-12 : Prikaz porabe sistemskih sredstev na streţniku
4.4.2 Mreţni pretok
V našem primeru je velikost okvirja odvisna od načina, v katerem kamera deluje, bodisi v
nočnem ali dnevnem reţimu. Pri nočnem reţimu kamera pošilja precej manjši okvir, saj je
slika črno-bela in gre za osvetlitev z vgrajenimi IR (Infra Red) LED diodami. Če
zagotovimo drug vir svetlobe, npr. luč, je slika barvna. Posledično z zagotovljeno večjo
svetlostjo velikost omreţnega paketa naraste.
V dnevnem načinu nam strojna oprema pošlje pribliţno 7 omreţnih paketov na sekundo,
maksimalno pa do 30. Vsebina paketa prikazana v izvirnem oz. surovem načinu RAW.
Razvoj rešitev za odprtokodna spletna namizja
46
V našem primeru se pošilja slika v formatu Joint Photographic Experts Group (JPEG).
Primer:
Content-Type : image/jpeg
Content-Length:22268
Content-type v tej spremenljivki se pošilja tip vsebine.
Content-length nam pove velikost vsebine paketa.
Slika 4-13: Sprejet omreţni paket IP Kamere
22268 bajtov je pribliţno 21,74kB, kar znese pribliţno 0,02MB za en okvir.
Predpostavimo, da ena kamera povprečno pošlje 7 okvirjev na sekundo. Paket je velik 21,7
kB, kar znese 152,18 v kB na sekundo, to je pribliţno 9,1MB (9130kB) na minuto, kar je
547,85MB na uro, to torej pri eni kameri pomeni pribliţno 13.148,4MB na dan. V našem
primeru tri kamere na dan ustvarijo pribliţno 39.445,2 MB oz. 39,4GB omreţnega prometa
in pribliţno 1,2TB na mesec oz. 14TB na leto. Kot lahko opazimo, se preko omreţja
pretaka ogromno prometa, ki lahko ob masovni uporabi zmanjša skalabilnost sistema ali
omreţja.
Razvoj rešitev za odprtokodna spletna namizja
47
Slika 4-14: Promet, ustvarjen v roku ene ure v dnevnem načinu
Slika 4-15: Prikaz prometa, ustvarjenega v roku ene minute v nočnem načinu
V nočnem načinu je pretok treh kamer pribliţno 11MB na minuto, kar je pribliţno 660MB
na uro. Statistično gledano 15840MB znese 15,8GB na dan, 474GB na mesec, 5688GB,
kar je pribliţno 5,7TB na leto. V primerjavi z dnevnim načinom se tukaj ustvari manj
omreţnega prometa. Če povzamemo, da polovico dneva deluje v dnevnem načinu,
polovico pa v nočnem, znese to pribliţno 20GB pretoka na dan, torej skupno 7,2TB v
obdobju. Izračunan povprečni omreţni pretok znaša pribliţno 17TB na leto.
Razvoj rešitev za odprtokodna spletna namizja
48
4.4.3 Spremljanje omreţne TCP komunikacije z orodjem Wireshark
Naredili smo test in preverili, koliko omreţnih paketkov se pošlje v kratkem testnem
časovnem intervalu, ki je trajal 0,04 sekunde. Vidimo potrditvene okvirje iz obeh smeri.
Zastavica ACK pomeni potrditev sprejema podatkov (angl. acknowledgment), SYN
pričenja povezavo in je sinhronizacijska, FIN dokončno prekine povezavo [70]. Za
spremljanje smo uporabili prostodostopno orodje Wireshark [71].
Slika 4-16: Potek TCP komunikacije med streţnikom in opremo [71]
4.5 Testiranje modula
Izvedli smo osnovno testiranje modula. Preverili smo ranljivosti in zagotovili osnovno
varnost. Vsekakor bi bilo pred javno objavo potrebno integrirati še kakšen varnostni
Razvoj rešitev za odprtokodna spletna namizja
49
mehanizem.
1. Prijava v sistem EyeOS zahteva prehodno preverjanje CAPTCHA, ki sem ga integriral
Generiran tekst Odgovor
RAHA RAHA (sprejeto)
FMYL FmYL (napaka)
GOAY goay (napaka)
OTAT 0TAT (napaka)
Tabela 4-8: Captcha preverjanje
2. Prijava v sistem EyeOS
Up. ime Geslo
test test (napaka)
Test123 Test123 (napaka)
guest Guest (napaka)
root root (sprejeto-testno geslo)
Tabela 4-9: Testiranje prijava v sistem EyeOS
3. Testiranje vnosnih form za nastavitev svetlosti in kontrasta
Vnos Izpis
B,C Potrebno je vpisati številko
6,101 Vnesi 1-5; vnesi 1-100
5,100 Sprejeto, poslan ukaz IP kameri
3,50 Sprejeto, poslan ukaz IP kameri
Tabela 4-10: Testiranje vnosnih form
4. Testiranje odzivnosti oz. skalabilnosti sistema
Opravilo Čas (v sekundah)
Zagon aplikacije (test 1) 0,37
Zagon aplikacije (test 2) 0,32
Zagon aplikacije (test 3) 0,47
Zagon aplikacije (test 4) 0,25
Rotacija kamere levo 3,05
Rotacija kamere desno 3,19
Rotacija navzgor 3,08
Rotacija navzdol 3,12
Nastavitev kontrasta 2,31
Nastavitev svetlosti 2,17
Tabela 4-11: Test skalabilnosti
Razvoj rešitev za odprtokodna spletna namizja
50
5 SPLETNO NAMIZJE Lucid
Odprtokodno spletno namizje Lucid je izdano pod Academic Free License (AFL) [11].
Zgrajeno je na osnovi DojoToolkit [72] aplikacijskega programskega vmesnika za
javascript. Glavni cilj razvijalcev tega okolja je bil zgraditi aplikacijsko platformo, ki je
zdruţljiva z vsemi spletnimi servisi, stranmi in mobilnimi napravami. Spletno mesto je
namenjeno urejanju dokumentov, shranjevanju datotek, predvajanju multimedije. Dostop
do podatkov je enostaven bodisi preko telefona ali računalnika, torej so z nami na vsakem
koraku.
Če hranimo občutljive podatke in ne zaupamo javnim spletnim oblakom, je bolje imeti svoj
privatni oblak, kjer sami skrbimo za podatke.
5.1 Struktura spletnega namizja Lucid
Sestavljen je iz 5 knjiţnic in 4 osnovnih gradnikov. Temelji na Dojotoolkit Javascript API
vmesniku.
Slika 5-1: Struktura LucidDesktop
Razvoj rešitev za odprtokodna spletna namizja
51
5.2 Delovanje in prirejanje okolja
Zahteve:
Za uporabo spletnega sistema potrebujemo PHP verzije vsaj 5.x, starejše verzije niso
podprte. Za podatkovno bazo lahko uporabljamo SQLite (Structured Query lite version),
PgSQL (PostGre Structured Query Language) ali pa izberemo najbolj popularen MySQL.
Namestitev:
Najprej je potrebno na streţnik posneti zapakirano verzijo v obliki tar.gz, zip ali kateri
drugi arhivski zbirki. Datoteke razširimo šele na streţniku, saj bi prenašanje posamičnih
elementov trajalo dlje časa.
Posebne nastavitve:
Zaradi varnosti je dobro vsiliti HTTPS [74] povezavo in htaccess (Hypertext Access)
datoteko. Seveda mora naš spletni streţnik to funkcijo podpirati. Dostop do datotek je
potrebno omejiti z datoteko .htaccess, ki omogoča nastavitev dovoljenj za pridobivanje
vsebine.
Če ne uporabljamo datoteke .htaccess, je potrebno ročno blokirati dostop do nastavitvenih
datotek in map, kot so temp, public, files [11].
5.2.1 Knjiţnice in gradniki
App
Knjiţnica skrbi za poganjanje in zapiranje aplikacij [11]. Prikazali bomo nekaj primerov:
Odpri privzeto aplikacijo za komando url, spletni brskalnik
lucid.app.launchhandler(null, {url: ''http://www.mojstreznik.com/''}, ''text/x-uri'');
Zagon aplikacije
lucid.app.launch(''testna'');
Ponovni zagon aplikacije
lucid.app.reload(''lucid.app.testna'');
Razvoj rešitev za odprtokodna spletna namizja
52
Crosstalk
Omenjena knjiţnica nam omogoča laţjo komunikacijo med dvema različnima
aplikacijama, ki jo lahko poganjata tudi različna uporabnika.
Moţnost pošiljanja in prejemanja sporočil je zasnovana s pomočjo DojoToolkit [72], ki
ima implementirani funkcije dojo publish in dojo subscribe. Sporočila sortiramo glede na
kategorijo [11].
Primer preprostega naročanja na novice:
this.Prijava = lucid.crosstalk.subscribe("Novice_posodobitve",
dojo.hitch(this, "Novice_posodobitve_handler"), this.sysname);
Sporočila so vedno objekti in vsebujejo sporočila, katera je poslala aplikacija. Zato
moramo spisati tudi handler funkcijo. Če ţelimo sporočilo poslati lokalno, spremenljivko
userid postavimo na null.
Pošiljanje sporočila uporabniku:
myTopicHandler: function(msg)
{ lucid.dialog.notify(msg.someKey); },
var message = { someKey: "Trenutno ni posodobitev.", foo: "bar"};
var userid = 1337; //pošiljanje uporabniku id številka v bazi
lucid.crosstalk.publish("Novice_posodobitve", message, userid, this.sysname);
Slika 5-2: Pošiljanje sporočila s pomočjo servisa Crosstalk[11]
Razvoj rešitev za odprtokodna spletna namizja
53
Slika 5-3: Pošiljanje sporočila drugi instanci oz. aplikaciji[11]
Odjava iz novic:
lucid.crosstalk.unsubscribe(this.Prijava);
S tem ukazom povemo razvrščevalniku oz. sistemu za dostavljanje, naj ne pridobiva več
sporočil iz določene kategorije.
Ţivljenjski cikel sporočila
Vsako sporočilo ima naslednje parametre uporabnika, aplikacijo, instanco in pa ciljni
naslov. Tako pošiljatelj kot prejemnik imata čakalno vrsto za sporočila, ki jo obdeluje t.i.
dispatcher. Če je sporočilo naslovljeno na določeno aplikacijo in na drugi strani ni
pognana, jo omenjeno sporočilo aktivira ter dostavi sporočilo. Kadar je sporočilo poslano
in na drugi strani nihče ne prevzame sporočila, se to zavrne [11].
FileArea
Je gradnik za grafični prikaz datotek v pogovornih oknih in prikazu datotek. Vključimo ga
enostavno preko API vmesnika Lucid widget filearea [11].
Console
Implementiramo lahko tudi uporabo ukazne vrstice znotraj okna, podobno kot v linux
okolju. Torej uporabljamo vrstični programski vmesnik namesto grafičnega, uporabljajo ga
večinoma dobri poznavalci. Gradnik enostavno vgradimo v okno [11]. Primer uporabe API
Razvoj rešitev za odprtokodna spletna namizja
54
DojoToolkit:
require(["dijit/layout/BorderContainer", "dijit/layout/ContentPane","dojo/domReady!"],
function(BorderContainer, ContentPane)
{var okno = new BorderContainer({//kreiranje instance objekta bordercontainer
style: "height: 640px; width: 480px;"});
//kreiranje vsebinskega okvirja znotraj kontejnerja oz. okna
var vsebina = new ContentPane({
region: "center",content: "Lep pozdrav"});
okno.addChild(vsebina_desno);
//postavljanje v telo dokumenta
okno.placeAt(document.body);
okno.startup();}); // ukaz za odpiranje okna
Status bar
Vrstica stanja se nahaja na dnu našega pogovornega okna. V njej se izpisujejo sprotne
vsebine in napake [11].
Primer:
var statusna_vrstica = this.statusbar = new lucid.widget.StatusBar({
region: "bottom", showProgress: true, label:''Pridobivam podatke..''});
okno.addChild(statusna_vrstica);
S pomočjo metode attr pa nastavljamo stanje statusne vrstice v poljubni fazi programa.
Primer: this.statusna_vrstica.attr("label", "Uspešno preneseni podatki.");
Sound
Knjiţnica sound skrbi za laţje manipuliranje z zvokom znotraj okolja Lucid. Specifikacije
so zapisane znotraj javascript datoteke sound.js, ki se nahaja v DojoToolkitu.
Če ţelimo predvajati zvok znotraj okolja, moramo najprej kreirati primerek objekta
lucid.sound, nato pa objekt podeduje vse njegove metode [11].
Primer:
var poslusanje_radijske_postaje = new lucid.Sound({src: dojo.moduleUrl("lucid.apps."+this.sysname,
"http://82.149.22.34:8000/CityMp364mono.mp3") });
Razvoj rešitev za odprtokodna spletna namizja
55
if(poslusanje_radijske_postaje.capabilities.id3) console.log(poslusanje_radijske_postaje.capabilites.id3());
Vrnjene dobimo atribute po ID3 specifikaciji album, artist, comment, genre, songname,
track, year.
Upravljanje z zvokom:
poslusanje_radijske_postaje.volume(0.75);
poslusanje_radijske_postaje.stop();
poslusanje_radijske_postaje.play();
poslusanje_radijske_postaje.pause();
position – metoda lahko nastavlja ali pridobi pozicijo
duration – vrne dolţino v milisekundah
loop – true, false, autostart – true, false
Filesystem
Datotečni sistem znotraj okolja omogoča branje in pisanje v datoteke na lokalnem nivoju
kot tudi na oddaljene streţnike. Če se zahteva avtentikacija, nam za to ni potrebno posebej
skrbeti, saj nam delo poenostavi ta programski vmesnik, ki sam prikaţe formo za vnos
potrebnih detajlov. Iz programerskega stališča si z uporabo omenjenega API vmesnika
povsem olajšamo delo z datotečnim sistemom [11].
Primer upravljanja z datotečnim sistemom:
lucid.filesystem.createDirectory("file://mojamapa/", function()
{console.log("Mapa uspesno kreirana");}, function(e){console.error("Napaka");});
lucid.filesystem.writeFileContents