head	1.4;
access;
symbols;
locks; strict;
comment	@# @;


1.4
date	2008.11.16.15.11.23;	author tupone;	state dead;
branches;
next	1.3;
commitid	4196492038194567;

1.3
date	2004.07.14.21.22.44;	author agriffis;	state Exp;
branches;
next	1.2;

1.2
date	2003.12.12.07.40.57;	author lanius;	state Exp;
branches;
next	1.1;

1.1
date	2003.12.10.19.03.39;	author lanius;	state Exp;
branches
	1.1.1.1;
next	;

1.1.1.1
date	2005.11.30.10.00.08;	author chriswhite;	state Exp;
branches;
next	;


desc
@@


1.4
log
@Fix dialog not finding tty. Bug #120471
(Portage version: 2.1.4.5)
@
text
@#!/bin/bash
# vim: set noexpandtab ts=4:
# Gentoo Zope Instance configure tool.
#
# Originally written by Jason Shoemaker <kutsuya@@gentoo.org>
# Portions by solution2u.net gmbh (Logging and some cleanups)
# Portions by Robin Johnson <robbat2@@gentoo.org> (Documentation and further cleanup)
#
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/app-admin/zope-config/files/0.3/zope-config,v 1.3 2004/07/14 21:22:44 agriffis Exp $

VERSION="0.2"

CONFIGFILE=/etc/zope-config.conf
if [ -e ${CONFIGFILE} ]; then
	source ${CONFIGFILE} 
else
	echo "Unable to find config file: ${CONFIGFILE}" 1>&2
	exit 1
fi

# Return codes used in this program:
E_SUCCESS=0
E_FAILURE=1

#E_ZPLIST=20
E_ZILIST=22
#E_COMMAND=24
E_PARAM=26
E_ZSLIST=28
E_ZIDEFAULT=30

#Parameters:
# $1 = instance directory
# $2 = group

zinst_security_setup()
{
	chown -R ${ZUID}:${2} ${1}
	chmod -R g+u ${1}
	chmod -R o-rwx ${1}
	chown root ${1}/var/   # needed if $ZOPE_OPTS='-u root'
	chmod +t ${1}/var/
}

#Params:
#  $1 = zserv dir
#  $2 = zinst dir

zinst_fs_setup()
{
	local RESULT=${E_FAILURE}

	if [ "${#}" -lt 2 ] ; then
		# need a param
		RESULT=${E_PARAM}
	else
		mkdir -p $2 || exit 1
		if [ $(zinst_default_get >/dev/null)$? -ne 0 ] ; then
			echo $(basename ${ZINST_DIR}) >${ZI_DIR}/.default
			chown zope:root ${ZI_DIR}/.default
		fi

		if [ -f $2/var/Data.fs ]; then
			mv $2/var/Data.fs $2/var/Data.fs.org
		fi

		cp -R $1/.templates/Extensions $2
		cp -R $1/.templates/import $2
		cp -R $1/.templates/var $2
		mkdir $2/Products

		if [ -f $2/var/Data.fs.org ]; then
			mv $2/var/Data.fs $2/var/Data.fs.dist
			mv $2/var/Data.fs.org $2/var/Data.fs
		fi

		RESULT=$?
	fi

	return ${RESULT}
}

#Params:
#  $1 = zserv dir
#  $2 = zinst dir
#  $3 = zinst name

zinst_rc_setup()
{
	local RESULT=${E_FAILURE}  

	if [ "${#}" -lt 3 ] ; then
		# need a param
		RESULT=${E_PARAM}
	else
		install $1/.templates/zope.confd ${CONFD}/${3}
		install $1/.templates/zope.initd ${INITD}/${3}
		sed -i \
			-e "/INSTANCE_HOME=/ c\\INSTANCE_HOME=${2}\\ " \
			-e "/CLIENT_HOME=/ c\\CLIENT_HOME=${2}/var\\ " \
			-e "/EVENT_LOG_FILE=/ c\\EVENT_LOG_FILE=${EVENTLOGDIR}\/${3}\\ " \
			${CONFD}/${3}
		RESULT=$?
		# make sure the directory exists
		mkdir -p ${EVENTLOGDIR} >/dev/null 2>&1
	fi
	return ${RESULT}
}

#

