# Copyright 1999-2015 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Id$ EAPI=5 SCONS_MIN_VERSION="2.3.0" CHECKREQS_DISK_BUILD="2400M" CHECKREQS_DISK_USR="512M" CHECKREQS_MEMORY="1024M" inherit eutils flag-o-matic multilib pax-utils scons-utils systemd user versionator check-reqs MY_P=${PN}-src-r${PV/_rc/-rc} DESCRIPTION="A high-performance, open source, schema-free document-oriented database" HOMEPAGE="http://www.mongodb.org" SRC_URI="https://fastdl.mongodb.org/src/${MY_P}.tar.gz" LICENSE="AGPL-3 Apache-2.0" SLOT="0" KEYWORDS="~amd64 ~x86" IUSE="debug kerberos libressl mms-agent ssl +tools test" RDEPEND=">=app-arch/snappy-1.1.2 >=dev-cpp/yaml-cpp-0.5.1 >=dev-libs/boost-1.56[threads(+)] >=dev-libs/libpcre-8.36[cxx] dev-libs/snowball-stemmer net-libs/libpcap >=sys-libs/zlib-1.2.8 mms-agent? ( app-admin/mms-agent ) ssl? ( !libressl? ( >=dev-libs/openssl-1.0.1g:0= ) libressl? ( dev-libs/libressl:= ) )" DEPEND="${RDEPEND} >=sys-devel/gcc-4.8.2:* sys-libs/ncurses sys-libs/readline dev-util/valgrind kerberos? ( dev-libs/cyrus-sasl[kerberos] ) test? ( dev-python/pymongo dev-python/pyyaml )" PDEPEND="tools? ( >=app-admin/mongo-tools-${PV} )" S=${WORKDIR}/${MY_P} pkg_setup() { if [[ ${REPLACING_VERSIONS} < 3.0 ]]; then ewarn "!! ERROR !!" ewarn "You cannot directly upgrade a mongodb version 2.x" ewarn "deployment to ${PN}-${PV}. Instead, you must upgrade" ewarn "to a 3.0.x version first and then upgrade that to" ewarn "${PN}-${PV}. " ewarn " " ewarn "Terminating ebuild." die "Terminating ebuild." fi # Determine if a mongod is running at this time # Issue warning and die if server is running. ps -A | grep -q '[m]ongod' if [ "$?" -eq "0" ]; then ewarn "!! ERROR!!" ewarn "You must shut down the running mongod server" ewarn "before continuing with this ebuild." ewarn "Shut down the mongod server and try again." die "Terminating ebuild." fi # If the user mongodb already exists we do not neeed # to add these users to the system. If the user and # group do not exist, we create them. getent group mongodb > /dev/null 2&>1 if [ "$?" -eq "1" ]; then enewgroup mongodb fi getent passwd mongodb > /dev/null 2&>1 if [ "$?" -eq "1" ]; then enewuser mongodb -1 -1 /var/lib/${PN} mongodb fi # Maintainer notes # # --use-system-tcmalloc is strongly NOT recommended: # https://www.mongodb.org/about/contributors/tutorial/build-mongodb-from-source/ # # --c++11 is required by scons instead of auto detection: # https://jira.mongodb.org/browse/SERVER-19661 scons_opts+=" --disable-warnings-as-errors" scons_opts+=" --use-system-boost" scons_opts+=" --use-system-pcre" scons_opts+=" --use-system-snappy" scons_opts+=" --use-system-stemmer" scons_opts+=" --use-system-yaml" scons_opts+=" --use-system-zlib" if use debug; then scons_opts+=" --dbg=on" fi if use prefix; then scons_opts+=" --cpppath=${EPREFIX}/usr/include" scons_opts+=" --libpath=${EPREFIX}/usr/$(get_libdir)" fi if use kerberos; then scons_opts+=" --use-sasl-client" fi if use ssl; then scons_opts+=" --ssl" fi } src_prepare() { epatch "${FILESDIR}/${PN}-3.2.0-fix-scons.patch" } src_compile() { # respect mongoDB upstream's basic recommendations # see bug #536688 and #526114 if ! use debug; then filter-flags '-m*' filter-flags '-O?' fi escons ${scons_opts} core tools } src_install() { escons ${scons_opts} --nostrip install --prefix="${ED}"/usr for x in /var/{lib,log}/${PN}; do keepdir "${x}" fowners mongodb:mongodb "${x}" done doman debian/mongo*.1 dodoc README docs/building.md newinitd "${FILESDIR}/${PN}.initd-r2" ${PN} newconfd "${FILESDIR}/${PN}.confd-r2" ${PN} newinitd "${FILESDIR}/${PN/db/s}.initd-r2" ${PN/db/s} newconfd "${FILESDIR}/${PN/db/s}.confd-r2" ${PN/db/s} insinto /etc newins "${FILESDIR}/${PN}.conf-r3" ${PN}.conf newins "${FILESDIR}/${PN/db/s}.conf-r2" ${PN/db/s}.conf systemd_dounit "${FILESDIR}/${PN}.service" insinto /etc/logrotate.d/ newins "${FILESDIR}/${PN}.logrotate" ${PN} # see bug #526114 pax-mark emr "${ED}"/usr/bin/{mongo,mongod,mongos} } pkg_preinst() { # wrt bug #461466 if [[ "$(get_libdir)" == "lib64" ]]; then rmdir "${ED}"/usr/lib/ &>/dev/null fi } src_test() { # this one test fails rm jstests/core/repl_write_threads_start_param.js ./buildscripts/resmoke.py --dbpathPrefix=test --suites core || die "Tests failed" } pkg_postinst() { ewarn "!! IMPORTANT !!" ewarn " " ewarn "Make sure you check your configuration file in /etc/${PN}.conf" ewarn "For more information about configuration options, see:" ewarn " " ewarn " https://docs.mongodb.org/manual/reference/configuration-options/" ewarn " " ewarn "If upgrading from an older deployment of ${PN}, Make sure you also follow" ewarn "the upgrading process :" ewarn " https://docs.mongodb.org/manual/release-notes/3.2-upgrade/" ewarn " " ewarn "MongoDB 3.2 uses the WiredTiger storage engine by default for new deployments. For" ewarn "existing deployments in the version 3.0 series, MongoDB 3.2 will use the mmapv1 " ewarn "storage engine if your existing databases were created with it. If you want to convert" ewarn "from the mmapv1 storage engine to WiredTiger, you will need to dump your databases" ewarn "with mongodump. Set the storage engine and specify a new dbpath in /etc/${PN}.conf." ewarn "Create the dbpath and chmod it so that user mongodb has owner and group rwx permissions." ewarn "You may also want to change the name of the logfile that mongod writes to." ewarn " " ewarn " https://docs.mongodb.org/release-notes/3.0-upgrade/#change-storage-engine-to-wiredtiger" ewarn " " ewarn "After emerging this package, remember to start the mongod server again. If needed, " ewarn "restore databases with mongorestore." }