Last active
August 3, 2018 09:03
-
-
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 * * *
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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