The attached patch is a slightly improved version because the other one overwrote my ledgersmb.conf file today (serveral times :-) Bye, Erik. On Thu, Jun 2, 2011 at 6:04 PM, Erik Huelsmann <..hidden..> wrote: > There was discussion on having easier setup procedures. Even though > the attached script doesn't install the required Perl modules and > PostgreSQL contrib files, it does contain everything required to > quickly generate a company database, without the complicated manual > instructions you currently have to go through. > > It works on my Debian Squeeze system which has all the required > modules installed. > > > The script is still shell, but really should be able to run on most > systems. I know there's been discussion on requiring it to be Perl. > That's a task I'd rather leave to others. This one works and only > needs a simple translation step to be applied. Possibly, the testing > framework which is able to set up company databases too can be > copy/pasted for the task of table/trigger setup. > > > The script is by no means meant to be the final solution, but should > relieve short term pain and serve as documentation for anybody trying > to set up LSMB manually. > > > Bye, > > Erik. > > > #!/bin/sh > > # Script to explain the steps to take when installing LedgerSMB > > # Default variable values section > > owner=ledgersmb > pass=LEDGERSMBINITIAL > host=localhost > port=5432 > srcdir=$PWD > dstdir=$PWD > coa=us/General.sql > gifi= > pgsql_contrib_dir=ignore > ADMIN_FIRSTNAME='Default' > ADMIN_MIDDLENAME=NULL > ADMIN_LASTNAME='Admin' > ADMIN_USERNAME='admin' > ADMIN_PASSWORD='admin' > > > # Usage explanation section > > > usage () { > script_name=`basename $0` > cat <<USAGE > usage: $script_name [option1 .. optionN] > > This script wants to be run as the root user. If you don't, you'll be > asked to enter the password of the 'postres' user > > This script creates a 'ledgersmb' user on the specified PostgreSQL host, > if it does not exist. Then it proceeds to load the LedgerSMB database > structure and content, loading Chart of Accounts data and GIFI data > as specified in the argument list. > > After the database has been created, the script inserts a default user > '$ADMIN_USER' (password: '$ADMIN_PASSWORD'), with these initial values: > > First name: $ADMIN_FIRSTNAME (NULL == none) > Middle name: $ADMIN_MIDDLENAME (NULL == none) > Last name: $ADMIN_LASTNAME (NULL == none) > Country: 'US' > > This default user will be assigned all priviledges within the application. > > Available options: > --srcdir The path where the sources for LedgerSMB are located > [$srcdir] > --dstdir The path where the sources will be located when invoked > from the webserver [$dstdir] > --host The PostgreSQL host to connect to (see 'man psql') [$host] > --port The PostgreSQL port to connect to (see 'man psql') [$port] > --pgsql-contrib The directory where the tsearch2.sql, pg_trgm.sql and > tablefunc.sql PostgeSQL are located [$pgslq_contrib_dir] > --company The name of the database to be created for the company [*] > --owner The name of the superuser which is to become owner of the > company's database [$owner] > --password The password to be used to create the 'ledgersmb' user > on the specified PostgreSQL server [$pass] > --coa The path locating the file to be > used to load the Chart of Accounts data > --gifi The path locating the file to be > used to load the GIFI data with the chart of accounts > --progress Echoes the commands executed by the script during setup > --help Shows this help screen > > * These arguments don't have a default, but are required > USAGE > > } > > # Extract options and setup variables > if ! options=$( getopt -u -l > company:,coa:,gifi:,srcdir:,dstdir:,password:,host:,port:,help,progress,pgsql-contrib: > '' "$@" ) > then > exit 1 > fi > > set -- $options > while test $# -gt 0 ; > do > > shift_args=2 > case "$1" in > --) > shift_args=1 > ;; > --company) > company_name=$2 > # break > ;; > --coa) > coa=$2 > # break > ;; > --gifi) > gifi=$2 > # break > ;; > --srcdir) > srcdir=$2 > # break > ;; > --dstdir) > dstdir=$2 > # break > ;; > --password) > pass=$2 > # break > ;; > --host) > host=$2 > # break > ;; > --port) > port=$2 > # break > ;; > --pgsql-contrib) > pgsql_contrib_dir=$2 > # break > ;; > --progress) > progress=yes > shift_args=1 > # break > ;; > --help) > usage > exit 0;; > esac > shift $shift_args > done > > if test -z "$company_name" > then > echo "missing or empty --company option" > usage > exit 1 > fi > > if test "$pgsql_contrib_dir" = "ignore" > then > echo "missing argument --pgsql-contrib!" > usage > exit 1 > fi > > psql_args="-h $host -p $port -U $owner" > psql_cmd="psql $psql_args -d $company_name" > > > if test -n "$progress" > then > # Use shell command-echoing to "report progress" > set -x > fi > > sed -e "s|WORKING_DIR|$dstdir|g" \ > $srcdir/ledgersmb-httpd.conf >$dstdir/ledgersmb.conf > cat <<EOF | su -c "psql -U postgres -d postgres " postgres > CREATE ROLE $owner WITH SUPERUSER LOGIN NOINHERIT ENCRYPTED PASSWORD '$pass'; > CREATE DATABASE $company_name WITH ENCODING = 'UNICODE' OWNER = $owner > TEMPLATE = template0; > \\c $company_name > CREATE LANGUAGE plpgsql; > EOF > > PGPASSWORD=$pass > export PGPASSWORD > > > #createdb $psql_args -O $owner -E UNICODE $company_name > #createlang $psql_args plpgsql $company_name > > > # Load the required PostgreSQL contribs, if a directory was specified > if ! test "x$pgsql_contrib_dir" = "xignored" > then > for contrib in tsearch2.sql pg_trgm.sql tablefunc.sql > do > cat $pgsql_contrib_dir/$contrib | $psql_cmd > done > fi > > # Load the base file(s) > # -- Basic database structure > cat $srcdir/sql/Pg-database.sql | $psql_cmd > # -- Additional database structure > for module in `grep -v -E '^[[:space:]]*#' sql/modules/LOADORDER` > do > cat $srcdir/sql/modules/$module | $psql_cmd > done > # -- Authorizations > sed -e "s/<?lsmb dbname ?>/$company_name/g" \ > $srcdir/sql/modules/Roles.sql | $psql_cmd > > > if test -n "$coa" ; then > # Load a chart of accounts > cat $coa | $psql_cmd > if test -n "$gifi" ; then > cat $gifi | $psql_cmd > fi > fi > > cat <<CREATE_USER | $psql_cmd > EXECUTE admin__save_user(NULL, > person__save(NULL, > 3, > '$ADMIN_FIRSTNAME', > '$ADMIN_MIDDLENAME', > '$ADMIN_LASTNAME', > (SELECT id FROM country > WHERE short_name = 'US')), > '$ADMIN_USERNAME', > '$ADMIN_PASSWORD'); > > SELECT admin__add_user_to_role('$ADMIN_USERNAME', rolname) > FROM pg_roles > WHERE rolname like 'lsmb_${company_name}_%'; > > CREATE_USER >
Attachment:
prepare-company-database.sh
Description: Bourne shell script