How To Run ADempiere on FreeBSD
Contents
Introduction
This document describes how to install and run ADempiere on FreeBSD operating system. Although it may be possible that the instructions here also apply to other BSD flavours such Open/NetBSD, it has not been tested.
Notice that this is just a simple setup how-to to start running and developing ADempiere in an experimental environment and is not intended as a deployment scenario since many steps such as operating system, database and application server securing/tuning are skipped over for the sake of simplicity.
Conventions
- A '#' at the beginning of a command shows that it's a command that should be run by root.
- A '>' at the beginning of a command shows that it's a command that may be run by a normal user.
Software Requirements
Following this document all you need to start with, is a FreeBSD (i386) 6.2, 7.x or 8.0 installation with X and networking working; every other thing necessary will be fetched and built from the ports tree automatically.
NOTE: PL/Java will not compile on Java JDK1.6 - you need JDK 1.4 or 1.5 installed!
If you're too impatient to read the rest of the document, the following will be installed:
- JDK 1.5.0 or Diablo JDK 1.5.0 (This is essential to run PL/Java regardless of whatever ADempiere release you plan to run)
- JDK 1.6.0 (If you plan to run 3.5.1a or newer releases)
- PostgreSQL 8.3 or 8.2
- PL/Java
- ADempiere
Preparing the environment
If you have already installed PostgreSQL and Java you can skip over to Installing PL/Java.
As a privileged user type the following in a terminal:
# portsnap fetch # portsnap extract # portsnap update
Installing Java
As a privileged user type the following in a terminal:
# cd /usr/ports/java/jdk15 # make
You'll notice that instead of the 'make' process starting, there are some instructions on how to manually download different parts of JDK sources and binaries from different places and move them to '/usr/ports/distfiles'. That's because of some licensing issues Java (i.e. Sun) has on FreeBSD. Download the parts and type the following:
# make && make install && make clean
Building Java is awfully time-consuming so you have about 3-6 hours of time to kill; happy killing!
In order to install PL/Java, Java shared objects (so) should be loaded into memory. Change the '/etc/rc.conf' as follows:
# echo ldconfig_paths=\"/usr/lib/compat /usr/X11R6/lib /usr/local/lib /usr/local/lib/compat/pkg /usr/local/diablo-jdk1.5.0/jre/lib/i386 /usr/local/diablo-jdk1.5.0/jre/lib/i386/client /usr/local/diablo-jdk1.5.0/jre/lib/i386/native_threads\" >> /etc/rc.conf
Note: If there is already a ldconfig_paths entry in rc.conf you only need to add the addresses of the above command which start with '/usr/local/diablo-jdk1.5.0' to the existing ldconfig_paths entry.
Now load the new shared objects.
# /etc/rc.d/ldconfig restart
Troubleshooting
Installing PostgreSQL
Compiling
Welcome back! Installing the mighty database is straight-forward and easy.
# cd /usr/ports/databases/postgresql82-server # make config
You may choose whatever options you like your database to be compiled with. Below is a sample configuration:
GNU GetOpts | ON |
PAM | OFF |
LDAP | OFF |
MIT Kerberoes5 | OFF |
Heimdal | OFF |
Optimized CFlags | ON |
LIBC_R | OFF |
ThreadSafe | OFF |
Tests | OFF |
Debug | OFF |
HIER | OFF |
Now
# make && make install && make clean
The make process installs both client and server. If you want the mighty database to be started when you boot up your FreeBSD, just do this:
# echo enable_postgresql=\"YES\" >> /etc/rc.conf
Setup
For guides on setting up a PostgreSQL database, refer to PostgreSQL online documentation (Creating A Database Cluster).
Troubleshooting
Installing PL/Java
Compiling
And the tricky PL/Java. Fetch the latest source from CVS repository and compile it. When asked for a password just hit ENTER.
> cvs -d :pserver:anonymous@cvs.pgfoundry.org:/cvsroot/pljava login > cvs -d :pserver:anonymous@cvs.pgfoundry.org:/cvsroot/pljava checkout org.postgresql.pljava > setenv JAVA_HOME /usr/local/diablo-jdk1.5.0 > cd org.postgresql.pljava/ > gmake
Put the result in a standard place.
> mkdir -p /usr/local/pljava/lib > cp build/objs/pljava.so /usr/local/pljava/lib > cp build/*.jar /usr/local/pljava > cp src/sql/*.sql /usr/local/pljava
Changing PostgreSQL Configuration
Add the followings to the end of the postgresql.conf file which can be found in $PG_DATA directory (normally this is /usr/local/pgsql/data).
custom_variable_classes = 'pljava' dynamic_library_path = '$libdir:/usr/local/pljava/lib' pljava.classpath = '/usr/local/pljava/pljava.jar' pljava.vmoptions = '-XX:+UseAltSigs'
Restart the database server. You can do so by:
# /usr/local/etc/rc.d/postgresql restart
or
# pg_ctl -d /usr/local/pgsql/data -w -l logfile restart
Installing PL/Java Into Database
> psql -d template1 -U pgsql template1# \i /usr/local/pljava/install.sql
That's done it!
Troubleshooting
Problem: When I try to install it into database I get the following error:
ERROR: could not load library "/usr/local/pljava/lib/pljava.so": dlopen (/usr/local/pljava/lib/pljava.so) failed: /usr/local/jdk1.5.0/jre/lib/i386/client/libjvm.so: Undefined symbol "pthread_create"
Solution: You should map libpthread library to either libthr or libc_r threading libraries. You can do so by changing /etc/libmap.conf as follows:
# echo libpthread.so libthr.so >> /etc/libmap.conf # echo libpthread.so.0 libthr.so >> /etc/libmap.conf # echo libpthread.so.2 libthr.so.2 >> /etc/libmap.conf # echo libpthread.so.20 libthr.so.2 >> /etc/libmap.conf
Installing ADempiere Database
Now that you have PL/Java installed, the rest is just a piece of cake. Assuming that you have already downloaded ADempiere bundle and extracted it in some location -which we call ADEMPIERE_HOME-, first we have to create ADempiere database.
> psql -d postgres -U pgsql postgres# CREATE USER adempiere SUPERUSER ENCRYPTED PASSWORD 'WhateverPasswordYouLike'; postgres# CREATE DATABASE adempiere OWNER=adempiere ENCODING='UTF8'; postgres# \c adempiere adempiere
You're logged in to the initial database. It's time to import the database and install SQLJ libraries. Don't forget to replace $ADEMPIERE_HOME with the real path since psql doesn't recognise environment variables.
adempiere# \i $ADEMPIERE_HOME/data/Adempiere_pg.dmp adempiere# SET search_path TO adempiere; adempiere# SELECT sqlj.install_jar('file:///$ADEMPIERE_HOME/lib/sqlj.jar', 'sqlj', true); adempiere# SELECT sqlj.set_classpath('adempiere', 'sqlj');
Running The Server/Client
The Server
The first step is to configure the server.
Note: In tcsh -the default shell on FreeBSD- you can set an environment variable by using the setenv command. On bash it would be export. Don't forget the manpages if you have any problem.
# cd $ADEMPIERE_HOME && chmod +x *.sh # ./RUN_setup.sh
This is the setup wizard of ADempiere. The parameters you supply here will mainly be used to configure the server. Change the values to suite your configuration and then hit the Test button. If there appears a OK at the bottom right corner of the window, then hit the Save button, otherwise there's something wrong with the configuration parameters.
After a successful setup -which takes some minutes-, you can run the server.
> cd $ADEMPIERE_HOME/utils > ./RUN_Server2.sh
The client
It's straight-forward:
> cd $ADEMPIERE_HOME > ./RUN_Adempiere.sh
That's it! You've got it running.
Troubleshooting
Caveat Emptor
- As of today, PL/Java doesn't run on JDK 1.6.