Instalacija na Ubuntu Lucid (64-bit)
====================================

Dobavite izvorni kod:

  $ export DOCA=~/doca
  $ bzr branch http://kvota.net/hacks/wafl/doca $DOCA

Ili, ako ga imate zapakovan, prosto ga raspakujte:

  $ tar xvfz doca.tar.gz
  $ export DOCA=`pwd`/doca

Napomena
--------

Izvorni kod programa smo smestili u $DOCA.  Sve (osim baze) se instalira u
korisnički direktorijum za korisnika „danilo“, ali to nije obavezno.  Ako
se koristi neko drugo korisničko ime, potrebno je to zameniti u
odgovarajućim instrukcijama ispod.


Neophodni paketi
----------------

Imena su sledeća za Debian i Ubuntu, verovatno se razlikuju za ostale
distribucije:

 * apache2-mpm-prefork
 * apache2-suexec
 * python2.6
 * unixodbc
 * libaio1
 * pdksh
 * cvs, gcc, libapr1-dev, libaprutil1-dev (za md5 proceduru za DB2)
 * ia32-libs (za pokretanje wafl-a)

Brza instalacija paketa:

  sudo apt-get install apache2-mpm-prefork apache2-suexec python2.6 \
  unixodbc libaio1 pdksh cvs gcc libapr1-dev libaprutil1-dev ia32-libs


IBM DB2 9.7.0
-------------

Raspakujemo DB2 Express-C u $HOME, i dobijamo $HOME/expc.
Instaliramo DB2 pomoću:

  $ cd ~/expc
  $ sudo ./db2setup -f sysreq -r $DOCA/konf/install.rsp

Ovo pravi korisnika „baza“ na sistemu i odgovarajuću instancu „baza“ u
~baza/sqllib.  Pokrenemo bazu (a prvo se prebacimo na korisnika „baza“):

  $ sudo su -l baza
  $ db2start
  SQL1063N  DB2START processing was successful.

(Ako ne dobijemo ovakvu poruku, verovatno ima nekih problema)

Lozinka za novonapravljenog korisnika "baza" je doslovno "lozinka": ako ne
koristimo "sudo" u gornjoj naredbi, moraćemo da je unosimo.

Ako ne koristimo verziju 9.7.0, potrebno je izmeniti $DOCA/db2env skriptu,
kao i $DOCA/konf/odbcinst.ini da pokazuje na odgovarajuće putanje do
drajverskih datoteka.


Postavljanje baze
-----------------

Ako program želimo da pokrećemo pod nekim drugim korisnikom (na primer
„danilo“), potrebno je da mu omogućimo pristup.

  (kao korisnik „baza“)
  $ db2 -t -f $DOCA/baza/baza.sql
  $ db2 connect to znanje
  $ db2 GRANT DBADM,CREATETAB,CONNECT ON DATABASE TO USER "danilo"


md5() procedura za DB2
----------------------

Ako ne želimo da koristimo md5 proceduru za transformaciju lozinki
korisnika, možemo primeniti izmenu baza/no-md5.patch:

  (kao korisnik „danilo“)
  $ cd $DOCA
  $ patch -p0 <baza/no-md5.patch

Ako ipak želimo da instaliramo i md5 funkciju, moraćemo da je instaliramo.
Iskoristićemo proceduru implementiranu kao deo
http://mod-auth-ibmdb2.sourceforge.net/ projekta.

Dodatni paketi: cvs gcc libapr1-dev libaprutil1-dev

  (kao korisnik „baza“)
  $ cvs -z3 -d:pserver:anonymous@evermeet.cx:/cvs co mod_auth_ibmdb2/db2-auth-udfs

Zatim editujemo mod_auth_ibmdb2/db2-auth-udfs/makeudf i direktno postavimo
DB2PATH na /home/baza/sqllib, ARPPATH i APUPATH na /usr/bin, i dodamo
-fPIC opciju na GCC komandu. "makeudf" skripta ima i par sintaksičkih
grešaka („==“ umesto jednostavno „=“):

  (kao korisnik „baza“)
  $ cd mod_auth_imdb2/db2-auth-udfs
  $ patch -p0 <$DOCA/baza/ispravi-makeudf.patch
  $ ./makeudf


Pravljenje tabela
-----------------

Konačno možemo napraviti sve neophodne tabele za „Docu“:

  (kao korisnik „danilo“)
  $ cd $DOCA
  $ baza/osvezi.sh

Izvršavanje svih SQL datoteka osim baza.sql treba da bude uspešno.

UnixODBC
--------

UnixODBC biblioteku koristi Wafl za pristup bazi.  Pošto je Wafl
kompajliran za 32-bitnu arhitekturu, a mi koristimo 64-bitnu, podesićemo
vezu preko oba IBM DB2 drajvera (i 32-bitnog i 64-bitnog), kako bismo bili
sigurni da sve radi kako treba.

  (kao korisnik „danilo“)
  $ sudo cp $DOCA/konf/odbcinst.ini /etc/
  $ sudo cp $DOCA/konf/odbc64.ini /etc/odbc.ini

