Skip to content

Instantly share code, notes, and snippets.

@martinhbramwell
Last active August 3, 2018 09:03
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save martinhbramwell/4160246 to your computer and use it in GitHub Desktop.
Save martinhbramwell/4160246 to your computer and use it in GitHub Desktop.
OpenERP Database Mirroring with Bucardo :: You can use this bash script to learn how to prepare a pair of Ubuntu 12.04 Postgres hosts for master-master replication with Bucardo. * * * Caution : Work In Progress. IT DOES NOT WORK YET * * *
#!/bin/bash
#
# ################### ################### ###################
#
# OpenERP admins can use this bash script to learn how to
# prepare a pair of Ubuntu 12.04 Postgres hosts for
# master-master replication with Bucardo.
#
# * * * Caution : Work In Progress. * * *
# IT DOES NOT WORK YET
#
# ################### ################### ###################
#
# ################### ###################
# Parse command line options
# ################### ###################
#
declare THIS_FILE=BucardoDemoBuilder.sh
declare MIN_ARGS=5
declare GOT_ARGS=0
#
# Execute getopt
#
ARGS=$(getopt -o a:b:c:d:i:o:p:s:t:u -l "appw:,ipbh:,ohia:,othr:,this:" -n "$THIS_FILE" -- "$@");
#
#Bad arguments
if [ $? -ne 0 ];
then
exit 1
fi
#
# ################### ###################
# Variables declarations
# ################### ###################
#
declare PG_CONFIG_DIR=/etc/postgresql/9.1/main
declare PG_HBA=pg_hba.conf
declare PG_HBA_FILE=$PG_CONFIG_DIR/$PG_HBA
declare PG_CONFIG_FILE=$PG_CONFIG_DIR/postgresql.conf
#
declare REPORT_MY_IP="The IP address of this machine is : "
declare MY_IP=$(ifconfig | sed -n -e 's/:127\.0\.0\.1 //g' -e 's/ *inet addr:\([0-9.]\+\).*/\1/gp')
#
declare PG_LISTEN_BLOCKED="#listen_addresses"
declare PG_LISTEN_OPEN="listen_addresses"
#
declare PG_LISTEN_SRCH="listen_addresses = 'localhost'"
declare PG_LISTEN_RPLC="listen_addresses = '*'"
#
declare ASK_TYPE="Will this be the (P) primary or (S) secondary server : [p,s]?"
declare PRMRY=p
declare SCNDARY=s
#
declare ASK_PG_ADM_PWD="Specify a single password to be used for all example users?"
declare ALL_PURPOSE_PWD=okok
#
# declare ASK_TSAU="What is this host's admin user called?"
declare THIS_SERVER_ADMIN_USER
#
#declare ASK_BSAU="What is the Bucardo admin user called?"
declare BUCARDO_SERVER_ADMIN_USER=bucardo
#
# declare ASK_BDBN="What will you call the Bucardo database?"
declare BUCARDO_DATABASE_NAME=bucardo
#
declare ASK_OTHER_IP="What is the IP address of the other machine?"
declare OTHER_MACHINEZ_IP_ADDRESS=0.0.0.0
#
declare ASK_BLMS="What will you call the Primary server?"
declare BUCARDO_LOCAL_MASTER_SERVER_NAME=BackOffice
declare BUCARDO_LOCAL_MASTER_SERVER=srv
declare ASK_BLMS_ADM="What will be the admin user of the Primary server?"
declare PRIMARY_SERVER_ADMIN_USER=adm
# declare ASK_PDBN="What will you call the Primary database?"
declare PRIMARY_DATABASE_NAME=db
declare PRIMARY_ERP_DB_NAME=erp_db_
#
declare ASK_BRMS="What will you call the Secondary server?"
declare BUCARDO_REMOTE_MASTER_SERVER_NAME=WebShop
declare BUCARDO_REMOTE_MASTER_SERVER=srv
declare ASK_BRMS_ADM="What will be the admin user of the Secondary server?"
declare SECONDARY_SERVER_ADMIN_USER=adm
# declare ASK_SDBN="What will you call the Secondary database? (lowercase only)"
declare SECONDARY_DATABASE_NAME=db
declare SECONDARY_ERP_DB_NAME=erp_db_
#
declare OPENERP_DB_NAME=dbopenerp
declare OTHER_OPENERP_DB_NAME=
declare THIS_OPENERP_DB_NAME=
declare OPENERP_USER_NAME=usropenerp
#
declare THIS_HOST_TYPE=0
#
declare THIS_HOST_NAME
declare OTHER_HOST_NAME
declare THIS_DATABASE_NAME
#
# ################### ###################
# Function declarations
# ################### ###################
#
function installPostgresIfNecessary {
declare PG_INSTALLED_ALREADY=$(aptitude show postgresql | grep -c "State: installed")
if [ $PG_INSTALLED_ALREADY -lt 1 ]
then
echo Install PostgreSql
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
aptitude -y install postgresql
fi
#
echo PostgreSql is Installed
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
cp $PG_HBA $PG_HBA_FILE
#
declare PLPERLU_INSTALLED_ALREADY=$(aptitude show postgresql-plperl-9.1 | grep -c "State: installed")
if [ $PLPERLU_INSTALLED_ALREADY -lt 1 ]
then
echo Install Postgres Perl support
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
aptitude -y install postgresql-plperl-9.1
fi
#
echo PostgreSql Perl support is Installed
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
#
declare DBI_INSTALLED_ALREADY=$(aptitude show libdbi-perl | grep -c "State: installed")
if [ $DBI_INSTALLED_ALREADY -lt 1 ]
then
echo Install Postgres DBI support
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
aptitude -y install libdbi-perl
fi
#
echo PostgreSql DBI support is Installed
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
#
declare BOOLEAN_INSTALLED_ALREADY=$(aptitude show libboolean-perl | grep -c "State: installed")
if [ $BOOLEAN_INSTALLED_ALREADY -lt 1 ]
then
echo Install Perl Boolean package
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
aptitude -y install libboolean-perl
fi
#
echo Perl Boolean package installed
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
#
declare DBD_PG_INSTALLED_ALREADY=$(aptitude show libdbd-pg-perl | grep -c "State: installed")
if [ $DBD_PG_INSTALLED_ALREADY -lt 1 ]
then
echo Install Postgres DBD Pg support
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
aptitude -y install libdbd-pg-perl
fi
#
echo PostgreSql DBD Pg support is Installed
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
#
declare DBI_SAFE_INSTALLED_ALREADY=$(aptitude show libdbix-safe-perl | grep -c "State: installed")
if [ $DBI_SAFE_INSTALLED_ALREADY -lt 1 ]
then
echo Install Postgres DBIx-Safe support
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
aptitude -y install libdbix-safe-perl
fi
#
echo PostgreSql DBIx-Safe support is Installed
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
}
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
function setPasswordForThePostgresRole {
echo "Setting password for the postgres role"
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
declare PSQL_CMD="ALTER USER postgres WITH PASSWORD '$ALL_PURPOSE_PWD';"
# echo Command is :: $PSQL_CMD
su postgres -c "psql -c \"$PSQL_CMD\""
#
echo Postgres temporary password is $ALL_PURPOSE_PWD
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
}
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
function restartPostgres {
#
service postgresql restart
#
echo PostgreSql Restarted
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
}
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
function restartOpenerp {
#
/etc/init.d/openerp restart
#
echo OpenERP Restarted
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
}
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
function setMd5passwordAccessToPostgresRole {
#
echo Allow md5 password access to postgres role
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
declare PG_MD5_RPLC=$(printf 'local%6s%21s%36s' 'all' 'postgres' 'md5')
declare PG_PEER_SRCH="local\s*all\s*postgres\s*peer"
#
sed "s|$PG_PEER_SRCH|$PG_MD5_RPLC|" -i $PG_HBA_FILE
#
cat $PG_HBA_FILE | grep "local\s*all\s*postgres"
#
restartPostgres
#
}
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
function setPeerAccessToPostgresRole {
#
echo "Revert to peer access for postgres role"
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
declare PG_MD5_SRCH="local\s*all\s*postgres\s*md5"
declare PG_IDENT_SRCH="local\s*all\s*postgres\s*ident"
declare PG_PEER_RPLC=$(printf 'local%6s%21s%36s' 'all' 'postgres' 'peer')
#
sed "s|$PG_MD5_SRCH|$PG_PEER_RPLC|" -i $PG_HBA_FILE
sed "s|$PG_IDENT_SRCH|$PG_PEER_RPLC|" -i $PG_HBA_FILE
#
cat $PG_HBA_FILE | grep "local\s*all\s*postgres"
#
restartPostgres
#
}
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
function setTrustAccessToAllRoles {
#
echo Allow trust access to all local roles
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
declare PG_PEER_SRCH="local\s*all\s*all\s*peer"
declare PG_TRUST_RPLC=$(printf 'local%6s%16s%42s' 'all' 'all' 'trust')
#
sed "s|$PG_PEER_SRCH|$PG_TRUST_RPLC|" -i $PG_HBA_FILE
#
cat $PG_HBA_FILE | grep "local\s*all\s*all"
#
restartPostgres
#
}
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
function setPeerAccessToAllRoles {
#
echo "Revert to default peer access for all local roles"
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
declare PG_TRUST_SRCH="local\s*all\s*all\s*trust"
declare PG_PEER_RPLC=$(printf 'local%6s%16s%41s' 'all' 'all' 'peer')
#
sed "s|$PG_TRUST_SRCH|$PG_PEER_RPLC|" -i $PG_HBA_FILE
#
cat $PG_HBA_FILE | grep "local\s*all\s*all"
#
restartPostgres
#
}
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
function valid_ip()
{
local ip=$1
local stat=1
if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
OIFS=$IFS
IFS='.'
ip=($ip)
IFS=$OIFS
[[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \
&& ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]
stat=$?
fi
return $stat
}
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
function pingTest()
{
if [ 0 -lt $(ping -c 2 $1 | grep received | cut -d ',' -f2 | cut -d ' ' -f2) ]; then return 0; fi
return 1;
}
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
function getOtherIPaddr {
#
if [ -f ~/.variables ]
then
source ~/.variables
fi
#
echo "IP is : : $OTHER_MACHINEZ_IP_ADDRESS : : "
#
}
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
function parseOptions {
#
getOtherIPaddr
#
declare MIN_ARGS=4
#
eval set -- "$ARGS";
while true; do
case "$1" in
-t|--this)
shift;
if [ -n "$1" ]; then
THIS_HOST_NAME=$1
((GOT_ARGS++))
shift;
fi
;;
-i|--ohia)
shift;
if [ -n "$1" ]; then
OTHER_MACHINEZ_IP_ADDRESS=$1
((GOT_ARGS++))
shift;
fi
;;
-s|--ipbh)
shift;
if [ -n "$1" ]; then
THIS_HOST_TYPE=$1
((GOT_ARGS++))
shift;
fi
;;
-a|--appw)
shift;
if [ -n "$1" ]; then
ALL_PURPOSE_PWD=$1
((GOT_ARGS++))
shift;
fi
;;
-o|--othr)
shift;
if [ -n "$1" ]; then
OTHER_HOST_NAME=$1
((GOT_ARGS++))
shift;
fi
;;
--)
shift;
break;
;;
esac
done
#
if [ $GOT_ARGS -ge $MIN_ARGS ]
then
#
if [ "XX$THIS_HOST_TYPE" == "XX$PRMRY" ]
then
BUCARDO_LOCAL_MASTER_SERVER_NAME=$THIS_HOST_NAME
BUCARDO_REMOTE_MASTER_SERVER_NAME=$OTHER_HOST_NAME
else
BUCARDO_LOCAL_MASTER_SERVER_NAME=$OTHER_HOST_NAME
BUCARDO_REMOTE_MASTER_SERVER_NAME=$THIS_HOST_NAME
fi
#
elif [ $GOT_ARGS -lt 1 ]
then
#
echo " * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
echo "WARNING! This script will DROP and CREATE all databases, users and other artifacts you name below!"
echo " * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
#
echo $REPORT_MY_IP$MY_IP
#
read -e -p "$ASK_OTHER_IP: [$OTHER_MACHINEZ_IP_ADDRESS] " input
OTHER_MACHINEZ_IP_ADDRESS="${input:-$OTHER_MACHINEZ_IP_ADDRESS}"
#
read -e -p "$ASK_PG_ADM_PWD: [$ALL_PURPOSE_PWD] " input
ALL_PURPOSE_PWD="${input:-$ALL_PURPOSE_PWD}"
#
# read -e -p "$ASK_BSAU: [$BUCARDO_SERVER_ADMIN_USER] " input
# BUCARDO_SERVER_ADMIN_USER="${input:-$BUCARDO_SERVER_ADMIN_USER}"
#
read -e -p "$ASK_BLMS: [$BUCARDO_LOCAL_MASTER_SERVER_NAME] " input
BUCARDO_LOCAL_MASTER_SERVER_NAME="${input:-$BUCARDO_LOCAL_MASTER_SERVER_NAME}"
#
read -e -p "$ASK_BRMS: [$BUCARDO_REMOTE_MASTER_SERVER_NAME] " input
BUCARDO_REMOTE_MASTER_SERVER_NAME="${input:-$BUCARDO_REMOTE_MASTER_SERVER_NAME}"
#
# read -e -p "$ASK_BDBN: [$BUCARDO_DATABASE_NAME] " input
# BUCARDO_DATABASE_NAME="${input:-$BUCARDO_DATABASE_NAME}"
#
# read -e -p "$ASK_PDBN: [$PRIMARY_DATABASE_NAME] " input
# PRIMARY_DATABASE_NAME="${input:-$PRIMARY_DATABASE_NAME}"
# PRIMARY_DATABASE_NAME=$(echo $PRIMARY_DATABASE_NAME | awk '{print tolower($0)}')
#
# read -e -p "$ASK_SDBN: [$SECONDARY_DATABASE_NAME] " input
# SECONDARY_DATABASE_NAME="${input:-$SECONDARY_DATABASE_NAME}"
# SECONDARY_DATABASE_NAME=$(echo $SECONDARY_DATABASE_NAME | awk '{print tolower($0)}')
#
until [ "XX$THIS_HOST_TYPE" == "XX$PRMRY" -o "XX$THIS_HOST_TYPE" == "XX$SCNDARY" ]; do
THIS_HOST_TYPE=0
read -e -p "$ASK_TYPE: " input
input=$(echo $input | tr '[A-Z]' '[a-z]')
THIS_HOST_TYPE="${input:-$THIS_HOST_TYPE}"
# echo Got :: $THIS_HOST_TYPE
done
#
elif [ $GOT_ARGS -lt $MIN_ARGS ]
then
echo "Please run with no arguments to generate valid arguments list."
exit 1
fi
#
BUCARDO_LOCAL_MASTER_SERVER=$BUCARDO_LOCAL_MASTER_SERVER$BUCARDO_LOCAL_MASTER_SERVER_NAME
PRIMARY_SERVER_ADMIN_USER=$PRIMARY_SERVER_ADMIN_USER$BUCARDO_LOCAL_MASTER_SERVER_NAME
#
PRIMARY_DATABASE_NAME=$(echo $PRIMARY_DATABASE_NAME$BUCARDO_LOCAL_MASTER_SERVER_NAME | awk '{print tolower($0)}')
PRIMARY_ERP_DB_NAME=$(echo $PRIMARY_ERP_DB_NAME$BUCARDO_LOCAL_MASTER_SERVER_NAME | awk '{print tolower($0)}')
#
BUCARDO_REMOTE_MASTER_SERVER=$BUCARDO_REMOTE_MASTER_SERVER$BUCARDO_REMOTE_MASTER_SERVER_NAME
SECONDARY_SERVER_ADMIN_USER=$SECONDARY_SERVER_ADMIN_USER$BUCARDO_REMOTE_MASTER_SERVER_NAME
#
SECONDARY_DATABASE_NAME=$(echo $SECONDARY_DATABASE_NAME$BUCARDO_REMOTE_MASTER_SERVER_NAME | awk '{print tolower($0)}')
SECONDARY_ERP_DB_NAME=$(echo $SECONDARY_ERP_DB_NAME$BUCARDO_REMOTE_MASTER_SERVER_NAME | awk '{print tolower($0)}')
#
#
if [ "XX$THIS_HOST_TYPE" == "XX$PRMRY" ]
then
THIS_HOST_NAME=$BUCARDO_LOCAL_MASTER_SERVER_NAME
OTHER_HOST_NAME=$BUCARDO_REMOTE_MASTER_SERVER_NAME
THIS_DATABASE_NAME=$PRIMARY_DATABASE_NAME
OTHER_DATABASE_NAME=$SECONDARY_DATABASE_NAME
THIS_SERVER_ADMIN_USER=$PRIMARY_SERVER_ADMIN_USER
OTHER_OPENERP_DB_NAME=$SECONDARY_ERP_DB_NAME
THIS_OPENERP_DB_NAME=$PRIMARY_ERP_DB_NAME
else
THIS_HOST_NAME=$BUCARDO_REMOTE_MASTER_SERVER_NAME
OTHER_HOST_NAME=$BUCARDO_LOCAL_MASTER_SERVER_NAME
THIS_DATABASE_NAME=$SECONDARY_DATABASE_NAME
OTHER_DATABASE_NAME=$PRIMARY_DATABASE_NAME
THIS_SERVER_ADMIN_USER=$SECONDARY_SERVER_ADMIN_USER
THIS_OPENERP_DB_NAME=$SECONDARY_ERP_DB_NAME
fi
#
echo
echo
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
echo "This host's type : $THIS_HOST_TYPE";
echo "This host's IP address : $MY_IP";
echo "The Bucardo admin user's name : $BUCARDO_SERVER_ADMIN_USER";
echo "The Bucardo database's name : $BUCARDO_DATABASE_NAME";
echo "Other host's IP address : $OTHER_MACHINEZ_IP_ADDRESS";
echo "Temporary password for this demo : $ALL_PURPOSE_PWD";
echo "This host's name : $THIS_HOST_NAME";
echo "This host's admin user : $THIS_SERVER_ADMIN_USER";
echo "This server's database name : $THIS_DATABASE_NAME";
echo "The other host's name : $OTHER_HOST_NAME";
echo "The other host's database name : $OTHER_DATABASE_NAME";
#
echo " . . . Check remote server $OTHER_MACHINEZ_IP_ADDRESS exists . . "
if ! valid_ip $OTHER_MACHINEZ_IP_ADDRESS; then echo "Invalid IP address : $OTHER_MACHINEZ_IP_ADDRESS"; exit 1; fi
if ! pingTest $OTHER_MACHINEZ_IP_ADDRESS; then echo "Host $OTHER_MACHINEZ_IP_ADDRESS not found."; exit 1; fi
echo " . . . Remember server address $OTHER_MACHINEZ_IP_ADDRESS for next time. . . "
echo "export OTHER_MACHINEZ_IP_ADDRESS=$OTHER_MACHINEZ_IP_ADDRESS" > ~/.variables
#
echo = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
#
}
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
function restartNetworking {
service networking restart
echo Networking restarted
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
}
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
function setOtherHostName {
pushd /etc
#
cat >> hosts <<EOF
#
$OTHER_MACHINEZ_IP_ADDRESS $OTHER_HOST_NAME
EOF
#
cat hosts | grep $OTHER_HOST_NAME
popd
#
echo Other host now known as $OTHER_MACHINEZ_IP_ADDRESS : $OTHER_HOST_NAME
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
}
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
function setThisHostName {
pushd /etc
#
declare OLD_HOST_NAME=$(cat hostname)
hostname $THIS_HOST_NAME
cat > hostname <<EOF
$THIS_HOST_NAME
EOF
#
sed "s/$OLD_HOST_NAME/$THIS_HOST_NAME/" -i hosts
#
cat hostname | grep $THIS_HOST_NAME
cat hosts | grep $THIS_HOST_NAME
popd
#
echo This host now known as $MY_IP : $THIS_HOST_NAME
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
}
#
#
function createSSHUser {
#
export A_NEW_USER=$1
export NEW_USER_PWD=$2
#
echo New User is $A_NEW_USER identified by $NEW_USER_PWD
#
echo "Get ${A_NEW_USER} home directory .. . . . . . . . "
export A_NEW_USER_HOME=$( grep "${A_NEW_USER}" /etc/passwd | awk -F: '{print $6}' )
echo "New user's home directory is ${A_NEW_USER_HOME}"
#
if [ "XX${A_NEW_USER_HOME}" == "XX" ]; then
#
echo "Create admin group ............................................"
addgroup admin
#
echo "Create a full privileges admin user ..........................."
export PASS_HASH=$(perl -e 'print crypt($ARGV[0], "password")' "$NEW_USER_PWD")
echo ${PASS_HASH}
# addgroup sudo
useradd -Ds /bin/bash
useradd -m -G admin,sudo -p ${PASS_HASH} ${A_NEW_USER}
passwd -e ${A_NEW_USER}
#
A_NEW_USER_HOME=/home/${A_NEW_USER}
else
echo "The ${A_NEW_USER} user account is already configured in ${A_NEW_USER_HOME} . . . "
fi
#
echo "................................................................"
echo "Prepare for SSH tasks"
echo "................................................................"
export A_NEW_USER_SSH_DIR=${A_NEW_USER_HOME}/.ssh
mkdir -p ${A_NEW_USER_SSH_DIR}
#
pushd ${A_NEW_USER_SSH_DIR}
#
#
echo "................................................................"
echo "Generate SSH key pair for ${A_NEW_USER}"
echo "................................................................"
rm -f id_rsa*
ssh-keygen -f id_rsa -t rsa -N '' -C "${A_NEW_USER}@${A_NEW_USER}.me"
#
#
popd
#
echo "................................................................"
echo "Assign correct ownership ......................................"
echo "................................................................"
chown -R ${A_NEW_USER}:${A_NEW_USER} /home/${A_NEW_USER}
#
#
echo "................................................................"
echo "Here is ${A_NEW_USER}'s public key"
echo "................................................................"
echo " "
cat ${A_NEW_USER_SSH_DIR}/id_rsa.pub
echo " "
echo " "
echo " "
echo Done creating new user ${A_NEW_USER}
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
}
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
#function createBucardoDatabaseAndUsers {
#cat > createBucardoDatabaseAndUsers.sql <<EOF
#DROP DATABASE IF EXISTS $BUCARDO_DATABASE_NAME;
#CREATE DATABASE $BUCARDO_DATABASE_NAME;
#CREATE SCHEMA $BUCARDO_DATABASE_NAME;
#SET search_path TO $BUCARDO_DATABASE_NAME;
#DROP USER IF EXISTS $BUCARDO_SERVER_ADMIN_USER;
#CREATE USER $BUCARDO_SERVER_ADMIN_USER WITH PASSWORD '$ALL_PURPOSE_PWD';
#GRANT ALL PRIVILEGES ON DATABASE $THIS_DATABASE_NAME TO $BUCARDO_SERVER_ADMIN_USER;
#CREATE OR REPLACE LANGUAGE plpgsql;
#CREATE OR REPLACE LANGUAGE plperlu;
#EOF
#
# psql -U postgres -f createBucardoDatabaseAndUsers.sql
# echo Created data base $BUCARDO_DATABASE_NAME and user $BUCARDO_SERVER_ADMIN_USER
# echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
#}
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
function createTestDatabaseAndUsers {
cat > createTestDatabaseAndUsers.sql <<EOF
\set ON_ERROR_STOP off
SET client_min_messages = 'FATAL';
DROP DATABASE IF EXISTS $THIS_DATABASE_NAME;
DROP DATABASE IF EXISTS $OTHER_DATABASE_NAME;
DROP USER IF EXISTS bucardo;
CREATE USER bucardo WITH SUPERUSER PASSWORD '$ALL_PURPOSE_PWD';
\set ON_ERROR_STOP on
SET client_min_messages = 'WARNING';
CREATE DATABASE $THIS_DATABASE_NAME;
DROP USER IF EXISTS $THIS_SERVER_ADMIN_USER;
CREATE USER $THIS_SERVER_ADMIN_USER WITH PASSWORD '$ALL_PURPOSE_PWD';
GRANT ALL PRIVILEGES ON DATABASE $THIS_DATABASE_NAME TO $THIS_SERVER_ADMIN_USER;
GRANT ALL PRIVILEGES ON DATABASE $THIS_DATABASE_NAME TO bucardo;
CREATE OR REPLACE LANGUAGE plpgsql;
EOF
#
psql -U postgres -h $MY_IP -f createTestDatabaseAndUsers.sql
echo Created data base $THIS_DATABASE_NAME and user $THIS_SERVER_ADMIN_USER
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
}
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
function createTestDataSet {
#
cat > ddlTestDataSet.sql <<EOFDDL
\set ON_ERROR_STOP off
SET client_min_messages = 'FATAL';
DROP TABLE IF EXISTS director;
DROP TABLE IF EXISTS film;
DROP SEQUENCE IF EXISTS idxDirector;
DROP SEQUENCE IF EXISTS idxFilm;
\set ON_ERROR_STOP on
SET client_min_messages = 'WARNING';
CREATE SEQUENCE idxDirector
START 101
;
CREATE SEQUENCE idxFilm
START 1001
;
CREATE TABLE film (
code char(5) CONSTRAINT firstkey PRIMARY KEY DEFAULT nextval('idxFilm'),
title varchar(80) NOT NULL,
did integer NOT NULL,
date_prod date,
kind varchar(10),
len interval hour to minute
)
;
CREATE TABLE director (
did integer PRIMARY KEY DEFAULT nextval('idxDirector'),
name varchar(40) NOT NULL CHECK (name <> '')
)
;
EOFDDL
#
echo "Executing - - - psql -d $THIS_DATABASE_NAME -U postgres -h $MY_IP -f ddlTestDataSet.sql"
psql -d $THIS_DATABASE_NAME -U postgres -h $MY_IP -f ddlTestDataSet.sql
echo Created test schema in $THIS_DATABASE_NAME
#
if [ "XX$THIS_HOST_TYPE" == "XX$PRMRY" ]
then
echo Primary database will be empty until replication begins
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
else
cat > dmlTestDataSet.sql <<EOFDML
INSERT INTO director (name) VALUES ('Howard Deutch');
INSERT INTO director (name) VALUES ('John Hughes');
INSERT INTO director (name) VALUES ('Christine Jeffs');
INSERT INTO director (name) VALUES ('Thomas McCarthy');
INSERT INTO director (name) VALUES ('Bruce Beresford');
INSERT INTO director (name) VALUES ('Norman Jewison');
INSERT INTO film (title, did, date_prod, kind, len)
select 'Pretty in Pink', did, '1986-02-28', 'Romance', interval '96 minutes' from director where name='Howard Deutch';
INSERT INTO film (title, did, date_prod, kind, len)
select 'The Breakfast Club', did, '1985-02-15', 'Comedy', interval '97 minutes' from director where name='John Hughes';
INSERT INTO film (title, did, date_prod, kind, len)
select 'Ferris Bueller''s Day Off', did, '1986-06-11', 'Comedy', interval '103 minutes' from director where name='John Hughes';
INSERT INTO film (title, did, date_prod, kind, len)
select 'Sunshine Cleaning', did, '2009-03-27', 'Comedy', interval '91 minutes' from director where name='Christine Jeffs';
INSERT INTO film (title, did, date_prod, kind, len)
select 'The Station Agent', did, '2003-12-05', 'Comedy', interval '89 minutes' from director where name='Thomas McCarthy';
INSERT INTO film (title, did, date_prod, kind, len)
select 'Driving Miss Daisy', did, '1989-12-15', 'Comedy', interval '99 minutes' from director where name='Bruce Beresford';
INSERT INTO film (title, did, date_prod, kind, len)
select 'The Russians Are Coming the Russians Are Coming', did, '1966-05-25', 'Comedy', interval '99 minutes' from director where name='Norman Jewison';
INSERT INTO film (title, did, date_prod, kind, len)
select 'In the Heat of the Night', did, '1967-10-14', 'Drama', interval '109 minutes' from director where name='Norman Jewison';
select name, title, len from director d, film f where d.did = f.did;
EOFDML
#
#
psql -d $THIS_DATABASE_NAME -U postgres -h $MY_IP -f dmlTestDataSet.sql
echo Created test data in $THIS_DATABASE_NAME
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
fi
}
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
function createPgPassFile {
#
cat > .pgpass <<EOF
*:*:*:$THIS_SERVER_ADMIN_USER:$ALL_PURPOSE_PWD
*:*:*:$BUCARDO_SERVER_ADMIN_USER:$ALL_PURPOSE_PWD
*:*:*:$OPENERP_USER_NAME:$ALL_PURPOSE_PWD
*:*:*:postgres:$ALL_PURPOSE_PWD
EOF
#
chmod 600 .pgpass
#
cp .pgpass ~
cp .pgpass /root
cp .pgpass /var/lib/postgresql
#
echo Created a .pgpass file in directories ~, /root and /var/lib/postgresql
cat .pgpass
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
}
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
function allowTcpIpAccess {
#
sed "s|$PG_LISTEN_BLOCKED|$PG_LISTEN_OPEN|" -i $PG_CONFIG_FILE
sed "s|$PG_LISTEN_SRCH|$PG_LISTEN_RPLC|" -i $PG_CONFIG_FILE
#
echo Enabled tcp/ip in $PG_CONFIG_FILE
cat $PG_CONFIG_FILE | grep $PG_LISTEN_OPEN
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
}
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
function instantiateBucardoDatabaseSchema {
#
cat > cleanUpBucardo.sql <<EOF
\set ON_ERROR_STOP off
SET client_min_messages = 'FATAL';
DROP SCHEMA $BUCARDO_DATABASE_NAME CASCADE;
DROP DATABASE IF EXISTS $BUCARDO_DATABASE_NAME;
DROP USER $BUCARDO_SERVER_ADMIN_USER;
\set ON_ERROR_STOP on
EOF
#
psql -U postgres -h $MY_IP -f ./cleanUpBucardo.sql
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
if [ "XX$THIS_HOST_TYPE" == "XX$PRMRY" ]
then
psql -U postgres -h $MY_IP -f ../installers/bucardo/bucardo.schema
#
psql -U postgres -h $MY_IP -c "ALTER USER $BUCARDO_SERVER_ADMIN_USER WITH ENCRYPTED PASSWORD '$ALL_PURPOSE_PWD';"
psql -U postgres -h $MY_IP -d bucardo -c "UPDATE bucardo_config SET setting='/run' WHERE name='piddir';"
mkdir -p /var/log/bucardo
touch /var/log/bucardo/log.bucardo
echo Bucardo database schema has been instantiated
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
else
echo Only the primary server needs to have Bucardo installed.
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
fi
#
}
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
function installOpenErpIfNecessary {
declare OPENERP_INSTALLED_ALREADY=$(aptitude show openerp | grep -c "State: installed")
if [ $OPENERP_INSTALLED_ALREADY -lt 1 ]
then
echo Will install OpenERP now.
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
echo " . . . . . . . . . . update and upgrade . . . . . . . . . . . . "
aptitude -y update
aptitude -y upgrade
#
echo " . . . . . . . . . install python extras. . . . . . . . . . . . "
aptitude -y install python-webdav python-vobject python-vatnumber
echo " . . . . . . . . . tz reportlab dateutil . . . . . . . . . . . "
aptitude -y install python-tz python-reportlab python-dateutil
echo " . . . . . . . feedparser gdata ldap. . . . . . . . . . . . . . "
aptitude -y install python-feedparser python-gdata python-ldap
echo " . . . . . . . libxslt1 lxml mako simplejson. . . . . . . . . . "
aptitude -y install python-libxslt1 python-lxml python-mako python-simplejson
echo " . . . . . . . . . openid psycopg2 pybabel. . . . . . . . . . . "
aptitude -y install python-openid python-psycopg2 python-pybabel
echo " . . . . . . . . . zsi yaml xlwt werkzeug . . . . . . . . . . . "
aptitude -y install python-zsi python-yaml python-xlwt python-werkzeug
echo " . . . . . . . . . pychart pydot pyparsing . . . . . . . . . . "
aptitude -y install python-pychart python-pydot python-pyparsing
echo " . . . . . . . . . . . postgresql client . . . . . . . . . . . "
aptitude -y install postgresql-client
#
echo " . . . . . . . . . . install I18N extras . . . . . . . . . . . "
aptitude -y install language-pack-gnome-es-base
#
echo " . . . . . . . . . update and upgrade again . . . . . . . . . . "
aptitude -y update
aptitude -y upgrade
#
echo " . . . work outside this directory 'coz it'll get deleted . . . "
mkdir -p ../installers
pushd ../installers
#
echo " . . . . . . . . download OpenERP installer . . . . . . . . . . "
wget -c http://nightly.openerp.com/6.1/releases/openerp_6.1-latest-1_all.deb
#
echo " . . . . . . . . . . . install OpenERP . . . . . . . . . . . . "
dpkg -i openerp_6.1-latest-1_all.deb
#
popd
#
fi
#
echo OpenERP is Installed
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
}
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
function instantiateOpenErpDatabaseSchema {
echo " . . Make the command files for instantiating an OpenERP user and database . . "
#
declare DUMP_FILE=$THIS_OPENERP_DB_NAME".dump"
#
cat > cleanOpenErpDatabases.sql <<EOFCOED
\set ON_ERROR_STOP off
SET client_min_messages = 'FATAL';
SELECT pg_terminate_backend(pg_stat_activity.procpid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '$OPENERP_DB_NAME';
DROP DATABASE IF EXISTS $OPENERP_DB_NAME;
SELECT pg_terminate_backend(pg_stat_activity.procpid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '$THIS_OPENERP_DB_NAME';
DROP DATABASE IF EXISTS $THIS_OPENERP_DB_NAME;
SELECT pg_terminate_backend(pg_stat_activity.procpid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '$OTHER_OPENERP_DB_NAME';
DROP DATABASE IF EXISTS $OTHER_OPENERP_DB_NAME;
DROP USER IF EXISTS $OPENERP_USER_NAME;
\set ON_ERROR_STOP on
SET client_min_messages = 'WARNING';
EOFCOED
#
cat > createOpenErpUser.sql <<EOFCOEU
CREATE USER $OPENERP_USER_NAME WITH SUPERUSER PASSWORD '$ALL_PURPOSE_PWD';
EOFCOEU
#
echo " . . . . . . Get an empty initialized OpenERP database . . . . . . . . "
mkdir -p ../installers
pushd ../installers
if [ -f $DUMP_FILE ]
then
echo "No need to get one. Already downloaded."
else
wget -O tmp.tar.gz https://gist.github.com/4400284/download
tar zvfx tmp.tar.gz
mv gist* tmp
mv ./tmp/OpenErpBlankDatabaseDump $DUMP_FILE
rm -f tmp
fi
sed -i "s/usropenerp/$OPENERP_USER_NAME/g" $DUMP_FILE
sed -i "s/erp_db_backoffice/$THIS_OPENERP_DB_NAME/g" $DUMP_FILE
popd
#
echo " . . . . . . Make an OpenERP user and database . . . . . . . . "
#
psql -U postgres -h $MY_IP -f cleanOpenErpDatabases.sql
psql -U postgres -h $MY_IP -f createOpenErpUser.sql
psql -U postgres -h $MY_IP -f ../installers/$DUMP_FILE
psql -U postgres -h $MY_IP -d $THIS_OPENERP_DB_NAME -c "ALTER TABLE wkf_witm_trans ADD PRIMARY KEY (trans_id, inst_id);"
psql -U postgres -h 192.168.122.33 -d erp_db_backoffice -c
echo Created database $OPENERP_DB_NAME and user $OPENERP_USER_NAME
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
echo " . . . Make the OpenERP database access configuration file . . "
cat > openerp-server.conf <<EOF
[options]
; This is the password that allows database operations:
; admin_passwd = admin
db_host = $MY_IP
db_port = 5432
db_user = $OPENERP_USER_NAME
db_password = $ALL_PURPOSE_PWD
EOF
#
echo " . . . . . . . Place the configuration file . . . . . . . . . "
mkdir -p /etc/openerp/
cp openerp-server.conf /etc/openerp/
echo Configured OpenERP database access
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
}
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
function installAndBuildBucardoIfNecessary {
#
declare GIT_INSTALLED_ALREADY=$(aptitude show git | grep -c "State: installed")
if [ $GIT_INSTALLED_ALREADY -lt 1 ]
then
echo Install Git
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
aptitude -y install git
fi
#
echo Git is installed
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
#
mkdir -p ../installers
pushd ../installers
if [ -e ./bucardo/Makefile.PL ]
then
echo Got $( cat ./bucardo/META.yml | grep "version :" )
else
echo Get Bucardo
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
git clone git://bucardo.org/bucardo.git
fi
#
echo Bucardo has been cloned from bucardo.org
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
pushd bucardo
perl Makefile.PL
make
make install
popd
#
popd
#
}
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
declare MARKER="IPv4 local connections:"
declare POSTGRES_HOST=" all postgres "
declare POSTGRES_LOCAL="local$POSTGRES_HOST "
#
function openAccessToPostgresUser {
declare POSTGRES_REMOTE_SRV="host $POSTGRES_HOST$OTHER_MACHINEZ_IP_ADDRESS/32 "
declare POSTGRES_THIS_SRV="host $POSTGRES_HOST$MY_IP/32 "
declare AUTH_TYPE=md5
declare DONE_ALREADY=$(cat $PG_HBA_FILE | grep -c "host.*all.*postgres.*$OTHER_MACHINEZ_IP_ADDRESS/32.*$AUTH_TYPE")
if [ $DONE_ALREADY -lt 1 ]
then
sed -i "/$MARKER/a $POSTGRES_REMOTE_SRV$AUTH_TYPE" $PG_HBA_FILE
sed -i "/$MARKER/a $POSTGRES_THIS_SRV$AUTH_TYPE" $PG_HBA_FILE
restartPostgres
echo Postgres has been afforded $AUTH_TYPE access
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
else
echo Postgres has $AUTH_TYPE access
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
fi
}
#
function openAccessToOpenErpUser {
declare OPENERP_HOST=" all usropenerp "
declare OPENERP_LOCAL="local$OPENERP_HOST "
declare OPENERP_THIS_SRV="host $OPENERP_HOST$MY_IP/32 "
declare AUTH_TYPE=md5
declare DONE_ALREADY=$(cat $PG_HBA_FILE | grep -c "host.*all.*openerp.*$MY_IP/32.*$AUTH_TYPE")
if [ $DONE_ALREADY -lt 1 ]
then
sed -i "/$MARKER/a $OPENERP_THIS_SRV$AUTH_TYPE" $PG_HBA_FILE
echo Openerp has been afforded $AUTH_TYPE access
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
else
echo Openerp has $AUTH_TYPE access
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
fi
#
}
#
function openAccessToBucardoUser {
declare BUCARDO_HOST=" all $BUCARDO_SERVER_ADMIN_USER "
declare BUCARDO_LOCAL="local$BUCARDO_HOST "
#
declare BUCARDO_REMOTE_SRV="host $BUCARDO_HOST$OTHER_MACHINEZ_IP_ADDRESS/32 "
declare BUCARDO_THIS_SRV="host $BUCARDO_HOST$MY_IP/32 "
declare AUTH_TYPE=md5
declare DONE_ALREADY=$(cat $PG_HBA_FILE | grep -c "host.*all.*bucardo.*$OTHER_MACHINEZ_IP_ADDRESS/32.*$AUTH_TYPE")
if [ $DONE_ALREADY -lt 1 ]
then
sed -i "/$MARKER/a $BUCARDO_REMOTE_SRV$AUTH_TYPE" $PG_HBA_FILE
sed -i "/$MARKER/a $BUCARDO_THIS_SRV$AUTH_TYPE" $PG_HBA_FILE
echo Bucardo has been afforded $AUTH_TYPE access
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
else
echo Bucardo has $AUTH_TYPE access
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
fi
#
declare AUTH_TYPE=peer
declare DONE_ALREADY=$(cat $PG_HBA_FILE | grep -c "local.*all.*bucardo.*$AUTH_TYPE")
if [ $DONE_ALREADY -lt 1 ]
then
sed -i "/$MARKER/a $BUCARDO_LOCAL$AUTH_TYPE" $PG_HBA_FILE
echo Bucardo has been afforded $AUTH_TYPE access
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
else
echo Bucardo has $AUTH_TYPE access
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
fi
}
#
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
function createBucardoTestSet {
#
HERD=$BUCARDO_REMOTE_MASTER_SERVER_NAME"2"$BUCARDO_LOCAL_MASTER_SERVER_NAME
HERD_NAME=herd$HERD
DATABASE_GROUP_NAME=grp$HERD
SYNC_NAME=sync$HERD
if [ "XX$THIS_HOST_TYPE" == "XX$PRMRY" ]
then
declare BUCARDO_ADD_OPTIONS="-d bucardo -U postgres -P $ALL_PURPOSE_PWD -h $MY_IP add"
cat > createBucardoTestSet.sql <<EOF
DELETE FROM dbgroup;
DELETE FROM dbmap;
DELETE FROM goat;
DELETE FROM herdmap;
DELETE FROM sync;
DELETE FROM herd;
DELETE FROM db;
EOF
# INSERT INTO db(name, dbname, dbhost, dbuser, dbpass) VALUES ('backOffice','erpbackoffice','192.168.122.178','bucardo', '$ALL_PURPOSE_PWD');
# INSERT INTO db(name, dbname, dbhost, dbuser, dbpass) VALUES ('shop','erpwebshop','192.168.122.131','bucardo', '$ALL_PURPOSE_PWD');
# INSERT INTO dbgroup(name) VALUES ('$HERD_NAME');
# INSERT INTO dbmap(db, dbgroup) VALUES ('backOffice','$HERD_NAME');
# INSERT INTO dbmap(db, dbgroup) VALUES ('shop','$HERD_NAME');
# INSERT INTO goat(db, schemaname, tablename, conflict_strategy) VALUES ('shop', 'public', 'film', 'source');
# INSERT INTO goat(db, schemaname, tablename, conflict_strategy) VALUES ('shop', 'public', 'director', 'source');
# INSERT INTO herd(name) VALUES ('ERP_HERD');
# INSERT INTO herdmap(herd, goat) SELECT 'ERP_HERD', id FROM goat;
# INSERT INTO sync(name, source, targetdb, synctype, checktime) VALUES ('shop','ERP_HERD','backOffice','swap','10 minutes');
#
cat > checkBucardoTestSet.sql <<EOF
\connect bucardo
SELECT 'db' as "The Table", name, dbname, dbhost, dbuser, dbpass FROM db;
SELECT 'dbgroup' as "The Table", name FROM dbgroup;
SELECT 'dbmap' as "The Table", db, dbgroup FROM dbmap;
SELECT 'goat' as "The Table", id, db, schemaname, tablename, conflict_strategy FROM goat;
SELECT 'herd' as "The Table", name FROM herd;
SELECT 'herdmap' as "The Table", herd, goat FROM herdmap;
SELECT 'sync' as "The Table", name, herd, dbs, conflict_strategy as strtgy, onetimecopy, status FROM sync;
\connect dbbackoffice
SELECT d.name, f.title, f.kind FROM director d, film f WHERE f.did = d.did;
EOF
#
#
psql -h $MY_IP -d $BUCARDO_DATABASE_NAME -U $BUCARDO_SERVER_ADMIN_USER -f createBucardoTestSet.sql
#
bucardo $BUCARDO_ADD_OPTIONS db $PRIMARY_DATABASE_NAME \
dbname=$PRIMARY_DATABASE_NAME \
host=$MY_IP \
user=$BUCARDO_SERVER_ADMIN_USER \
pass=$ALL_PURPOSE_PWD
#
echo "bucardo $BUCARDO_ADD_OPTIONS db $SECONDARY_DATABASE_NAME dbname=$SECONDARY_DATABASE_NAME host=$OTHER_MACHINEZ_IP_ADDRESS user=$BUCARDO_SERVER_ADMIN_USER pass=$ALL_PURPOSE_PWD"
#
bucardo $BUCARDO_ADD_OPTIONS db $SECONDARY_DATABASE_NAME \
dbname=$SECONDARY_DATABASE_NAME \
host=$OTHER_MACHINEZ_IP_ADDRESS \
user=$BUCARDO_SERVER_ADMIN_USER \
pass=$ALL_PURPOSE_PWD
#
bucardo -d bucardo -U postgres -P $ALL_PURPOSE_PWD -h $MY_IP add table director db=$SECONDARY_DATABASE_NAME relgroup=$HERD_NAME
bucardo -d bucardo -U postgres -P $ALL_PURPOSE_PWD -h $MY_IP add table film db=$SECONDARY_DATABASE_NAME relgroup=$HERD_NAME
bucardo -d bucardo -U postgres -P $ALL_PURPOSE_PWD -h $MY_IP add dbgroup $DATABASE_GROUP_NAME $SECONDARY_DATABASE_NAME:source $PRIMARY_DATABASE_NAME:target
bucardo -d bucardo -U postgres -P $ALL_PURPOSE_PWD -h $MY_IP add sync $SYNC_NAME dbs=$DATABASE_GROUP_NAME relgroup=$HERD_NAME status=active onetimecopy=2
#
psql -h $MY_IP -d $BUCARDO_DATABASE_NAME -U $BUCARDO_SERVER_ADMIN_USER -f checkBucardoTestSet.sql > status.txt
cat status.txt
#
echo Created Bucardo test rig in $BUCARDO_DATABASE_NAME
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
fi
}
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
function restartBucardo {
#
if [ "XX$THIS_HOST_TYPE" == "XX$PRMRY" ]
then
echo " . . . . restartBucardo . . . "
cat /dev/null > /var/log/bucardo/log.bucardo
bucardo -d bucardo -U postgres -P $ALL_PURPOSE_PWD -h $MY_IP stop
sleep 10
rm -f /run/bucard*.pid
bucardo -d bucardo -U postgres -P $ALL_PURPOSE_PWD -h $MY_IP start
#
fi
}
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
function createOpenErpTestSet {
HERD=ERP_$BUCARDO_REMOTE_MASTER_SERVER_NAME"2"$BUCARDO_LOCAL_MASTER_SERVER_NAME
HERD_NAME=herd$HERD
DATABASE_GROUP_NAME=grp$HERD
SYNC_NAME=sync$HERD
#
BUCARDO_ADD_OPTIONS="-d bucardo -U postgres -P $ALL_PURPOSE_PWD -h $MY_IP add"
TARGET_HERD="db=$OTHER_OPENERP_DB_NAME relgroup=$HERD_NAME"
#
echo "This host is of type $THIS_HOST_TYPE"
if [ "XX$THIS_HOST_TYPE" == "XX$PRMRY" ]
then
echo "Preparing Bucardo for OpenERP!"
#
cat > getOpenErpTableAdditionCommands.sql <<EOFERP
SELECT 'bucardo $BUCARDO_ADD_OPTIONS table ' || tablename || ' $TARGET_HERD' from pg_tables where tableowner = 'usropenerp' AND schemaname = 'public';
EOFERP
#
cat > initOpenErpReplication.sh <<EOFINIT
bucardo $BUCARDO_ADD_OPTIONS db $THIS_OPENERP_DB_NAME dbname=$THIS_OPENERP_DB_NAME host=$MY_IP user=$BUCARDO_SERVER_ADMIN_USER pass=$ALL_PURPOSE_PWD
bucardo $BUCARDO_ADD_OPTIONS db $OTHER_OPENERP_DB_NAME dbname=$OTHER_OPENERP_DB_NAME host=$OTHER_MACHINEZ_IP_ADDRESS user=$BUCARDO_SERVER_ADMIN_USER pass=$ALL_PURPOSE_PWD
EOFINIT
#
# psql -t -h $OTHER_MACHINEZ_IP_ADDRESS -d $OTHER_OPENERP_DB_NAME -U postgres -f ./getOpenErpTableAdditionCommands.sql >> initOpenErpReplication.sh
#
#
echo "bucardo $BUCARDO_ADD_OPTIONS dbgroup $DATABASE_GROUP_NAME $OTHER_OPENERP_DB_NAME:source $THIS_OPENERP_DB_NAME:target" >> initOpenErpReplication.sh
echo "bucardo $BUCARDO_ADD_OPTIONS sync $SYNC_NAME dbs=$DATABASE_GROUP_NAME relgroup=$HERD_NAME status=active onetimecopy=2" >> initOpenErpReplication.sh
#
chmod a+x initOpenErpReplication.sh
echo Created Bucardo test rig in $BUCARDO_DATABASE_NAME
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
fi
}
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
function quit {
exit
}
#
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
function e {
echo $1
}
#
#
# ################### ################### ###################
#
# This is where the actual work happens
#
# ################### ################### ###################
#
echo "
Starting "
#
# setPeerAccessToAllRoles
# exit 0
#
echo " . . . . . parseOptions. . . . "
parseOptions
#
echo " . . . installPostgresIfNecessary . . "
installPostgresIfNecessary
echo " . . . installAndBuildBucardoIfNecessary . "
installAndBuildBucardoIfNecessary
echo " . . . setPasswordForThePostgresRole . . "
setPasswordForThePostgresRole
echo " . . . . createPgPassFile . . . "
createPgPassFile
echo " . . . . allowTcpIpAccess . . . "
allowTcpIpAccess
echo " . . . . . . . . . . . "
# ##
echo " . . . setMd5passwordAccessToPostgresRole . "
setMd5passwordAccessToPostgresRole
echo " . . . . openAccessToBucardoUser . . "
openAccessToBucardoUser
echo " . . . . . . . . . . . "
#
echo " . . . . setThisHostName . . . . "
setThisHostName
echo " . . . . setOtherHostName . . . . "
setOtherHostName
echo " . . . . restartNetworking . . . . "
restartNetworking
echo " . . . . . . . . . . . "
#
echo " . . . openAccessToPostgresUser . . . "
openAccessToPostgresUser
echo " . . . installOpenErpIfNecessary . . "
installOpenErpIfNecessary
echo " . . instantiateOpenErpDatabaseSchema . . "
instantiateOpenErpDatabaseSchema
echo " . . . openAccessToOpenErpUser . . . "
openAccessToOpenErpUser
echo " . . . . restartOpenerp . . . . "
restartOpenerp
#
echo " . . . createTestDatabaseAndUsers . . "
createTestDatabaseAndUsers
echo " . . . . createTestDataSet . . . . "
createTestDataSet
echo " . . . . . . . . . . . "
#
echo " . . . setTrustAccessToAllRoles . . . "
setTrustAccessToAllRoles
#
#
echo " . . instantiateBucardoDatabaseSchema . . "
instantiateBucardoDatabaseSchema
echo " . . . . createBucardoTestSet . . . "
# createBucardoTestSet
echo " . . . setPeerAccessToAllRoles . . . "
setPeerAccessToAllRoles
echo " . . . . . . . . . . . "
#
echo " . . . . createOpenErpTestSet . . . "
createOpenErpTestSet
echo Clean up before exit
echo "- - - - - - - Clean up before exit - - - - - - - -"
# ##
echo " . . . setPeerAccessToPostgresRole . . . "
setPeerAccessToPostgresRole
##
echo " # # # # # # # # # # # # # # # # # # # # # # # # "
#
#
#
if [ $GOT_ARGS -lt 1 ]
then
echo "
In future you can use this command to avoid all the questions:"
echo "bash $THIS_FILE \\"
echo "--ipbh $THIS_HOST_TYPE \\"
echo "--this $THIS_HOST_NAME \\"
# echo "--tsau $THIS_SERVER_ADMIN_USER \\"
# echo "--bdbn $BUCARDO_DATABASE_NAME \\"
echo "--othr $OTHER_HOST_NAME \\"
echo "--ohia $OTHER_MACHINEZ_IP_ADDRESS \\"
# echo "--pdbn $PRIMARY_DATABASE_NAME \\"
# echo "--sdbn $SECONDARY_DATABASE_NAME \\"
# echo "--bsau $BUCARDO_SERVER_ADMIN_USER \\"
echo "--appw $ALL_PURPOSE_PWD"
#
fi
#
if [ "XX$THIS_HOST_TYPE" == "XX$PRMRY" ]
then
echo "
A command to examine database contents:"
echo "sudo psql -d bucardo -U postgres -h $MY_IP -f ./checkBucardoTestSet.sql"
echo "
These are the available commands to stop and start bucardo:"
echo "bucardo -d bucardo -U postgres -P $ALL_PURPOSE_PWD -h $MY_IP stop"
echo "bucardo -d bucardo -U postgres -P $ALL_PURPOSE_PWD -h $MY_IP start"
fi
#
#
# . . . . restartBucardo . . . "
restartBucardo
#
#
# #############
exit 0
# ################################################################################
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment