It's that time of the year again. I need to prepare all the information required by my accountant to issue my company accounts. Luckily I have most of it saved in a handy directory on my laptop, with a backup copy on the server. However, it still takes a lot of time that I'd rather be spending doing something else. Accounts are not the only process that I'd like to improve: sales, expenses, invoicing, everything that is not part of my daily job is done in an ad-hoc way. This is exactly what ERP systems are designed to address. And as usual, there is an open source solution out there, one that is even fully supported on Ubuntu: OpenERP. Let's install it then!
Before we start, OpenERP is a client-server solution and as such there are two components to consider:
- OpenERP Server
- This is a central component that is deployed on a central server and is responsible for managing the company database. You should have a single instance of it for the whole company.
- OpenERP Client
- This is a desktop application that enables users to view and update the data held in the server. It should be installed on every computer that needs access to the ERP system.
In addition, OpenERP also offers another server component called OpenERP Web. This component is meant to be deployed on the same server as OpenERP Server and offers a web interface to the ERP system, meaning that you can access the system using a vanilla web browser, rather than the dedicated client application. This is great if you have a large number of users and don't want to deploy the dedicated client everywhere. I will ignore this component for today and only go through the installation of the server and dedicated client.
To install the server component, you need a computer that will act as a server. You could potentially install it on your desktop or laptop if you are sure that you will only ever be the single user of the application but I wouldn't recommend it. In my case, I decided to install it on my existing home server that runs Ubuntu Server 10.04 LTS.
OpenERP needs a database engine and is designed to run with PostgreSQL so we need to install this first. To do this, connect to the server and just install the relevant package, as detailed in the OpenERP manual:
$ sudo apt-get install postgresql
Create an openerp user in PostgreSQL
The server will need a dedicated user in the database so we need to create it. To do this, we first need to start a session under the identity of the
postgres Linux user. We can then create the database user that we will name
openerp. When prompted, enter a password and make sure you remember it. There is no need for that user to be an administrator so we answer
n when asked that question. Then close the
postgres session to come back to your standard Linux user.
$ sudo su - postgres $ createuser --createdb --username postgres --no-createrole \ --pwprompt openerp Enter password for new role: Enter it again: Shall the new role be a superuser? (y/n) n $ exit
Now that this new user is created, let's try to connect to the database engine using it:
$ psql -U openerp -W psql: FATAL: Ident authentication failed for user "openerp"
It doesn't work. This is because PostgreSQL uses IDENT-based authentication rather than password-based authentication. To solve this, edit the client authentication configuration file:
$ sudo vi /etc/postgresql/8.4/main/pg_hba.conf
Find the line that reads:
local all all ident
Replace the word
local all all md5
And restart the database server:
$ sudo /etc/init.d/postgresql-8.4 restart
Let's try again:
$ psql -U openerp -W psql: FATAL: database "openerp" does not exist
OK, that's a different error which is due to the fact that PostgreSQL tries to connect to a database that has the same name as the user if none is specified. So let's try to connect to the
postgres database, which is contains system information and is always installed.
$ psql -d postgres -U openerp -W psql (8.4.4) Type "help" for help. postgres=>
That works so we know that the user has been successfully created and there should be no problem connecting with that user identity.
Install OpenERP Server
OpenERP Server is part of the Ubuntu repositories so it's extremely easy to install:
$ sudo apt-get install openerp-server
Now is a good time for a coffee break. On my installation, the
openerp-server package triggers the installation of no less than 108 packages in 48.9MB of archives that will require an additional 251MB of disk space. This may take some time. Most of the additional packages are Python packages, which is sensible because OpenERP is written in Python but the fact that it also requires things like
xterm and bits of GTK makes me think that the dependency list could be pruned somewhat. At the end of the installation, a message appears saying that you should go and read the file called
/usr/share/doc/openerp-server/README.Debian. Go and do this. It mainly explains the PostgreSQL installation that we just did but it also mentions a bit of useful information, namely that the OpenERP Server configuration file is
/etc/openerp-server.conf. That's quite handy because we need to update it.
$ sudo vi /etc/openerp-server.conf
If you are installing the server and client on different machine, which I would recommend, you need to find the line that says:
interface = localhost
And replace the word
localhost with the IP address of your server. If you don't know the IP address of the server, just run
ifconfig with no parameters and look for the words
inet addr: at the beginning of the second line of output: the IP address is the set of four number separated by dots that come just after that. You then need to modify another two lines:
dbpassword = the password you chose for the openerp user dbhost = localhost
In theory you shouldn't have to specify
dbhost = localhost because leaving that entry blank should default to the value
localhost but when I tried this, OpenERP Server could not connect to PostgreSQL. It's now time to restart the server process but before we do this, it's always good to be able to follow the logs in a second window just in case something goes wrong. The location of the log file is helpfully specified in the configuration file that we just edited. Open another terminal, connect to the server and run the following command:
$ tail -f /var/log/openerp-server.log
The last 10 lines of log will appear and every time a new entry is added to the log file, it will also appear in this window. In the first window, we can restart the server:
$ sudo /etc/init.d/openerp-server restart
If all goes well, no nasty error message should appear in the log window.
Now, to install the client software on a desktop, connect to the desktop, open a terminal and install the package:
$ sudo apt-get install openerp-client
That's it. Once finished, you will find an OpenERP Client entry in the Applications -> Internet menu. Click on it to open the client. If you want to fill in the feedback form, do so, otherwise click Cancel. You then need to create a new database. To do this, go to the File -> Databases -> New Database menu:
This will open a dialogue where you can enter the details of the new database.
You will need to click on the Change button at the top to specify the name or IP address of the server. The port should be the default, 8070. Of course, if you have a firewall between the client and the server, the firewall configuration will need to be updated to allow traffic to the server through this port. The default password for the super administrator is
admin as specified in the dialogue. Note that the database name cannot contain spaces, dashes or any non-alphanumeric characters.