summaryrefslogtreecommitdiff
blob: 4204107a8f8a040cc55d760221873ae31e28b9d0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/net-zope/zope/zope-2.7.2.ebuild,v 1.5 2004/10/02 19:20:30 radek Exp $

inherit eutils

DESCRIPTION="Zope is a web application platform used for building high-performance, dynamic web sites."
HOMEPAGE="http://www.zope.org"
SRC_URI="http://www.zope.org/Products/Zope/${PV}/Zope-${PV}-0.tgz"
LICENSE="ZPL"
SLOT="${PV}"

KEYWORDS="~x86 ~sparc ~ppc ~alpha ~amd64"
IUSE="unicode"

RDEPEND="=dev-lang/python-2.3*"
python='python2.3'

DEPEND="${RDEPEND}
virtual/libc
>=sys-apps/sed-4.0.5
>=app-admin/zope-config-0.4-r1"

S="${WORKDIR}/Zope-${PV}-0"

ZUID=zope
ZGID=zope
ZGID_INST="${PN}-${PV//./_}"
ZS_DIR=${ROOT}/usr/lib/
ZI_DIR=${ROOT}/var/lib/zope/
ZSERVDIR=${ZS_DIR}${PN}-${PV}/
ZINSTDIR=${ZI_DIR}${PN}-${PV}

RCNAME=zope.initd

# Narrow the scope of ownership/permissions.
# Security plan:
# * ZUID is the superuser for all zope instances.
# * ZGID is for a single instance's administration.
# * Other's should not have any access to ${ZSERVDIR},
#   because they can work through the Zope web interface.
#   This should protect our code/data better.

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

setup_security() {
	# The old version made everything owned by zope:${DEFAULT_INSTANCE_GID},
	# and group-writable. This is like making everything in net-www/apache2 
	# owned by apache! The zope instance runs as the zope user, so the zope
	# user should not own any files. However, we make everything group-owned
	# by the zope group, of which the zope user is a member, so that running
	# zope instances will be able to read everything.
	# -- Andy Dustman
	chown -R root:${2} ${1}
	chmod -R g+r,g-w,o-rwx ${1}
}

install_instance() {
	# Here we add our default zope instance.
	if [ -d ${ZINSTDIR} ] ; then
		die "Default instance directory (${ZINSTDIR} already exists!"
	fi
	if [ -f ${ZI_DIR}/.default ] ; then
		def_instance=`cat ${ZI_DIR}/.default`
		die "Default instance file (${ZI_DIR}/.default already exists -> $def_instance"
	fi
	einfo "Creting default zope instance at ${ZINSTDIR} with command:"
	einfo "/usr/sbin/zope-config --zserv=${ZSERVDIR} --zinst=${ZINSTDIR} --zgid=${ZGID_INST} --zinituser"
	ewarn "Default admin user created with password admin. Please change it."
	/usr/sbin/zope-config --zserv=${ZSERVDIR} --zinst=${ZINSTDIR} --zgid=${ZGID_INST} --zinituser
	einfo "You can also enable autostart on reboot using: rc-update -a ${ZGID_INST} default"
}

pkg_preinst() {
	enewgroup ${ZGID} 261
	usermod -g ${ZGID} ${ZUID} 2>&1 >/dev/null || \
	enewuser ${ZUID} 261 /bin/bash ${ZS_DIR} ${ZGID}
}

src_unpack() {
	unpack ${A}
	cd ${S}
	use amd64 \
		&& epatch ${FILESDIR}/2.7.2/gid.patch
}

src_compile() {
	./configure --ignore-largefile --prefix=${ZOPE_DIR} || die "Failed to configure."
	emake || die "Failed to compile."
}

src_install() {
	dodoc README.txt
	dodoc doc/*.txt
	docinto PLATFORMS ; dodoc doc/PLATFORMS/*

	# Patched StructuredText will accept source text formatted in utf-8 encoding, 
	# apply all formattings and output utf-8 encoded text.
	# if you want to use this option you need to set your
	# system python encoding to utf-8 (create the file sitecustomize.py inside
	# your site-packages, add the following lines
	# 	import sys
	# 	sys.setdefaultencoding('utf-8')
	# If this is a problem, let me know right away. --batlogg@gentoo.org
	# I wondering if we need a USE flag for this and wheter we can set the
	# sys.encoding automtically
	# so i defined a use flag

	if use unicode; then
		einfo "Patching structured text"
		einfo "make sure you have set the system python encoding to utf-8"
		einfo "create the file sitecustomize.py inside your site-packages"
	 	einfo "import sys"
		einfo "sys.setdefaultencoding('utf8')"
		cd ${S}/lib/python/StructuredText/
		epatch ${FILESDIR}/i18n-1.0.0.patch
		cd ${S}
	fi

	make install PREFIX=${D}/${ZSERVDIR}
	rm -rf ${D}${ZSERVDIR}/doc
	dosym ${DOCDESTTREE} ${D}${ZSERVDIR}/doc

	skel=${D}${ZSERVDIR}/skel
	dodir /etc/init.d
	cp ${FILESDIR}/${PV}/zope.initd ${skel}/zope.initd

	setup_security ${D}${ZSERVDIR} ${ZGID}
}

pkg_postinst() {
	einfo "Be warned that you need at least one zope instance to run zope."
	einfo "To create empty new default instance, please use command:"
	einfo "ebuild /var/db/pkg/${CATEGORY}/${PF}/${PF}.ebuild config"
	einfo "Please use zope-config command for futher instance management."
}

pkg_postrm() {
	# rcscripts files will remain. i.e. /etc protection.

	# Delete .default if this ebuild is the default. zprod-manager will
	# have to handle a missing default;
	# TODO: this should be checked
	rm -f ${ZI_DIR}/.default
}

pkg_config() {
	install_instance
}