Linux

From NEOSYS Dev Wiki
Revision as of 08:42, 11 July 2009 by 85.17.154.66 (talk)
Jump to navigationJump to search

Building and Installing libexodus

requires Boost >= 1.35 and Postgres >= 8.1

Following steps are from Centos 5.2/Boost 1.38/Postgres 8.3/Gnu Compiler 4.1.2

alternatively:

Log of an installation of libexodus on Ubuntu 8.04.1 LTS

Log of an installation of libexodus on Ubuntu 9.04 Jaunty Jackalope

Log of an installation of libexodus on Centos 5.3

libexodus Dependencies

Installing g++ compiler

yum list|grep gcc
yum install gcc-c++.i386

or for Ubuntu

sudo aptitude install build-essential

Installing Boost

Minimum required is boost 1_35. Here we install 1.38.

---

Optionally get ICU to fully support unicode in boost regex

yum install libicu-devel

or on Ubuntu

apt-get install libicu-dev

Download and unpack Boost Source

wget http://downloads.sourceforge.net/boost/boost_1_38_0.tar.bz2
tar xvf boost_1_38_0.tar.bz2
cd boost_1_38_0
./configure --help
./configure --with-libraries=date_time,filesystem,iostreams,program_options,regex,system,thread

Speed up the build of Boost by only doing the libraries and versions required. ADD additional config to the BJAM_CONFIG line as follows:

nano Makefile
BJAM_CONFIG= xxxxxxxxxxxxx -j4 variant=release link=shared

Build Boost

make

Install Boost after becoming superuser

su
make install

Skip to the next section if on Ubuntu, this part is unnecessary.

Add "/usr/local/lib" to the list of lib directories to ensure that the boost libs can be found.

nano /etc/ld.so.conf

Ensure the new config is operational.

ldconfig

Ensure boost includes can be found. This step might be eliminated in a better Exodos installer.

ln -s /usr/local/include/boost-1_38/boost /usr/local/include/boost

Quit superuser

exit

Installing Postgres

Version 8.3

yum install postgresql-devel

or on Ubuntu

sudo aptitude install libpq-dev

Locate libpq-fe.h to check. Probably in /usr/include/postgresql/ or /usr/include/postgresql/8.3/server/ on Ubuntu

updatedb
locate libpq-fe.h

Downloading and Building libexodus

libexodus.so is a shared library that allows you to write c++ programs with the style and semantics of pick basic. If you want traditional pick-like dictionary based sort/select/index it requires pgexodus to be built and installed too.

To give some insight into the automatic procedure see Manual Building with g++

Either download Exodus using Subversion (recommended - latest version)

cd ~
mkdir exodus
cd exodus
svn co http://svn.neosys.com/svn/trunk
cd trunk/exodus/exodus

or download a tarball (may be out of date)

cd ~
wget http://devwiki.neosys.com/images/2/2a/Exodus-9.6.0.tar.gz
tar xvfz Exodus-9.6.0.tar.gz
cd exodus-9.6.0

Build and Install

./configure
make
make install

A couple of installation steps that unfortunately have to be done by hand at the moment.

ldconfig
ln -s /usr/local/include/exodus-9.6/exodus /usr/local/include/exodus 

Test that you can down develop in c++ with Exodus. The libs and includes will no longer be required with a better installer.

nano tester.cpp
 #include <exodus/exodus.h>
 int main() {
	date().oconv("D").outputln();
 }
g++ tester.cpp -lexodus -I/usr/local/include/exodus
./a.out
25 JUN 2009

Building and Installing pgexodus

pgexodus.so is a shared library addin c function for postgres to perform sort/select/index functions otherwise it is not required.

pgexodus Dependencies

Installing Postgres

Version 8.3

yum install postgresql
yum install postgresql-devel

or on Ubuntu

sudo aptitude install postgresql-8.3
sudo aptitude install postgresql-dev
sudo aptitude install libpq-dev

Locate fmgr.h to check. Probably in /usr/include/postgresql/ or /usr/include/postgresql/8.3/server/ on Ubuntu

updatedb
locate fmgr.h

Building pgexodus

Currently hand built without even a make file. standard configure/make using autoconf/automake will be available soon http://www.lrde.epita.fr/~adl/dl/autotools.pdf

here are some old manual pgexodus handbuilding instructions

check you have access to the pg_config program

pg_config

if not, do something like the following, depending on where your Postgres is installed.

PATH=/Library/PostgreSQL/8.3/bin/:$PATH
pg_config

Do the classic configure, make, make install procedure

cd ~/exodus/trunk/exodus/pgexodus
./configure
make
sudo make install

Installing pgexodus

Register the c functions in postgres

sudo su - postgres
psql
\connect exodus


-- cut and paste the following SQL to register the functions into postgres --

CREATE OR REPLACE FUNCTION exodus_call(bytea, bytea, bytea, bytea, bytea, int4, int4) RETURNS bytea AS 'pgexodus', 'exodus_call' LANGUAGE C IMMUTABLE;

CREATE OR REPLACE FUNCTION exodus_extract_bytea(bytea, int4, int4, int4) RETURNS bytea AS 'pgexodus', 'exodus_extract_bytea' LANGUAGE C IMMUTABLE;