Sada možemo isprobati da li sve radi kako treba:

  (kao korisnik „danilo“)
  $ . $DOCA/db2env  # da postavimo DB2INSTANCE=baza pre svega
  $ isql znanje
  SQL> select count(*) from doca.tip_odgovora;
  ...

Ako sve radi kako treba, uspešno smo podesili UnixODBC drajver.  Međutim,
nama treba 32-bitna verzija za Wafl, koja se razlikuje samo u korišćenom
drajveru iz IBM DB2:

  $ sudo cp $DOCA/konf/odbc.ini /etc/odbc.ini

Wafl
----

Potrebno je skinuti poslednje Linux izdanje sa

  http://codd.matf.bg.ac.rs/wafl/download/Wafl.Linux.0.5.3.14.zip

Neophodni paket (sa svim svojim zavisnostima): ia32-libs

Otpakujemo ga i prekopiramo odgovarajuću izvršnu datoteku negde gde je
lakše dostupna:

  (kao korisnik „danilo“)
  $ wget http://codd.matf.bg.ac.rs/wafl/download/Wafl.Linux.0.5.3.14.zip
  $ unzip Wafl.Linux.0.5.3.14.zip
  $ mkdir ~/bin
  $ cp Wafl.0.5.3.14/Linux/Bin/clwafl ~/bin
  $ chmod +x ~/bin/clwafl

Ako probamo da pokrenemo interpreter sada, dobićemo sledeće:

  $ ~/bin/clwafl
  /home/danilo/bin/clwafl: error while loading shared libraries:
  libstdc++.so.5: cannot open shared object file: No such file or directory

Međutim, ovaj paket više ne postoji (pošto se radi o veoma staroj verziji,
i još nama treba 32-bitni paket, koristim neki stari paket iz Debiana).
Odgovarajuću verziju je sada izgleda nemoguće naći, pa ćemo iskoristiti
paket koji dolazi u $DOCA/konf/lib32stdc++5_3.3.6-0.1_amd64.deb (tu se
nalazi i gcc-3.3-base paket koji je neophodan za zadovoljavanje zavisnosti):

  $ cd $DOCA/konf
  $ sudo dpkg -i gcc-3.3-base_3.3.6-15ubuntu4_amd64.deb lib32stdc++5_3.3.6-0.1_amd64.deb
  $ sudo ldconfig

Sada, konačno, pozivanje ~/bin/clwafl treba da radi.  Pošto skripta
$DOCA/run-wafl.sh sadrži direktnu putanju, ako radimo pod nekim drugim
korisnikom (a ne „danilo“), potrebno je izmeniti putanju do clwafl
interpretera.

Isprobavanje doktora
--------------------

Sutra (dosta za danas, zar ne?) možemo isprobati da li sve radi kako treba:

  (kao korisnik „danilo“)
  $ cd $DOCA
  $ ./run-wafl.sh doktor.wafl
  danilo blabla[[KRAJ]]
  Како то мислите?

(unosimo „korisnicko-ime tekst[[KRAJ]]“ i pritiskamo enter — odgovor
dobijamo odmah, a iznad je jedan od „zbunjenih“ odgovora)

Slično, istestirajmo i da li Python program koji komunicira sa WAFL
programom dobro radi.  Prvo je potrebno izmeniti osnovnu putanju
(promenljiva PUTANJA) na početku fajla $DOCA/web/doktor.py na $DOCA.

  $ cd $DOCA
  $ web/doktor.py

(kada se pokrene iz terminala, kada se pokrene iz terminala ovaj program
šalje tekst „Ти си будала“ kao korisnik „danilo“ i ispisuje odgovor koji
dobije od wafl programa за образац „Ти си {}“).

Podešavanje web servera
-----------------------

I poslednji korak: podesimo Apache2.

Uključimo module koje ćemo koristiti:

 $ sudo a2enmod userdir suexec

Zatim, potrebno je omogućiti podešavanje CGI-a za korisničke
direktorijume.  U datoteci /etc/apache2/mods-enabled/userdir.conf za
direktorijume /home/*/public_html zamenimo postojeću naredbu
„AllowOverride ...“ sa „AllowOverride All“.  I konačno, restartujmo
Apache:

 $ sudo service apache2 restart

Konačno, iskopirajmo ceo „$DOCA/web“ direktorijum u ~/public_html i
imaćemo funkcionalnog doktora:

 (kao korisnik „danilo“)
 $ cp -rp $DOCA/web ~/public_html

Da povrdimo, možemo posetiti http://127.0.0.1/~danilo/prijava.html


Naredna pokretanja
------------------

Ubuduće, jedino što treba uraditi je da pokrenemo DB2 instancu:

  (kao korisnik „baza“)
  $ db2start

(Ako naiđemo na neku grešku, najverovatnije nismo instancu zaustavili
pomoću db2stop, pa je neophodno pokrenuti „db2ftok“ da sredimo stanje DB2)
