postgresql-9.6.11.ebuild (14727B)
1 # Copyright 1999-2018 Gentoo Authors 2 # Distributed under the terms of the GNU General Public License v2 3 4 EAPI="6" 5 6 PYTHON_COMPAT=( python2_7 python3_{4,5,6} ) 7 8 PLOCALES="af cs de en es fa fr hr hu it ko nb pl pt_BR ro ru sk sl sv tr zh_CN 9 zh_TW" 10 11 inherit flag-o-matic l10n linux-info multilib pam prefix python-single-r1 \ 12 systemd user versionator 13 14 KEYWORDS="alpha amd64 arm ~arm64 ~hppa ia64 ~mips ppc ppc64 ~s390 ~sh sparc x86 ~amd64-fbsd ~x86-fbsd ~ppc-macos ~x86-solaris" 15 16 SLOT="$(get_version_component_range 1-2)" 17 18 MY_PV=${PV/_/} 19 S="${WORKDIR}/${PN}-${MY_PV}" 20 21 SRC_URI="mirror://postgresql/source/v${MY_PV}/postgresql-${MY_PV}.tar.bz2" 22 23 LICENSE="POSTGRESQL GPL-2" 24 DESCRIPTION="PostgreSQL RDBMS" 25 HOMEPAGE="https://www.postgresql.org/" 26 27 IUSE="doc kerberos kernel_linux ldap libressl nls pam perl -pg_legacytimestamp 28 python +readline selinux +server systemd ssl static-libs tcl threads uuid 29 xml zlib" 30 31 REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )" 32 33 CDEPEND=" 34 >=app-eselect/eselect-postgresql-2.0 35 virtual/libintl 36 kerberos? ( virtual/krb5 ) 37 ldap? ( net-nds/openldap ) 38 pam? ( virtual/pam ) 39 perl? ( >=dev-lang/perl-5.8:= ) 40 python? ( ${PYTHON_DEPS} ) 41 readline? ( sys-libs/readline:0= ) 42 ssl? ( 43 !libressl? ( >=dev-libs/openssl-0.9.6-r1:0= ) 44 libressl? ( dev-libs/libressl:= ) 45 ) 46 server? ( systemd? ( sys-apps/systemd ) ) 47 tcl? ( >=dev-lang/tcl-8:0= ) 48 xml? ( dev-libs/libxml2 dev-libs/libxslt ) 49 zlib? ( sys-libs/zlib ) 50 " 51 52 # uuid flags -- depend on sys-apps/util-linux for Linux libcs, or if no 53 # supported libc in use depend on dev-libs/ossp-uuid. For BSD systems, 54 # the libc includes UUID functions. 55 UTIL_LINUX_LIBC=( elibc_{glibc,uclibc,musl} ) 56 BSD_LIBC=( elibc_{Free,Net,Open}BSD ) 57 58 nest_usedep() { 59 local front back 60 while [[ ${#} -gt 1 ]]; do 61 front+="${1}? ( " 62 back+=" )" 63 shift 64 done 65 echo "${front}${1}${back}" 66 } 67 68 IUSE+=" ${UTIL_LINUX_LIBC[@]} ${BSD_LIBC[@]}" 69 CDEPEND+=" 70 uuid? ( 71 ${UTIL_LINUX_LIBC[@]/%/? ( sys-apps/util-linux )} 72 $(nest_usedep ${UTIL_LINUX_LIBC[@]/#/!} ${BSD_LIBC[@]/#/!} dev-libs/ossp-uuid) 73 )" 74 75 DEPEND="${CDEPEND} 76 !!<sys-apps/sandbox-2.0 77 sys-devel/bison 78 sys-devel/flex 79 nls? ( sys-devel/gettext ) 80 xml? ( virtual/pkgconfig ) 81 " 82 83 RDEPEND="${CDEPEND} 84 !dev-db/postgresql-docs:${SLOT} 85 !dev-db/postgresql-base:${SLOT} 86 !dev-db/postgresql-server:${SLOT} 87 selinux? ( sec-policy/selinux-postgresql ) 88 " 89 90 pkg_setup() { 91 use server && CONFIG_CHECK="~SYSVIPC" linux-info_pkg_setup 92 93 enewgroup postgres 70 94 enewuser postgres 70 /bin/sh /var/lib/postgresql postgres 95 96 use python && python-single-r1_pkg_setup 97 } 98 99 src_prepare() { 100 # Work around PPC{,64} compilation bug where bool is already defined 101 sed '/#ifndef __cplusplus/a #undef bool' -i src/include/c.h || die 102 103 # Set proper run directory 104 sed "s|\(PGSOCKET_DIR\s\+\)\"/tmp\"|\1\"${EPREFIX}/run/postgresql\"|" \ 105 -i src/include/pg_config_manual.h || die 106 107 # Rely on $PATH being in the proper order so that the correct 108 # install program is used for modules utilizing PGXS in both 109 # hardened and non-hardened environments. (Bug #528786) 110 sed 's/@install_bin@/install -c/' -i src/Makefile.global.in || die 111 112 use server || eapply "${FILESDIR}/${PN}-${SLOT}.3-no-server.patch" 113 114 if use pam ; then 115 sed -e "s/\(#define PGSQL_PAM_SERVICE \"postgresql\)/\1-${SLOT}/" \ 116 -i src/backend/libpq/auth.c || \ 117 die 'PGSQL_PAM_SERVICE rename failed.' 118 fi 119 120 eapply_user 121 } 122 123 src_configure() { 124 case ${CHOST} in 125 *-darwin*|*-solaris*) 126 use nls && append-libs intl 127 ;; 128 esac 129 130 export LDFLAGS_SL="${LDFLAGS}" 131 export LDFLAGS_EX="${LDFLAGS}" 132 133 local PO="${EPREFIX%/}" 134 135 local i uuid_config="" 136 if use uuid; then 137 for i in ${UTIL_LINUX_LIBC[@]}; do 138 use ${i} && uuid_config="--with-uuid=e2fs" 139 done 140 for i in ${BSD_LIBC[@]}; do 141 use ${i} && uuid_config="--with-uuid=bsd" 142 done 143 [[ -z $uuid_config ]] && uuid_config="--with-uuid=ossp" 144 fi 145 146 econf \ 147 --prefix="${PO}/usr/$(get_libdir)/postgresql-${SLOT}" \ 148 --datadir="${PO}/usr/share/postgresql-${SLOT}" \ 149 --docdir="${PO}/usr/share/doc/${PF}" \ 150 --includedir="${PO}/usr/include/postgresql-${SLOT}" \ 151 --mandir="${PO}/usr/share/postgresql-${SLOT}/man" \ 152 --sysconfdir="${PO}/etc/postgresql-${SLOT}" \ 153 --with-system-tzdata="${PO}/usr/share/zoneinfo" \ 154 $(use_enable !alpha spinlocks) \ 155 $(use_enable !pg_legacytimestamp integer-datetimes) \ 156 $(use_enable threads thread-safety) \ 157 $(use_with kerberos gssapi) \ 158 $(use_with ldap) \ 159 $(use_with pam) \ 160 $(use_with perl) \ 161 $(use_with python) \ 162 $(use_with readline) \ 163 $(use_with ssl openssl) \ 164 $(usex server "$(use_with systemd)" '--without-systemd') \ 165 $(use_with tcl) \ 166 ${uuid_config} \ 167 $(use_with xml libxml) \ 168 $(use_with xml libxslt) \ 169 $(use_with zlib) \ 170 $(use_enable nls nls "'$(l10n_get_locales)'") 171 } 172 173 src_compile() { 174 emake 175 emake -C contrib 176 } 177 178 src_install() { 179 emake DESTDIR="${D}" install 180 emake DESTDIR="${D}" install -C contrib 181 182 dodoc README HISTORY doc/{TODO,bug.template} 183 184 # man pages are already built, but if we have the target make them, 185 # they'll be generated from source before being installed so we 186 # manually install man pages. 187 # We use ${SLOT} instead of doman for postgresql.eselect 188 insinto /usr/share/postgresql-${SLOT}/man/ 189 doins -r doc/src/sgml/man{1,3,7} 190 if ! use server; then 191 # Remove man pages for non-existent binaries 192 for m in {initdb,pg_{controldata,ctl,resetxlog},post{gres,master}}; do 193 rm "${ED}/usr/share/postgresql-${SLOT}/man/man1/${m}.1" 194 done 195 fi 196 docompress /usr/share/postgresql-${SLOT}/man/man{1,3,7} 197 198 # Create slot specific man pages 199 local bn f mansec slotted_name 200 for mansec in 1 3 7 ; do 201 local rel_manpath="../../postgresql-${SLOT}/man/man${mansec}" 202 203 mkdir -p "${ED}"/usr/share/man/man${mansec} || die "making man dir" 204 pushd "${ED}"/usr/share/man/man${mansec} > /dev/null || die "pushd failed" 205 206 for f in "${ED}/usr/share/postgresql-${SLOT}/man/man${mansec}"/* ; do 207 bn=$(basename "${f}") 208 slotted_name=${bn%.${mansec}}${SLOT/.}.${mansec} 209 case ${bn} in 210 TABLE.7|WITH.7) 211 echo ".so ${rel_manpath}/SELECT.7" > ${slotted_name} 212 ;; 213 *) 214 echo ".so ${rel_manpath}/${bn}" > ${slotted_name} 215 ;; 216 esac 217 done 218 219 popd > /dev/null 220 done 221 222 insinto /etc/postgresql-${SLOT} 223 newins src/bin/psql/psqlrc.sample psqlrc 224 225 use static-libs || find "${ED}" -name '*.a' -delete 226 227 local f bn 228 for f in $(find "${ED}/usr/$(get_libdir)/postgresql-${SLOT}/bin" \ 229 -mindepth 1 -maxdepth 1) 230 do 231 bn=$(basename "${f}") 232 # Temporarily tack on tmp to workaround a file collision 233 # issue. This is only necessary for 9.7 and earlier. 10 never 234 # had this issue. 235 dosym "../$(get_libdir)/postgresql-${SLOT}/bin/${bn}" \ 236 "/usr/bin/${bn}${SLOT/.}tmp" 237 done 238 239 if use doc ; then 240 docinto html 241 dodoc doc/src/sgml/html/* 242 243 docinto sgml 244 dodoc doc/src/sgml/*.{sgml,dsl} 245 fi 246 247 if use server; then 248 sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \ 249 "${FILESDIR}/${PN}.confd-9.3" | newconfd - ${PN}-${SLOT} 250 251 sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \ 252 "${FILESDIR}/${PN}.init-9.3-r1" | newinitd - ${PN}-${SLOT} 253 254 if use systemd; then 255 sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \ 256 "${FILESDIR}/${PN}.service-9.6-r1" | \ 257 systemd_newunit - ${PN}-${SLOT}.service 258 systemd_newtmpfilesd "${FILESDIR}"/${PN}.tmpfiles ${PN}-${SLOT}.conf 259 fi 260 261 newbin "${FILESDIR}"/${PN}-check-db-dir ${PN}-${SLOT}-check-db-dir 262 263 use pam && pamd_mimic system-auth ${PN}-${SLOT} auth account session 264 265 if use prefix ; then 266 keepdir /run/postgresql 267 fperms 1775 /run/postgresql 268 fi 269 fi 270 } 271 272 pkg_preinst() { 273 # Find all of the slot-specific symlinks, if any, in /usr/bin (e.g., 274 # /usr/bin/psql96). They may have been created by the 275 # postgresql.eselect module, but they're handled within this ebuild 276 # now. It's alright if we momentarily delete /usr/bin/psql as it 277 # will be recreated by the eselect module in pkg_ppostinst(). This 278 # is only necessary for 9.7 and earlier. 10 and later were never 279 # handled in this manner. 280 local canonicalise 281 if type -p realpath > /dev/null; then 282 canonicalise=realpath 283 elif type -p readlink > /dev/null; then 284 canonicalise='readlink -f' 285 else 286 # can't die, subshell 287 die "No readlink nor realpath found, cannot canonicalise" 288 fi 289 290 local l 291 # First remove any symlinks in /usr/bin that may have been created 292 # by the old eselect 293 for l in $(find "${ROOT%/}/usr/bin" -mindepth 1 -maxdepth 1 -type l) ; do 294 if [[ $(${canonicalise} "${l}") == *postgresql-${SLOT}* ]] ; then 295 rm "${l}" || ewarn "Couldn't remove ${l}" 296 fi 297 done 298 299 # Then move the symlinks created by the ebuild to their proper place. 300 for l in "${ED}"/usr/bin/*tmp ; do 301 mv "${l}" "${l%tmp}" \ 302 || ewarn "Couldn't rename $(basename ${l}) to $(basename ${l%tmp})" 303 done 304 } 305 306 pkg_postinst() { 307 use server && use systemd && systemd_tmpfiles_create ${PN}-${SLOT}.conf 308 postgresql-config update 309 310 elog "If you need a global psqlrc-file, you can place it in:" 311 elog " ${EROOT%/}/etc/postgresql-${SLOT}/" 312 313 if use server ; then 314 elog 315 elog "Gentoo specific documentation:" 316 elog "https://wiki.gentoo.org/wiki/PostgreSQL" 317 elog 318 elog "Official documentation:" 319 elog "https://www.postgresql.org/docs/${SLOT}/static/index.html" 320 elog 321 elog "The default location of the Unix-domain socket is:" 322 elog " ${EROOT%/}/run/postgresql/" 323 elog 324 elog "Before initializing the database, you may want to edit PG_INITDB_OPTS" 325 elog "so that it contains your preferred locale in:" 326 elog " ${EROOT%/}/etc/conf.d/postgresql-${SLOT}" 327 elog 328 elog "Then, execute the following command to setup the initial database" 329 elog "environment:" 330 elog " emerge --config =${CATEGORY}/${PF}" 331 fi 332 } 333 334 pkg_prerm() { 335 if use server && [[ -z ${REPLACED_BY_VERSION} ]] ; then 336 ewarn "Have you dumped and/or migrated the ${SLOT} database cluster?" 337 ewarn "\thttps://wiki.gentoo.org/wiki/PostgreSQL/QuickStart#Migrating_PostgreSQL" 338 339 ebegin "Resuming removal in 10 seconds (Control-C to cancel)" 340 sleep 10 341 eend 0 342 fi 343 } 344 345 pkg_postrm() { 346 postgresql-config update 347 } 348 349 pkg_config() { 350 use server || die "USE flag 'server' not enabled. Nothing to configure." 351 352 [[ -f "${EROOT%/}/etc/conf.d/postgresql-${SLOT}" ]] \ 353 && source "${EROOT%/}/etc/conf.d/postgresql-${SLOT}" 354 [[ -z "${PGDATA}" ]] && PGDATA="${EROOT%/}/etc/postgresql-${SLOT}/" 355 [[ -z "${DATA_DIR}" ]] \ 356 && DATA_DIR="${EROOT%/}/var/lib/postgresql/${SLOT}/data" 357 358 # environment.bz2 may not contain the same locale as the current system 359 # locale. Unset and source from the current system locale. 360 if [ -f "${EROOT%/}/etc/env.d/02locale" ]; then 361 unset LANG 362 unset LC_CTYPE 363 unset LC_NUMERIC 364 unset LC_TIME 365 unset LC_COLLATE 366 unset LC_MONETARY 367 unset LC_MESSAGES 368 unset LC_ALL 369 source "${EROOT%/}/etc/env.d/02locale" 370 [ -n "${LANG}" ] && export LANG 371 [ -n "${LC_CTYPE}" ] && export LC_CTYPE 372 [ -n "${LC_NUMERIC}" ] && export LC_NUMERIC 373 [ -n "${LC_TIME}" ] && export LC_TIME 374 [ -n "${LC_COLLATE}" ] && export LC_COLLATE 375 [ -n "${LC_MONETARY}" ] && export LC_MONETARY 376 [ -n "${LC_MESSAGES}" ] && export LC_MESSAGES 377 [ -n "${LC_ALL}" ] && export LC_ALL 378 fi 379 380 einfo "You can modify the paths and options passed to initdb by editing:" 381 einfo " ${EROOT%/}/etc/conf.d/postgresql-${SLOT}" 382 einfo 383 einfo "Information on options that can be passed to initdb are found at:" 384 einfo " https://www.postgresql.org/docs/${SLOT}/static/creating-cluster.html" 385 einfo " https://www.postgresql.org/docs/${SLOT}/static/app-initdb.html" 386 einfo 387 einfo "PG_INITDB_OPTS is currently set to:" 388 if [[ -z "${PG_INITDB_OPTS}" ]] ; then 389 einfo " (none)" 390 else 391 einfo " ${PG_INITDB_OPTS}" 392 fi 393 einfo 394 einfo "Configuration files will be installed to:" 395 einfo " ${PGDATA}" 396 einfo 397 einfo "The database cluster will be created in:" 398 einfo " ${DATA_DIR}" 399 einfo 400 401 ebegin "Continuing initialization in 5 seconds (Control-C to cancel)" 402 sleep 5 403 eend 0 404 405 if [ -n "$(ls -A ${DATA_DIR} 2> /dev/null)" ] ; then 406 eerror "The given directory, '${DATA_DIR}', is not empty." 407 eerror "Modify DATA_DIR to point to an empty directory." 408 die "${DATA_DIR} is not empty." 409 fi 410 411 einfo "Creating the data directory ..." 412 if [[ ${EUID} == 0 ]] ; then 413 mkdir -p "${DATA_DIR}" 414 chown -Rf postgres:postgres "${DATA_DIR}" 415 chmod 0700 "${DATA_DIR}" 416 fi 417 418 einfo "Initializing the database ..." 419 420 if [[ ${EUID} == 0 ]] ; then 421 su postgres -c "${EROOT%/}/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb -D \"${DATA_DIR}\" ${PG_INITDB_OPTS}" 422 else 423 "${EROOT%/}"/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb -U postgres -D "${DATA_DIR}" ${PG_INITDB_OPTS} 424 fi 425 426 if [[ "${DATA_DIR%/}" != "${PGDATA%/}" ]] ; then 427 mv "${DATA_DIR%/}"/{pg_{hba,ident},postgresql}.conf "${PGDATA}" 428 ln -s "${PGDATA%/}"/{pg_{hba,ident},postgresql}.conf "${DATA_DIR%/}" 429 fi 430 431 # unix_socket_directory has no effect in postgresql.conf as it's 432 # overridden in the initscript 433 sed '/^#unix_socket_directories/,+1d' -i "${PGDATA%/}"/postgresql.conf 434 435 cat <<- EOF >> "${PGDATA%/}"/postgresql.conf 436 # This is here because of https://bugs.gentoo.org/show_bug.cgi?id=518522 437 # On the off-chance that you might need to work with UTF-8 encoded 438 # characters in PL/Perl 439 plperl.on_init = 'use utf8; use re; package utf8; require "utf8_heavy.pl";' 440 EOF 441 442 einfo "The autovacuum function, which was in contrib, has been moved to the main" 443 einfo "PostgreSQL functions starting with 8.1, and starting with 8.4 is now enabled" 444 einfo "by default. You can disable it in the cluster's:" 445 einfo " ${PGDATA%/}/postgresql.conf" 446 einfo 447 if ! use systemd; then 448 einfo "The PostgreSQL server, by default, will log events to:" 449 einfo " ${DATA_DIR%/}/postmaster.log" 450 einfo 451 fi 452 if use prefix ; then 453 einfo "The location of the configuration files have moved to:" 454 einfo " ${PGDATA}" 455 einfo "To start the server:" 456 einfo " pg_ctl start -D ${DATA_DIR} -o '-D ${PGDATA} --data-directory=${DATA_DIR}'" 457 einfo "To stop:" 458 einfo " pg_ctl stop -D ${DATA_DIR}" 459 einfo 460 einfo "Or move the configuration files back:" 461 einfo "mv ${PGDATA}*.conf ${DATA_DIR}" 462 elif use systemd; then 463 einfo "You should use the 'postgresql-${SLOT}.service' unit to run PostgreSQL" 464 einfo "instead of 'pg_ctl'." 465 else 466 einfo "You should use the '${EROOT%/}/etc/init.d/postgresql-${SLOT}' script to run PostgreSQL" 467 einfo "instead of 'pg_ctl'." 468 fi 469 } 470 471 src_test() { 472 if use server && [[ ${UID} -ne 0 ]] ; then 473 emake check 474 475 einfo "If you think other tests besides the regression tests are necessary, please" 476 einfo "submit a bug including a patch for this ebuild to enable them." 477 else 478 use server || \ 479 ewarn 'Tests cannot be run without the "server" use flag enabled.' 480 [[ ${UID} -eq 0 ]] || \ 481 ewarn 'Tests cannot be run as root. Enable "userpriv" in FEATURES.' 482 483 ewarn 'Skipping.' 484 fi 485 }