# Copyright 1999-2008 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Id: $ inherit path-manipulation output DESCRIPTION="Manage postgresql slots" MAINTAINER="root@localhost" SVN_DATE='$Date: $' VERSION=$(svn_date_to_version "${SVN_DATE}" ) ### list action ## {{{ list stuff describe_list() { echo "List available postgresql installations" } do_list() { write_list_start "Available postgresql installations" for s in /etc/eselect/postgresql/slots/* ; do [[ -d "$s" ]] || continue; local slot=$(basename $s) local postgres_ebuilds="" for src in ${s}/* ; do source "$src" done local kw="${slot}" if [[ "$(canonicalise /etc/eselect/postgresql/active)" = "$(canonicalise ${s})" ]] ; then kw="$kw <-*" fi if [[ "$(canonicalise /etc/eselect/postgresql/service)" = "$(canonicalise ${s})" ]] ; then kw="$kw <-S" fi write_kv_list_entry "${kw}" "${postgres_ebuilds//postgresql-/}" done } ## }}} ### show action ## {{{ describe_show() { echo "Show currently selected PostgreSQL installation" } do_show() { if [[ -r "/etc/eselect/postgresql/active" ]] ; then local bn=$(basename $(canonicalise /etc/eselect/postgresql/active)) local slot=${bn} echo "${slot}" else echo "(none)" fi } ## }}} ### show-all action ## {{{ describe_show-all() { echo "Show currently selected PostgreSQL service" } do_show-all() { echo "Utilities: $(do_show)" echo "Service: $(do_show-service)" } ## }}} # show-service action ## {{{ describe_show-service() { echo "Show currently selected postgresql server" } do_show-service() { if [[ -r "/etc/eselect/postgresql/service" ]] ; then local bn=$(basename $(canonicalise /etc/eselect/postgresql/service)) local slot=${bn} echo "${slot}" else echo "(none)" fi } ## }}} ### set action ## {{{ describe_set() { echo "Set active postgresql installation" } do_set() { local alibdir='/usr/lib/' [[ ${#@} -ne 1 ]] && die -q "Only one parameter is expected" local slotdir="/etc/eselect/postgresql/slots/${1}" [[ -d "${slotdir}" ]] || die -q "No such version installed" do_reset unset postgres_symlinks unset postgres_bindir for src in ${slotdir}/* ; do [[ -f "${src}" ]] && source ${src} done local pgconfig="${postgres_bindir}/pg_config" [[ -x "${pgconfig}" ]] || die -q "Broken install: no pg_config found" local pglibdir="$(${pgconfig} --libdir)" [[ -d "${pglibdir}" ]] || die -q "Failed to find postgresql libdir" local slinks="${#postgres_symlinks[*]}" for l in ${pglibdir}/lib*.{a,so} ; do local bn=$(basename $l) postgres_symlinks[slinks++]="$l" postgres_symlinks[slinks++]="${alibdir}${bn}" done for (( i=0;i/dev/null || die "Failed to create /etc/eselect/postgresql" exec 9>/etc/eselect/postgresql/active.links || die "Failed to store list of links" ln -sf slots/${1} /etc/eselect/postgresql/active for (( i=0;i&9 done } ## }}} ### set-service action ## {{{ describe_set-service() { echo "Set active postgresql service" } do_set-service() { local alibdir='/usr/lib/' [[ ${#@} -ne 1 ]] && die -q "Only one parameter is expected" local slotdir="/etc/eselect/postgresql/slots/${1}" [[ -d "${slotdir}" ]] || die -q "No such version installed" do_reset-service unset postgres_service local p_service="$(for s in ${slotdir}/* ; do source $s ; done ; echo $postgres_service)" [[ -x "/etc/init.d/${p_service}" ]] || die -1 "Selected installation doesn't provide PostgreSQL service" mkdir -p /etc/eselect/postgresql &>/dev/null || die "Failed to create /etc/eselect/postgresql" rm -f /etc/eselect/postgresql/service ln -sf slots/${1} /etc/eselect/postgresql/service touch /etc/conf.d/${p_service} } ## }}} ### set-all action ## {{{ describe_set-all() { echo "Set both active postgresql and corresponding service" } do_set-all() { do_set "$@" do_set-service "$@" } ## }}} ### reset action ## {{{ describe_reset() { echo "Remove active postgresql installation links" } do_reset() { local alibdir='/usr/lib/' if [[ -d "$(canonicalise /etc/eselect/postgresql/active)" ]] ; then if [[ -r /etc/eselect/postgresql/active.links ]] ; then exec 9