summaryrefslogtreecommitdiff
blob: 3c1b8ac0ee8375f52aeca5a632b0e963cbf77ef6 (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
# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

EAPI="6"

inherit python-utils-r1 systemd user

DESCRIPTION="The open-source database for the realtime web."
HOMEPAGE="https://www.rethinkdb.com"
LICENSE="AGPL-3"
SLOT="0"
SRC_URI="https://download.rethinkdb.com/dist/${P}.tgz"

KEYWORDS="~amd64 ~x86"
IUSE="doc +jemalloc tcmalloc"

# TODO: rly need some webui libs ?
DEPEND=">=dev-libs/re2-0.2016.05.01
		dev-cpp/gtest
		dev-libs/boost
		dev-libs/protobuf-c
		net-misc/curl
		sys-libs/libunwind
		sys-libs/ncurses:=
		jemalloc? ( >=dev-libs/jemalloc-4.0 )
		tcmalloc? ( dev-util/google-perftools )"
RDEPEND="${DEPEND}"
REQUIRED_USE="?? ( tcmalloc jemalloc )"

pkg_setup() {
	enewgroup rethinkdb
	enewuser rethinkdb -1 -1 /var/lib/${PN} rethinkdb
}

PATCHES=(
	"${FILESDIR}"/${PN}-2.3.5-gcc6.patch
	"${FILESDIR}"/${PN}-2.3.5-libressl.patch
)

src_prepare() {
	default

	# don't use predefined configuration
	rm configure.default

	# fix doc and init script auto installation
	sed -e 's/ install-docs / /g' -e 's/ install-init / /g' -i mk/install.mk || die

	# default config for Gentoo
	# fix default pid-file path
	# fix default directory path
	# fix default log-file path
	sed -e 's@/var/run/@/run/@g' \
		-e 's@/var/lib/rethinkdb/@/var/lib/rethinkdb/instances.d/@g' \
		-e 's@/var/log/rethinkdb@/var/log/rethinkdb/default.log@g' \
		-i packaging/assets/config/default.conf.sample || die

	# proper CXX declaration
	sed -e "s/CXX=\$(.*/CXX=$(tc-getCXX)/g" -i configure || die

	# respect user CXXFLAGS optimizations
	sed -e 's/-O3//g' -i src/build.mk || die
}

src_configure() {
	local conf_opts=(
		--prefix="/usr"
		--sysconfdir="/etc"
		--localstatedir="/var"
		--static=none
		--dynamic=gtest
		--dynamic=re2
	)
	if use jemalloc; then
		conf_opts+=(--with-jemalloc)
	elif use tcmalloc; then
		conf_opts+=(--with-tcmalloc)
	else
		conf_opts+=(--with-system-malloc)
	fi
	./configure "${conf_opts[@]}"
}

src_compile() {
	python_export python2.7 EPYTHON
	emake VERBOSE=1
}

src_install() {
	emake DESTDIR="${D}" VERBOSE=1 install

	for x in /var/{lib,log}/${PN}; do
		keepdir "${x}"
		fowners rethinkdb:rethinkdb "${x}"
	done

	newconfd "${FILESDIR}/rethinkdb.confd" rethinkdb
	newinitd "${FILESDIR}/rethinkdb.initd" rethinkdb

	systemd_newunit "${FILESDIR}/"${PN}.service "rethinkdb@.service"
	systemd_newtmpfilesd "${FILESDIR}"/${PN}.tmpfilesd "rethinkdb.conf"

	use doc && dodoc COPYRIGHT NOTES.md README.md
}

pkg_config() {
	einfo "This will prepare a new RethinkDB instance. Press Control-C to abort."

	einfo "Enter the name for the new instance: "
	read instance_name
	[[ -z "${instance_name}" ]] && die "Invalid instance name"

	local instance_data="/var/lib/rethinkdb/instances.d/${instance_name}"
	local instance_config="/etc/rethinkdb/instances.d/${instance_name}.conf"
	if [[ -e "${instance_data}" || -e "${instance_config}" ]]; then
		eerror "An instance with the same name already exists:"
		eerror "Check ${instance_data} or ${instance_config}."
		die "Instance already exists"
	fi

	/usr/bin/rethinkdb create -d "${instance_data}" &>/dev/null \
		|| die "Creating instance failed"
	chown -R rethinkdb:rethinkdb "${instance_data}" \
		|| die "Correcting permissions for instance failed"
	cp /etc/rethinkdb/default.conf.sample "${instance_config}" \
		|| die "Creating configuration file failed"
	sed -e "s:^# \(directory=\).*$:\1${instance_data}:" \
		-i "${instance_config}" \
		|| die "Modifying configuration file failed"
	ln -s /etc/init.d/rethinkdb "/etc/init.d/rethinkdb.${instance_name}" \
		|| die "Creating init script symlink failed"

	einfo "Successfully created the instance at ${instance_data}."
	einfo "To change the default settings edit the configuration file:"
	einfo "${instance_config}"
	einfo " "
	einfo "To start your instance, run:"
	einfo "/etc/init.d/rethinkdb.${instance_name} start"
}