Faculteit Toegepaste Wetenschappen
Vakgroep Informatietechnologie Voorzitter: prof. dr. ir. P. Lagasse Onderzoeksgroep Broadband Communication Networks Hoofd: prof. dr. ir. P. Demeester
Webgebaseerd afschakelen van Linux PC’s
Bram Devreese Sara Van de Velde
Promotor: prof. dr. ir. P. Demeester Thesisbegeleider: ing. B. De Vreese
AFSTUDEERWERK INGEDIEND TOT HET BEHALEN VAN DE ACADEMISCHE GRAAD VAN GEDIPLOMEERDE IN DE AANVULLENDE STUDIES VAN INFORMATICA
Academiejaar 2002 - 2003
Faculteit Toegepaste Wetenschappen
Vakgroep Informatietechnologie Voorzitter: prof. dr. ir. P. Lagasse Onderzoeksgroep Broadband Communication Networks Hoofd: prof. dr. ir. P. Demeester
Webgebaseerd afschakelen van Linux PC’s
Bram Devreese Sara Van de Velde
Promotor: prof. dr. ir. P. Demeester Thesisbegeleider: ing. B. De Vreese
AFSTUDEERWERK INGEDIEND TOT HET BEHALEN VAN DE ACADEMISCHE GRAAD VAN GEDIPLOMEERDE IN DE AANVULLENDE STUDIES VAN INFORMATICA
Academiejaar 2002 - 2003
VOORWOORD Langs deze weg willen we graag iedereen bedanken die een bijdrage geleverd heeft aan de totstandkoming van dit afstudeerwerk: ·
prof. dr. ir. P. Demeester, de promotor van deze scriptie
·
ing. B. De Vreese voor de dagelijkse begeleiding
·
ir. B. Vermeulen en ir. T. Verdickt voor hun goede raadgevingen
·
onze ouders voor het nalezen en de correctie
·
en iedereen die ons op een bepaald moment verder geholpen heeft
TOELATING TOT BRUIKLEEN De auteurs geven de toelating deze scriptie voor consultatie beschikbaar te stellen en delen van de scriptie te kopiëren voor persoonlijk gebruik. Elk ander gebruik valt onder de beperkingen van het auteursrecht, in het bijzonder met betrekking tot de verplichting de bron uitdrukkelijk te vermelden bij het aanhalen van resultaten uit deze scriptie.
28 mei 2003
De auteurs,
Bram Devreese
Sara Van de Velde
Webgebaseerd afschakelen van Linux PC’s Bram Devreese Sara Van de Velde Afstudeerwerk ingediend tot het behalen van de academische graad van gediplomeerde in de aanvullende studies van informatica Academiejaar 2002 - 2003 Promotor: prof. dr. ir. P. Demeester Thesisbegeleider: ing. B. De Vreese
Faculteit Toegepaste Wetenschappen Universiteit Gent Vakgroep Informatietechnologie Voorzitter: prof. dr. ir. P. Lagasse Onderzoeksgroep Broadband Communication Networks Hoofd: prof. dr. ir. P. Demeester
Samenvatting
Webgebaseerd afschakelen van Linux PC’s is de titel van dit afstudeerwerk. De bedoeling van de ontwikkelde applicatie is het op afstand kunnen bedienen van een aantal PC’s die onder het besturingssysteem Linux draaien.
Om de toepassing te implementeren wordt onder meer gebruik gemaakt van de server-side scriptingtaal PHP, een MySQL databankserver, shell-scripting en de Wake-On-Lan-technologie. De applicatie vereist een aantal specifieke configuraties zowel op de machine waarop de databankserver draait als op elke host die via de webtoepassing bediend moet kunnen worden.
Trefwoorden: Linux, PHP, shell-scripting, Wake-On-Lan, webapplicatie.
INHOUDSOPGAVE
INHOUDSOPGAVE VOORWOORD INHOUDSOPGAVE LIJST VAN FIGUREN EN TABELLEN
HOOFDSTUK 1: INLEIDING................................................................................1 HOOFDSTUK 2: DE BASISTECHNOLOGIEËN ...............................................4 2.1
UNIX, LINUX EN DEBIAN GNU/LINUX .................................................................................4
2.1.1
Unix.............................................................................................................................4
2.1.2
Linux ...........................................................................................................................4
2.1.3
Debian GNU/Linux.......................................................................................................5
2.1.4
Gebruikte Linux-basisfunctionaliteit...........................................................................7
2.2
2.1.4.1
cron .........................................................................................................................7
2.1.4.2
Run-levels ...............................................................................................................8
SHELL-SCRIPTING ..............................................................................................................10
2.2.1
De shell .....................................................................................................................10
2.2.2
Wat is een shell-script? .............................................................................................10
2.2.3
Een kort overzicht van de bestaande shells...............................................................10
2.2.4
Enkele belangrijke gebruikte shell-commando’s en applicaties ...............................11
2.3
APACHE WEBSERVER ........................................................................................................12
2.3.1
Algemeen...................................................................................................................12
2.3.2
.htaccess bestanden...................................................................................................13
2.4
SQL EN MYSQL ...............................................................................................................14
2.4.1
SQL .............................................................................................................................14
2.4.2
MySQL ........................................................................................................................15
2.5
SERVER-SIDE SCRIPTING EN PHP ......................................................................................16
2.5.1
Wat is een server-side scriptingtaal?........................................................................16
2.5.2
PHP...........................................................................................................................16
2.6
WAKE-ON-LAN .................................................................................................................18
2.6.1
Algemeen...................................................................................................................18
2.6.2
“Magic Packet” ........................................................................................................19
2.6.3
ether-wake.................................................................................................................19
INHOUDSOPGAVE
HOOFDSTUK 3: DE BASISCOMPONENTEN .................................................20 3.1
DE PROEFOPSTELLING .......................................................................................................20
3.1.1 3.1.1.1
galatea.atlantis.rug.ac.be (server)..........................................................................21
3.1.1.2
cadmus.atlantis.rug.ac.be ......................................................................................21
3.1.1.3
aeolus.atlantis.rug.ac.be ........................................................................................21
3.1.2 3.2
Kenmerken van elke gebruikte machine: ..................................................................21
Schets van de proefopstelling....................................................................................22
OPBOUW VAN DE MYSQL-DATABANK .............................................................................23
HOOFDSTUK 4: BESPREKING VAN DE VOLLEDIGE APPLICATIE ......27 4.1
ALGEMENE WERKING ........................................................................................................27
4.2
DE WEBAPPLICATIE ...........................................................................................................28
4.2.1
Algemeen...................................................................................................................28
4.2.2
Toegang tot de webapplicatie ...................................................................................28
4.2.3
remote_startup_shutdown.php..................................................................................31
4.2.4
check.php ..................................................................................................................33
4.2.5
shutdown.php ............................................................................................................34
4.2.6
startup.php ................................................................................................................34
4.2.7
form_addhost.php .....................................................................................................35
4.2.8
form_removehost.php................................................................................................36
4.2.9
addhost.php...............................................................................................................36
4.2.10
removehost.php .........................................................................................................37
4.3
ACHTERLIGGENDE SHELL-SCRIPTING OP IEDERE CLIENT..................................................38
4.3.1
update_database_startup en update_database_shutdown........................................38
4.3.1.1
update_database_startup .......................................................................................38
4.3.1.2
update_database_shutdown...................................................................................38
4.3.2
update_database_backupstart en update_database_backupstop .............................39
4.3.2.1
update_database_backupstart................................................................................39
4.3.2.2
update_database_backupstop ................................................................................39
4.3.3
update_database_demostart en update_database_demostop ...................................40
4.3.3.1
update_database_demostart ..................................................................................40
4.3.3.2
update_database_demostop...................................................................................40
4.3.4
check_login_shutdown ..............................................................................................40
4.3.4.1
De shut down-functie ............................................................................................41
4.3.4.2
De update-functie..................................................................................................41
INHOUDSOPGAVE 4.4
ACHTERLIGGENDE SHELL-SCRIPTING OP DE SERVER ........................................................42
4.4.1
Het verschil tussen ping en fping ..............................................................................42
4.4.2
cron_fping en startup_fping......................................................................................43
4.4.2.1
startup_fping .........................................................................................................43
4.4.2.2
cron_fping .............................................................................................................44
HOOFDSTUK 5: PERFORMANTIE VAN DE APPLICATIE.........................46 5.1
ANALYSE VAN DE NETWERKBELASTING ...........................................................................46
5.1.1 5.1.1.1
tcpdump.................................................................................................................46
5.1.1.2
ipgrab ....................................................................................................................46
5.1.2 5.2
De gebruikte tools .....................................................................................................46
De resultaten.............................................................................................................46
ANALYSE VAN DE UITVOERINGSTIJD ................................................................................48
5.2.1
time............................................................................................................................48
5.2.2
De resultaten.............................................................................................................48
5.3
OVERZICHT VAN DE VERTRAGINGSTIJD ............................................................................50
HOOFDSTUK 6: BESLUIT ..................................................................................51 APPENDIX A: INHOUD VAN DE CD-ROM .............................................................................53 APPENDIX B: INSTALLATIEHANDLEIDING........................................................................54 BIBLIOGRAFISCHE REFERENTIES .......................................................................................58
INHOUDSOPGAVELIJST VAN FIGUREN EN TABELLEN
LIJST VAN FIGUREN EN TABELLEN Lijst van figuren FIGUUR 1: MARKTAANDEEL VAN DE TOPSERVERS (AUGUSTUS 1995 - APRIL 2003)........................12 FIGUUR 2: SCHETS VAN DE GEBRUIKTE PROEFOPSTELLING .............................................................22 FIGUUR 3: PUSH- EN PULL-PRINCIPE BINNEN DE APPLICATIE ...........................................................27 FIGUUR 4: LOGINSCHERM .................................................................................................................28 FIGUUR 5: OVERZICHT VAN DE WEBAPPLICATIE (STARTUP.PHP EN SHUTDOWN.PHP)......................29 FIGUUR 6: OVERZICHT VAN DE WEBAPPLICATIE (ADDHOST.PHP EN REMOVEHOST.PHP) .................30 FIGUUR 7: SCREENSHOT VAN REMOTE_STARTUP_SHUTDOWN.PHP .................................................32 FIGUUR 8: SCREENSHOT VAN CHECK.PHP .........................................................................................33 FIGUUR 9: SCREENSHOT VAN SHUTDOWN.PHP .................................................................................34 FIGUUR 10: SCREENSHOT VAN FORM_ADDHOST.PHP .......................................................................35 FIGUUR 11: SCREENSHOT FORM_REMOVEHOST.PHP ........................................................................36 FIGUUR 12: PROBLEEMSITUATIE BIJ EEN CRASH VAN DE DATABANKSERVER ..................................43
Lijst van tabellen TABEL 1: OVERZICHT VAN HET GEGENEREERDE NETWERKVERKEER ..............................................47 TABEL 2: UITVOERINGSTIJDEN VAN DE SHELL-SCRIPTS OP DE SERVER ...........................................49 TABEL 3: UITVOERINGSTIJDEN VAN DE SHELL-SCRIPTS OP ELKE HOST ...........................................49 TABEL 4: UPDATE DELAY VAN DE DATABANK .................................................................................50
HOOFDSTUK 1: INLEIDING
1
Hoofdstuk 1: INLEIDING De titel van dit afstudeerwerk is Webgebaseerd afschakelen van Linux PC’s. Concreet houdt dit in dat het de bedoeling is een toepassing te creëren die toelaat Linux PC’s via een webapplicatie uit te schakelen. De tool is ontwikkeld om te draaien op het Atlantis-netwerk binnen de vakgroep INTEC aan de Universiteit Gent. In een vergader- en demoruimte van deze vakgroep bevindt zich immers een aantal Linux PC’s die gebruikt worden voor demosessies en andere doeleinden. Deze produceren echter zoveel achtergrondlawaai, dat het wenselijk zou zijn, bijvoorbeeld tijdens vergaderingen, deze te kunnen uitschakelen via een lokale website en dit enkel als dit op dat moment toegelaten is. Zo dient niet iedereen de juiste wachtwoorden en afsluitprocedure te kennen en is het mogelijk om gelijktijdig meerdere machines uit te schakelen.
Er zijn echter een aantal voorwaarden gesteld waaraan de nieuwe applicatie moet voldoen of waarmee bij gebruik rekening moet worden gehouden. Ten eerste is het niet wenselijk om alle gebruikersnamen, in combinatie met het respectieve wachtwoord, van elke machine op te slaan in een databank. De PC’s moeten dus met andere woorden uitgeschakeld kunnen worden, zonder zich eerst aan te melden op de af te schakelen machine. Er moet tevens voor gezorgd worden dat de applicatie een minimum aan wachtwoorden over het netwerk verzendt. Een tweede voorwaarde is dat het niet mogelijk mag zijn machines af te schakelen die in gebruik zijn (iemand is ingelogd) of die op dat moment een back-upproces uitvoeren. Tevens moet er voor gezorgd worden dat een machine, die bedoeld is voor een demosessie, nooit kan worden afgeschakeld. Zo kunnen enkel machines die op dat moment op geen enkele manier in gebruik zijn, worden afgesloten. Ten derde wordt verwacht dat de PC’s, die met behulp van de applicatie moeten kunnen worden uitgeschakeld, als besturingssysteem een Linux-variant te draaien. De toepassing werd enkel getest onder Debian GNU/Linux, omdat dit de standaard Linux distributie is die gebruikt wordt binnen de betrokken vakgroep. Gebruikers van Microsoft Windows vallen echter uit de boot. Mits enkele aanpassingen is het ook mogelijk de toepassing onder het Microsoft-platform te gebruiken. Dit laatste komt evenwel niet aan bod binnen deze scriptie. Als vierde voorwaarde werd vastgelegd dat voor de uiteindelijke uitwerking van de toepassing gebruik mag worden gemaakt van de basisfunctionaliteit die reeds binnen het Linux-platform aanwezig is. Ten vijfde is, na grondig testen, geopteerd om de webtoepassing waarmee de achterliggende applicatie bediend wordt, browseronafhankelijk te maken.
HOOFDSTUK 1: INLEIDING
2
De veiligheid van de applicatie, met uitzondering van het opslaan van de wachtwoorden in een databank, wordt niet als voorwaarde gesteld. Het is immers de bedoeling dat de toepassing zal draaien op het Atlantis-netwerk dat zich achter een firewall bevindt. De toegang tot de webapplicatie wordt wel afgesloten door middel van een wachtwoord zodat niet iedereen, die toegang heeft tot het netwerk en bijgevolg ook tot de webapplicatie, gemachtigd is machines af te schakelen.
Hoewel de titel van dit werk dit niet doet vermoeden, werd eveneens de mogelijkheid voorzien om uitgeschakelde PC’s op te starten via de webapplicatie. Zo is het mogelijk een volledig netwerk van machines op afstand te beheren. Deze functionaliteit legt echter een belangrijke beperking op aan de toepassing. Alle machines die via de webtoepassing beheerd moeten worden, dienen immers tot hetzelfde (sub)netwerk te behoren. Dit is inherent aan de beschikbare technologie.
Hieronder volgt een kort overzicht van ieder hoofdstuk binnen deze scriptie. In het tweede hoofdstuk worden de basistechnologieën besproken die noodzakelijk zijn om de applicatie te verwezenlijken. Het betreft zowel softwarepakketten als hardwarevereisten. Achtereenvolgens worden Unix, Linux, Debian GNU/Linux en shell-scripting behandeld. De Apache webserver, SQL en MySQL, PHP en Wake-On-Lan komen daarna aan de beurt. De bespreking beperkt zich tot het belichten van die aspecten van de bovenvermelde technologieën die noodzakelijk zijn om tot een goed begrip van het vervolg van de scriptie te komen en om de code, die terug te vinden is op de ingesloten CD-rom, te kunnen begrijpen. Er wordt, waar mogelijk, aandacht besteed aan hun specifieke kenmerken en de relevantie ervan in vergelijking met andere gelijkaardige technologieën. De installatie en configuratie ervan belichten we niet.
In het derde hoofdstuk komen de basiscomponenten van de nieuwe toepassing aan bod. Met basiscomponenten worden de meest essentiële onderdelen van de applicatie bedoeld. Er wordt een korte bespreking van de gebruikte proefopstelling en het Atlantis-netwerk gegeven. Daarnaast wordt de structuur van de gebruikte tabel uit de MySQL-databank besproken en verantwoord. Deze tabel dient om van elke Linux machine, die via de webapplicatie opgestart en afgeschakeld moet kunnen worden, gegevens bij te houden. Tenslotte wordt in dit hoofdstuk de interface van de webtoepassing toegelicht aan de hand van enkele screenshots. De nadruk ligt vooral op het verantwoorden van de gemaakte keuzes en op het bespreken van de functionaliteit.
HOOFDSTUK 1: INLEIDING
3
Het vierde hoofdstuk geeft een overzicht van de resterende onderdelen van de toepassing. Het betreft hoofdzakelijk shell-scripts die data uit de databank lezen of naar de databank schrijven. Er is vooral gefocust op hoe deze ervoor zorgen dat de applicatie werkt, zonder daarom evenwel de code van deze scripts in detail te bespreken. Daarnaast worden eveneens de ingebouwde beschermingen tegen ongewenste situaties, zoals een servercrash, uitvoerig belicht.
In het voorlaatste hoofdstuk komen een aantal performantiemetingen aan bod, die enkele belangrijke kenmerken van de applicatie illustreren.
De scriptie wordt afgesloten met een algemeen besluit.
HOOFDSTUK 2: DE BASISTECHNOLOGIEËN
4
Hoofdstuk 2: DE BASISTECHNOLOGIEËN 2.1 Unix, Linux en Debian GNU/Linux 2.1.1
Unix
Het Unix besturingssysteem werd op het einde van de jaren 1960 aan de Bell Laboratories ontwikkeld. Enige tijd later werd dit bedrijf overgenomen door de Amerikaanse telecommunicatiegigant AT&T. De belangrijkste ontwikkelaars, Dennis Ritchie en Ken Thompson (zie ook 2.2.3 p10), hadden Unix geprogrammeerd in een speciaal ontwikkelde taal, C. Deze is ook vandaag, samen met de daarvan afgeleide object-georiënteerde taal C++, nog één van de meest gebruikte talen voor het programmeren van applicaties en (besturings)systemen.
Unix is een multi-user, multi-tasking besturingssysteem, met als kenmerkende eigenschap dat alle processen zijn opgebouwd uit een reeks van kleinere programma’s of zogenaamde tools. Elk van deze tools, waarvan de beheersing gebeurt door middel van commando’s en ASCII1-tekstbestanden, is gespecialiseerd in de uitvoering van een relatief beperkte instructie.
Net als Microsoft Windows heeft Unix een grafische user interface (GUI), onder de naam X, X11 of het X Window System. De GUI zit bij Microsoft vast aan de rest van het operating system, bij Unix is dit echter niet het geval. X is duidelijk opgesplitst in een aantal functionele eenheden die naar hartelust met elkaar kunnen uitgewisseld worden. De belangrijkste daarvan is de zogenaamde “Window Manager” die zelf bepaalt hoe het scherm er juist uitziet en hoe het toetsenbord en de muis zich gaan gedragen. Een tweede verschil met Microsoft Windows is dat de client en de server van X apart kunnen worden geïnstalleerd. Zo is het mogelijk om aan de andere kant van de wereld de X applicatie te laten draaien, terwijl op de eigen computer enkel de acties van het toetsenbord, de muis en het beeldscherm gebeuren. [1]
2.1.2
Linux
Linux is, naast onder meer FreeBSD, één van de zovele Unix varianten. Het besturingssysteem ontstond als hobby van een student aan de Universiteit van Helsinki (Finland), Linus Torvalds. Deze had interesse in Minix, een door A. Tanenbaum (Universiteit van Amsterdam) ontwikkeld
1
ASCII =
American Standard Code for Information Interchange [2]
HOOFDSTUK 2: DE BASISTECHNOLOGIEËN
5
operating system dat gebaseerd was op Unix. Torvalds breidde de functionaliteit van Minix verder uit, tot in 1994 (2 jaar na het begin) de 1.0 versie van zijn Linux kernel werd gelanceerd. [3] Momenteel is versie 2.4.20 de laatste stabiele versie van deze kernel (release datum 28 november 2002 [4]) en de ontwikkeling ervan gaat nog steeds door.
Linux is naast erg stabiel en flexibel, ook gebruiksvriendelijk. Hier en daar zijn er echter nog een aantal tekortkomingen in terug te vinden. Linux onderscheidt zich niet alleen op technisch vlak van de andere operating systems, ook het ontwikkelings- en het licentiemodel verschillen enorm van die van de gekende commerciële besturingssystemen. [1] De licenties van de meeste software zijn dusdanig opgesteld dat ze de gebruiker ervan volledig het recht ontnemen om die software te kopiëren en aan te passen. Linux, van zijn kant, wordt ontwikkeld onder de “GNU General Public License”. Dit licentiemodel geeft aan zijn gebruikers de vrijheid om de software te kopiëren en aan te passen. Deze GNU General Public License is van toepassing op het grootste gedeelte van de software van de “Free Software Foundation” en van alle andere programma’s die onder deze licentie vallen. [5] De General Public License (GPL) werd bedacht door Richard Stallman. Deze ergerde er zich aan dat er zoveel software bestond die niet gewijzigd kon worden en die niet meerdere malen mocht worden geïnstalleerd. Software die onder de GPL uitgebracht wordt biedt de gebruikers heel wat voordelen. Ten eerste is bij deze software, indien gewenst, de broncode beschikbaar. Daarnaast laat de GPL de gebruikers toe om haar software meerdere malen te installeren. Het is niet toegelaten ergens een GPL-programma af te halen, zelf aan te passen en vervolgens als gesloten (commerciële) software te verkopen. Naast de GPL zijn er nog een aantal andere licenties die de gebruikers heel wat vrijheid geven. Voorbeelden daarvan zijn Artistic License, de BSD license en een variatie op de GPL (Lesser General Public License of LGPL). Software die onder één van deze licenties valt, wordt “Free Software” genoemd. Het woord “free” verwijst naar de vrijheid die de gebruiker ervan krijgt. Een gevolg van deze vrijheid is dat de gebruiker de software van anderen naar hartelust mag en kan aanpassen en er dus helemaal niets voor hoeft te betalen. Zo is “Free Software”eigenlijk ook “gratis software”. Software die ontstaat uit het ontwikkelingsmodel waarbij de gebruiker zelf nieuwe code kan toevoegen, wordt “Open Source Software” (OSS) genoemd. [1]
2.1.3
Debian GNU/Linux
Het Debian Project is een samenwerkingsverband tussen vrijwilligers die samen een vrij besturingssysteem willen implementeren. Hun geesteskind kreeg de naam Debian GNU/Linux of kortweg Debian mee. Heel wat processortypes worden er door ondersteund, waaronder Intel i386 en hoger, Alpha, Sparc, UltraSparc en IBM S/390.
HOOFDSTUK 2: DE BASISTECHNOLOGIEËN
6
Het begon allemaal in augustus 1993, toen Ian Murdock het idee opvatte een distributie2 (het concept “distributie” bestond op dat moment nog niet) op poten te zetten die openlijk ontwikkeld zou worden. Hij wilde dit doen in de geest van Linux en GNU. Het was de bedoeling om het nieuwe systeem met de nodige omzichtigheid op te bouwen en het geheel zo goed mogelijk te ondersteunen. Gedurende het eerste levensjaar (van november 1994 tot november 1995) werd het Debian Project mede gefinancierd door het GNU project van de “Free Software Foundation”. Wat eens begon als een kleine groep Free Software Hackers, groeide al snel uit tot een grote, goed georganiseerde gemeenschap van ontwikkelaars en gebruikers die ondertussen al ruim 8 700 packages3 op haar actief heeft staan.
Debian is de enige distributie die vrij is voor elke ontwikkelaar en gebruiker die zijn of haar bijdrage wil leveren tot de ontwikkeling van het systeem. Daarnaast is het de enige betekenisvolle verdeler van Linux die geen commercieel product aflevert, en het enige grote project dat vastgelegd is in een constitutie en in het bezit is van een sociaal contract en beleidsdocumenten om het gehele project goed te organiseren. Tenslotte is Debian ook een distributie die “micro packaged” is en gebruik maakt van gedetailleerde afhankelijkheidsgegevens met het oog op het verband tussen de verschillende packages om systeemconsistentie te verzekeren tijdens upgrades.
Vanaf release 1.1 (juni 1996) kreeg elke nieuw ontwikkelde distributie bovendien ook nog een codenaam, die één voor één gebaseerd zijn op karakters uit de film Toy Story. Zo passeerden Buzz [1.1 (juni 1996)], Rex [1.2 (december 1996)], Bo [1.3 (juli 1998)], Hamm [2.0 (juli 1998)], Slink [2.1 (maart 1999)] en Potato [2.2 (augustus 2000)] reeds de revue. Momenteel is Woody [3.0 (juli 2002)] aan de beurt. [7] Op de machines die deel uit maken van de testopstelling, draait zowel Woody (galatea: HTTP- en databankserver) als Potato (cadmus en aeolus: clients)
2
distributie = het geheel van software dat alles bevat om Linux op een PC te installeren. Daarbovenop
bevatten de distributies meestal een grote hoeveelheid gebruikerssoftware. [6] 3
packages = vrije, voorgecompileerde software, die samengebundeld is voor een eenvoudige installatie op de
machine van de gebruiker. [7]
HOOFDSTUK 2: DE BASISTECHNOLOGIEËN
2.1.4
7
Gebruikte Linux-basisfunctionaliteit
Om de applicatie correct te laten werken wordt gebruik gemaakt van enkele basisfuncties van het Linux-besturingssysteem, zoals de cron-daemon en de verschillende run-levels in combinatie met init. Hieronder volgt een summiere bespreking van hun belangrijkste kenmerken.
2.1.4.1 CRON cron is een tool die de Unix gebruikers toelaat om commando’s of shell-scripts (zie ook sectie
2.2.2 p10) automatisch en herhaaldelijk op een vooraf ingesteld tijdstip uit te voeren. In de meeste gevallen wordt cron gebruikt om systeembeheerinstructies uit te voeren of om automatisch backupprocessen te starten. Maar het kan net zo goed gebruikt worden voor andere doeleinden, waarvan er in deze scriptie een aantal voorbeelden terug te vinden zijn.
cron is een daemon. Dit betekent dat hij slechts één enkele maal hoeft te worden opgestart en hij
zal blijven luisteren totdat er boodschappen worden verzonden die hij moet uitvoeren. De crondaemon zal zo in een slaaptoestand blijven tot op een vooraf ingesteld tijdstip in één van de configfiles of crontabs. Een ander voorbeeld van een daemon is een HTTP-daemon, deze blijft ook in een soort slaaptoestand tot dat er een webpagina wordt opgevraagd. Bij de meeste Linux distributies (zo ook bij Debian Linux) wordt de cron-daemon automatisch geïnstalleerd en toegevoegd bij het startup-script.
cron kan op enkele manieren gebruikt worden. Onder de /etc map staan een aantal submappen
met namen als cron.hourly, cron.daily, cron.weekly en cron.monthly. Als je nu een script in één van deze mappen plaatst, zal het respectievelijk om het uur, dagelijks, wekelijks of maandelijks worden uitgevoerd. Wanneer de instructie moet worden uitgevoerd door een specifieke gebruiker of op een meer specifiek tijdstip, is het nuttiger de cron config-files (standaard /etc/crontab) of de bestanden in de map /etc/cron.d aan te passen. Beiden hebben dezelfde interne structuur bestaande uit zeven kolommen: minuut (0-59) - uur (0-23) - dag van de maand (1-31) - maand (1-12) - weekdag (0-7, waarbij zowel 0 als 7 voor zondag staan) - gebruiker - instructie. In de eerste vijf kolommen kunnen meerdere waarden worden gespecificeerd. Voor alle geldige waarden in een bepaalde kolom kan ook een * worden ingevuld.
Indien er zich een fout voordoet tijdens de uitvoering van een cron-opdracht, zal er steeds een emailbericht gezonden worden naar het root-e-mailadres van de machine waarop de instructie draait. Om te vermijden dat in het kader van deze scriptie bijvoorbeeld elke minuut een e-mail zou worden
HOOFDSTUK 2: DE BASISTECHNOLOGIEËN
8
gezonden bij een foutboodschap, wordt de standaardfoutuitvoer omgeleid naar de map /dev/null. Dit wordt geïmplementeerd door aan een opdrachtregel 2>/dev/null toe te voegen.
[8]
2.1.4.2 RUN-LEVELS Nadat de Linux-kernel geladen is, wordt er een eerste programmaatje opgeroepen, init genaamd, dat er voor zorgt dat alle daaropvolgende taken eveneens worden uitgevoerd. Deze taken omvatten het opzetten van de netwerkomgeving, het inladen van allerlei services en de multi-user-omgeving, en zo meer. Dit is het run-level of de toestand van het proces init en het hele systeem, dat definieert welke systeemservices in werking zijn. Er zijn zeven verschillende run-levels, elk met een eigen functionaliteit.
-
run-level 0: HALT; de machine staat in alle omstandigheden af
-
run-level 1: SINGLE USER MODE; vergelijkbaar met de veilige modus in Windows 9x
-
run-level 2: MULTI-USER MODE; zonder NFS4
-
run-level 3: MULTI-USER MODE; standaard run-level
-
run-level 4: niet gebruikt
-
run-level 5: X11; X Window system met grafisch loginscherm
-
run-level 6: REBOOT; de machine zal opnieuw opstarten
De standaard run-levels zijn de run-level 3 en 5. Daarnaast is het niet aan te raden om de standaardinit in te stellen op run-levels 0 en 6.
Alle run-levels zijn gespecificeerd binnen het bestand /etc/inittab, wat het configuratiebestand is waarin het init-proces gaat kijken welke en in welke volgorde taken moeten worden uitgevoerd.
Alle scripts die in de verschillende run-levels worden opgestart, staan standaard in de map /etc/init.d. Vanuit de mappen /etc/rc*.d is er een symbolische link naar de uitvoerbare
bestanden in de map /etc/init.d. Een dergelijke symbolische link kan op verschillende manieren worden ingesteld waaronder manueel via het commando ln of automatisch via updaterc.d. Deze laatste instructie is eigen aan Debian. De eigenlijke links zijn specifiek opgebouwd.
4
NFS
(Network File System) = NFS biedt de mogelijkheid om allerlei opslagmedia, zoals harde schijven, CD-
rom’s en floppies, van een andere PC over een netwerk te gebruiken. Dit gebeurt volledig transparant en er is geen enkel verschil met het gebruik van een lokale schijf. [10]
HOOFDSTUK 2: DE BASISTECHNOLOGIEËN
9
Beschouwen we als voorbeeld: S20startup_fping onder de map /etc/rc2.d op de server. Het eerste symbool, S, staat voor Start, wat wil zeggen dat op dit run-level, niveau 2 dus, het script met de naam startup_fping zal worden opgestart. De volgende twee karakters, 20, duiden het volgnummer aan waarin het script zal worden uitgevoerd binnen dat bepaalde run-level. Bovendien komen niet in alle run-levels dezelfde processen voor. Naast het S-signaal bestaat er ook een Ksignaal, waarbij K staat voor Kill.
Het is belangrijk dat scripts op verschillende run-levels worden opgestart en/of vernietigd, en dit omwille van twee uiteenlopende redenen. Ten eerste moet er rekening worden gehouden met de afhankelijkheden tussen de verschillende services, zodat een service die een andere nodig heeft om goed te functioneren ook daadwerkelijk erna wordt opgestart. De tweede reden is vooral diagnostisch: wanneer de machine zich vreemd begint te gedragen is het handig wanneer het betreffende proces kan worden uitgeschakeld zonder dat de volledige machine moet worden herstart. [9]
HOOFDSTUK 2: DE BASISTECHNOLOGIEËN
10
2.2 Shell-scripting 2.2.1
De shell
Een shell is een command interpreter. Het is meer dan alleen maar een beschermende laag tussen de kern van het besturingssysteem (de kernel) en zijn gebruikers. De shell op zich maakt geen deel uit van de kernel, maar gebruikt hem wel om de opgelegde instructies uit te voeren. Een Linux shell kan vergeleken worden zijn tegenhanger in MS-DOS, COMMAND.COM. Zij vervullen dezelfde taken, maar de Linux shell is veel krachtiger dan deze van MS-DOS! [11]
2.2.2
Wat is een shell-script?
Alle bestaande shells lezen hun input af van de shell-prompt (dit is de “command line interface” tussen de gebruiker en het operating system), interpreteren de instructies en geven ze door aan het besturingssysteem. [12] De input zelf kan worden verzorgd door instructies in te geven aan de prompt of door gebruik te maken van bestanden. Dit laatste kan zeer praktisch zijn wanneer een bepaalde opdracht een aantal keer terugkomt. Zo moeten de instructies niet telkens weer manueel worden ingebracht. In dit geval spreekt men van een shell-script.
2.2.3
Een kort overzicht van de bestaande shells
Op het moment dat de softwareontwikkelaars van AT&T, Dennis Ritchie en Ken Thompson, het besturingssysteem Unix bedachten, wilden ze ook onmiddellijk de mogelijkheid voorzien dat de gebruikers konden communiceren met hun systeem. Hun nieuwe “command interpreter” ging echter een heel stuk verder dan zijn voorgangers. Dit leidde tot het ontstaan van de Bourne Shell (ook bekend als sh), die werd uitgedacht door S.R. Bourne. Nadien werden nog een aantal andere shells ontwikkeld, zoals de C Shell (csh) en de Korn Shell (ksh). Steeds verder onderzoek leidde uiteindelijk tot het ontwerp van wat later de standaard shell zou worden voor interactief gebruik, de Bourne Again Shell of bash. [12]
Er bestaan nog een aantal andere shells, waaronder Tenex C Shell (tcsh), ash en zsh, maar deze kennen niet zo’n grote verspreiding in vergelijking met hun grotere broertjes. Ondanks de grote verscheidenheid aan types shell, vervullen ze allen dezelfde taken. Het verschil is echter te vinden in de gebruikte syntax en de standaard ingebouwde functionaliteit.
HOOFDSTUK 2: DE BASISTECHNOLOGIEËN
2.2.4
11
Enkele belangrijke gebruikte shell-commando’s en applicaties
Het is niet de bedoeling om alle gebruikte shell-commando’s en applicaties uitvoerig te bespreken. Toch is het aangewezen bij enkele van hen een beetje meer uitleg te geven [13]. ·
${string:positie:lengte}: datamanipulatie, haalt lengte karakters uit string string vanaf positie positie
·
awk: een applicatie en programmeertaal voor manipulatie van data, text retrieval en
processing ·
expr: evalueert numerieke expressies
·
head -nr bestand: geeft de eerste nr regels van het bestand bestand weer
·
invoer-redirectie: wordt gebruikt indien de input niet via het toetsenbord plaats
grijpt, maar via een bestand. Voor de naam van het bestand, waaruit de inhoud moet worden gelezen, wordt het < teken geplaatst. ·
pijplijnen: bestaat uit (shell-)opdrachten die door een | gescheiden worden. Hierbij
worden de opdrachten van links naar rechts uitgevoerd en is de standaarduitvoer van de eerste opdracht de standaardinvoer van de tweede opdracht. ·
sed: is een stream-editor, die een reeks teksttransformaties uitvoert op een input-stream in
slechts één beweging. sed wordt vaak als filter gebruikt binnen een pijplijn. ·
sort: rangschikt regels binnen een tekstbestand
·
tail -nr bestand: geeft de laatste nr regels van het bestand bestand weer
·
tr: biedt de mogelijkheid om tekens te veranderen, herhalingen weg te halen of tekens te
wissen ·
uitvoer-redirectie: wanneer de uitvoer niet op het scherm mag worden
weergegeven, kan deze naar een bestand worden omgeleid door middel van een >, gevolgd door de bestandsnaam. ·
wc –c bestand: telt het aantal tekens in het bestand bestand
·
wc –l bestand: telt het aantal lijnen in het bestand bestand
·
wc –w bestand: telt het aantal woorden in het bestand bestand
·
who: gaat na welke gebruikers zijn aangemeld en geeft informatie omtrent de
gebruikersnaam, het beeldscherm en het tijdstip van aanmelding
HOOFDSTUK 2: DE BASISTECHNOLOGIEËN
12
2.3 Apache webserver 2.3.1
Algemeen
Om een webgebaseerde toepassing te laten functioneren is er nood aan een webserver. Voor deze scriptie wordt gebruik gemaakt van de Apache webserver (versie 1.3.26). Deze server is een opensource HTTP-server die beschikbaar is voor de meeste hedendaagse besturingssystemen. Sinds april 1996 is de Apache webserver de meest gebruikte webserver op het internet. Apache wordt immers door meer dan 60% van de websites op het internet gebruikt. De gegevens uit Figuur 1 tonen duidelijk het aandeel van de Apache webserver op de webserver-markt.
Figuur 1: Marktaandeel van de topservers (augustus 1995 - april 2003) [14]
De populariteit van Apache is vooral te wijten aan het feit dat deze webserver efficiënt en veilig werkt, gemakkelijk uitbreidbaar is en daarenboven gratis en legaal gedownload kan worden. Specifiek voor de toepassing die in het kader van deze scriptie gecreëerd wordt, heeft de Apache webserver het belangrijke voordeel dat hij beschikbaar is zowel voor Unix systemen (inclusief Linux) als voor Windows systemen. Dit in tegenstelling tot bijvoorbeeld de Microsoft webservers, zoals IIS5 of PWS6, die enkel onder het Windows besturingssysteem draaien. Daarenboven werkt de Apache webserver vlot samen met de andere technologieën die verder in dit hoofdstuk besproken zullen worden. [15][16]
5 6
IIS
= Internet Information Service [17]
PWS
= Personal Web Server [17]
HOOFDSTUK 2: DE BASISTECHNOLOGIEËN
2.3.2
13
.htaccess bestanden
De Apache webserver biedt, net als andere webservers, de mogelijkheid om de configuratie-opties op directory-niveau in te stellen. Dit gebeurt door een .htaccess bestand met de gewenste wijzingen aan te maken in de map waarop ze dienen toegepast te worden. Alle ingegeven aanpassingen zijn van toepassing op alle onderliggende mappen, tenzij voor deze ook een .htaccess bestand bestaat.
In het kader van deze scriptie wordt een .htaccess bestand gebruikt om de toegang van de buitenwereld naar de webapplicatie af te schermen door middel van een gebruikersnaam en een wachtwoord. Deze worden echter wel zonder encryptie over het netwerk verzonden. Enkel indien een geldig wachtwoord en gebruikersnaam worden ingevuld, zal de webapplicatie in het browservenster worden geladen. [16]
HOOFDSTUK 2: DE BASISTECHNOLOGIEËN
14
2.4 SQL en MySQL 2.4.1
SQL
Naast een webserver is voor de hier beschreven toepassing een DataBase Management Systeem (DBMS) nodig. De gegevens van elke Linux machine, die via de applicatie bediend moet kunnen worden, moeten kunnen worden opgeslagen. Wanneer men het over een DBMS heeft, kan men niet om SQL heen. Bijna alle recente DataBase Management Systemen bieden immers ondersteuning voor SQL. Dit acroniem staat voor Structured Query Language en is een ANSI7 standaardtaal om toegang te krijgen tot databanken. Het is een tekstuele taal die gebruikt wordt in de meeste relationele DataBase Management Systemen. SQL laat enerzijds toe om tabelstructuren te beheren – in de literatuur noemt men dit onderdeel de data definition language – en biedt anderzijds de mogelijkheid om data op te vragen, te wijzigen, toe te voegen en te verwijderen – in de literatuur spreekt men over de data manipulation language. [18]
Elk SQL-statement bevat een aantal sleutelwoorden en dient steeds met één daarvan te beginnen. De belangrijkste SQL-sleutelwoorden die in deze scriptie worden gebruikt zijn: ·
SELECT:
veruit het belangrijkste sleutelwoord. Statements die met SELECT beginnen worden
gebruikt om gegevens op te vragen uit een tabel van een databank. SELECT
·
UPDATE:
kolomnaam FROM tabelnaam
een SQL-statement beginnende met dit sleutelwoord laat toe om bestaande data in
een databank te wijzigen. UPDATE
·
INSERT:
tabelnaam SET kolomnaam LIKE ‘waarde’
dit statement wordt gebruikt om nieuwe gegevens aan een databank toe te voegen.
INSERT INTO
·
DELETE:
om gegevens uit een databank te verwijderen.
DELETE
·
tabelnaam (kolomnamen) VALUES (kolomwaarden)
kolomnaam FROM tabelnaam
WHERE: WHERE
wordt gebruikt als beperkende voorwaarde bij de hierboven vermelde
sleutelwoorden. Zo zal het statement DELETE
kolomnaam FROM tabel WHERE kolomnaam LIKE kolomwaarde
enkel deze rij(en) uit de tabel verwijderen waar in de kolom met kolomnaam een waarde kolomwaarde voorkomt.
7
ANSI = American
National Standards Institute [19]
HOOFDSTUK 2: DE BASISTECHNOLOGIEËN
2.4.2
15
MySQL
Als DBMS wordt voor deze scriptie gebruik gemaakt van MySQL (versie 3.23.49). Uiteraard ondersteunt deze SQL. Daarenboven is MySQL snel, betrouwbaar, performant, stabiel, robuust, gratis, open-source, draait het op verschillende besturingssystemen en heeft het een laag geheugengebruik. Tevens beschikt MySQL over het standaard gebruikersbeheer, waardoor het onder meer mogelijk is om gebruikers beperkte rechten te geven. Zo kan men bijvoorbeeld instellen dat het voor bepaalde gebruikers enkel toegelaten is om SELECT statements uit te voeren. Deze eigenschappen, samen met de lage onderhoudskosten, maken MySQL uiterst geschikt voor webtoepassingen.
Een vergelijking op de benchmark-pagina van de MySQL-website (http://www.mysql.com) laat zien dat MySQL zonder meer de vergelijking aankan met commerciële producten zoals DB2, Informix, en Oracle, hoewel deze laatsten beter overweg kunnen met zeer grote databanken. Aangezien de omvang van de gebruikte databank vrij bescheiden blijft, is MySQL het beste alternatief. Voor een gedetailleerde bespreking van de structuur van de databank zie sectie 3.2 p23. [20]
Om een MySQL DBMS te laten draaien, dient men de MySQL-server te installeren. Om toegang te krijgen tot deze server, dient men gebruik te maken van de gelijknamige client, die evenwel automatisch mee wordt geïnstalleerd met de MySQL-server. Deze client kan echter ook zonder server op een andere PC worden geïnstalleerd. Door met behulp van een MySQL-client te connecteren naar een machine waarop een MySQL-server draait en door een correcte gebruikersnaam en wachtwoord mee te geven, kan men gebruik maken van die server. In de praktijk houdt dit in dat het mogelijk is om rechtstreeks van op een PC waarop een MySQL-client staat, gegevens op te vragen uit en te wijzigen in een MySQL-databank die op een andere PC geïnstalleerd is.
HOOFDSTUK 2: DE BASISTECHNOLOGIEËN
16
2.5 Server-side scripting en PHP 2.5.1
Wat is een server-side scriptingtaal?
De inhoud van de webtoepassing, die de front-end (bespreking zie sectie 4.2 p28) vormt van de applicatie die in het kader van deze scriptie gecreëerd werd, is afhankelijk van de inhoud van een MySQL-databank.
Daarenboven moet de inhoud van de databank gewijzigd kunnen worden aan de
hand van gegevens die op de website worden ingegeven. Verder dient de webapplicatie ook in staat te zijn om gegevens, die op een bepaalde pagina worden ingevoerd, door te geven naar andere pagina’s. Deze noodzakelijke functionaliteiten worden geboden door server-side scriptingtalen.
Een server-side scriptingtaal laat, net als zijn tegenhanger (een client-side scriptingtaal), toe om op een dynamische wijze webpagina’s te genereren. Concreet betekent dit dat de inhoud van een webpagina gegenereerd wordt door het uitvoeren van een script. Bij server-side scripting wordt dit script op de server uitgevoerd, dit in tegenstelling tot client-side scripting waar de scripts uitgevoerd worden door de browser van de gebruiker die de website opvraagt. Om gebruik te kunnen maken van een server-side scriptingtaal dient op de server de juiste script-engine aanwezig te zijn. Client-side scripting vereist dan weer dat de browser van de client over specifieke uitbreidingen (plug-ins) beschikt. Het voordeel van server-side scripting is dat de browser enkel het resultaat van het script ontvangt en op geen enkele manier de achterliggende code kan achterhalen. Tevens zijn er geen specifieke vereisten naar de browser toe. Deze moet enkel in staat zijn om de output van de scripts, pure HTML8, te interpreteren. [18]
2.5.2
PHP
De server-side scriptingtaal waar in deze scriptie voor gekozen is, is PHP (versie 4.1.2). Dit is een recursief acroniem en staat voor “PHP Hypertext Preprocessor”. Het is een open-source generalpurpose scriptingtaal die speciaal is uitgerust voor web-development en is compatibel met alle grote webservers, dus ook met Apache. Daarenboven is PHP-interpreter gratis en biedt PHP de mogelijkheid om een website te koppelen aan een server-side databank zoals MySQL. Verder is PHP snel, stabiel en kan de code ingebed worden in HTML-code. Tenslotte dient er ook op gewezen te worden dat PHP relatief gemakkelijk aan te leren is en dat heel wat specifieke functies reeds in PHP gedefinieerd en geïntegreerd zijn. [18]
8
HTML
= HyperText Markup Language; een opmaaktaal om webpagina’s te ontwikkelen. HTML is bovendien
een open taal.
HOOFDSTUK 2: DE BASISTECHNOLOGIEËN
17
De belangrijkste PHP-functies waarvan in deze scriptie gebruik gemaakt wordt, zijn [21] : ·
SESSION_START():
zorgt ervoor dat variabelen uit de huidige sessie9 geïmporteerd
worden in het huidige script ·
SESSION_REGISTER(“VARIABELENAAM”):
dient om een variabele en zijn bijhorende
waarde beschikbaar te maken voor toekomstige pagina’s tijdens dezelfde sessie ·
MYSQL_CONNECT(“HOSTNAAM”,”GEBRUIKERSNAAM”,”WACHTWOORD”):
wordt gebruikt om te
connecteren met een MySQL-server. Geeft een MySQL link-ID terug bij succes, false bij falen ·
MYSQL_SELECT_DB(“DATABANKNAAM”):
aangezien er op een MySQL-server meerdere
databanken kunnen aanwezig zijn, kan er slechts één gewenste databank geselecteerd worden ·
MYSQL_QUERY(“SQL STATEMENT”):
dient om een SQL-statement uit te voeren dat begint
met SELECT, UPDATE, INSERT, DELETE, CREATE of DROP ·
MYSQL_FETCH_ARRAY(“RESULTAAT VAN MYSQL_QUERY”):
haalt een resultaatrij op als een
associatieve array, een numerieke array, of als beide ·
MYSQL_NUM_ROWS(“RESULTAAT VAN MYSQL_QUERY”):
·
MYSQL_CLOSE(“MYSQL LINK-ID”):
·
EXEC(“COMMANDO”):
geeft het aantal rijen in het resultaat
sluit de verbinding met dit MySQL link-ID af
kan gebruikt worden om een commando uit te voeren op de server.
Specifiek laat het toe om shell-commando’s of shell-scripts op een veilige manier uit te voeren. ·
INI_SET(“SESSION.USE_COOKIES”,0):
met deze ingevulde waarden zorgt deze functie
ervoor dat in de configuratie-opties van PHP het gebruik van cookies uitgeschakeld wordt. Dit om te vermijden dat PHP bepaalde waarden van variabelen opslaat in cookies bij de bezoeker van de webapplicatie.
9
Een sessie kan men definiëren als de tijd gedurende dewelke men verschillende opeenvolgende
webpagina’s binnen eenzelfde website bezoekt. [21]
HOOFDSTUK 2: DE BASISTECHNOLOGIEËN
18
2.6 Wake-On-Lan 2.6.1
Algemeen
Wake-On-Lan (WOL) is de technologie die er voor zorgt dat computersystemen, die deze feature ondersteunen, van op afstand kunnen worden opgestart. Dit gebeurt door het verzenden van een speciaal daarvoor ontworpen netwerkpakket, het zogenaamde “Magic Packet”. Deze technologie werd ontwikkeld door AMD of IBM, al naargelang de geraadpleegde bron. Er moet aan een aantal vereisten voldaan zijn vooraleer deze technologie kan worden gebruikt op de eigen machine. Zo moet het moederbord zowel ACPI10 als WOL ondersteunen, de netwerkkaart (NIC11) heeft eveneens ondersteuning voor WOL nodig. Indien de NIC niet vast op het moederbord gemonteerd is, moet er ook een verbinding gemaakt worden tussen het moederbord en de netwerkkaart door middel van een drieaderige kabel. Bovendien zal Wake-On-Lan enkel functioneren wanneer de machines zich in een Soft-Off toestand bevinden, dit wil zeggen dat de machines nog steeds van een minimale stroom voorzien worden. [22]
Zodoende blijft de netwerkkaart nog steeds stroom krijgen op het moment dat de PC uitgeschakeld is. Op deze manier kan de machine blijven luisteren naar het verkeer dat zich op het netwerk bevindt. Indien op een bepaald moment een “Magic Packet” verstuurd wordt en wanneer de adapter van een netwerkkaart zijn eigen MAC12-adres herkent, zal hij op het signaal reageren en zijn machine opstarten. De andere NIC’s op het netwerk zullen het signaal negeren. Er wordt geen data teruggestuurd door de NIC. [23]
De Wake-On-Lan-technologie zal echter niet in alle omstandigheden correct werken. De oorzaak hiervan is terug te vinden bij het feit dat een router niet in staat is om een Ethernet-frame te routeren over verschillende (sub)netwerken. Binnen IBM is er ondertussen een manier ontwikkeld om dit probleem op te lossen. In plaats van naar de doelmachine een gewoon Ethernet-frame te versturen, wordt er een zogenaamd “Subnet Directed Broadcast” naar de router verzonden, die dat op zijn beurt dan weer doorstuurt naar het subnetwerk waarin de doelmachine gelegen is. [25]
10 11 12
ACPI = NIC
Advanced Configuration and Power Interface [24]
= Network Interface Card
MAC
= Medium Access Control
HOOFDSTUK 2: DE BASISTECHNOLOGIEËN
2.6.2
19
“Magic Packet”
Dit netwerkpakketje vormt de kern van de Wake-On-Lan-technologie. Het omvat een bepaalde byte-sequentie die bestaat uit een opeenvolging van 16 keer (volgens AMD) of 8 keer (volgens IBM) het MAC-adres van de ontvanger, voorafgegaan door een synchronisatiereeks bestaande uit (meestal) 6 keer FFh. [26] Het Ethernet-frame waarin het “Magic Packet” ingekapseld zit, voldoet aan de vereisten van de Ethernet-standaard en heeft de volgende vorm: SOURCE ADDRESS
| DESTINATION ADDRESS | PROTOCOL | MAGIC PACKET | CRC
waarbij het “destination address” bestaat uit een broadcast adres (bestaande uit enkel 1’en), een multicast adres (het eerste bit is 1 en het adres identificeert een verzameling van machines) of een individueel adres (komt overeen met het unieke MAC-adres van de host). [27]
2.6.3
ether-wake
ether-wake is een kleine tool dat het Wake-On-Lan “Magic Packet” samenstelt en daarna over het netwerk verstuurt. Momenteel is het AMD “Magic Packet” formaat de standaard die gebruikt wordt door ether-wake. Indien gewenst is het mogelijk om een wachtwoord toe te voegen aan het pakket. Dit is vier of zes byte lang, maar slechts weinig Ethernet-adapters ondersteunen dit feature. Het programma werd geschreven in de programmeertaal C door Donald Becker en is ondertussen aan versie 1.06 toe. Belangrijk bij de uitvoering is dat het root privileges vereist. Het uitzicht van het ether-wake-commando is als volgt [28]: ETHERWAKE
[OPTIONS] MAC-ADDRESS
Er zijn, naast ether-wake, nog heel wat andere tools, zowel voor Linux als Windows, die een “Magic Packet” samenstellen en daarna over het netwerk verzenden [29].
HOOFDSTUK 3: DE BASISCOMPONENTEN
20
Hoofdstuk 3: DE BASISCOMPONENTEN 3.1 De proefopstelling De proefopstelling bestaat uit drie machines, waarvan er zich één als server gedraagt. Ze zijn allemaal aangesloten op het Atlantis-netwerk (subnet 157.193.184.0 en subnetmasker 255.255.255.128) via een Ethernet hub (10BASE-T Ethernet Palm-Hub ETHER-H9+). De snelheid van het Atlantis-netwerk bedraagt 100 Mbit per seconde. Dit behoort, net als het Intec2 netwerk, toe aan de vakgroep INTEC, maar ze hebben elk een aparte functie. Daar het Intec2 netwerk enkel dient voor de IBCN-gebruikers en de groep Akoestiek, is het Atlantis netwerk gereserveerd voor educatieve en onderzoeksdoeleinden. Om deze reden wordt dit laatste ook wel het “Atlantis Testlab” genoemd. Beide netwerken zijn subnetwerken van een groter geheel, RUGNET, dat alle campussen, faculteiten en onderzoekscentra binnen de Gentse universiteit met elkaar verbindt. De kern van het Atlantisnetwerk, waaraan de servers en de Atlantis workstations gekoppeld zijn, wordt gevormd door twee Intel Express 520T 10/100 Ethernet switches. Naast deze servers en workstations, zijn er een groot aantal testnetwerken voor onderzoek en educatieve doeleinden, die gegroepeerd zijn binnen het TEST-netwerk.
De IP-adressen zijn hier stuk voor stuk privaat (van het type 10.*) wat een grote
flexibiliteit en adresruimte creëert. Het Atlantis netwerk omvat onder meer ook nog een bastion host die de mogelijkheid biedt om van buitenaf in te loggen op het netwerk, zonder veiligheidslekken te creëren. [30]
Op de server werden volgende applicaties geïnstalleerd: Apache (versie 1.3.26) als HTTP-server, MySQL (versie 3.23.49) als databankserver en -client, PHP
(versie 4.1.2) en de netwerktools fping en
ether-wake. Op elke host die moet worden opgenomen in het systeem, moet enkel een MySQL-client (versie 3.23.49) geïnstalleerd zijn. Dit is nodig omdat op elke host MySQL-commando’s worden uitgevoerd en deze anders niet begrepen kunnen worden door de machine. Daarnaast moet elke host voorzien zijn van een NIC en een moederbord die Wake-On-Lan ondersteunen indien ze vanop afstand opnieuw moeten kunnen worden opgestart.
HOOFDSTUK 3: DE BASISCOMPONENTEN
3.1.1
Kenmerken van elke gebruikte machine:
3.1.1.1 GALATEA.ATLANTIS.RUG.AC.BE (SERVER) processor-info: Producent
Intel
Type
Pentium III (Katmai)
CPU
snelheid
cache grootte
450 MHz 512 KB
Linux versie:
Debian GNU/Linux 3.0 (a.k.a. Woody)
kernel versie:
2.4.19
netwerkkaart
D-link DFE-538TX Fast Ethernet
3.1.1.2 CADMUS.ATLANTIS.RUG.AC.BE processor-info: Producent
Intel
Type
Pentium III (Katmai)
CPU
snelheid
cache grootte
450 MHz 512 KB
Linux versie:
Debian GNU/Linux 2.2 (a.k.a. Potato)
kernel versie:
2.2.20
netwerkkaart
D-link DFE-538TX Fast Ethernet met ondersteuning van Wake-On-Lan
3.1.1.3 AEOLUS.ATLANTIS.RUG.AC.BE processor-info: producent
AMD
type
AMD Duron™ Processor
CPU
snelheid
cache grootte
750 MHz 64 KB
Linux versie:
Debian GNU/Linux 2.2 (a.k.a. Potato)
kernel versie:
2.2.20
netwerkkaart
D-link DFE-538TX Fast Ethernet met ondersteuning van Wake-On-Lan
21
HOOFDSTUK 3: DE BASISCOMPONENTEN
3.1.2
22
Schets van de proefopstelling cadmus.atlantis.rug.ac.be (testmachine 1) 157.193.184.108
aeolus.atlantis.rug.ac.be (testmachine 2) 157.193.184.68
HUB (10 Mbit)
Atlantis Testlab
Figuur 2: Schets van de gebruikte proefopstelling
galatea.atlantis.rug.ac.be (databank + webserv er) 157.193.184.109
HOOFDSTUK 3: DE BASISCOMPONENTEN
23
3.2 Opbouw van de MySQL-databank Het volledige systeem is gebaseerd op een databank met slechts één tabel met negen velden erin. Deze negen velden zijn respectievelijk: id, mac_address, ip_address, hostname, status, user, contact, notes en lock_table. Hieronder volgt een korte bespreking van het nut van al deze velden.
o
id: dit is een unieke waarde voor alle ingangen in de databank. Deze waarde wordt automatisch gegenereerd en wordt enkel gebruikt bij het doorgeven van een geselecteerde waarde in de webapplicatie.
o
mac_address: het MAC-adres, ook wel Ethernet-adres genoemd, is meestal zes bytes lang en een unieke alfanumerieke combinatie bestaande uit 12 hexadecimale karakters. Het dient ter identificatie van een NIC en is vast verbonden met de NIC-card. Het MAC-adres zal in deze context gebruikt worden om de host van op afstand opnieuw op te starten door middel van de netwerktool ether-wake.
o
ip_address: het IP-adres13 is het adres dat een computer identificeert die in verbinding staat met het internet. Het standaardpatroon is een 32-bit numeriek adres dat bestaat uit vier getallen die van elkaar gescheiden zijn door middel van een punt. Elk getal kan een waarde aannemen tussen 0 en 255. Er zijn zowel statische (vaste) als dynamische IP-adressen. In het kader van deze scriptie zal enkel gewerkt worden met vaste IP-nummers. Het IP-adres vormt de basis van het hele systeem. Het stuurt immers bijna alle processen die nodig zijn om alles vlot te laten verlopen.
o
hostname: de hostname is de unieke naam die elke host binnen een bepaalde netwerk heeft gekregen. De hostname wordt steeds en indien de instructies juist worden opgevolgd, in kleine letters in de databank bewaard. Het nut van de hostname is eerder beperkt en dient enkel om het IP-adres tastbaarder te maken aan de hand van een naam. Daarnaast staan alle hosts uit de databank op de webpagina alfabetisch gerangschikt volgens hostname.
o
status: binnen het hele systeem zijn in totaal acht verschillende toestanden mogelijk, namelijk on, off, starting_up, shutting_down, backup, in_use, demo en unknown.
13
IP
= Internet Protocol
HOOFDSTUK 3: DE BASISCOMPONENTEN
24
Een kort woordje over elk van deze toestanden is hier wel op zijn plaats: ·
on: deze toestand doet zich voor wanneer de betreffende host aan staat en er geen gebruiker is ingelogd. Deze toestand komt automatisch tot stand wanneer het volledige bootproces voltooid is.
·
off: de betreffende host is uitgeschakeld (powered down). De host zal in deze status komen wanneer de machine wordt afgesloten, zowel wanneer dit manueel gebeurt als wanneer dit via de webapplicatie gebeurt. Deze toestand wordt eveneens automatisch aangepast bij het afsluiten van de machine.
·
starting_up: deze host is begonnen met opstarten. Deze toestand kan zich enkel voordoen wanneer de machine via de webtoepassing wordt opgestart.
·
shutting_down: deze toestand komt voor wanneer de host in kwestie op afstand wordt afgesloten. Het kan voorkomen dat deze toestand niet zichtbaar is op de webpagina. Opdat dit zou gebeuren moet er een toevallige samenloop van omstandigheden zijn: de cron-daemon op de host zet om de minuut een connectie op met de databank en gaat na of hij zichzelf moet afsluiten. Wanneer dit proces juist plaatsgrijpt tussen het aanpassen van de databank (omschakeling naar de shutting_down-toestand) en het vernieuwen van de beginpagina van de applicatie, wordt deze toestand niet aangeduid aangezien de host zichzelf al afgesloten heeft en reeds in de off-toestand verkeert.
·
in_use: de host waarbij deze toestand voorkomt is in gebruik door één of meerdere gebruikers. De namen van de ingelogde gebruikers zullen dan verschijnen in het veld user.
·
backup: op deze host werd een back-upproces gestart. Deze toestand heeft voorrang op de in_use-toestand, wat wil zeggen dat indien een back-upproces gestart is en er een gebruiker is ingelogd, de toestand steeds op backup zal blijven en niet overgaan in de in_use-toestand.
·
demo: deze status wordt gebruikt om te verhinderen dat een host via de webapplicatie kan worden uitgeschakeld. Dit kan bijvoorbeeld gebeuren wanneer deze machine gereserveerd is voor een demosessie. Deze toestand is prioritair ten opzichte van alle andere.
·
unknown: de unknown-status geeft alle toestanden weer die niet met zekerheid gekend zijn. Dit zal voorkomen telkens de databank wordt aangemaakt met behulp van het bijhorende script (create_database). Deze toestand zal zich handhaven tot op het moment dat het script op de desbetreffende host zijn werkelijke toestand in de databank heeft aangepast. Aangezien PHP en HTML geen real-time weergave
HOOFDSTUK 3: DE BASISCOMPONENTEN
25
van de gegevens garanderen, zal de webpagina eerst vernieuwd moeten worden. Ook bij het herstarten na een crash van de databankserver zal een onjuiste status in de databank worden weergegeven. Om dit op te lossen zal er een script lopen dat alle mogelijke inconsistenties in de databank zal trachten op te lossen door middel van het uitvoeren van het fping-commando. Wanneer één of meerdere hosts uit de databank bereikbaar zijn, zal hun respectievelijke toestanden eveneens op unknown worden gezet, omdat niet met zekerheid kan worden vastgesteld of deze al dan niet in gebruik zijn. Binnen de minuut én na het vernieuwen van de beginpagina, zal de databank opnieuw de correcte toestand(en) bevatten, omwille van het script dat slechts om de minuut door de cron-daemon wordt uitgevoerd.
o
user: dit veld wordt enkel ingevuld wanneer één of meerdere gebruikers zijn ingelogd op de betreffende host. Wanneer dit niet het geval is, wordt er in de databank de waarde NULL geschreven. Standaard wordt er steeds NULL in de databank geschreven.
o
contact: dit veld bevat het e-mailadres van de persoon die verantwoordelijk is voor de betreffende machine. Hij of zij zal telkens wanneer deze machine wordt afgesloten via de applicatie, hiervan op de hoogte worden gesteld door middel van een e-mail.
o
notes: op deze plaats komen belangrijke wetenswaardigheden omtrent de betreffende host. Ze worden meegegeven met de andere niet-wijzigende informatie.
o
lock_table: dit veld heeft een speciale functie en kan enkel de boolese waarden “on” of “off” bevatten. Daar het niet mogelijk was een blijvende verbinding met de MySQL-server op te zetten via een shell-script en aldus de optie LOCK TABLE binnen MySQL niet bleek te werken, werd een gelijkwaardig alternatief uitgewerkt door een extra kolom aan de bestaande tabel toe te voegen. Het is immers niet toegelaten dat bij het herstarten van de MySQL-server
na een crash de databank door meerdere scripts tegelijkertijd wordt
aangepast. Daarom wordt op dat moment de waarde in het veld lock_table bij alle records in de databank op “on” gezet. Dit betekent dat enkel het script, dat loopt bij het starten van de server, kan worden uitgevoerd en dat de andere scripts die voor hun uitvoering gebruik maken van de databank er geen veranderingen kunnen in aanbrengen. Eens dit script zijn taken voltooid heeft, wordt de toestand opnieuw naar “off” gebracht en kan het hele systeem opnieuw normaal functioneren.
HOOFDSTUK 3: DE BASISCOMPONENTEN
26
Alle velden met uitzondering van notes zijn verplicht in te vullen, aangezien deze essentieel zijn voor de goede werking van de gehele applicatie. De velden id, status, user en lock_table worden automatisch ingevuld door de applicatie.
Om een “veilige” toegang tot de databank te voorzien, wordt een nieuw databankaccount gecreëerd met beperkte privileges. Indien het wachtwoord en de gebruikersnaam toch onderschept zouden worden, bestaat er toch geen gevaar dat het systeem in het honderd zou lopen, omdat alles dubbel wordt gecontroleerd vooraleer een machine wordt afgesloten.
HOOFDSTUK 4: BESPREKING VAN DE VOLLEDIGE APPLICATIE
27
Hoofdstuk 4: BESPREKING VAN DE VOLLEDIGE APPLICATIE 4.1 Algemene werking Het volledige project bestaat uit twee belangrijke delen. Enerzijds is er een webapplicatie die als front-end dient voor een achterliggende MySQL-databank, anderzijds zijn er een aantal shell-scripts die voor de goede werking van de gehele toepassing zorgen. Een deel van deze scripts worden geïnstalleerd op elke machine die in de databank is opgenomen, een ander deel op de server. Er wordt vanuit gegaan dat alle basistechnologieën (Apache webserver, MySQL en PHP) op dezelfde machine zijn geïnstalleerd.
Het aan- en afschakelen van de PC’s is gebaseerd op twee principes, namelijk het push- en het pullprincipe. Wanneer een machine moet worden opgestart, wordt deze door ether-wake daartoe gedwongen. In dit geval spreken we dus van een push-principe. In tegenstelling hiermee staat de methode die gebruikt wordt om een machine uit te schakelen. Iedere PC gaat zijn toestand in de databank na en zal deze vergelijken met zijn huidige status die hij bepaalt aan de hand van een aantal parameters. Leest hij als status shutting_down, dan zal de machine dit interpreteren als het signaal om zichzelf af te sluiten. De PC wordt dus ook daadwerkelijk afgesloten indien aan alle gestelde voorwaarden voldaan is (voor de voorwaarden zie sectie 4.3.4 p40). De machine “trekt” zijn status dus uit de databank, vandaar dat we hier spreken van een pull-principe.
host (bv. cadmus)
databank
on
on shutting down
on
PULL off
off
off
off
starting up
off
PUSH on
on
Figuur 3: Push- en pull-principe binnen de applicatie
HOOFDSTUK 4: BESPREKING VAN DE VOLLEDIGE APPLICATIE
28
4.2 De webapplicatie 4.2.1
Algemeen
De webtoepassing die als front-end voor de databank fungeert, werd ontwikkeld met behulp van PHP.
Omdat niet alle browsers client-side scripting ondersteunen, is voor de webapplicatie geen
gebruik gemaakt van de mogelijkheden die deze biedt. Dit betekent concreet dat geen Javascript gebruikt is om de navigatie doorheen de verschillende webpagina’s te implementeren. Op bepaalde plaatsen is het echter noodzakelijk om één stap terug te keren in de browser-history. Hier wordt aan de gebruiker gevraagd om de terugkeerknop van de browser te gebruiken.
Om de gewenste functionaliteit te kunnen bieden, is de website opgesplitst in een aantal PHPpagina’s. Elk van deze PHP-scripts worden hieronder apart behandeld. Om de bespreking begrijpbaar te houden, zijn Figuur 5 en Figuur 6 opgenomen. Deze tonen een schematische voorstelling van de onderlinge relaties tussen de verschillende pagina’s. De bijgevoegde screenshots geven daarnaast een goed beeld van de interface van de webapplicatie. Ze werden genomen onder Internet Explorer 6.0 op een Windows XP Home Edition machine, met een beeldschermresolutie van 1152 x 864.
4.2.2
Toegang tot de webapplicatie
Om de webtoepassing te starten dient in de adresbalk van de browser de gepaste URL te worden ingetypt (http://webserver/remote_startup_shutdown.php). De toegang tot de pagina is afgeschermd van de buitenwereld door middel van een .htaccess bestand en kan enkel bereikt worden door een gebruikersnaam en een wachtwoord in te geven in het pop-upvenster dat getoond wordt (Figuur 4).
Figuur 4: Loginscherm
Figuur 5: Overzicht van de webapplicatie (startup.php en shutdown.php)
15 s
15 s
1b
check.php
2a
2
2b
+
You did not select a machine to start up.
The database is being updated
shutdown.php
1bY
Are you sure you want to shut down the following machine(s) ?
You did not select a machine to shut down.
1a
1
remote_startup_shutdown.php
login correct
er wordt een e-mailbericht verzonden
browser terug te keren
mogelijkheid om d.m.v. terugkeerknop uit de
pagina wordt na 15 seconden geredirected
The database is being updated
startup.php
2bY
Are you sure you want to start up the following machine(s) ?
15 s
Legende
login incorrect
loginscherm
HOOFDSTUK 4: BESPREKING VAN DE VOLLEDIGE APPLICATIE 29
Figuur 6: Overzicht van de webapplicatie (addhost.php en removehost.php)
5s
5s
5s
3c You did not fill out the required fields !!
3b
4e
successfully !
4
4f
4c
not in the database
The selected host was
4d
removehost.php
4
fill out the required fields below
Please make your choice and
form_removehost.php
The host with hostname [hostname] has been removed
The host with ip address [ip address] has been removed successfully !
Your information has been successfully added !
The password was not correct
3a
addhost.php
3
Please fill out the required fields to add a machine
form_addhost.php
3
remote_startup_shutdown.php
login correct
loginscherm
Please select an option: an ip address or a hostname
The password was not correct
browser terug te keren
mogelijkheid om d.m.v. terugkeerknop uit de
pagina wordt na 5 seconden geredirected
was not in the database
The selected ip-address
4b
4a
5s
Legende
login incorrect
HOOFDSTUK 4: BESPREKING VAN DE VOLLEDIGE APPLICATIE 30
HOOFDSTUK 4: BESPREKING VAN DE VOLLEDIGE APPLICATIE
4.2.3
31
remote_startup_shutdown.php
remote_startup_shutdown.php is de eerste pagina die getoond wordt nadat een correcte
gebruikersnaam en wachtwoord zijn ingegeven. Onder de hoofding van het Atlantis-netwerk bevindt zich een tabel die een alfabetisch overzicht geeft van alle machines die zich in de databank bevinden en die dus via de applicatie kunnen worden bediend. Deze gegevens worden uit de MySQL-databank
opgehaald met behulp van de MySQL-functies van PHP. Voor elk record uit de
tabel, dat de gegevens van een PC weergeeft, staat een aanvinkvakje dat toelaat om één of meerdere machines te selecteren. Indien een PC in gebruik is, een back-upproces is gestart of hij gereserveerd is voor een demosessie, is er geen aanvinkvakje aanwezig. Dit is een bijkomende ingebouwde veiligheid omdat een machine die zich in één van deze toestanden bevindt, toch niet mag worden afgesloten. Wanneer een PC aan het opstarten of afsluiten is, bevindt er zich eveneens geen aanvinkvakje. Een PC
die nog niet helemaal opgestart of afgesloten is, kan immers nog niet afgesloten of opgestart
worden. Tenslotte kan een machine ook niet worden geselecteerd als zijn status zich op unknown bevindt.
Oorspronkelijk was het de bedoeling om een selectievakje dat niet aangevinkt mag worden in “disabled” te zetten. HTML biedt immers deze mogelijkheid. Deze optie toont dan een checkbox die niet geselecteerd kan worden. Maar niet alle browsers (waaronder Netscape Navigator 4.72) ondersteunen deze HTML-optie en blijven een gewoon aanvinkvakje tonen. Daarom werd ervoor geopteerd om, op het moment dat een machine uit de databank niet geselecteerd mag worden, niets te tonen.
Tussen het logo en de overzichtstabel wordt het tijdstip weergegeven waarop de webpagina voor het laatst werd ingeladen. Dit is opgenomen omdat het mogelijk is dat de inhoud van de webpagina niet meer overeenstemt met de inhoud van de databank. De taal HTML is statisch en ondersteunt daardoor geen real-time weergave. Hoe langer geleden de pagina is ingeladen, hoe groter de kans dat ondertussen wijzigingen hebben plaatsgevonden in de databank. Een PC kan bijvoorbeeld manueel zijn uitgeschakeld, waardoor de status in de databank op off staat, terwijl de website nog on toont. Indien nagelaten wordt de pagina opnieuw in te laden, heeft dit geen repercussies op de goede werking van de applicatie. Dit wordt verder toegelicht (zie check_login_shutdown (zie sectie 4.3.4 p40) en shutdown.php (zie sectie 4.2.5 p34)). Het weergeven van het tijdstip van de laatste pagina-refresh, werd verkozen boven het automatisch opnieuw inladen van de pagina. Deze laatste mogelijkheid draagt immers het gevaar in zich dat men, na een automatische refresh, reeds aangevinkte PC’s opnieuw dient te selecteren, wat allerminst gebruiksvriendelijk is.
HOOFDSTUK 4: BESPREKING VAN DE VOLLEDIGE APPLICATIE
32
Onder de tabel staan een aantal knoppen die voor de bediening van de toepassing instaan. Deze kunnen in drie groepen worden onderverdeeld, die elk in verbinding staan met een andere webpagina. Zo zijn de knoppen “SHUTDOWN” en “STARTUP” gelinkt aan het PHP-script check.php.
De knoppen met het opschrift “ADD NEW HOST” en “REMOVE HOST” staan respectievelijk in verbinding met de invulformulieren form_addhost.php en form_removehost.php. Oorspronkelijk was het de bedoeling om alle knoppen te laten verwijzen naar check.php, maar dit gaf problemen bij de combinatie van de formulieren en de terugkeerknop van de browser. De button met als naam “UNSELECT ALL” valt buiten deze categorieën omdat zijn functionaliteit zich beperkt tot het deselecteren van alle reeds aangevinkte machines.
Helemaal onderaan de webpagina staat de legende. In een webbrowser ziet het geheel er als volgt uit.
Figuur 7: Screenshot van remote_startup_shutdown.php
HOOFDSTUK 4: BESPREKING VAN DE VOLLEDIGE APPLICATIE
4.2.4
33
check.php
Er zijn twee mogelijkheden om op de pagina check.php te komen: door ofwel op de knop “START UP”
(Figuur 5 stap 2) ofwel op “SHUT DOWN” (Figuur 5 stap 1) te klikken. Bij elke optie zijn er nog
twee alternatieven: ofwel waren er één of meerdere machines geselecteerd ofwel geen enkele. Voor het afsluiten geeft dit in Figuur 5 de keuzemogelijkheden 1a en 1b, voor het opstarten 2a en 2b.
Stel: we bevinden ons in situatie 1b. Hier wordt er een overzicht gegeven van de geselecteerde machines die moeten worden afgesloten (zie Figuur 8). Indien alles naar wens is, kan deze keuze bevestigd worden door op de “YES”-button te klikken. Indien niet, kan met behulp van de terugkeerknop uit de browser naar de beginpagina remote_startup_shutdown.php teruggekeerd worden en kunnen daar de gewenste aanpassingen worden aangebracht. Een volledig gelijklopend scenario doet zich voor wanneer men zich in toestand 2b bevindt en één of meerdere machines moeten worden opgestart.
Telkens wanneer geen machines zijn aangevinkt, zal een foutboodschap getoond worden die tevens vraagt om één pagina terug te keren in de browser-history.
Figuur 8: Screenshot van check.php
HOOFDSTUK 4: BESPREKING VAN DE VOLLEDIGE APPLICATIE
4.2.5
34
shutdown.php
Indien in situatie 1b op de “YES”-button wordt gedrukt, wordt het script shutdown.php ingeladen. De gebruiker krijgt hier een overzicht van de machines die hij wilde afsluiten. Het is echter mogelijk dat, om verschillende redenen, één of meerdere machines niet konden worden afgesloten, bijvoorbeeld omdat hij reeds uitgeschakeld was of er ondertussen een back-upproces gestart was. Hier wordt de gebruiker dan ook van op de hoogte gebracht. De status van de PC’s die wel konden worden uitgeschakeld, zal in de databank naar shutting_down worden upgedated. In dit geval zal ook, door middel van sendmail, een e-mailbericht naar de verantwoordelijke van de betreffende PC worden verzonden. Na 15 seconden wordt de pagina automatisch geredirected naar de beginpagina remote_startup_shutdown.php.
Figuur 9: Screenshot van shutdown.php
4.2.6
startup.php
Nadat in situatie 2b (Figuur 5) de keuze van de aan te schakelen machines bevestigd is, krijgt de gebruiker een overzicht van de geselecteerde PC‘s. Indien de machine kon worden opgestart, wordt de status van de betreffende PC’s gewijzigd in starting_up. Voor het eigenlijke opstarten van de machines over het netwerk wordt gebruik gemaakt van de tool ether-wake die met behulp van de PHP-functie
exec wordt uitgevoerd. Ook hier wordt de pagina na 15 seconden vervangen door de
beginpagina remote_startup_shutdown.php.
HOOFDSTUK 4: BESPREKING VAN DE VOLLEDIGE APPLICATIE
4.2.7
35
form_addhost.php
Dit PHP-script (Figuur 6 stap 3) toont een invulformulier om de gegevens van een nieuwe machine toe te voegen aan de databank. De velden ”mac-address”, “ip-address”, “hostname” en “contact” (aangegeven door middel van een rood sterretje) zijn verplicht in te vullen. Daarnaast dient een wachtwoord, specifiek voor het toevoegen van een host aan het systeem, ingevuld te worden. De velden uit de databank die niet in het formulier opgenomen zijn, zullen door het volgende script addhost.php automatisch worden aangevuld en kunnen dus niet door de gebruiker bepaald
worden. Het wachtwoord is hard gecodeerd in de PHP-code, in plain-text zonder enige vorm van versleuteling. Er is geen enkele mogelijkheid ingebouwd om deze op een andere manier dan in het script zelf te wijzigen.
Figuur 10: Screenshot van form_addhost.php
HOOFDSTUK 4: BESPREKING VAN DE VOLLEDIGE APPLICATIE
4.2.8
36
form_removehost.php
Het script form_removehost.php (Figuur 6 stap 4) biedt de gebruiker de mogelijkheid om een overtollige machine uit het systeem te verwijderen. Dit kan gebeuren door ofwel een hostname ofwel een IP-adres in te geven. De juiste optie dient wel nog te worden aangegeven door middel van de radiobutton bovenaan de pagina. Ook hier moet een wachtwoord, eigen aan het verwijderen van een host, worden ingetypt. De ingevulde gegevens worden dan doorgegeven naar de volgende pagina removehost.php. Net als bij het voorgaande script, staat ook hier het wachtwoord in plain-text in de code en kan het enkel veranderd worden in de code zelf.
Figuur 11: Screenshot form_removehost.php
4.2.9
addhost.php
Na het verzenden van het formulier op pagina form_addhost.php komt de gebruiker terecht in addhost.php. Indien alle informatie correct was, worden de nieuwe gegevens naar de databank
weggeschreven (Figuur 6 situatie 3c). Na 5 seconden wordt de webpagina geredirected naar de beginpagina remote_startup_shutdown.php.
HOOFDSTUK 4: BESPREKING VAN DE VOLLEDIGE APPLICATIE
37
Indien geen of een verkeerd wachtwoord werd ingegeven (situatie 3a) verschijnt de foutmelding “The password was not correct”. Het is eveneens mogelijk dat niet alle vereiste velden van het formulier zijn ingevuld (situatie 3b). In deze situaties kan de gebruiker steeds terugkeren naar het formulier en de vereiste gegevens aanvullen of corrigeren.
4.2.10 removehost.php Deze pagina wordt ingeladen nadat in form_removehost.php op de knop “REMOVE FROM DATABASE” IP-adres
(zie Figuur 6 situatie 4) wordt gedrukt. Naargelang de gemaakte keuze (verwijderen op
of op hostname (zie Figuur 11)), en de al dan niet ingevulde velden, worden er
verschillende boodschappen in het browservenster getoond. Enkel indien alles volledig is (situaties 4e en 4f), wordt de gekozen machine uit de databank, en dus ook uit het systeem, verwijderd. Enkel in deze situatie zal de pagina na 5 seconden automatisch vervangen worden door de beginpagina remote_startup_shutdown.php. In alle andere gevallen (4a, 4b, 4c en 4d) is er de
mogelijkheid om via de terugkeerknop uit de browser terug te gaan naar het formulier zodat de noodzakelijke aanpassingen kunnen worden gedaan.
HOOFDSTUK 4: BESPREKING VAN DE VOLLEDIGE APPLICATIE
38
4.3 Achterliggende shell-scripting op iedere client De scripts die hieronder worden besproken, moeten aanwezig zijn op elke machine die met de applicatie bediend moet kunnen worden.
4.3.1
update_database_startup en update_database_shutdown
4.3.1.1 UPDATE_DATABASE_STARTUP Dit script wordt slechts éénmaal uitgevoerd, namelijk op het moment dat een PC in de laatste fase van de opstartprocedure is gekomen. Het script maakt verbinding met de MySQL-server en zet de status voor de betreffende machine in de databank op on. Dit zorgt er voor dat een PC, die handmatig wordt aangeschakeld, toch de juiste status krijgt in de databank. De status wordt dan van off naar on gezet. Dit script zal daarnaast ook de status van een machine, die via de applicatie wordt opgestart, updaten van starting_up naar on. Het script update_database_startup controleert eveneens of de bestanden backupfile en demofile nog bestaan. Deze bestanden worden respectievelijk gecreëerd bij de uitvoering van de
scripts update_database_backupstart en update_database_demostart (zie sectie 4.3.2.1 p39 en sectie 4.3.3.1 p40). Indien één van deze of beide bestanden nog op de machine aanwezig zijn, zal het script deze verwijderen. Het feit dat één van deze bestanden nog bestaat, wijst er op dat de machine niet correct werd afgesloten de laatste maal dat de machine gebruikt is.
4.3.1.2 UPDATE_DATABASE_SHUTDOWN Het script update_database_shutdown zal tijdens de afsluitprocedure de status van de PC in de databank op off zetten. Het script ziet er op toe dat een machine die manueel wordt afgesloten toch op off komt in de databank. Tevens zorgt het ervoor dat de status van een PC, die via de applicatie wordt afgesloten, op het einde van het afsluitproces, van shutting_down naar off gewijzigd wordt. update_database_shutdown heeft daarnaast nog een bijkomende functionaliteit. Het script
gaat controleren of de bestanden backupfile en demofile, mogelijks gecreëerd door update_database_backupstart en update_database_demostart (zie sectie 4.3.2.1 p39
en sectie 4.3.3.1 p40), verwijderd werden. Indien dit niet het geval is, zal dit script ze toch verwijderen. Als een machine niet correct wordt afgesloten, door bijvoorbeeld een warme herstart of een hardware-probleem, dan wordt de normale afsluitprocedure niet gevolgd. Dit heeft tot gevolg dat het script niet wordt uitgevoerd. De functionaliteit van dit script wordt in deze situatie evenwel
HOOFDSTUK 4: BESPREKING VAN DE VOLLEDIGE APPLICATIE
39
opgevangen door update_database_startup, op de client, en door cron_fping, op de server (zie sectie 4.4.2.2 p44).
4.3.2
update_database_backupstart en update_database_backupstop
4.3.2.1 UPDATE_DATABASE_BACKUPSTART Op het moment dat een back-upproces start, zal het script update_database_backupstart verbinding maken met de databank en de status van de betreffende PC op backup zetten. Indien de PC
op het moment dat het back-upproces start evenwel gebruikt wordt voor een demosessie, zal dit
script de status van de PC in de databank niet wijzigen. De status demo heeft, bij conventie, immers voorrang op de status backup. Tevens zal dit script een bestand (backupfile), onder een zelf te kiezen map, creëren met als inhoud het tijdstip waarop het back-upproces begonnen is. De bedoeling hiervan is na te gaan of de PC
al dan niet bezig is met een back-up proces. Indien deze file bestaat is er een back-upproces aan
de gang, anders niet.
Opmerking: voor een goede werking van de applicatie is het ten strengste af te raden deze backupfile van de schijf te verwijderen of te verplaatsen. Gebeurt dit toch, dan kan een machine
die een back-upproces gestart is toch via de applicatie uitgeschakeld worden.
4.3.2.2 UPDATE_DATABASE_BACKUPSTOP Het script update_database_backupstop zal, wanneer het back-upproces ten einde is, de status van de PC naar on of in_use updaten. Dit is afhankelijk van het feit dat de machine al dan niet in gebruik is. Indien de PC evenwel op dat moment gebruikt wordt voor een demosessie, zal update_database_backupstop de status van de machine in de databank ongewijzigd laten.
Het bestand dat gecreëerd werd door update_database_backupstart wordt door dit script opnieuw verwijderd. Indien het back-upproces niet correct wordt afgesloten, zal het bestand backupfile niet van de schijf verwijderd worden. Het bestand wordt dan gewist door update_database_shutdown of door update_database_startup.
HOOFDSTUK 4: BESPREKING VAN DE VOLLEDIGE APPLICATIE
4.3.3
40
update_database_demostart en update_database_demostop
4.3.3.1 UPDATE_DATABASE_DEMOSTART Wanneer een PC die met de applicatie bediend kan worden, ingezet wordt bij een demosessie moet het mogelijk zijn deze in de status demo te zetten in de databank. Deze status maakt het immers onmogelijk om de machine via de applicatie uit te schakelen. Dit kan door het script update_database_demostart manueel vanop de commandolijn uit te voeren. Net als update_database_backupstart zal ook dit script een bestand (demofile) aanmaken met als
inhoud het moment waarop het werd gecreëerd. Zo kan op een eenvoudige manier gecontroleerd worden of de machine al dan niet gebruikt wordt voor een demosessie.
Opmerking: net als bij het voorgaande script update_database_backupstart mag ook hier het bestand demofile onder geen enkele voorwaarde manueel gewist worden.
4.3.3.2 UPDATE_DATABASE_DEMOSTOP Op het moment dat een machine niet meer gebruikt wordt voor een demosessie dient men het script update_database_demostop manueel te laten lopen. Dit script zal de status in de databank
wijzigen in on, in_use of back_up al naargelang de werkelijke toestand. Tevens wordt het bestand dat door het script update_database_demostart gecreëerd werd, verwijderd. Zolang men dit script niet laat lopen blijft de machine in de toestand demo, daar deze toestand steeds voorrang heeft op alle andere.
Het opnieuw opstarten van de machine heeft evenwel tot gevolg dat zowel de status demo als het bestand demofile verdwijnen. Indien men tijdens een demosessie een machine moet rebooten, moet men tevens het script update_database_demostart opnieuw laten lopen.
4.3.4
check_login_shutdown
Dit script wordt, in tegenstelling tot de voorgaande, elke minuut uitgevoerd met behulp van de cron-daemon. Hoewel het slechts één script betreft, wordt de bespreking opgesplitst in twee delen:
een eerste gedeelte dat de machine in kwestie afsluit en een tweede gedeelte dat er voor zorgt dat de status van de betreffende machine in alle omstandigheden correct is.
HOOFDSTUK 4: BESPREKING VAN DE VOLLEDIGE APPLICATIE
41
4.3.4.1 DE SHUT DOWN-FUNCTIE Het eerste deel van het script check_login_shutdown controleert of de machine waarop dit script is geïnstalleerd moet worden uitgeschakeld. Dit mag slechts onder bepaalde omstandigheden gebeuren: ·
de waarde in het veld lock_table dient “off” te zijn
·
de status moet gelijk zijn aan shutting_down
·
er mogen geen gebruikers zijn aangemeld op de machine
·
er mag geen back-upproces gestart zijn (backupfile bestaat niet)
·
de machine mag niet ingeschakeld zijn in een demosessie
Indien aan al deze voorwaarden voldaan is, zal de PC het halt-commando uitvoeren en zichzelf dus uitschakelen. De opgesomde condities worden een tweede maal gecheckt vooraleer de machine wordt afgesloten. Dit is nodig omdat men steeds met een vertragingstijd van maximaal één minuut rekening dient te houden. Zo is het bijvoorbeeld mogelijk dat een machine via de webapplicatie wordt aangespoord om zichzelf af te sluiten en dat voor het sluiten daadwerkelijk gebeurt, toch nog een gebruiker inlogt. In dit geval mag de PC uiteraard niet worden afgesloten. Gelijkaardige scenario’s kunnen zich voordoen in het geval van het opstarten van een back-upproces of een demosessie. Al deze toestanden (in_use, backup en demo) worden immers zelf maar om de minuut gecontroleerd en eventueel naar de databank weggeschreven. Deze kleine onvolkomenheid is te wijten aan de specifieke kenmerken van de cron-daemon en het gebruikte pull-principe. Het is niet mogelijk om een shell-commando of script frequenter dan om de minuut te laten uitvoeren. Dit werd opgelost door alles voor de zekerheid nog een tweede maal te controleren.
4.3.4.2 DE UPDATE-FUNCTIE Het tweede gedeelte van het script is verantwoordelijk voor het correct houden van de toestanden van de machines die opgenomen zijn in de databank. Er zijn vier mogelijke situaties onderscheidbaar: on, in_use, backup en demo. Bij deze laatste twee mogelijkheden wordt in de webapplicatie eveneens weergegeven of er al dan niet een gebruiker is ingelogd op de betreffende machine. De statussen backup en demo worden bepaald door de aanwezigheid van een bestand, respectievelijk backupfile en demofile. Zoals hierboven al vermeld zal de toestand demo steeds prioritair zijn boven backup.
HOOFDSTUK 4: BESPREKING VAN DE VOLLEDIGE APPLICATIE
42
4.4 Achterliggende shell-scripting op de server Om de functionaliteit van de shell-scripts op de server te implementeren, kon gekozen worden voor twee netwerktools, met name ping en fping. Het verschil tussen beide wordt hieronder eerst kort toegelicht. Vervolgens komen de scripts startup_fping en cron_fping, die van deze functionaliteit gebruik maken, aan bod.
4.4.1
Het verschil tussen ping en fping
De programma’s ping en fping lijken in zeer grote mate op elkaar, ze maken immers beiden gebruik van een Internet Control Message Protocol (ICMP) echo request om te achterhalen of een bepaalde host in het netwerk bereikbaar is of niet. In tegenstelling tot ping, bestaat de mogelijkheid om bij fping een reeks van hosts, aan de commandolijn, op te geven die gecontroleerd moeten worden. Het is eveneens mogelijk een bestand, dat een lijst met te pingen hosts bevat, als input te gebruiken bij het fping-commando. In plaats van te wachten tot een host een reply stuurt of een time-out geeft na het versturen van de request, zal fping een ping-pakket versturen en overgaan naar de volgende host in de rij volgens een round-robin manier, totdat alle hosts overlopen zijn. Indien een host antwoordt, zal deze verwijderd worden uit de lijst met de nog te controleren hosts. Indien deze echter binnen een bepaalde tijdslimiet en/of na een vastgelegd aantal pogingen geen reply stuurt, zal de host beschouwd worden als zijnde onbereikbaar. [31]
Ondanks de kleine verschillen tussen beide commando’s werd toch gekozen om het standaard nietgeïnstalleerde fping te gebruiken omdat het makkelijker te gebruiken is binnen shell-scripting en de output ervan eenvoudig te parsen is. Bovendien biedt fping de mogelijkheid om enkel deze hosts weg te schrijven die ofwel bereikbaar ofwel niet bereikbaar zijn, wat in het kader van deze applicatie zeer nuttig is.
Nu vaststaat dat bovenstaande scripts voor hun functionaliteit grotendeels gebaseerd zijn op het commando fping, kan worden overgegaan tot een bespreking van de scripts die gebruik maken van dit commando en het nut ervan in het geheel van de applicatie.
HOOFDSTUK 4: BESPREKING VAN DE VOLLEDIGE APPLICATIE
4.4.2
43
cron_fping en startup_fping
4.4.2.1 STARTUP_FPING Het script startup_fping loopt wanneer de databank server na een crash opnieuw opgestart wordt en dient vooral om het volgende probleem op te lossen (zie eveneens Figuur 12).
host (bv. cadmus)
server (galatea)
werkelijke toestand
front-end
toestanddatabank server
on
on
aan
on
shutting down
aan
off
uit
on
shutting down
uit
on
shutting down
aan
off
off
aan
Figuur 12: Probleemsituatie bij een crash van de databankserver
Het probleem stelt zich over drie fronten: enerzijds is er de werkelijke toestand bij de host, anderzijds de toestand zoals deze wordt weergegeven op de webpagina of de front-end (dit is ook de toestand zoals deze in de databank geschreven is) en tenslotte de toestand van de databankserver zelf.
Beschouwen we nu de volgende situatie: de webpagina toont de toestand van de host zoals deze is weggeschreven in de databank. Stel: deze is on en in werkelijkheid staat de host ook aan. Bovendien functioneert de databank server naar behoren. Vervolgens wordt via de webapplicatie het sein gegeven dat de host zichzelf mag afsluiten. Dit wordt weggeschreven in de databank en de webpagina vertoont, zoals verwacht, de melding shutting_down. Het script check_login_shutdown wordt, zoals hierboven vermeld, om de minuut door de cron van de host uitgevoerd en deze laatste zal zichzelf na het lezen van de toestand shutting_down in de databank, afsluiten.
HOOFDSTUK 4: BESPREKING VAN DE VOLLEDIGE APPLICATIE
44
Tot nu toe geen enkel probleem, ware het niet dat zich op dit eigenste ogenblik een storing bij de databank server voordoet en deze laatste uitvalt. De host van zijn kant sluit normaal af, maar kan zijn nieuwe toestand off niet meer naar de databank schrijven aangezien deze niet langer bereikbaar is en blijft de toestand van de host dus op shutting_down staan. Dit is geen correcte toestand. Er zal zich een probleem voordoen als de host na een tijdje weer manueel wordt opgestart. De databank zal niet worden upgedated aangezien de databank server nog steeds niet hersteld werd na de crash. Dit heeft als gevolg dat de status op de webpagina (en in de databank) nog steeds op shutting_down staat. Vervolgens zet men de databankserver aan. Op de host loopt om de minuut het script check_login_shutdown in de cron, het connecteert met de databank en checkt zijn status.
Aangezien deze nog steeds op shutting_down staat, zal de host zichzelf, binnen de minuut nadat de databankserver werd opgestart, opnieuw afsluiten zonder dat dit proces kan worden gestopt.
Om dit te vermijden werd er een extra veiligheid ingebouwd door gebruik te maken van het script startup_fping. Telkens als de databankserver opstart, wordt dit script uitgevoerd, vlak nadat de MySQL-deamon
wordt ingeladen. Er zit eveneens een bijkomende controle in verwerkt om er voor
te zorgen dat op het moment dat dit script loopt er geen enkel ander script verbinding kan maken met de tabel in de databank en er dus ook geen gegevens kan in aanpassen. Dit wordt gerealiseerd door het lock_table veld in de databank. Wanneer een host na het versturen van het ping-pakket onbereikbaar blijkt te zijn, zal de status van de betreffende host in de databank op off worden gezet. In alle andere gevallen zal de nieuwe status in de databank unknown zijn, aangezien op dat moment niet met zekerheid kan worden vastgelegd wat de werkelijke toestand van de host in kwestie is. Na een tijdsspanne van maximaal één minuut zal de status in de databank opnieuw overeenkomen met de werkelijke toestand. Hier zorgt immers het script check_login_shutdown voor, dat zoals reeds gezegd om de minuut door de crondaemon van elke host uitgevoerd wordt.
4.4.2.2 CRON_FPING Dit script dat om de tien minuten wordt uitgevoerd op de databankserver, controleert eveneens welke hosts uit de databank bereikbaar zijn en welke niet. Indien een host niet antwoordt op de echo request, zal de toestand van de betreffende host in de databank op off worden gezet. Dit is immers de enige toestand die met zekerheid kan worden vastgelegd. Hier is het, in vergelijking met het voorgaande script, niet wenselijk om de status van de bereikbare hosts op unknown te zetten. Dit script heeft als enige echte functie om eventuele inconsistenties op te sporen. Zo is het immers mogelijk dat een bepaalde host niet correct werd afgesloten en om dit probleem op te lossen werd er voor gekozen om door de databank server om de tien minuten ping-pakketjes te laten sturen naar
HOOFDSTUK 4: BESPREKING VAN DE VOLLEDIGE APPLICATIE
45
de hosts uit de databank. Het is niet nodig dat dit script vaker wordt uitgevoerd omdat het enkel dient om mogelijke fouten op te sporen en voor het overige niet echt belangrijk is voor de totale en goede werking van de applicatie.
HOOFDSTUK 5: PERFORMANTIE VAN DE APPLICATIE
46
Hoofdstuk 5: PERFORMANTIE VAN DE APPLICATIE 5.1 Analyse van de netwerkbelasting Deze performantietest werd uitgevoerd om een beeld te krijgen van het netwerkverkeer dat deze applicatie tijdens zijn uitvoering genereert. De daartoe gebruikte tools zijn tcpdump en ipgrab, welke geïnstalleerd waren op de host aeolus (157.193.184.68). Er werd telkens gemeten tussen de server (galatea (157.193.184.109)) en een host (in dit geval werd gekozen voor cadmus (157.193.184.108)). Deze zijn via een 10 Mbit-hub verbonden met het Atlantis-netwerk. Voor een overzicht van de proefopstelling zie eveneens sectie 3.1.2 p22. Voor de berekening van de burstgrootte achteraf, werd geen rekening gehouden met eventuele ARP-pakketten die vooraf verzonden worden.
5.1.1
De gebruikte tools
5.1.1.1 TCPDUMP De netwerktool tcpdump (versie 3.4a6) geeft de headers van pakketten weer die aan de netwerkinterface van de machine waar deze op draait, worden aangeboden. Door middel van boolese expressies is het mogelijk om enkel de headers van de gewenste pakketten te vangen. [32]
5.1.1.2 IPGRAB In tegenstelling tot tcpdump, leest en parset ipgrab (versie 0.8.2) alle pakket-headers vanaf de datalinklaag tot op de applicatielaag en schrijft deze uit. [33]
5.1.2
De resultaten
Tabel 1 geeft een overzicht van de bekomen meetresultaten. Dit zijn slechts benaderende waarden. De grootte van de verzonden pakketten zal immers afhankelijk zijn van een aantal parameters, namelijk: de gebruikersnaam en het wachtwoord van de databank-user, van het aantal aangemelde gebruikers en de lengte van hun gebruikersnamen, en tenslotte van de huidige en de gelezen status van de betreffende machine. De lengte van bovenstaande parameters zal immers bepalen hoeveel bytes over het netwerk worden verzonden (1 karakter komt overeen met 1 byte).
HOOFDSTUK 5: PERFORMANTIE VAN DE APPLICATIE
47
netwerkverkeer naam script
(in KB)
aantal
(bij benadering en
pakketten
uitvoeringsfrequentie
per uitvoering)
update_database_startup
1,6
18
bij het opstarten van een host
update_database_shutdown
1,6
18
bij het uitschakelen van een host
update_database_demostart
1,3
16
bij het starten van een demosessie
update_database_demostop
1,3
16
bij het stoppen van een demosessie
update_database_backupstart
1,3
16
bij het starten van een back-upproces
update_database_backupstop
1,3
16
bij het stoppen van een back-upproces
3,7
32
4,0
48
0,2
2
0,4
4
0,2
2
0,4
4
check_login_shutdown
startup_fping
cron_fping
elke minuut op elke host
bij het opstarten van de server
elke 10 minuten op de server
Tabel 1: Overzicht van het gegenereerde netwerkverkeer
Voor deze metingen werden de volgende parameters gebruikt: ·
gebruikersnaam voor de MySQL-databank: default_user
·
wachtwoord voor de MySQL-databank: default_user
·
aangemelde gebruiker: bramsara
De tabel bevestigt het vermoeden dat de applicatie het netwerk slechts minimaal belast. Elke connectie van op een host naar de databank neemt standaard 16 pakketjes in beslag. Naarmate het aantal verschillende verbindingen naar de databank toeneemt, zal dus het aantal verzonden pakketten minimaal een veelvoud zijn van de standaard hoeveelheid. Indien het MySQL-statement daarenboven meer karakters bevat of meerdere statements per connectie verzonden worden, zal het aantal pakketten groter worden dan 16. Dit is bijvoorbeeld het geval voor de scripts update_database_startup en update_database_shutdown.
Bij de scripts die zorgen voor het op punt stellen van de databank (cron_fping en startup_fping), is het netwerkverkeer zeer miniem. Er worden slechts twee of vier pakketjes
verzonden (ICMP request en reply) afhankelijk van of de machine al dan niet bereikbaar is via het netwerk. Daar deze scripts worden uitgevoerd op dezelfde machine als waar de databankserver is geïnstalleerd, moeten er geen bijkomende pakketten verstuurd worden om eventueel de nieuwe toestand naar de databank te schrijven.
HOOFDSTUK 5: PERFORMANTIE VAN DE APPLICATIE
48
5.2 Analyse van de uitvoeringstijd Deze performantietest geeft een overzicht van de uitvoeringstijden van de verschillende gebruikte shell-scripts. Om deze te meten werd gebruik gemaakt van het commando time. De metingen werden uitgevoerd op de server (galatea (157.193.184.109)) en op host cadmus (157.193.184.108). Enkel voor de scripts waarin het commando fping voorkomt, wordt gemeten met de hosts cadmus en aeolus (157.193.184.68). Afhankelijk van de eigenschappen van de processor van de machines kan er echter een verschil optreden qua uitvoeringstijd. Voor de kenmerken van de machines, zie sectie 3.1.1 p21. De waarden in de tabellen zijn steeds gemiddelden, genomen over vijftig metingen.
5.2.1
time
Het commando time wordt gebruik om de uitvoeringstijd van een andere shell-instructie te meten. Standaard geeft time drie waarden als output: de totale tijd verstreken tijdens de uitvoering van de instructie (real), de tijd doorgebracht in de CPU in user mode (user) en de tijd doorgebracht in de CPU
in system mode (sys). Deze laatste twee tijden geven samen een beeld van de totale
processoractiviteit. De werkelijke tijd wordt immers beïnvloed door de aanwezigheid van andere processen die door de CPU moeten worden uitgevoerd en door het eventueel wachten op antwoorden van ICMP-requests. Alle bekomen statistieken worden uitgedrukt in seconden. De waarde real is nauwkeurig tot op 0,001 s, terwijl user en sys slechts nauwkeurig zijn tot op 0,01 s. Wegens afrondingsfouten door het commando time kan het gebeuren dat de som van user en sys groter is dan real, wat in werkelijkheid eigenlijk niet kan. [13]
5.2.2
De resultaten
De resultaten weergegeven in Tabel 2 geven een indicatie van de uitvoeringstijden van de scripts die worden uitgevoerd op de server. Uit het bovenste gedeelte van de tabel blijkt duidelijk dat de som van de waarden sys en user steeds dezelfde blijft, de waarde van real zal echter variëren naargelang één of meerdere PC’s uitgeschakeld zijn. De machine zal immers wachten totdat de ICMP
reply van het laatste fpingpakket ontvangen is, maar ondertussen zullen andere processen die
in de wachtrij staan door de processor worden uitgevoerd. Het script startup_fping veroorzaakt altijd een zekere vertraging bij het heropstarten van de server (bv. na een crash), die minimaal gelijk is aan de waarde van de som van user en sys en maximaal de waarde van real bedraagt.
HOOFDSTUK 5: PERFORMANTIE VAN DE APPLICATIE
49
Bij het onderste gedeelte van Tabel 2 (script cron_fping) kan dezelfde opmerking met betrekking tot het verschil tussen de waarde real en de som van user en sys worden gemaakt. De waarde voor deze som zal echter evenredig toenemen met het aantal PC’s in de databank die uitgeschakeld zijn. Er moet immers per machine die niet antwoordt op een ICMP request, verbinding gemaakt worden met de MySQL-databank om er een andere waarde naartoe te schrijven (status wordt upgedated naar off). startup_fping cadmus
aeolus
real (in s)
user + sys (in s)
on
on
0,245
0,18
on
off
4,316
0,18
off
off
4,316
0,18
real (in s)
user + sys (in s)
cron_fping cadmus
aeolus
on
on
0,136
0,08
on
off
4,246
0,12
off
off
4,286
0,16
Tabel 2: Uitvoeringstijden van de shell-scripts op de server
Tabel 3 toont aan dat de scripts die worden uitgevoerd op elke host slechts weinig CPU-activiteit vergen en dus slechts een minimale vertraging te weeg brengen. naam script
real (in s)
user + sys (in s)
lock_table = 'off'
0,110
0,10
lock_table = 'on'
0,087
0,09
update_database_backupstart
0,042
0,04
update_database_backupstop
0,060
0,06
update_database_demostart
0,041
0,04
update_database_demostop
0,060
0,06
update_database_startup
0,044
0,04
update_database_shutdown
0,044
0,04
check_login_shutdown
Tabel 3: Uitvoeringstijden van de shell-scripts op elke host
HOOFDSTUK 5: PERFORMANTIE VAN DE APPLICATIE
50
5.3 Overzicht van de vertragingstijd Tabel 4 toont voor elke mogelijke situatie de tijd die verstrijkt tussen de uitvoering van een specifieke opdracht en de aanpassing van de databank. Het uitzicht van de webpagina wordt immers bepaald door het tijdstip dat de betreffende pagina voor het laatst werd ingeladen en is dus niet steeds up-to-date.
actie
delay
manueel opstarten van een host
volledige opstart-procedure
manueel afschakelen van een host
volledige afsluit-procedure
opstarten van een host via de applicatie
volledige opstart-procedure
afschakelen van een host via de applicatie
max. 1 minuut + volledige afsluit-procedure
starten van een back-upproces
onmiddellijk
stoppen van een back-upproces
onmiddellijk
starten van een demosessie
onmiddellijk
stoppen van een demosessie
onmiddellijk
inloggen van een gebruiker
max. 1 minuut
starten van de databankserver
volledige opstart-procedure van de server
recovery na wegvallen van een host
max. 10 minuten
toevoegen van een host
onmiddellijk toestand pas na max. 1 minuut Tabel 4: Update delay van de databank
HOOFDSTUK 6: BESLUIT
51
Hoofdstuk 6: BESLUIT De ontwikkelde applicatie beschikt over alle functionaliteiten om via een webtoepassing PC’s te kunnen af- en aanschakelen. Hiervoor wordt gebruik gemaakt van de server-side scripting taal PHP, in combinatie met shell-scripting. Het geheel wordt ondersteund door een Apache webserver en een MySQL
databankbeheerssysteem. Elke machine die met behulp van de applicatie moet worden
opgestart, dient eveneens de Wake-On-Lan-technologie te ondersteunen.
De oplossing voldoet aan de voorwaarden die in de inleiding werden opgesomd. ·
de gebruikersnaam met bijpassend wachtwoord van elke host wordt niet bewaard in een databank: om te vermijden dat deze gegevens over het netwerk worden verzonden en mogelijks worden onderschept, is er voor gezorgd dat de machine zichzelf afsluit. Hiervoor zal de machine zijn eigen status controleren in de databank en indien deze op shutting_down staat, zal hij zichzelf uitschakelen. Om verbinding te maken met de databank werd hierop een speciaal account aangemaakt met beperkte privileges.
·
een machine kan niet in alle omstandigheden worden afgesloten: indien er op een bepaalde machine een gebruiker is aangemeld, een back-upproces is gestart of indien een machine gereserveerd is voor een demosessie, is het niet mogelijk deze uit te schakelen. Dit werd gerealiseerd door een wijziging van de status van de betreffende machine in de databank en/of het weglaten van het selectievakje in de webapplicatie.
·
de applicatie, zowel client als server-side, draait op een Linux-variant: het was de bedoeling om de toepassing te laten werken op een Linux-machine. Ze werd dan ook enkel uitvoerig getest onder deze omstandigheden.
·
om de toepassing te laten functioneren werd gebruik gemaakt van de basisfunctionaliteit die Linux biedt, namelijk de run-levels (om scripts uitvoeren bij het opstarten en het afsluiten) en de cron-daemon (om scripts met een specifieke frequentie te laten uitvoeren).
·
er wordt browseronafhankelijkheid gecreëerd door geen gebruik te maken van client-side scripting talen en cookies.
·
de veiligheid van de applicatie wordt gegarandeerd doordat de toegang tot de webapplicatie van de buitenwereld is afgeschermd door een .htaccess bestand. Tevens kunnen enkel, door middel van een wachtwoord, machines aan het systeem toegevoegd of uit het systeem verwijderd worden.
HOOFDSTUK 6: BESLUIT
52
Ondanks het feit dat de applicatie aan alle gestelde voorwaarden voldoet, kan ze nog verder worden aangevuld en verfijnd. Zo dient men bij het toevoegen van een nieuwe host aan het systeem over alle relevante gegevens, waaronder het MAC-adres en het IP-adres, te beschikken. Om dit te vermijden kan een uitbreiding worden geïmplementeerd die op basis van enkel het IP-adres of de hostname automatisch alle andere relevante informatie kan verzamelen. Daarnaast kan automatisch een lijst worden gegeneerd door de webapplicatie die alle IP-adressen van de host die met hetzelfde netwerk verbonden zijn, weergeeft. De gebruiker dient dan enkel deze machines te selecteren die hij wenst toe te voegen. Ook hier zou dan alle andere informatie, zonder verdere tussenkomst van de gebruiker, opgezocht moeten worden. Om de installatie van de applicatie te vergemakkelijken zou het handig zijn om alles via een package ter beschikking te stellen aan de gebruikers. Als extra functionaliteit kan dit package dan via de webapplicatie toegankelijk zijn en vandaar downloadbaar en installeerbaar zijn.
APPENDIX A: INHOUD VAN DE CD-ROM
APPENDIX A: INHOUD VAN DE CD-ROM └ application └ client scripts └ check_login_shutdown └ update_database_backupstart └ update_database_backupstop └ update_database_demostart └ update_database_demostop └ update_database_shutdown └ update_database_startup └ server scripts └ create_database └ cron_fping └ startup_fping └ webapplication └ templates └ images └ backup.gif └ demo.gif └ in_use.gif └ off.gif └ on.gif └ shutting_down.gif └ starting_up.gif └ unknown.gif └ logo_atlantis_900.gif └ addhost.php └ check.php └ form_addhost.php └ form_removehost.php └ remote_startup_shutdown.php └ removehost.php └ shutdown.php └ startup.php └ howto_install_remote_startup_shutdown.txt └ other documents └ boek.doc └ boek.pdf
53
APPENDIX B: INSTALLATIEHANDLEIDING
54
APPENDIX B: INSTALLATIEHANDLEIDING NAME: howto_install_remote_startup_shutdown.txt SCOPE: installation of application to shutdown and startup machine by means of a webapplication ASSUMED: you have some Linux knowledge and an Ethernet-card with the Wake-On-Lan-option enabled AUTHOR: Bram Devreese and Sara Van de Velde FIRST WRITTEN: 28-03-03 LAST CHANGE: ############################################################ # This manual is written for the Debian Linux # # distribution. Be careful when you like to use this tool # # on another Linux distribution !! # ############################################################ ATTENTION: we make the assumption that the MySQL-server en HTTP-server are installed on the same machine This manual consists of two majors parts: a server part and a client part. The section about the server covers the installation of the HTTP-server, PHP, MySQL and all the scripts that run on the server. This part must be only performed once. The section about the client contains the whole installation procedure of the other scripts and be must be performed on each host you want to record in the database. ########################## ## SERVER SIDE ## ########################## Step 1. First you have to install an apache server, PHP, MySQL and the link between them (php-mysql). Make sure you install the MySQL-server and client! Therefore see the instructions in some other manuals, like - calliope_installation_howto.txt - howto_install_MySQL.txt Also install the tool fping.
Step 2. Open the script, named create_database, and make the necessary adjustments. Close the file and make it executable (chmod 711 create_database) Then run the script (./create_database) Step 3. Further necessary configurations: To connect to a remote database, you have to edit some settings in the my.cnf-file (/etc/mysql/my.cnf) Otherwise, you will be faced with this error: ERROR 2003: Can't connect to MySQL server on [servername] (111) Skip-networking option: You have to manually change it if you want networking i.e. the server listening on port 3306. The default is "disable" - for security reasons.
APPENDIX B: INSTALLATIEHANDLEIDING /etc/mysql/my.cnf
55
-> # skip-networking
Now boot the mysql-daemon. ############################################################ # From this point on you MUST ALWAYS log in to the # # MySQL database with the option # # -h <servername[.network]> # # e.g. mysql -h galatea.atlantis.rug.ac.be -u <user> -p # ############################################################ Next you must configure your database itself for logging in from remote hosts Otherwise, you will be encountered with the following error shown by MySQL: ERROR 1130: [Hostname] ... is not allowed to connect to this MySQL server) As root start MySQL on your localhost MySQL>USE mysql; ->SELECT * FROM user; ->UPDATE user SET Host="%" WHERE User like 'root'; ->UPDATE user SET Host="%" WHERE User like 'default_user';
Step 4. Next we will install two scripts, cron_fping and startup_fping. The first runs every 10 minutes and can be placed in the home directory of the current user (e.g. /home/[username]). Open this script and follow the instructions written in the script itself. Make it readable for everyone (chmod 744 cron_fping). Change to super-user and make a new file in the directory /etc/cron.d (you can choose the name). Open this new file and put the following line in it: 0,10,20,30,40,50 * * * * root /home/[username]/cron_fping 2>/dev/null This means that the script cron_fping will be executed every 10 minutes. If you want to receive the error messages (if an error occurs, an email will be sent every 10 minutes), you must delete the last part of the script, namely: 2>/dev/null. The configuration of the next script, startup_fping, is much easier than the former one. First you have to copy the script, still as root, to the /etc/init.d directory and you have to make it readable and executable for every one (chmod 755 startup_fping). Here, it also necessary to open the script first and follow the instructions written in the script itself Now you can make it very easy on yourself. To "install" the script you can type the following line at the command prompt, when the current working directory is /etc/init.d: update-rc.d startup_fping start 2 3 4 5 .
DO NOT FORGET THE POINT AT THE END OF THE LINE!! ATTENTION: THIS COMMAND IS DEBIAN-SPECIFIC!! Now the necessary symbolic links will automatically be generated in the right run levels.
APPENDIX B: INSTALLATIEHANDLEIDING
56
Step 5. Next you must install the etherwake program according to the normal install procedure for packages (apt-get install etherwake) and change its permissions (chmod +s /usr/sbin/ether-wake)
Step 6. You have to put all php-files in the /var/www directory (this in only possible when you are logged in as super-user). Then edit the permissions of all these files (chmod 744 /var/www/*.php). Don't forget to make the requested changes in all the php-files. The images must be placed in the directory /var/www/templates/images.
Step 7. It is also possible to protect the webapplication with a .htaccess file. Please check the manual howto_setup_htaccess.txt for further information.
Step 8. To send an e-mail each time a machine is shut down, check the sendmail_path variable in the php.ini file (/etc/php4/apache/php.ini) and change it to /usr/sbin/sendmail
That's all for the server side, let's now move on with the client side.
########################## ## CLIENT SIDE ## ########################## All these configurations must be performed on each host you want to record in the database. Step 9. First of all install the MySQL-client (server is not necessary). If you don't do this, the host can't execute the MySQL-statements in the scripts.
Step 10. Enable the Wake-On-Lan (WOL) option on your NIC-card and make some changes in the BIOS if necessary.
Step 11. Now take the scripts named "update_database_startup" and "update_database_shutdown" and put them in the directory /etc/init.d. Make this directory your current working directory. Then open both scripts and follow the instructions written in the scripts. Change the permissions of the two scripts in 711 with chmod (chmod 711 update_database_startup)(chmod 711 update_database_shutdown) Now type the following lines at your command prompt update-rc.d update_database_startup start 2 3 4 5 . update-rc.d update_database_shutdown start 0 6 . DO NOT FORGET THE POINT AT THE END OF THE LINES!! ATTENTION: THE update-rc.d COMMAND IS DEBIAN-SPECIFIC!! Now the necessary symbolic links will automatically be generated in the right run levels. After this, the database will be updated each time you start, reboot or shutdown your system.
APPENDIX B: INSTALLATIEHANDLEIDING
57
Step 12. Copy the script check_login_shutdown to your home directory (e.g. /home/[username]), open it and follow the instructions written in the script. Edit the permissions of the script to 744 with chmod (chmod 744 check_login_shutdown). Change to super-user and create a new file in the directory /etc/cron.d (you can choose the name). Open this new file and put the following line in it: * * * * * root /home/[username]/check_login_shutdown 2>/dev/null This means that the script check_login_shutdown will be executed every minute. If you want to receive the error messages (if an error occurs, an email will be sent every 1 minute), you must delete the last part of the script, namely: 2>/dev/null.
########################## ## OTHER ## ########################## Step 13. We have also provided the option to record backup processes in the database. Just execute the update_database_backupstart script when the backup process starts and the update_database_backupstop script when the process stops. All the functionality to work correctly has already been provided in the scripts. Open the scripts and follow the instructions written in the scripts themselves. To execute the scripts it is necessary to change the permissions with chmod (chmod 711 update_database_backupstart)(chmod 711 update_database_backupstop). The same goes for the provided scripts update_database_demostart and update_database_demostop. With these you can manually lock machines to use them in a demosession.
BIBLIOGRAFISCHE REFERENTIES
58
BIBLIOGRAFISCHE REFERENTIES [1]
Wat is Linux? http://nl.linux.org/whatis/, geraadpleegd op 23 april 2003.
[2]
Ascii Table - ASCII character codes and html, octal, hex and decimal charts http://www.asciitable.com/, geraadpleegd op 30 april 2003.
[3]
Linux Online - About the Linux Operating System http://www.linux.org/info/index.html, geraadpleegd op 23 april 2003.
[4]
The Linux Kernel Archives http://www.kernel.org, geraadpleegd op 23 april 2003.
[5]
GNU General Public License http://www.gnu.org/copyleft/gpl.html, geraadpleegd op 23 april 2003.
[6]
De Linux Distributies http://www.linuxbelgium.net/distributies/dis.cfm, geraadpleegd op 24 april 2003.
[7]
Debian GNU/Linux -- The Universal Operating System http://www.debian.org, geraadpleegd op 23 april 2003.
[8]
Newbie: Unix http://www.unixgeeks.org/security/newbie/unix/, geraadpleegd op 25 april 2003.
[9]
Run levels revisited - Jan 01, 2001 http://www.linuxworld.com/linuxworld/lw-2001-01/lw-01-geek_1.html, geraadpleegd op 25 april 2003.
[10]
Network File System (NFS) http://www.linux-nl.cx/html/NFS.html, geraadpleegd op 25 april 2003.
[11]
What is Linux Shell ? http://www.freeos.com/guides/lsst/ch01sec07.html, geraadpleegd op 25 april 2003.
[12]
Red Hat, The Official Red Hat Linux Getting Started Guide (2002), 164p.
http://www.redhat.com/docs/manuals/linux/RHL-8.0-Manual/pdf/rhl-gsg-en-80.pdf, geraadpleegd op 25 april 2003. [13]
M. RATHMANN & C. WIESKOTTEN, Snel leren programmeren Shell, Addison Wesley Longman Nederland BV, Amsterdam (2000), 394p.
[14]
Netcraft: April 2003 Web Server Survey http://news.netcraft.com/archives/2003/04/13/april_2003_web_server_survey.html, geraadpleegd op 24 april 2003.
[15]
The Apache Software Foundation http://www.apache.org, geraadpleegd op 24 april 2003.
BIBLIOGRAFISCHE REFERENTIES [16]
59
The Apache HTTP Server Project http://httpd.apache.org, geraadpleegd op 24 april 2003.
[17]
Search Microsoft.com http://search.microsoft.com, geraadpleegd op 2 mei 2003.
[18]
T. CONVERSE & J. PARK, PHP4: Het complete handboek, 1e druk 2de oplage, Academic Service, Schoonhoven (2001), 625p.
[19]
American National Standards Institute http://www.ansi.org, geraadpleegd op 26 april 2003.
[20]
MySQL: The World's Most Popular Open Source Database http://www.mysql.com/, geraadpleegd op 24 april 2003.
[21]
PHP: Hypertext Preprocessor http://www.php.net, geraadpleegd op 23 april 2003.
[22]
Depicus Wake On Lan - Magic Packet http://www.depicus.com/wake-on-lan/, geraadpleegd op 25 april 2003.
[23]
Wakeonlan http://gsd.di.uminho.pt/jpo/software/wakeonlan/, geraadpleegd op 25 april 2003.
[24]
ACPI - Advanced Configuration and Power Interface http://www.acpi.info/, geraadpleegd op 26 april 2003.
[25]
AMD, Magic Packet Technology White Paper (1998), 6p.
http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/20213.pdf, geraadpleegd op 4 mei 2003. [26]
Hardware Wake On LAN (WOL) http://hardware.computerpech.nl/wake_on_lan.html, geraadpleegd op 25 april 2003.
[27]
Networking - Wake up to Wake-on-LAN http://www.networking.ibm.com/eji/ejiwake.html, geraadpleegd op 25 april 2003.
[28]
A. SCHROEDER, Manpage ether-wake, Debian GNU/Linux (2002).
[29]
Manpage of ETHERWAKE http://www.clc.unibe.ch/cgi-bin/man2html?ether-wake+8, geraadpleegd op 25 april 2003
[30]
The Atlantis & Intec2 Network - A journey to the inner parts of the Urbis networks http://www.ibcn.intec.rug.ac.be/general/network_overview/network_overview.html, geraadpleegd op 4 mei 2003.
[31]
fping - a program to ping hosts in parallel http://www.fping.com, geraadpleegd op 19 april 2003.
[32]
TCPDUMP public repository http://www.tcpdump.org/tcpdump_man.html, geraadpleegd op 5 mei 2003.
BIBLIOGRAFISCHE REFERENTIES [33]
IPgrab http://ipgrab.sourceforge.net/, geraadpleegd op 5 mei 2003.
60