zserv_dir_get()
{
	local RESULT=${E_FAILURE}
	local LIST=$(ls ${ZS_DIR})
	local LIST_CNT=$(echo ${LIST} | wc -w)
	local DLIST=

	# Assume that LIST_TMP contains valid zserver dirs.
	if [ ${LIST_CNT} -eq 1 ] ; then
		ZSERV_DIR=${LIST}
		RESULT=${E_SUCCESS}
	elif [ ${LIST_CNT} -ne 0 ] ; then 
		for N in ${LIST} ; do
			DLIST="${DLIST} $N -"
		done
		ZSERV_DIR=$(dialog --stdout \
			--title "Zope Server List" \
			--menu "Select desired zserver: " 0 0 ${LIST_CNT} ${DLIST})
		RESULT=$?
	else
		RESULT=${E_ZSLIST}    # There are no zservers
	fi
	ZSERV_DIR="${ZS_DIR}${ZSERV_DIR}"
	return ${RESULT}
}
  
#

zinst_dir_set()
{
	local RESULT=

	if [ ! -d ${ZI_DIR} ] ; then
		mkdir -p ${ZI_DIR}
	fi

	while : ; do
		ZINST_DIR=$(dialog --stdout \
			--backtitle "Need a uniqe name for zinstance directory.(Also the name of the rcscript.)" \
			--inputbox "Enter a new zinstance name:" 0 0 ${DEFAULT_ZINSTANCENAME} )
		RESULT=$?
		if [ ${RESULT} -ne 0 ] ; then
			break
		elif [ -z ${ZINST_DIR} ] ; then
			dialog --msgbox "Error: need a name." 0 0
			continue
		elif echo ${ZINST_DIR} |grep "/" ; then
			dialog --msgbox "Error: ${ZINST_DIR} is a path, not a name." 0 0
			continue
		elif [[ -d "${ZI_DIR}${ZINST_DIR}" && \
			-f "${INITD}/${ZINST_DIR}" ]] ; then
			dialog --msgbox "Error: ${ZINST_DIR} zinstance already exists." 0 0
			continue
		fi
		ZINST_DIR=${ZI_DIR}${ZINST_DIR}
		break
	done
	return ${RESULT}
}

#

zinst_dir_get()
{
	local RESULT=1
	local LIST=$(ls ${ZI_DIR})
	local LIST_CNT=$(echo ${LIST} | wc -w)
	local DLIST=

	# Assume that LIST_TMP contains valid zinstance dirs.
	if [ ${LIST_CNT} -eq 1 ] ; then
		ZINST_DIR=${LIST}
		RESULT=${E_SUCCESS}
	elif [ ${LIST_CNT} -ne 0 ] ; then 
		for N in ${LIST} ; do
			DLIST="${DLIST} $N -"
		done
		ZINST_DIR=$(dialog --stdout \
			--title "Zope Instance List" \
			--menu "Select desired zinstance:" 0 0 ${LIST_CNT} ${DLIST})
		RESULT=$?
	else
		RESULT=${E_ZILIST}  # There are no zinstances
	fi
	ZINST_DIR="${ZI_DIR}${ZINST_DIR}"
	return ${RESULT}
}

#

zinst_default_set()
{
	local RESULT=

	zinst_dir_get
	RESULT=$?
	if [ ${RESULT} -eq 0 ] ; then
		echo $(basename ${ZINST_DIR}) >${ZI_DIR}/.default
		chown zope ${ZI_DIR}/.default
	fi
	
	return ${RESULT}
}

# Echos the default directory that this instance was created in

zinst_default_get()
{
	local RESULT=${E_ZIDEFAULT}

	if [ -s ${ZI_DIR}/.default ] ; then
		cat ${ZI_DIR}/.default
		RESULT=$?   # use to be 0
	fi
	return ${RESULT}
}

# Gets a name for the group that owns the new zinstance and also creates the
# group if nessicary

zinst_zgid_set()
{
	local RESULT=
	while : ; do
		ZGID_NAME=$(dialog --stdout \
			--backtitle "Need to create/assign a zinstance group name." \
			--inputbox "Enter a group name:" \
			0 0 $(basename ${ZIRC_NAME}))			
		RESULT=$?
		if [ ${RESULT} -ne 0 ] ; then
			break
		elif [ -z ${ZGID_NAME} ] ; then
			dialog --msgbox "Error: empty string." 0 0
			continue
		elif groupmod ${ZGID_NAME} >/dev/null 2>&1 ; then
			dialog --yesno "${ZGID_NAME} already exists, use it?" 0 0
			RESULT=$?
			[ ${RESULT} -ne 0 ] && continue 
		fi
		break
	done
	return ${RESULT}
}

# Sets the inituser password for a given zinstance

