269
|
1 # Copyright 1999-2010 Gentoo Foundation
|
|
2 # Distributed under the terms of the GNU General Public License v2
|
|
3 # $Header: /var/cvsroot/gentoo-x86/dev-db/postgresql-server/postgresql-server-9.0.1.ebuild,v 1.1 2010/10/06 14:58:10 patrick Exp $
|
|
4
|
|
5 EAPI="2"
|
|
6 PYTHON_DEPEND="python? 2"
|
|
7
|
|
8 # weird test failures.
|
|
9 RESTRICT="test"
|
|
10
|
|
11 WANT_AUTOMAKE="none"
|
|
12 inherit autotools eutils multilib python versionator
|
|
13
|
|
14 KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sh ~sparc ~x86 ~x86-fbsd"
|
|
15
|
|
16 DESCRIPTION="PostgreSQL server"
|
|
17 HOMEPAGE="http://www.postgresql.org/"
|
|
18
|
|
19 MY_PV=${PV/_/}
|
|
20 SRC_URI="mirror://postgresql/source/v${MY_PV}/postgresql-${MY_PV}.tar.bz2"
|
|
21 S=${WORKDIR}/postgresql-${MY_PV}
|
|
22
|
|
23 LICENSE="POSTGRESQL"
|
|
24 SLOT="$(get_version_component_range 1-2)"
|
|
25 LINGUAS="af cs de es fa fr hr hu it ko nb pl pt_BR ro ru sk sl sv tr zh_CN zh_TW"
|
|
26 IUSE="doc kernel_linux nls perl pg_legacytimestamp python selinux tcl uuid xml"
|
|
27
|
|
28 for lingua in ${LINGUAS}; do
|
|
29 IUSE+=" linguas_${lingua}"
|
|
30 done
|
|
31
|
|
32 wanted_languages() {
|
|
33 local enable_langs
|
|
34
|
|
35 for lingua in ${LINGUAS} ; do
|
|
36 use linguas_${lingua} && enable_langs+="${lingua} "
|
|
37 done
|
|
38
|
|
39 echo -n ${enable_langs}
|
|
40 }
|
|
41
|
|
42 RDEPEND="~dev-db/postgresql-base-${PV}:${SLOT}[pg_legacytimestamp=,nls=]
|
|
43 perl? ( >=dev-lang/perl-5.6.1-r2 )
|
|
44 python? ( dev-python/egenix-mx-base )
|
|
45 selinux? ( sec-policy/selinux-postgresql )
|
|
46 tcl? ( >=dev-lang/tcl-8 )
|
|
47 uuid? ( dev-libs/ossp-uuid )
|
|
48 xml? ( dev-libs/libxml2 dev-libs/libxslt )"
|
|
49 DEPEND="${RDEPEND}
|
|
50 sys-devel/flex
|
|
51 xml? ( dev-util/pkgconfig )"
|
|
52 PDEPEND="doc? ( ~dev-db/postgresql-docs-${PV} )"
|
|
53
|
|
54 pkg_setup() {
|
|
55 enewgroup postgres 70
|
|
56 enewuser postgres 70 /bin/bash /var/lib/postgresql postgres
|
|
57
|
|
58 if use python; then
|
|
59 python_set_active_version 2
|
|
60 fi
|
|
61 }
|
|
62
|
|
63 src_prepare() {
|
|
64 epatch "${FILESDIR}/postgresql-${SLOT}-common.3.patch" \
|
|
65 "${FILESDIR}/postgresql-${SLOT}-server.3.patch"
|
|
66
|
|
67 if use test; then
|
|
68 sed -e "s|/no/such/location|${S}/src/test/regress/tmp_check/no/such/location|g" -i src/test/regress/{input,output}/tablespace.source
|
|
69 else
|
|
70 echo "all install:" > "${S}/src/test/regress/GNUmakefile"
|
|
71 fi
|
|
72
|
|
73 eautoconf
|
|
74 }
|
|
75
|
|
76 src_configure() {
|
|
77 # eval is needed to get along with pg_config quotation of space-rich entities.
|
|
78 eval econf "$(/usr/$(get_libdir)/postgresql-${SLOT}/bin/pg_config --configure)" \
|
|
79 --disable-thread-safety \
|
|
80 $(use_with perl) \
|
|
81 $(use_with python) \
|
|
82 $(use_with tcl) \
|
|
83 $(use_with xml libxml) \
|
|
84 $(use_with xml libxslt) \
|
|
85 $(use_with uuid ossp-uuid) \
|
|
86 --with-system-tzdata="/usr/share/zoneinfo" \
|
|
87 --with-includes="/usr/include/postgresql-${SLOT}/" \
|
|
88 --with-libraries="/usr/$(get_libdir)/postgresql-${SLOT}/$(get_libdir)" \
|
|
89 "$(use_enable nls nls "$(wanted_languages)")"
|
|
90 }
|
|
91
|
|
92 src_compile() {
|
|
93 local bd
|
|
94 for bd in . contrib $(use xml && echo contrib/xml2); do
|
|
95 PATH="/usr/$(get_libdir)/postgresql-${SLOT}/bin:${PATH}" \
|
|
96 emake -C $bd -j1 || die "emake in $bd failed"
|
|
97 done
|
|
98 }
|
|
99
|
|
100 src_install() {
|
|
101 if use perl ; then
|
|
102 mv -f "${S}/src/pl/plperl/GNUmakefile" "${S}/src/pl/plperl/GNUmakefile_orig"
|
|
103 sed -e "s:\$(DESTDIR)\$(plperl_installdir):\$(plperl_installdir):" \
|
|
104 "${S}/src/pl/plperl/GNUmakefile_orig" > "${S}/src/pl/plperl/GNUmakefile"
|
|
105 fi
|
|
106
|
|
107 for bd in . contrib $(use xml && echo contrib/xml2) ; do
|
|
108 PATH="/usr/$(get_libdir)/postgresql-${SLOT}/bin:${PATH}" \
|
|
109 emake install -C $bd -j1 DESTDIR="${D}" || die "emake install in $bd failed"
|
|
110 done
|
|
111
|
|
112 rm -rf "${D}/usr/share/postgresql-${SLOT}/man/man7/" "${D}/usr/share/doc/postgresql-${SLOT}/html"
|
|
113 rm "${D}"/usr/share/postgresql-${SLOT}/man/man1/{clusterdb,create{db,lang,user},drop{db,lang,user},ecpg,pg_{config,dump,dumpall,restore},psql,reindexdb,vacuumdb}.1
|
|
114
|
|
115 dodoc README HISTORY doc/{README.*,TODO,bug.template}
|
|
116
|
|
117 dodir /etc/eselect/postgresql/slots/${SLOT}
|
|
118 cat > "${D}/etc/eselect/postgresql/slots/${SLOT}/service" <<-__EOF__
|
|
119 postgres_ebuilds="\${postgres_ebuilds} ${PF}"
|
|
120 postgres_service="postgresql-${SLOT}"
|
|
121 __EOF__
|
|
122
|
|
123 newinitd "${FILESDIR}/postgresql.init-${SLOT}-r1" postgresql-${SLOT} || die "Inserting init.d-file failed"
|
|
124 newconfd "${FILESDIR}/postgresql.conf-${SLOT}-r1" postgresql-${SLOT} || die "Inserting conf.d-file failed"
|
|
125
|
|
126 keepdir /var/run/postgresql
|
|
127 fperms 0770 /var/run/postgresql
|
|
128 fowners postgres:postgres /var/run/postgresql
|
|
129 }
|
|
130
|
|
131 pkg_postinst() {
|
|
132 eselect postgresql update
|
|
133 [[ "$(eselect postgresql show)" = "(none)" ]] && eselect postgresql set ${SLOT}
|
|
134 [[ "$(eselect postgresql show-service)" = "(none)" ]] && eselect postgresql set-service ${SLOT}
|
|
135
|
|
136 ewarn "Please note that the standard location of the socket has changed from /tmp to"
|
|
137 ewarn "/var/run/postgresql and you have to be in the 'postgres' group to access the"
|
|
138 ewarn "socket. This can break applications which have the standard location"
|
|
139 ewarn "hard-coded. If such an application links against the libpq, please reemerge"
|
|
140 ewarn "it. If that doesn't help or the application accesses the socket without using"
|
|
141 ewarn "libpq, please file a bug-report."
|
|
142 ewarn
|
|
143 ewarn "You can set PGOPTS='-k /tmp' in /etc/conf.d/postgresql-${SLOT} to restore the"
|
|
144 ewarn "original location."
|
|
145 ewarn
|
|
146
|
|
147 elog "Before initializing the database, you may want to edit PG_INITDB_OPTS so that it"
|
|
148 elog "contains your preferred locale and character encoding in:"
|
|
149 elog
|
|
150 elog " /etc/conf.d/postgresql-${SLOT}"
|
|
151 elog
|
|
152 elog "Then, execute the following command to setup the initial database environment:"
|
|
153 elog
|
|
154 elog " emerge --config =${CATEGORY}/${PF}"
|
|
155 elog
|
|
156 elog "The autovacuum function, which was in contrib, has been moved to the main"
|
|
157 elog "PostgreSQL functions starting with 8.1, and starting with 8.4 is now enabled by"
|
|
158 elog "default. You can disable it in the cluster's postgresql.conf."
|
|
159 elog
|
|
160 elog "The timestamp format is 64 bit integers now. If you upgrade from older"
|
|
161 elog "databases, this may force you to either do a dump and reload or enable"
|
|
162 elog "pg_legacytimestamp until you find time to do so. If the database can't start"
|
|
163 elog "please try enabling pg_legacytimestamp and rebuild."
|
|
164 }
|
|
165
|
|
166 pkg_postrm() {
|
|
167 eselect postgresql update
|
|
168 }
|
|
169
|
|
170 pkg_config() {
|
|
171 [[ -f /etc/conf.d/postgresql-${SLOT} ]] && source /etc/conf.d/postgresql-${SLOT}
|
|
172 [[ -z "${PGDATA}" ]] && PGDATA="/var/lib/postgresql/${SLOT}/data"
|
|
173
|
|
174 # environment.bz2 may not contain the same locale as the current system
|
|
175 # locale. Unset and source from the current system locale.
|
|
176 if [ -f /etc/env.d/02locale ]; then
|
|
177 unset LANG
|
|
178 unset LC_CTYPE
|
|
179 unset LC_NUMERIC
|
|
180 unset LC_TIME
|
|
181 unset LC_COLLATE
|
|
182 unset LC_MONETARY
|
|
183 unset LC_MESSAGES
|
|
184 unset LC_ALL
|
|
185 source /etc/env.d/02locale
|
|
186 [ -n "${LANG}" ] && export LANG
|
|
187 [ -n "${LC_CTYPE}" ] && export LC_CTYPE
|
|
188 [ -n "${LC_NUMERIC}" ] && export LC_NUMERIC
|
|
189 [ -n "${LC_TIME}" ] && export LC_TIME
|
|
190 [ -n "${LC_COLLATE}" ] && export LC_COLLATE
|
|
191 [ -n "${LC_MONETARY}" ] && export LC_MONETARY
|
|
192 [ -n "${LC_MESSAGES}" ] && export LC_MESSAGES
|
|
193 [ -n "${LC_ALL}" ] && export LC_ALL
|
|
194 fi
|
|
195
|
|
196 einfo "You can pass options to initdb by setting the PG_INITDB_OPTS variable."
|
|
197 einfo "More information can be found here:"
|
|
198 einfo " http://www.postgresql.org/docs/${SLOT}/static/creating-cluster.html"
|
|
199 einfo " http://www.postgresql.org/docs/${SLOT}/static/app-initdb.html"
|
|
200 einfo "Simply add the options you would have added to initdb to the PG_INITDB_OPTS"
|
|
201 einfo "variable."
|
|
202 einfo
|
|
203 einfo "You can change the directory where the database cluster is being created by"
|
|
204 einfo "setting the PGDATA variable."
|
|
205 einfo
|
|
206 einfo "PG_INITDB_OPTS is currently set to:"
|
|
207 einfo " \"${PG_INITDB_OPTS}\""
|
|
208 einfo "and the database cluster will be created in:"
|
|
209 einfo " \"${PGDATA}\""
|
|
210 einfo "Are you ready to continue? (Y/n)"
|
|
211 read answer
|
|
212 [ -z $answer ] && answer=Y
|
|
213 [ "$answer" == "Y" ] || [ "$answer" == "y" ] || die "aborted"
|
|
214
|
|
215 if [[ -f "${PGDATA}/PG_VERSION" ]] ; then
|
|
216 eerror "The given directory \"${PGDATA}\" already contains a database cluster."
|
|
217 die "cluster already exists"
|
|
218 fi
|
|
219
|
|
220 [ -z "${PG_MAX_CONNECTIONS}" ] && PG_MAX_CONNECTIONS="128"
|
|
221 einfo "Checking system parameters..."
|
|
222
|
|
223 if ! use kernel_linux ; then
|
|
224 SKIP_SYSTEM_TESTS=yes
|
|
225 einfo " Tests not supported on this OS (yet)"
|
|
226 fi
|
|
227
|
|
228 if [ -z ${SKIP_SYSTEM_TESTS} ] ; then
|
|
229 einfo "Checking whether your system supports at least ${PG_MAX_CONNECTIONS} connections..."
|
|
230
|
|
231 local SEMMSL=$(sysctl -n kernel.sem | cut -f1)
|
|
232 local SEMMNS=$(sysctl -n kernel.sem | cut -f2)
|
|
233 local SEMMNI=$(sysctl -n kernel.sem | cut -f4)
|
|
234 local SHMMAX=$(sysctl -n kernel.shmmax)
|
|
235
|
|
236 local SEMMSL_MIN=17
|
|
237 local SEMMNS_MIN=$(( ( ${PG_MAX_CONNECTIONS}/16 ) * 17 ))
|
|
238 local SEMMNI_MIN=$(( ( ${PG_MAX_CONNECTIONS}+15 ) / 16 ))
|
|
239 local SHMMAX_MIN=$(( 500000 + ( 30600 * ${PG_MAX_CONNECTIONS} ) ))
|
|
240
|
|
241 for p in SEMMSL SEMMNS SEMMNI SHMMAX ; do
|
|
242 if [ $(eval echo \$$p) -lt $(eval echo \$${p}_MIN) ] ; then
|
|
243 eerror "The value for ${p} $(eval echo \$$p) is below the recommended value $(eval echo \$${p}_MIN)"
|
|
244 eerror "You have now several options:"
|
|
245 eerror " - Change the mentioned system parameter"
|
|
246 eerror " - Lower the number of max.connections by setting PG_MAX_CONNECTIONS to a value lower than ${PG_MAX_CONNECTIONS}"
|
|
247 eerror " - Set SKIP_SYSTEM_TESTS in case you want to ignore this test completely"
|
|
248 eerror "More information can be found here:"
|
|
249 eerror " http://www.postgresql.org/docs/${SLOT}/static/kernel-resources.html"
|
|
250 die "System test failed."
|
|
251 fi
|
|
252 done
|
|
253 einfo "Passed."
|
|
254 else
|
|
255 einfo "Skipped."
|
|
256 fi
|
|
257
|
|
258 einfo "Creating the data directory ..."
|
|
259 mkdir -p "${PGDATA}"
|
|
260 chown -Rf postgres:postgres "${PGDATA}"
|
|
261 chmod 0700 "${PGDATA}"
|
|
262
|
|
263 einfo "Initializing the database ..."
|
|
264
|
|
265 su postgres -c "/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb --pgdata \"${PGDATA}\" ${PG_INITDB_OPTS}"
|
|
266
|
|
267 einfo
|
|
268 einfo "You can use the '${ROOT}/etc/init.d/postgresql-${SLOT}' script to run PostgreSQL"
|
|
269 einfo "instead of 'pg_ctl'."
|
|
270 einfo
|
|
271 }
|
|
272
|
|
273 src_test() {
|
|
274 einfo ">>> Test phase [check]: ${CATEGORY}/${PF}"
|
|
275 PATH="/usr/$(get_libdir)/postgresql-${SLOT}/bin:${PATH}" \
|
|
276 emake -j1 check || die "Make check failed. See above for details."
|
|
277
|
|
278 einfo "Yes, there are other tests which could be run."
|
|
279 einfo "... and no, we don't plan to add/support them."
|
|
280 einfo "For now, the main regressions tests will suffice. If you think other tests are"
|
|
281 einfo "necessary, please submit a bug including a patch for this ebuild to enable them."
|
|
282 }
|