CREATE OR REPLACE FUNCTION exodus_extract_text(bytea, int4, int4, int4) RETURNS text AS 'pgexodus', 'exodus_extract_text' LANGUAGE C IMMUTABLE;

CREATE OR REPLACE FUNCTION exodus_extract_sort(bytea, int4, int4, int4) RETURNS text AS 'pgexodus', 'exodus_extract_sort' LANGUAGE C IMMUTABLE;

-- Remaining functions are STRICT therefore never get called with NULLS -- also return NULL if passed zero length strings

CREATE OR REPLACE FUNCTION exodus_extract_text2(bytea, int4, int4, int4) RETURNS text AS 'pgexodus', 'exodus_extract_text2' LANGUAGE C IMMUTABLE STRICT;

CREATE OR REPLACE FUNCTION exodus_extract_date(bytea, int4, int4, int4) RETURNS date AS 'pgexodus', 'exodus_extract_date' LANGUAGE C IMMUTABLE STRICT;

CREATE OR REPLACE FUNCTION exodus_extract_time(bytea, int4, int4, int4) RETURNS time AS 'pgexodus', 'exodus_extract_time' LANGUAGE C IMMUTABLE STRICT;

CREATE OR REPLACE FUNCTION exodus_extract_datetime(bytea, int4, int4, int4) RETURNS timestamp AS 'pgexodus', 'exodus_extract_datetime' LANGUAGE C IMMUTABLE STRICT;

Check the functions loaded properly (count them)

\df exodus*
                                                  List of functions
 Schema |          Name           |      Result data type       |                 Argument data types
--------+-------------------------+-----------------------------+-----------------------------------------------------
 public | exodus_call             | bytea                       | bytea, bytea, bytea, bytea, bytea, integer, integer
 public | exodus_extract_bytea    | bytea                       | bytea, integer, integer, integer
 public | exodus_extract_date     | date                        | bytea, integer, integer, integer
 public | exodus_extract_datetime | timestamp without time zone | bytea, integer, integer, integer
 public | exodus_extract_sort     | text                        | bytea, integer, integer, integer
 public | exodus_extract_text     | text                        | bytea, integer, integer, integer
 public | exodus_extract_text2    | text                        | bytea, integer, integer, integer
 public | exodus_extract_time     | time without time zone      | bytea, integer, integer, integer
(8 rows)

Quit postgres command prompt and quite postgres user

\q
exit

For more information see http://www.postgresql.org/docs/8.1/static/app-psql.html

Setting up Postgres for Exodus

become user postgres and get into postgres command prompt

sudo su - postgres
psql

create a user and database for exodus. Use the given password for now.

CREATE ROLE exodus LOGIN
 PASSWORD 'somesillysecret'
 CREATEDB CREATEROLE;
CREATE DATABASE exodus
 WITH ENCODING='UTF8'
   OWNER=exodus;
  1. quit postgres command prompt
\q

Unless you are only going to run Exodus as user "exodus" from the local machine, grant login from 127.0.0.1 using username/unencrypted password (instead of only logged-in username without password)

For more info see http://developer.postgresql.org/pgdocs/postgres/auth-pg-hba-conf.html

nano data/pg_hba.conf

or for Ubuntu

nano /etc/postgresql/8.3/main/pg_hba.conf

comment out the following lines. NB DONT comment out any other similar lines esp. ones containining "postgres"

#local   all         all                               ident sameuser
#host    all         all         127.0.0.1/32          ident sameuser

and add these lines

local   all         all                               password
host    all         all         127.0.0.1/32          password
hostssl all         all         0.0.0.0/0             password

quit postgres user

exit

for redhat/centos

service postgresql reload

or for Ubuntu

sudo /etc/init.d/postgresql restart
or
sudo /etc/init.d/postgresql-8.3 restart

Building service

service is an incomplete multithreaded framework to support dynamic loading of library routines and serving a request/response queue.

www provides an optional web interface to the request/response queue. Windows only at the moment due to a single asp files but could be ported to php.

Building service

cd ~/exodus/trunk/service/service
g++ -fPIC -c *.cpp -I/usr/local/include/boost-1_38 -I../../exodus/mv/src
g++ -shared -o libservice.so -lc *.o
g++ -o service main.cpp -I/usr/local/include/boost-1_38 -L. -L/usr/local/lib -lexodus -lpq -lboost_filesystem-gcc41-mt\
-lboost_regex-gcc41-mt -lboost_thread-gcc41-mt -L../../exodus/mv/src -I../../exodus/mv/src -L./ -lservice

Running service

export LD_LIBRARY_PATH=../../exodus/mv/src:.:/usr/local/lib:$LD_LIBRARY_PATH
./service

Developing libexodus/pgexosdus/service

Committing your developments

First get a username and password by running the following unix command and send the output to an exodus subversion administrator eg steve.bush@neosys.com

htpasswd -nm YOURDESIREDUSERNAME

The administrator needs to run the following command as root and enter the encrypted pass (the bit AFTER the :) ignoring the warning about plain text password because it is already encrypted.

htpasswd -p /etc/apache2/dav_svn.passwd YOURDESIREDUSERNAME