Last active
August 29, 2015 14:14
-
-
Save snaga/de48c014eaa4a8791c76 to your computer and use it in GitHub Desktop.
install_pgxl.sh
This file contains hidden or 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/sh | |
| # install_pgxl.sh | |
| # | |
| # Copyright(c) 2015 Uptime Technologies, LLC. | |
| PGXL_HOME=/opt/uptime/pgxl | |
| PGXL_DATA=/var/lib/pgxl | |
| PGXC_CTL_HOME=${PGXL_DATA}/pgxc_ctl | |
| export PGXL_HOME PGXL_DATA PGXC_CTL_HOME | |
| LD_LIBRARY_PATH=${PGXL_HOME}/lib | |
| PATH=${PGXL_HOME}/bin:$PATH | |
| export LD_LIBRARY_PATH PATH | |
| function create_user_and_ssh_config() | |
| { | |
| adduser pgxl | |
| if [ ! -d ~pgxl/.ssh ]; then | |
| mkdir -p ~pgxl/.ssh | |
| chmod 700 ~pgxl/.ssh | |
| fi | |
| # config ssh to allow no-password login. | |
| if [ ! -f ~pgxl/.ssh/id_rsa ]; then | |
| ssh-keygen -t rsa -f ~pgxl/.ssh/id_rsa -N "" | |
| fi | |
| chown -R pgxl:pgxl ~pgxl/.ssh | |
| /bin/cp ~pgxl/.ssh/id_rsa.pub ~pgxl/.ssh/authorized_keys | |
| chown -R pgxl:pgxl ~pgxl/.ssh | |
| ls -la ~pgxl/.ssh/ | |
| # add pgxl settings to .bash_profile | |
| if [ ! -f ~pgxl/.bash_profile.orig ]; then | |
| # take a backup for original file. | |
| cp ~pgxl/.bash_profile ~pgxl/.bash_profile.orig | |
| else | |
| # restore the original file. | |
| cp ~pgxl/.bash_profile.orig ~pgxl/.bash_profile | |
| fi; | |
| cat <<EOF >> ~pgxl/.bash_profile | |
| # PGXL | |
| LD_LIBRARY_PATH=${PGXL_HOME}/lib | |
| PATH=${PGXL_HOME}/bin:$PATH | |
| export LD_LIBRARY_PATH PATH | |
| PGXC_CTL_HOME=${PGXC_CTL_HOME} | |
| export PGXC_CTL_HOME | |
| EOF | |
| chown pgxl:pgxl ~pgxl/.bash_profile | |
| } | |
| function download_and_extract() | |
| { | |
| # Convert '/' char into '-' in the branch name. | |
| SUFFIX=`echo $PGXL_BRANCH | sed 's/\//-/'` | |
| wget https://codeload.github.com/snaga/postgres-xl/zip/${PGXL_BRANCH} | |
| OUTFILE=`basename $PGXL_BRANCH` | |
| if [ ! -f $OUTFILE ]; then | |
| echo "ERROR: Failed to download $OUTFILE branch from github. Abort." | |
| exit 1 | |
| fi | |
| mv $OUTFILE $OUTFILE.zip | |
| unzip $OUTFILE.zip | |
| rm -rf postgres-xl | |
| mv postgres-xl-${SUFFIX} postgres-xl | |
| } | |
| CONTRIB_MODULES="pgxc_clean pgxc_ctl pgxc_ddl pgxc_monitor" | |
| function get_num_disks() | |
| { | |
| NUM_DISKS=$# | |
| } | |
| function _build_all() | |
| { | |
| get_num_disks $PGXL_DISKS | |
| ./configure --prefix=${PGXL_HOME} --enable-debug | |
| make -j $NUM_DISKS | |
| for c in $CONTRIB_MODULES; do | |
| pushd contrib/$c; make -j $NUM_DISKS; popd | |
| done; | |
| } | |
| function _install_all() | |
| { | |
| sudo rm -rf ${PGXL_HOME} | |
| sudo make install | |
| for c in $CONTRIB_MODULES; do | |
| pushd contrib/$c; sudo make install; popd | |
| done; | |
| } | |
| function build_and_install() | |
| { | |
| _build_all | |
| _install_all | |
| } | |
| function delete_and_create_directory() | |
| { | |
| d=$1 | |
| echo deleting in $d | |
| rm -rf $d/* | |
| echo creating $d | |
| mkdir -p $d | |
| chown -R pgxl:pgxl $d | |
| } | |
| function stop_and_cleanup() | |
| { | |
| echo terminating postgres and gtm processes. | |
| killall -9 postgres gtm | |
| sleep 3 | |
| delete_and_create_directory ${PGXL_DATA}/gtm | |
| delete_and_create_directory ${PGXL_DATA}/coord | |
| for d in "$@"; do | |
| delete_and_create_directory $d | |
| done; | |
| delete_and_create_directory $PGXC_CTL_HOME | |
| } | |
| function init_all() | |
| { | |
| sudo -u pgxl cp -v $1 ${PGXC_CTL_HOME}/pgxc_ctl.conf | |
| sudo -u pgxl ${PGXL_HOME}/bin/pgxc_ctl --home $PGXC_CTL_HOME init all | |
| } | |
| function create_pgxc_ctl_conf() | |
| { | |
| TEMPLATE=$1 | |
| shift | |
| OUTPUT=$1 | |
| shift | |
| # Directories for GTM and coordinator nodes | |
| firstdatadir=$1 | |
| i=1 | |
| while [ $i -le $NUM_NODES ]; do | |
| name="data$i" | |
| port=`expr 20007 + $i` | |
| poolerport=`expr 21001 + $i` | |
| datanodeNames="$datanodeNames $name" | |
| datanodePorts="$datanodePorts $port" | |
| datanodePoolerPorts="$datanodePoolerPorts $poolerport" | |
| datanodeMasterServers="$datanodeMasterServers 127.0.0.1" | |
| dir=$1 | |
| datanodeMasterDirs="$datanodeMasterDirs $dir" | |
| shift | |
| datanodeMaxWALSenders="\$datanodeMaxWALSenders $datanodeMaxWALSenders" | |
| i=`expr $i + 1` | |
| done; | |
| datanodeNames=`echo $datanodeNames | sed 's/^ //'` | |
| datanodePorts=`echo $datanodePorts | sed 's/^ //'` | |
| datanodePoolerPorts=`echo $datanodePoolerPorts | sed 's/^ //'` | |
| datanodeMasterServers=`echo $datanodeMasterServers | sed 's/^ //'` | |
| datanodeMasterDirs=`echo $datanodeMasterDirs | sed 's/^ //'` | |
| datanodeMaxWALSenders=`echo $datanodeMaxWALSenders | sed 's/^ //'` | |
| # Directories for GTM and coordinator nodes | |
| gtmMasterDir=${PGXL_DATA}/gtm | |
| coordMasterDir=${PGXL_DATA}/coord | |
| cat $TEMPLATE \ | |
| | sed "s,__gtmMasterDir__,$gtmMasterDir," \ | |
| | sed "s,__coordMasterDir__,$coordMasterDir," \ | |
| | sed "s,__datanodeNames__,$datanodeNames," \ | |
| | sed "s,__datanodePorts__,$datanodePorts," \ | |
| | sed "s,__datanodePoolerPorts__,$datanodePoolerPorts," \ | |
| | sed "s,__datanodeMasterServers__,$datanodeMasterServers," \ | |
| | sed "s,__datanodeMasterDirs__,$datanodeMasterDirs," \ | |
| | sed "s,__datanodeMaxWALSenders__,$datanodeMaxWALSenders," \ | |
| > $OUTPUT | |
| diff -rc $TEMPLATE $OUTPUT | |
| } | |
| function setup() | |
| { | |
| NUM_NODES=$# | |
| echo "Number of nodes: $NUM_NODES" | |
| stop_and_cleanup $@ | |
| curl https://gist.githubusercontent.com/snaga/afac9528e629a2eb2e35/raw > /tmp/pgxc_ctl.conf.template | |
| create_pgxc_ctl_conf /tmp/pgxc_ctl.conf.template /tmp/pgxc_ctl.conf $@ | |
| init_all /tmp/pgxc_ctl.conf | |
| } | |
| if [ -z "$PGXL_BRANCH" ]; then | |
| PGXL_BRANCH=develop | |
| export PGXL_BRANCH | |
| fi | |
| if [ -z "$PGXL_DISKS" ]; then | |
| PGXL_DISKS=/var/lib/pgxl/data1 | |
| export PGXL_DISKS | |
| fi | |
| create_user_and_ssh_config | |
| download_and_extract | |
| cd postgres-xl | |
| build_and_install | |
| setup $PGXL_DISKS |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment