Linux: Difference between revisions
Line 80: | Line 80: | ||
exit | 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 === | === Downloading and Building libexodus === |
Revision as of 20:29, 28 June 2009
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++
Ensure you have postgres client development library (libpq-fe.h file)
yum install postgresql-devel
or on Ubuntu
apt-get install libpq-dev
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-9.6 -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 libpq-fe.h to check. Probably in /usr/include/postgresql/ or /usr/include/postgresql/8.3/server/ on Ubuntu
updatedb locate libpq-fe.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
Note that all routines are marked for "C linkage" in order to work with the postgres library "pq". For convenience they are all compiled under C++ since callexodus requires boost which is c++. The .c routines could equally well be compiled with the plain c compiler. The link stage must be done in c++ style in order to link to the c++ runtime library "rt".
cd ~/exodus/trunk/exodus/pgexodus/src
g++ -fpic -c pgexodus.c extract.c callexodus.cpp naturalorder.cpp pgnaturalorder.cpp -I `pg_config --includedir-server` -I /usr/local/include/boost-1_38 g++ -shared -o pgexodus.so pgexodus.o extract.o callexodus.o naturalorder.o pgnaturalorder.o -lrt -lpq
Check the build as follows:
ld pgexodus.so
Should give something like the following. These 8 references to the postgres library all seem to be resolved at runtime.
pgexodus.so: undefined reference to `Float8GetDatum' pgexodus.so: undefined reference to `pg_atoi' pgexodus.so: undefined reference to `CurrentMemoryContext' pgexodus.so: undefined reference to `pg_detoast_datum' pgexodus.so: undefined reference to `pfree' pgexodus.so: undefined reference to `elog_start' pgexodus.so: undefined reference to `MemoryContextAlloc' pgexodus.so: undefined reference to `elog_finish'
Also check the following
ldd -u pgexodus.so
Should give something like:
./pgexodus.so: error: symbol lookup error: undefined symbol: CurrentMemoryContext (continued) undefined symbol: CurrentMemoryContext (./pgexodus.so) Unused direct dependencies: /lib/librt.so.1 /usr/lib/libpq.so.5 /lib/libm.so.6 /lib/libgcc_s.so.1
Installing pgexodus
Copy the library to the postgres library folder
sudo cp pgexodus.so `pg_config --pkglibdir`
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
\df exodus*
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
CREATE ROLE exodus LOGIN PASSWORD 'somesillysecret' CREATEDB CREATEROLE;
CREATE DATABASE exodus WITH ENCODING='UTF8' OWNER=exodus;
- quit postgres command prompt
\q
Allow login from 127.0.0.1 using username/unencrypted password (instead of only logged-in username without password) 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
#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
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