zinst_zpasswd_set()
{
	if [ -z ${ZSERV_DIR} ] ; then
		zserv_dir_get || { exit $? ; }
	fi
	if [ -z ${ZINST_DIR} ] ; then
		zinst_dir_get || exit $?
	fi

	echo ">>> Create Zope inituser for \"$(basename ${ZINST_DIR})\"..."
	/usr/bin/python ${ZSERV_DIR}/zpasswd.py ${ZINST_DIR}/inituser
	# If zpasswd is aborted it creates a blank inituser
	chown ${ZUID} ${ZINST_DIR}/inituser
}

# help!

usage()
{
	echo "$(basename $0) version ${VERSION}"
	echo "A Gentoo Zope Instance configure tool."
	echo
	echo "Interactive usage:"
	echo -e "\t$(basename $0)"
	echo "Partial interactive usage:"
	echo -e "\t$(basename $0) --[zserv=[dir] &| zinst=[dir] &| zgid=[name]]"
	echo "Non-interactive usage:"
	echo -e "\t$(basename $0) --[zidef-get | zidef-set | zpasswd | version | help]"
	echo -e "\t$(basename $0) --[zserv=[dir] & zinst=[dir] & zgid=[name]]"
	exit ${E_SUCCESS}
}

##### Process the commandline

while [ "$#" -gt 0 ] ; do
	case "$1" in
	-*=*) OPTARG=$(echo "$1" | sed 's/[-_a-zA-Z0-9]*=//') ;;
	*) OPTARG= ;;
	esac

	case "$1" in
	--zserv=*) ZSERV_DIR=${OPTARG} ;;
	--zinst=*) ZINST_DIR=${OPTARG} ;;
	--zgid=*)  ZGID_NAME=${OPTARG} ;;
	--zidef-set) zinst_default_set ; exit $? ;;
	--zidef-get) zinst_default_get ; exit $? ;;
	--zpasswd) zinst_zpasswd_set ; exit $? ;;
	--version) echo ${VERSION} ; exit 0 ;;		
	-*) usage ; exit 0 ;;
	*) usage ; exit 0 ;;
	esac
	shift
done

if [ -z ${ZSERV_DIR} ] ; then
	zserv_dir_get || { echo 'Canceled: zserv_dir_get' ; exit 1 ; }
fi

if [ -z ${ZINST_DIR} ] ; then
	zinst_dir_set || { echo 'Canceled: zinst_dir_set' ; exit 1 ; }
fi

[ -z ${ZIRC_NAME} ] && ZIRC_NAME=$(basename ${ZINST_DIR})

if [ -z ${ZGID_NAME} ] ; then
	zinst_zgid_set || { echo 'Canceled: zinst_zgid_set' ; exit 1 ; }
fi

zinst_fs_setup ${ZSERV_DIR} ${ZINST_DIR}
zinst_rc_setup ${ZSERV_DIR} ${ZINST_DIR} ${ZIRC_NAME}

groupadd ${ZGID_NAME}
# add existing user zope to the new group
gpasswd -a zope ${ZGID_NAME}

zinst_security_setup ${ZINST_DIR} ${ZGID_NAME}

# TODO: see about adding interactive configuration of ZOPE_OPTS
echo "Note: Don\'t forget to edit ZOPE_OPTS in ${CONFD}${ZIRC_NAME}"
echo "      (you might want to add -P 8{1,2,3,..}00 to set the zope ports offset)"

@


1.3
log
@Gentoo Technologies -> Gentoo Foundation
@
text
@d11 1
a11 1
# $Header: /var/cvsroot/gentoo-x86/app-admin/zope-config/files/0.3/zope-config,v 1.2 2003/12/12 07:40:57 lanius Exp $
@


1.2
log
@use mv instead of cp to avoid data loose if zope is still running
@
text
@d9 1
a9 1
# Copyright 1999-2003 Gentoo Technologies, Inc.
d11 1
a11 1
# $Header: /home/cvsroot/gentoo-x86/app-admin/zope-config/files/0.3/zope-config,v 1.1 2003/12/10 19:03:39 lanius Exp $
@


1.1
log
@fixed removal of Data.fs, bug #29705
@
text
@d11 1
a11 1
# $Header: /home/cvsroot/gentoo-x86/app-admin/zope-config/files/0.2/zope-config,v 1.2 2003/11/16 01:04:49 robbat2 Exp $
d66 1
a66 1
			cp $2/var/Data.fs $2/var/Data.fs.org
@


1.1.1.1
log
@*** empty log message ***
@
text
@d9 1
a9 1
# Copyright 1999-2004 Gentoo Foundation
d11 1
a11 1
# $Header: /var/cvsroot/gentoo-x86/app-admin/zope-config/files/0.3/zope-config,v 1.3 2004/07/14 21:22:44 agriffis Exp $
d66 1
a66 1
			mv $2/var/Data.fs $2/var/Data.fs.org
@


