Upgrading to LedgerSMB 1.2 

From LedgerSMB (1.1.12 or earlier) 
or 
SQL-Ledger (2.6.27 or earlier)

This document contains information on how to upgrade from earlier versions of 
LedgerSMB or SQL-Ledger.  This upgrade is a major revision and may not go 
smoothly.  We recommend that the reader start by reading the section on manual
installation and then start by trying the automated means mentioned later.

Also this document assumes that the reader is already familiar with the release
notes.  If you have not already done so, please read the release_notes file in
the doc/ directory.

Before you begin, make sure that you are running at least PostgreSQL 8.0.  If 
you are running a prior version, you will need to dump your data, upgrade the 
database server and restore the data before proceeding.

You may want to review the INSTALL file as well, as common troubleshooting 
information and more detail may be found there.

MANUAL UPGRADE:
===============================================================================

1)  Back up old installation
THis is a major upgrade.  If something goes wrong, you want to be able to get
back to a known good state.  To back up the old installation do as follows:
  a)  Copy the LedgerSMB install directory (for example /usr/local/ledger-smb) 
      to another location
  b)  Back up the database using pg_dump or other PostgreSQL backup program.
  c)  (optional) Make a live bakup of the accounting database by creating a new
      db with it as the template.  Something like:
      createdb -U postgres -T ledgersmb accounting_backup


2)  Check New Dependencies

The Build.PL script can be used to test for unmet dependencies and run other
tests.  It doesn't install anything yet, but it will tell you what you are 
missing.  To check for dependencies, run "perl Build.PL" from the command line.
Missing dependencies can generally be installed via a Linux distributor's
package manager or by CPAN.

Once this is done and dependencies are satisfied, you can check to see whether
the installation nominally works by running "./Build test" from the command
line.  The test suites currently check to make sure all the perl modules load
and that a number of numeric tests are passed.

Dependencies which are recommended are needed only for specific functionality
and may not be required in all circumstances.  These include:
  * Net::TCLink for credit card processing in a POS environment
  * Parse::RecDescent for the CLI script host

3)  Upgrade database

  a) cd to the sql/legacy/ directory of the new ledger directory
  b) run "psql" with appropriate options to connect to your database.
  c) Note the db schema version by running the following query:
     "SELECT value from defaults where setting_key = 'version';" (1.2.0 or 
     later)
       or
     "SELECT version FROM defaults;" (SQL-Ledger 2.6.x or LedgerSMB 1.1.x 
     or earlier)
  d) Run the SQL upgrade scripts in order starting with the one whose name
     begins with "Pg-upgrade-[version]" (each of these scripts will upgrade to
     the next database version which is also identified in the file name).
     N.B.: use `ls -v` to see the scripts in version order and run them
     in the order shown by this command.
  e) If you have a problem running the scripts (errors due to ownership
     or you just want to change ownership of the tables), connect to the
     database as you did in c above and at the => prompt:
     "\d"
     You will see a list of all tables, sequences, triggers, etc.  After
     creating a user (see the INSTALL file for details), you can change
     ownership of the relation by running the following at the => prompt:
     "ALTER TABLE|SEQUENCE|TRIGGER public.<relation_name> OWNER TO "new_owner";
     Select the appropriate relation type and relation_name.
     Rerun the upgrade scripts starting with the first one that failed.

Note that subpara d above will create three tables that may not actually be 
used depending on your setup:  users, users_conf, and session.  In general if 
you have multiple datasets, these tables will only be used in one.

4)  Decide where to put the user/session management tables.  In general, we
recommend as follows:
  a)  Single dataset installations should use the user tables in the dataset.
  b)  Multicompany installations should use user tables in a separate dataset
      from any accounting data.

For a single dataset, just import sql/Pg-central.sql into your database.
If you need to create another dataset, you can create the db and import the
sql/Pg-central.sql file into it.

5)  Set the admin password:
  a)  From psql, determine what admin password you wish to use.  Then type:
      "update users_conf set password = md5('my_password');"
      Naturally you would use your password instead of my_password.

6)  Create ledgersmb.conf using appropriate values from the old ledger-smb.conf
    and connection data for the central authentication database.
    ledgersmb.conf.default can be used as a base.

7)  Import the users.  Run the import-members script to do this.

8)  Copy the files from the LedgerSMB tarball over your existing installation.

9)  Delete the users directory.

10) Upgrade your templates.  Run the following command:
	perl upgrade_templates.pl $templatedir
    Where $templatedir is the directory of your templates.

11) You can test basic parts of the installation by running Build ./test at 
    this point.

Congratulations, you have manually upgraded to LedgerSMB 1.2.

TODO:  Add upgrade.pl script and automate the above process.
