Handleiding Ubuntu Server installeren en configureren voor KV78turbo
Geschreven door Erik van Heck en bronnen Versie 2.0 op zondag 1 december 2013
1.0
Introductietekst
Welkom bij de 2de versie van deze handleiding! In dit document tref je stap-voor-stap aan hoe je gemakkelijk Ubuntu Server kunt installeren in een productie- en ontwikkelomgeving. Daarnaast kun je lezen hoe je de installatie configureert om KV78turbo te kunnen ontvangen en in een REST-API te verwerken. Deze handleiding is samengesteld met behulp van een aantal bronnen. Onder andere het Google Groups OpenOV en de website openov.nl. Hierbij wens ik je veel succes toe met het installeren van de server! Met vriendelijke groeten, Erik van Heck 1.1
Inhoud
1 Opstarten 2 Basisinstallatie 3.1 Ubuntu basisconfiguratie (benodigd) 3.7 Ubuntu basisconfiguratie (python) 3.* Ubuntu basisconfiguratie (optioneel) 4 KV7-database configureren 5 KV8 REST-API configureren 5.1 KV78turbo REST-API opstarten 6 Uitleg werking API 6.1 Hulp bij problemen of vragen over OV-data 7 Cronjobs instellen 1.2
Definities / afkortingen
KV78turbo: livefeed vanaf de openov.nl-server, met actuele reisinformatie KV7: statische dienstregeling vanaf de openov-server OpenOV: organisatie achter de connectie naar afnemers GOVI: organisatie welke data levert aan OpenOV LAMP: Linux-Apache-MySQL-PHP FTP: File Transfer Protocol (bestanden oversturen) PY: Een Python-script-bestand
1.3
Benodigdheden
Een omgeving (desktop of server) met minimale opslag van 20 GB en een geheugen van meer dan 500 MB. Daarnaast een werkende internetverbinding en een toetsenbord. Internet is ook handig.
1.4
Opstarten
Start het programma “VirtualBox”. U dient een nieuwe virtuele computer aan te maken en een hardeschijf van minimaal 20 GB en met geheugen van 500 MB. Start de virtuele computer door middel van de “start”-knop bovenaan in VirtualBox. Als de virtuele computer gaat opstarten en het scherm komt te voorschijn, kiest u bovenin het menu voor “Apparaten”. Selecteer “CD/DVDapparaten” en kies voor “Kies een virtuele CD-DVD-schijfbestand”. Verken naar het .iso-bestand wat u gedownload heeft van de Ubuntu website en selecteer deze. Kies daarna onder “Machine” op “Resetten”. Het systeem word nu opnieuw opgestart. Kies de taal voor de installatie. In ons geval uiteraard “Nederlands”. Let op: in het gehele serversysteem van Ubuntu kunt u de muis niet gebruiken. Gebruik de pijltjestoetsen. Tik het pijltje naar beneden totdat u bij Nederlands bent en druk op Enter. Selecteer daarna “Ubuntu Server installeren”. Na een tijdje krijgt u de melding dat de taal Nederlands niet volledig beschikbaar is. Kies Ja. In het volgende scherm kiest u “Nederland”. Daarna krijgt u nog een melding om de toetsenbord indeling te decteren. Kies hiervoor ja. Blijf wachten totdat u alle vragen gehad heeft. Kies “y” en daarna “w”. Blijf dan “Nee” aangeven. Voor de meeste Nederlanders zal dit dan goed ingesteld staan. Het installatieprogramma gaat nu meerdere instellingen configureren en dit kan even duren. Na een tijdje kunt u een computernaam instellen voor de server. In deze handleiding nemen we “VHSERVER-UBUNTU”. Druk op Enter. Typ de volledige naam in en druk op Enter. Typ de gewenste gebruikersnaam in en druk weer op Enter. Typ tweemaal uw wachtwoord en druk op Enter. Als er een vraag komt over versleuteling van de persoonlijke map kiest u Nee. Bij de vraag of de “time zone” drukt u nogmaals op Enter. Kies “Begeleid – benut gehele schijf”. Druk op Enter. Druk nogmaals op Enter. Bij het volgende scherm kiest u “Ja” en drukt u op Enter. Typ bij Proxy niets en druk op Enter. Selecteer “Geen automatische updates”. Kies voor software selectie: “Manual package selection”. En kies Enter.
Als het scherm vraagt of de “GRUB-opstartlader” in het “MBR” moet worden geinstalleerd drukt u op Ja.
Uiteindelijk komt de melding “Installatie is voltooid”. Kies Volgende. Na een keer opnieuw opstarten is de Ubuntu Server installatie voltooid. We gaan nu verder met een aantal “basis” programmatjes voor de connectie naar de Koppelvlakken.
3
Ubuntu basisconfiguraties
3.1
PostgreSQL-server installeren
Later in de handleiding gaan we databases gebruiken. Hiervoor gebruiken we voornamelijk PostreSQL (is stabieler dan MySQL). Dit moeten we apart installeren. We beginnen weer met het commando “sudo apt-get install postgresql”. Typ “j” bij de vraag om door te gaan. De installatie duurt gemiddeld 5 tot 10 minuten. Typ “sudo adduser tom”. Typ “sudo adduser tom”. Nu is er een nieuwe gebruiker genaamd “tom” aangemaakt. Typ “sudo su - postgres”. Typ “git clone https://gist.github.com/rolo/1481128”. Typ “cd 1481128”. Typ dan “sudo sh gistfile1.txt”. Het systeem gaat nu een database aanmaken inclusief de benodigde rechten. Typ “sudo psql template_postgis”. Nu bent u ingelogd in de PostgreSQL-server. Typ “CREATE USER tom WITH PASSWORD ‘myPassword’;”. Dan “GRANT ALL PRIVILEGES ON DATABASE template_ postgis to tom;”. Nu heeft u een gebruiker aangemaakt genaamd “tom” in de PostgreSQL-server. Daarna geeft u de gebruiker “tom” alle rechten tot de database “template_postgis”. Typ om af te sluiten “\q”.
De volgende onderdelen zijn handig voor je server, maar niet benodigd voor een KV78Turbo-feed. 3.2
Optioneel: LAMP-server installeren
We gaan beginnen met de LAMP-server te installeren. Dit pakket bevat MySQL, Apache en PHP. Allereerst installeren we het programma “Tasksel”. Dit is een soort van installatieframework voor Ubuntu. Typ “sudo apt-get install tasksel”. Sudo betekend dat je het uitvoert als Administratie, apt-get is het installatieprogramma binnen Ubuntu en daarna install gevolgd door het programma welke je wilt installeren. Vul eventueel uw administratiewachtwoord in. Dit gaat best snel en nadat de instalaltie voltooid is typt u “sudo tasksel install lamp-server”. Dit op dezelfde manier als hiervoor. Dit is een wat groter pakket en er start een nieuw scherm. Allereerst laadt hij een aantal bestanden in en daarna dien je een MySQL “root”-gebruiker-wachtwoord in te voeren. Let op! Dit is een Administrator wachtwoord voor MySQL. Druk op Enter. Voor nogmaals hetzelfde wachtwoord in en druk weer op Enter. Na een tijdje is hij klaar met configureren. Typ “sudo apt-get install php5-dev”. Hiermee installeert u extra benodigheden voor de komende onderdelen. Na de installatie heeft u een werkende Apache, MySQL en PHP-server! U kunt rechtstreeks naar uw IP-adres browsen in een internetbrowser. Het IP-adres kunt u vinden met het commando “ifconfig”. 3.3
Optioneel: phpPgAdmin installeren
Daarna gaan we “phpPgAdmin” installeren voor PostgreSQL. Typ “sudo apt-get install phppgadmin”. Typ weer “j” bij de vraag om door te gaan. De installatie duurt gemiddeld 5 minuten. Standaard is er alleen toegang tot “/phppgadmin” in de webbrowser vanaf de lokale computer (in dit geval de server). We moeten dus toegang gaan geven aan de rest van de computers in het netwerk. Typ “sudo nano /etc/phppadmin/apache.conf”. Zoek de regel “allow from 127.0.0.0”. Zet hiervoor het teken “#”. De regel eronder staat “allow from all” met het tekentje “#” ervoor. Haal dit tekentje weg. Sla het bestand op door middel van CTRL + O en sluit het weer af door middel van CTRL + X. REstart Apache door middel van het commando “sudo service apache2 reload”.
3.4
Optioneel: FTP-server installeren voor bestanden
Typ als commando “sudo apt-get install vsftpd”. Hiermee installeert het programma de FTP-server, waarmee we bestanden kunnen gaan aanpassen (zoals PHP-scripts). Druk weer “j” en Enter. De FTP-server is nu geinstalleerd. Je kunt dit uitproberen om met een FTP-client (bijvoorbeeld FileZilla) verbinding te maken. De gebruikersnaam en wachtwoord zijn hetzelfde als in Ubuntu. Je zult zien dat hij de melding geeft: “Only anonymous access”. We moeten dus nog een aantal instellingen aanpassen. Typ “sudo pico /etc/vsftpd.conf”. Zoek de regel “anonymous_enable=YES”. Daaronder staat “local_enable” met een # ervoor. Haal dit teken weg. Hetzelfde ook bij “write_enable”. Sla het bestand op (CTRL + O) en sluit het af (CTRL + X). Restart de FTP-server door middel van “sudo /etc/init.d/vsftpd restart”. De hoofdgebruiker (van Ubuntu) heeft nu via de FTP-server toegang tot de bestanden. 3.5
Optioneel: Webmin: webinterface (extra)
Om de server te kunnen controleren, qua geheugen, resterende opslag en eventuele processen is webmin handig. Hierop kun je met bijvoorbeeld grafiekjes bekijken. Typ in als commando: “wget http://prdownloads.sourceforge.net/webadmin/webmin_1.600_all. deb”. Hij gaat nu de bestanden downloaden. Typ daarna “sudo dpkg –-install webmin_1.600_all.deb”. Hij gaat nu de software installeren. Je kunt nu inloggen op IP-ADRES:10000. Voor ons is dit http://192.22.8.111:10000. Je kunt hiermee inloggen zoals in Ubuntu (administrator). 3.6
Optioneel: SSH-toegang
Als je de server niet binnen handbereik hebt, zoals bijvoorbeeld in een Datacenter, kun je SSH-toegang installeren. Hiermee kun je thuis, of op het werk, door middel van Terminal (Mac) of Command Prompt (Windows) verbinding maken met je Ubuntu Server. Dit heet SSH. Als je dit wilt, kun je SSH installeren door het volgende te doen: typ “sudo apt-get install ssh”. De verbinding word automatisch geconfigureerd. Op de client (dus je eigen, desktop, normale computer) typ in je Terminal of Commandprompt: “ssh gebruikersnaam@ip-adres”. In ons geval: “ssh
[email protected]”. Nu heb je toegang tot het zelfde scherm zoals je rechtstreeks op de server bent.
De volgende onderdelen zijn benodigd voor een KV78Turbo-feed. 3.7
Python- en toebehoren installaties
Normaal gesproken is Python geinstalleerd bij installatie van Ubuntu. Controleer dit altijd even door het commando “python” uit te voeren. Indien de volgende regels beginnen met “>>>” dan is het succesvol geinstalleerd. Indien niet installeert u Python door middel van het commando “sudo apt-get install python”. We gaan nu ZeroMQ installeren met de binding voor Python. Typ “sudo apt-get install python-setuptools”. Hiermee kunnen we straks een aantal commando’s uitvoeren. Tik “j” en Enter. Het word nu geinstalleerd. Typ “sudo apt-get install git”. Tik “j” en Enter. Met dit programma kunnen we bestanden af gaan halen van OpenOV. Typ “sudo apt-get install python-dev”. Hiermee worden Python Developmenttools geinstalleerd. Typ het commando “sudo apt-get install libzmq-dev Typ het commando “sudo easy_install pyzmq”. Hiermee word de binding geinstalleerd. We hebben nu de ZMQ-extensie geinstalleerd, maar we moeten ook de extensie python-psycopg2. Typ “sudo apt-get install python-psycopg2”. Typ “j” en Enter. De extensie is nu geinstalleerd. Typ “sudo apt-get install python-pip”. Typ “sudo pip install uwsgi”. 4.0
Script downloaden en configureren voor OpenOV
We hebben nu de basisinstallatie (met een aantal uitbreidingen) van Ubuntu Server geinstalleerd. In de volgende hoofdstukken gaan we verbinding maken met OpenOV en starten we een aantal scripts. 4.1
KV7-database inladen
We gaan eerst de statische data inladen, genaamd KV7. Installeer eerst het programma “wget” doormiddel van het commando “sudo apt-get install wget”. Typ “git clone https://github.com/skywave/KV78Turbo-OVAPI”. Hiermee worden de bestanden gekopieerd naar de server.
Typ “git clone https://github.com/skywave/kv7tools”. Hiermee worden de overige bestanden gekopieerd. Typ “cd kv7tools”. Typ “wget -N --accept=gz -r http://kv7.openov.nl/GOVI/KV7planning/ -l 1 -e robots=off --wait 1 --limit-rate=1M”. Dit kan een paar minuten duren. Typ “wget -N --accept=gz -r http://kv7.openov.nl/GOVI/KV7kalender/ -l 1 -e robots=off --wait 1 --limit-rate=1M”. Dit kan ook even duren. We hebben nu de benodigde bestanden gedownload. Een korte uitleg: KV7planning bevat de laatste statische dienstregeling die beschikbaar is. Alleen er is niet altijd een nieuwe dienstregeling beschikbaar en in KV7kalender staat welke bestanden uit KV7planning moeten worden gedownload. We hebben nu even handmatig KV7planning en KV7kalender gedownload. Uiteraard moet dit in de toekomst automatisch gedaan worden, dat later. Typ “python kv7kalender-index.py kv7.openov.nl/GOVI/KV7kalender”. Je zult op het scherm een aantal regels met vervoerders zien. Om het volgende aan de gang te krijgen dienen we eerst een nieuw bestand te maken. Typ “touch kv7planning.idx”. Typ “python kv7planning-index.py kv7.openov.nl/GOVI/KV7planning”. Hiermee wordt er net zoals bij kv7planning een idx bestand gevuld met info. Typ “python kv7-import2.py KV7kalender kv7.openov.nl/GOVI/KV7planning”. Hiermee word er een bestand, genaamd “kv7.sql” gemaakt welke we straks gaan inladen in de databaseserver. We gaan nu de structuur van de database aanmaken. Typ “psql -d template_postgis -f kv7_create.sql”. Nu gaan we deze structuur vullen met data. Typ “psql -d template_postgis -f kv7.sql”.
5.0
KV8 REST API (JSON)
We hebben in het vorige hoofdstuk de statische dienstregeling ingeladen via KV7 in PostgreSQL. Nu gaan we de KV8-client starten om de REST API te lanceren. Typ “cd”. Typ “KV78Turbo-OVAPI”. In het standaardscript word er vanuit gegaan dat er een bestand bestaat CURRENTDB. Dit gaan we wijzigen. Typ “nano kv7-db-auto.py”. Zoek, door middel van CTRL + W, naar “database”. Je krijgt dan de functie “currentdatabase”. Wijzig de variabele output naar “template_postgis”. Zie afbeelding hieronder.
Typ “nano kv78turbo-api.py” en wijzig hier dezelfde variabele.
5.1
REST API opstarten
Zoals je misschien al gemerkt hebt, stoppen de lopende scripts als je je Terminal sluit. Dit gaan we voorkomen door het programma “screen”. Dit zorgt ervoor dat als je niet ingelogd bent op je server, het script gewoon doorloopt. Typ “sudo apt-get install screen”. Daarna “screen” en “enter”. Typ “python kv7-db-auto.py” om de ritten 1 uur van ten voren in te laden. Zo heeft de gebruiker altijd een overzicht van de ritten tussen nu en een uur. Druk CTRL + A + C om een secondair scherm te openen. Typ “python kv78turbo-api.py”. Hiermee word het Pythonscript gestart welke er voor zorgt dat de webserver straks (UWSGI) de data binnen krijgt welke hij nodig heeft. Wacht todat het scherm aangeeft “Loaded KV7 data”. Als je eerder naar de volgende stap gaat, kan het zijn dat je foutmeldingen krijgt.
Druk weer CTRL + A + C om een derde scherm te openen. We gaan nu de interface starten voor het publiek, de webserver. Typ “uwsgi --http-socket 127.0.0.1:8080 -w kv78turbo-client”. Vervang 127.0.0.1:8080 door het IP-adres en poort die voor jou goed zijn. Wij hebben weer 192.22.8.112:8080. Ga nu vanaf een externe computer naar IPADRES:POORT. Dus in ons geval http://192.22.8.112:8080. Als alles correct is ingesteld zie je: “[]”. Je server is succesvol online gebracht!
6.0
Uitleg REST-API
De KV78Turbo API, hierna genoemd de API, werkt met TimingPoint’s. Een TimingPoint is simpelweg eigenlijk een halte- of stationsnummer. Je kunt informatie over deze TPC’s opvragen via verschillende methode’s: •
Per timingpoint (lees info op https://github.com/skywave/ KV78Turbo-OVAPI/wiki/TimingPointCode)
•
Per stoparea (lees info op https://github.com/skywave/` KV78Turbo-OVAPI/wiki/StopAreaCode)
•
Per lijn (lees info op https://github.com/skywave/ KV78Turbo-OVAPI/wiki/Line)
•
Per journey (lees info op https://github.com/skywave/ KV78Turbo-OVAPI/wiki/Journey)
6.1
Hulp bij problemen
Heb je vragen omtrent de data, de presentatie hiervan of andere OpenOV-gerelateerde onderwerpen? Je kunt hiervoor terecht op het forum via www.openov.nl. Let wel op; voor algemene vragen over programmeertalen en installatieinstructie’s, raadpleeg hiervoor andere fora’s. Vragen over deze onderwerpen worden niet beantwoord op het OpenOV-forum.
7.0
Cronjobs configureren
Typ “cd /home/erik/”. We gaan een nieuw Bash-script aanmaken om de commando’s erin te zetten. Typ “touch script.sh”. Hiermee wordt het script “script.sh” gemaakt. Typ “sudo nano /home/erik/script.sh”. Er opent nu een editor om het bestand te bewerken. We gaan de volgende commando’s erin zetten: “ #!/bin/bash cd /home/erik/kv7tools/ wget -N --accept=gz -r http://kv7.openov.nl/GOVI/KV7planning/ -l 1 wget -N --accept=gz -r http://kv7.openov.nl/GOVI/KV7kalender/ -l 1 cd /home/erik/kv7tools/ rm /home/erik/kv7tools/kv7kalender.idx rm /home/erik/kv7tools/kv7planning.idx touch /home/erik/kv7tools/kv7kalender.idx touch /home/erik/kv7tools/kv7planning.idx cd /home/erik/kv7tools/ python /home/erik/kv7tools/kv7kalender-index.py kv7.openov.nl/ GOVI/KV7kalender python /home/erik/kv7tools/kv7planning-index.py kv7.openov.nl/ GOVI/KV7planning python /home/erik/kv7tools/kv7-import2.py KV7kalender kv7.openov.nl/GOVI/KV7planning cd /home/erik/ psql -d template_postgis -f /home/erik/leegtabellen.sql cd /home/erik/kv7tools/ psql -d template_postgis -f /home/erik/kv7tools/kv7.sql “ We hebben nu het Bash-script aangemaakt. Dit Bash-script gaan we als een cronjob neerzetten zodat deze elke nacht om 04:00 uur worden uitgevoerd. Typ CTRL + O. Typ CTRL + X. Het scherm is nu opgeslagen en afgesloten. We gaan nu de cronjob instellen. Typ “crontab -e”. Ga helemaal naar onderen en typ: “0 4 * * * /home/erik/script.sh”. Hiermee word er gezegd: minuut 0, het vierde uur, elke dag. Hij voert het script script.sh uit.