Vedlegg D Dokumentasjon av Installasjon Dette dokumentet tar for seg detaljert informasjon vedrørende installasjon nødvendig for delapplikasjonene i PySniff.
Innholdsfortegnelse 1. INTRODUKSJON 3 2. PYTHON 3 2.1 INSTALLERING AV VIRTUALENV I PYSNIFF 4 3. SENSOR 6 3.1 LINUX AVHENGIGHETER 6 3.2 PYTHON-PAKKER 6 3.2.1 PSYCOPG2 6 3.2.2 SCAPY 6 3.2.3 SQLALCHEMY 6 3.2.4 PYTHON-DAEMON 6 4. DATABASE 7 4.1 INSTALLASJON AV CENTOS PAKKER 7 4.2 INSTALLASJON AV LAYER1 OG LAYER2 7 4.2.1 LAYER 1 7 5. CORE 8 5.1 PYTHON-PAKKER 8 5.1.1 SQLALCHEMY 8 5.1.2 PSYCOPG2 8 5.1.3 PYTHON-DAEMON 8 6. WEBSERVICE 9 6.1 PYTHON-PAKKER 9 6.1.1 CHERRYPY 9 6.1.2 SQLALCHEMY 9 6.1.3 PSYCOPG2 9 7. FRONTEND 10 Filnavn: Dokumentasjon av Installasjon.docx Side: 2 av 10
1. INTRODUKSJON Dette dokumentet tar for seg installasjon av Python 2.7.3, SQLAlchemy, samt det som er nødvendig for å kjøre delapplikasjonene i PySniff. Dokumentet er svært teknisk, og tar for seg installasjon og konfigurasjon ned på kommandonivå. Det er ikke meningen å lese dokumentet fra A til Å for å sitte igjen med noe, men heller et oppslagsverk. 2. PYTHON Python er et generelt objektorientert programmeringsspråk med fokus på fleksibel, men lesbar kode, og er egnet for alt fra scripting til større prosjekter samt webutvikling. Python kan brukes på de fleste moderne operativsystemer, inkludert *nix som er miljøet brukt i oppgaven. Det ble valgt å benytte Python grunnet gode tilgjengelige biblioteker som løste sentrale deler av vårt prosjekt. I tillegg var dette språket interessant for læringens skyld da ingen i gruppen hadde bred erfaring med Python før dette prosjektet. Språket er også mye brukt hos oppdragsgiver SpareBank 1, og det var derfor ønskelig at PySniff ble skrevet i et språk som de hadde erfaring med. PySniff bruker Python versjon 2.7.3, som var siste offisielle stabile versjon av Python 2 ved prosjektstart. Siste versjon av Python er 3, men det ble valgt å benytte versjon 2 som er mer utprøvd og har større tilgjengelighet av programvarebiblioteker. Versjon 2.7.3 av Python er ikke nødvendigvis installert på miljøet, eller operativsystemet, applikasjonen kjører på. Det er heller ikke gitt at de nødvendige komponentene for PySniff som for eksempel Sqlite3 er brukt for kompileringen av Python. Av denne grunn er det vanligvis nødvendig å installere en egen versjon av Python hvis dette skal kjøre på produksjonssystemer som også andre applikasjoner skal kjøre på. Test- og produksjonsservere kjører godt testet, men også eldre installasjoner av Linux-distribusjoner. Dette er både grunnet at disse systemene vanligvis ikke kan stoppes for oppdatering om de kjører kritiske systemer som krever høy oppetid, men også fordi man vet at eldre versjoner er godt utprøvd og stabile. Dette innebærer gjerne også at det er gamle versjoner av programmer installert, noe som også gjelder Python. Et typisk operativsystem brukt i produksjon er Linux-distribusjonen CentOS versjon 5.8, som er brukt for både test- og produksjonsmiljøet til PySniff. Her er standard installert versjon på systemet Python 2.4. Man kan heller ikke oppdatere til en nyere versjon uten å skape trøbbel på systemet, da andre programmer kan være avhengig av akkurat denne versjonen av Python. Filnavn: Dokumentasjon av Installasjon.docx Side: 3 av 10
For å løse problemet med forskjellige versjoner av Python på samme system kan en kombinasjon av altinstall og virtualenv benyttes. Altinstall betyr at et program installeres separat fra systemfilene og påvirker derfor ikke andre installerte versjoner, slik at standard versjon av Python ikke påvirkes av den nye installeringen. Virtualenv er et verktøy for å lage isolerte, virtuelle Python-miljøer som ikke påvirker eller påvirkes andre applikasjoner. I et slikt virtualenv kan det installeres Python-moduler som også er separert fra resten av systemet. For å effektivisere installeringen av Python på applikasjonsmiljøene PySniff er i bruk er det laget et shell script i scriptspråket bash for installering av Python 2.7.3 beregnet på CentOS 5. Siden systemet brukt i produksjon har strenge brannmurregler er det ikke mulighet for å laste ned alle pakkene med kildekode eller programvarebiblioteker for Python nødvendig for Python eller PySniff fra internett, og disse må manuelt lastes ned først. Figur X viser deler av installasjonscriptet. For å korte ned koden er enkelte kommentarer som forklarer gangen i scriptet og bekreftelse på å fortsette fjernet. Scriptet krever root-rettigheter (admin), samt at nødvendig kildekode og pakker er lastet ned allerede: Python-2.7.3.tar.bz2 Kildekoden til Python sqlite3_int64_v2.patch fra http://bugs.python.org/issue14572 distribute-0.6.35.tar.gz Python-modulen Distribute, nødvendig for Pip og Virtualenv pip-1.3.1.tar.gz Pakkebehandler for Python virtualenv-1.9.1.tar.gz Kildekode for Virtualenv-modul i Python 2.1 Installering av Virtualenv i PySniff Tekniske installasjonskommandoer for distribute wget http://python-distribute.org/distribute_setup.py sudo python2.7 distribute_setup.py Tekniske installasjonskommandoer for viritualenv sudo easy_install-2-7 viritualenv python2.7 /usr/local/bin/viritualenv-2.7 distribute pysniff_env For å aktivere viritualenv: source ~/ pysniff_env /bin/activate Filnavn: Dokumentasjon av Installasjon.docx Side: 4 av 10
#!/bin/bash # Install required packages for compilation yum groupinstall "Development tools" yum install {zlib,bzip2,openssl,ncurses,sqlite}-devel # Ready for compilation cd /tmp/python273 tar -xf Python-2.7.3.tar.bz2 cd Python-2.7.3 # Patch for _sqlite module - http://bugs.python.org/issue14572 cat../sqlite3_int64_v2.patch patch -p1 # Configure with shared libraries, used by mod_wsgi./configure --prefix=/usr/local --enable-shared # Compile and install make make altinstall # *NOT* install, very important! # Fix path to shared lib - http://stackoverflow.com/a/7880519/1076493 echo "/usr/local/lib" >> /etc/ld.so.conf /sbin/ldconfig # Install distribute - http://stackoverflow.com/a/10538341/1076493 cd /tmp/python273 tar -xzvf distribute-0.6.35.tar.gz /usr/local/bin/python2.7 distribute-0.6.35/setup.py install # Install pip, because easy_install is deprecated # http://trizpug.org/members/cbc/wyntkap/img/pip_distribute.png /usr/local/bin/easy_install-2.7 pip-1.3.1.tar.gz # Install virtualenv and other interesting packages # will be added to /usr/local/bin/ /usr/local/bin/pip install virtualenv-1.9.1.tar.gz # Clean up rm -rf /tmp/python273 # Done! echo "Installation of Python 2.7.3 Done!" Figur 1: Installasjonsscript for Python 2.7.3 på CentOS 5. Filnavn: Dokumentasjon av Installasjon.docx Side: 5 av 10
3. SENSOR Installasjon av Sensor er avhengig av at Python2.7 og ViritualEnv er installert på serveren/klientmaskinen den skal kjøre på. Den er testet på følgende operativsystemer: Linux Debian, Linux Ubuntu, Linux CentOS, Windows 7. 3.1 Linux avhengigheter På Linux trenger man å installere postgresql-devel / postgresql-dev pakken før man installerer pakkene inne i et Virtualenv. Dette gjøres på CentOS med: Ubuntu og debian: CentOS: sudo apt-get install postgresql-dev sudo apt-get install postgresql-devel libpg-dev 3.2 Python-pakker Under er det listet med Python-pakker som må installeres for at sensoren skal fungere: 3.2.1 psycopg2 Pakken gjør støtte kobling mot PostgrSQL-database. Sensoren er testet med versjon 2.2.5 Manuell kommando for å innstalere denne pakken er: pip install https://pypi.python.org/pypi/psycopg2/2.5 3.2.1.1 Windows avhengighet I Windows må man installere Psycopg med følgende kommando: pip install http://www.stickpeople.com/projects/python/winpsycopg/psycopg2-2.4.win32-pyx.x-pg9.0.3-release.exe 3.2.2 Scapy Pakken Scapy ligger ikke i Pypi sitt pakkebiblotek og må lastes ned fra deres nettsider. Denne kan installeres med følgende kommando: pip install http://www.secdev.org/projects/scapy/files/scapy-latest.tar.gz 3.2.3 SQLAlchemy Pakken SQLAlchemy gjør det mulig å bruke ORM en for å sette inn pakker i databasen. Denne kan installeres med følgende kommando: pip install https://pypi.python.org/pypi/sqlalchemy/0.8.1 3.2.4 Python-daemon Pakken Python-daemon gjør det mulig å kjøre sensoren som en bakgrunnsprosses. Denne innstalerer også Lockfile automatisk som er en annen pythonpakke som Python-daemon trenger. Disse kan installeres med følgende kommando: pip install https://pypi.python.org/pypi/python-daemon/1.6 Filnavn: Dokumentasjon av Installasjon.docx Side: 6 av 10
4. DATABASE Installasjonen av PostgreSQL er utført på en CentOS server. 4.1 Installasjon av CentOS pakker Denne innstalerer databasemotoren til PostgreSQL på databaseserveren. Sudo yum install postgresql 4.2 Installasjon av Layer1 og Layer2 4.2.1 Layer 1 Layer1 kjører som en RAMdatabase og denne trenger dermed tilstrekkelig med ram for å kjøre PySniff/database/ramdisk/ramdisk.sh er et script du trenger å kjøre Filnavn: Dokumentasjon av Installasjon.docx Side: 7 av 10
5. CORE For å kunne kjøre Core, må det være noen spesifikke pakker installert på maskinen der denne skal kjøre. Det er mest hensiktsmessig å installere disse i et virtualenv: 5.1 Python-pakker Kommandoer forutsetter at virtualenv er aktivert i henhold til forrige punkt. 5.1.1 SQLAlchemy Pakke for kobling mot database pip install https://pypi.python.org/pypi/sqlalchemy/0.8.1 5.1.2 psycopg2 Pakke for å støtte kobling mot en PostgrSQL-database. psycopg2 krever at libpq-dev og python-dev er installert på systemet. Dette er utviklingspakker som kan installeres med følgende kommando: sudo apt-get install libpq-dev python-dev Deretter kan psycopg2 installeres: pip install https://pypi.python.org/pypi/psycopg2/2.5 5.1.3 Python-daemon Pakken Python-daemon gjør det mulig å kjøre sensoren som en bakgrunnsprosses. Denne innstalerer også Lockfile automatisk som er en annen pythonpakke som Python-daemon trenger. Disse kan installeres med følgende kommando: pip install https://pypi.python.org/pypi/python-daemon/1.6 Filnavn: Dokumentasjon av Installasjon.docx Side: 8 av 10
6. WEBSERVICE For å kunne kjøre Webservice, må det være noen spesifikke pakker installert på maskinen der denne skal kjøre. Det er mest hensiktsmessig å installere disse i et virtualenv: 6.1 Python-pakker Kommandoer forutsetter at virtualenv er aktivert i henhold til forrige punkt. 6.1.1 CherryPy Pakke for rammeverk og webserver pip install http://download.cherrypy.org/cherrypy/3.2.2/cherrypy- 3.2.2.tar.gz 6.1.2 SQLAlchemy Pakke for kobling mot database pip install https://pypi.python.org/pypi/sqlalchemy/0.8.1 6.1.3 psycopg2 Pakke for å støtte kobling mot en PostgrSQL-database. psycopg2 krever at libpq-dev og python-dev er installert på systemet. Dette er utviklingspakker som kan installeres med følgende kommando: sudo apt-get install libpq-dev python-dev Deretter kan psycopg2 installeres: pip install https://pypi.python.org/pypi/psycopg2/2.5 Filnavn: Dokumentasjon av Installasjon.docx Side: 9 av 10
7. FRONTEND Dette avsnittet tar for seg det som er nødvendig for installasjon av Frontend. Sjekke om mod_wsgi er installert rpm q mod_wsgi Hvis ikke installert: yum install mod_wsgi Installere apxs for å få kompilert wsgi yum install httpd-devel /usr/sbin/apxs./configure with-apxs /usr/sbin/apxs=/usr/sbin/axps with-python=/usr/local/bin/python2.7 #setup wget http://modwsgi.googlecode.com/files/mod_wsgi-3.4.tar.gz tar xvfz mod_wsgi-3.4.tar.gz mod_wsgi-3.4/configure --with-python=/usr/local/bin/python2.7 make sudo make install For installasjon av Frontend etter at komponentene over er installert benyttes førlgende fremgang. Filene skal legges under /opt/pysniff/frontend, slik som de er presentert i prosjektet. Det skal opprettes et virtualenv med python2.7 under /opt/pysniff/pysniff_env/ Installerer pakker med pip (Django, south og requests) pip install r /opt/pysniff/frontend/requirements/* /opt/pysniff/frontend/configuration/ inneholder en standard apache fil som referer til frontend. Denne flyttes til /etc/httpd/conf.d/ For å starte apache med frontend /etc/init.d/httpd start Hvis apache kjører; /etc/init.d/httpd restart. Filnavn: Dokumentasjon av Installasjon.docx Side: 10 av 10