summaryrefslogtreecommitdiff
blob: 1abf6b917c50156b5a4c1fd5e86618be4eb5832d (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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
# Copyright 1999-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/app-backup/bacula/bacula-2.0.3.ebuild,v 1.9 2007/08/21 15:50:10 fmccor Exp $

#
# TODO:
# - install stuff from examples/:
#	- examples/nagios/ + add nagios USE flag etc.
#	  (see also example/reports/check_bacula_pools.sh which is newer
#	  than examples/nagios/check_bacula_pools.sh)
#   - examples/autochangers/
#   - examples/devices/
#   - examples/python/
#   - examples/reports/baculareport.pl
# - correctly filter unneeded /usr/libexec/bacula/ stuff depending
#   on selected USE flags, e.g. bacula-clientonly
# - install bacula-web and/or bweb from bacula-gui
#

inherit eutils

IUSE="bacula-clientonly bacula-console bacula-nodir bacula-nosd bacula-split-init doc gnome logrotate logwatch mysql postgres python readline sqlite sqlite3 ssl static tcpd wxwindows X"
KEYWORDS="~amd64 hppa ppc sparc x86"

DESCRIPTION="Featureful client/server network backup suite"
HOMEPAGE="http://www.bacula.org/"

DOC_VER="${PV}"
SRC_URI="mirror://sourceforge/bacula/${P}.tar.gz
		doc? ( mirror://sourceforge/bacula/${PN}-docs-${DOC_VER}.tar.gz )"

LICENSE="GPL-2"
SLOT="0"

DEPEND="
	>=sys-libs/zlib-1.1.4
	dev-libs/gmp
	!bacula-clientonly? (
		postgres? ( >=dev-db/postgresql-7.4.0 )
		mysql? ( virtual/mysql )
		sqlite? ( =dev-db/sqlite-2* )
		sqlite3? ( >=dev-db/sqlite-3.0.0 )
		virtual/mta
	)
	bacula-console? (
		wxwindows? ( =x11-libs/wxGTK-2.6* )
		gnome? (
			>=gnome-base/libgnome-2
			x11-libs/gksu
		)
	)
	ssl? ( dev-libs/openssl )
	logrotate? ( app-admin/logrotate )
	logwatch? ( sys-apps/logwatch )
	tcpd? ( >=sys-apps/tcp-wrappers-7.6 )
	readline? ( >=sys-libs/readline-4.1 )
	doc? (
		virtual/ghostscript
		dev-tex/latex2html
	)"
RDEPEND="${DEPEND}
	!bacula-clientonly? (
		sys-block/mtx
		app-arch/mt-st
	)"

pkg_setup() {
	local dbnum
	declare -i dbnum=0
	if ! useq bacula-clientonly; then
		if useq mysql; then
			export mydbtype='mysql'
			let dbnum++
		fi
		if useq postgres; then
			export mydbtype='postgresql'
			let dbnum++
		fi
		if useq sqlite; then
			export mydbtype='sqlite'
			let dbnum++
		fi
		if useq sqlite3; then
			export mydbtype='sqlite3'
			let dbnum++
		fi
		if [[ "${dbnum}" -lt 1 ]]; then
			eerror
			eerror "To use ${P} it is required to set a database in the USE flags."
			eerror "Supported databases are mysql, postgresql, sqlite, sqlite3"
			eerror
			die "No database type selected."
		elif [[ "${dbnum}" -gt 1 ]]; then
			eerror
			eerror "You have set ${P} to use multiple database types."
			eerror "I don't know which to set as the default!"
			eerror "You can use /etc/portage/package.use to set per-package USE flags"
			eerror "Set it so only one database type, mysql, postgres, sqlite, sqlite3"
			eerror
			die "Multiple database types selected."
		fi
	fi

	# create the daemon group and user
	if [ -z "$(egetent group bacula)" ]; then
		enewgroup bacula
		einfo
		einfo "The group 'bacula' has been created. Any users you add to this"
		einfo "group have access to files created by the daemons."
		einfo
	fi
	if ! useq bacula-clientonly; then
		if [ -z "$(egetent passwd bacula)" ]; then
			enewuser bacula -1 -1 /var/lib/bacula bacula,disk,tape,cdrom,cdrw
			einfo
			einfo "The user 'bacula' has been created.  Please see the bacula manual"
			einfo "for information about running bacula as a non-root user."
			einfo
		fi
	fi
}

src_unpack() {
	unpack ${A}
	cd ${S}

	# adjusts default configuration files for several binaries
	# to /etc/bacula/<config> instead of ./<config>
	pushd src && epatch "${FILESDIR}/${P}"-default-configs.patch && popd

	# replaces (deprecated) gnomesu with gksu in the gnome menu files
	useq bacula-console && useq gnome && epatch "${FILESDIR}/${P}"-gnomesu2gksu.diff
}

src_compile() {
	local myconf=''

	if useq bacula-clientonly; then
		myconf="${myconf} \
			$(use_enable bacula-clientonly client-only) \
			$(use_enable static static-fd)"
	else
		myconf="${myconf} \
			--with-${mydbtype} \
			$(use_enable static static-tools) \
			$(use_enable static static-fd) \
			$(use_enable !bacula-nodir build-dird) \
			$(use_enable !bacula-nosd build-stored)"
		if ! useq bacula-nodir; then
			myconf="${myconf} $(use_enable static static-dir)"
		fi
		if ! useq bacula-nosd; then
			myconf="${myconf} $(use_enable static static-sd)"
		fi

	fi

	if useq bacula-console; then
		myconf="${myconf} \
			$(use_with X x) \
			$(use_enable gnome) \
			$(use_enable gnome tray-monitor) \
			$(use_enable wxwindows wx-console) \
			$(use_enable static static-cons)"
	fi

	myconf="${myconf} \
		$(use_with python) \
		$(use_with readline) \
		$(use_with ssl openssl) \
		$(use_with tcpd tcp-wrappers)"

	./configure \
		--prefix=/usr \
		--mandir=/usr/share/man \
		--with-pid-dir=/var/run \
		--sysconfdir=/etc/bacula \
		--infodir=/usr/share/info \
		--with-subsys-dir=/var/lock/subsys \
		--with-working-dir=/var/lib/bacula \
		--with-scriptdir=/usr/libexec/bacula \
		--with-dir-user=bacula \
		--with-dir-group=bacula \
		--with-sd-user=root \
		--with-sd-group=bacula \
		--with-fd-user=root \
		--with-fd-group=bacula \
		--enable-smartalloc \
		--host=${CHOST} \
		${myconf} \
		|| die "configure failed"

	emake || die "emake failed"

	# build docs from bacula-docs tarball
	if useq doc; then
		pushd "${WORKDIR}/${PN}-docs-${DOC_VER}"

		./configure \
			--with-bacula=${S} \
			|| die "configure for bacula-docs failed"

		# the main Makefile tries to build stuff in
		# ./developer/ and ./bacula-web/, which is
		# unfortunately broken in 2.0.3, so we only
		# build stuff in ./manual/, which works.
		pushd manual
		emake -j1 || die "emake for bacula-docs failed"
		popd

		popd
	fi
}

src_install() {
	emake DESTDIR="${D}" install || die "emake install failed"

	# remove some scripts we don't need at all
	rm -f "${D}"/usr/libexec/bacula/{bacula,bacula-ctl-dir,bacula-ctl-fd,bacula-ctl-sd,startmysql,stopmysql}

	# rename statically linked apps
	if useq static; then
		pushd "${D}"/usr/sbin
		mv static-bacula-fd bacula-fd
		mv static-bconsole bconsole
		if ! useq bacula-clientonly; then
			mv static-bacula-dir bacula-dir
			mv static-bacula-sd bacula-sd
		fi
		if useq bacula-console && useq gnome; then
			mv static-gnome-console gnome-console
		fi
		popd
	fi

	# gnome-console menu entries using gksu
	if useq bacula-console && useq gnome; then
		emake DESTDIR="${D}" install-menu-xsu \
			|| die "Failed to install gnome menu files"
	fi

	# extra files which 'make install' doesn't cover
	if ! useq bacula-clientonly; then
	    # the database update scripts
		diropts -m0750
		insinto /usr/libexec/bacula/updatedb
		insopts -m0754
		doins "${S}"/updatedb/*
		fperms 0640 /usr/libexec/bacula/updatedb/README

		# the logrotate configuration
		if useq logrotate; then
			diropts -m0755
			insinto /etc/logrotate.d
			insopts -m0644
			newins "${S}"/scripts/logrotate bacula
		fi

		# the logwatch scripts
		if useq logwatch; then
			diropts -m0750
			dodir /etc/log.d/scripts/services
			dodir /etc/log.d/conf/logfiles
			dodir /etc/log.d/conf/services
			cd "${S}"/scripts/logwatch
			emake DESTDIR="${D}" install || die "Failed to install logwatch scripts"
			cd "${S}"
		fi
	fi

	# documentation
	for d in "${S}"/{ChangeLog,LICENSE,README,ReleaseNotes,SUPPORT,kernstodo,projects}; do
		dodoc "${d}"
	done
	# FIXME: developers and bacula-web documentation is broken with 2.0.3 :-(
	if useq doc; then
#!		dodoc "${WORKDIR}/${PN}-docs-${DOC_VER}"/developers/developers.pdf
		dodoc "${WORKDIR}/${PN}-docs-${DOC_VER}"/manual/bacula.pdf
		diropts -m0755
#!		dodir /usr/share/doc/"${PF}"/developers
		dodir /usr/share/doc/"${PF}"/manual
		insopts -m0644
#!		insinto /usr/share/doc/"${PF}"/developers
#!		doins "${WORKDIR}/${PN}-docs-${DOC_VER}"/developers/developers/*
		insinto /usr/share/doc/"${PF}"/manual
		doins "${WORKDIR}/${PN}-docs-${DOC_VER}"/manual/bacula/*
	fi

	# setup init scripts
	myservices="fd"
	if ! useq bacula-clientonly; then
		if ! useq bacula-nodir; then
			myservices="${myservices} dir"
		fi
		if ! useq bacula-nosd; then
			myservices="${myservices} sd"
		fi
	fi
	if useq bacula-split-init; then
		myscripts=""
		for service in ${myservices}; do
			myscripts="${myscripts} bacula-${service}"
		done
	else
		myscripts="bacula-all"
	fi
	for script in ${myscripts}; do
		# copy over init script and config to a temporary location
		# so we can modify them as needed
		cp "${FILESDIR}/${PV}/${script}"-conf "${T}/${script}".conf
		cp "${FILESDIR}/${PV}/${script}"-init "${T}/${script}".init
		# set database dependancy for the all-in-one and director init scripts
		case "${mydbtype}" in
			sqlite*)
				# sqlite + sqlite3 databases don't have daemons
				sed -i -e "s:%database%::" "${T}/${script}".init
				;;
			*)
				# all other databases have daemons
				sed -i -e "s:%database%:${mydbtype}:" "${T}/${script}".init
				;;
		esac
		# set services for the all-in-one init script
		sed -i -e "s:%services%:${myservices}:" "${T}/${script}".conf
		# install init script and config
		newinitd "${T}/${script}".init "${script}"
		newconfd "${T}/${script}".conf "${script}"
	done

	# make sure the working directory exists
	diropts -m0750
	keepdir /var/lib/bacula
}

pkg_postinst() {
	if useq bacula-clientonly; then
		fowners root:bacula /var/lib/bacula
	else
		fowners bacula:bacula /var/lib/bacula
	fi

	if ! useq bacula-clientonly && ! useq bacula-nodir; then
		einfo
		einfo "If this is a new install, you must create the ${mydbtype} databases with:"
		einfo "  /usr/libexec/bacula/create_${mydbtype}_database"
		einfo "  /usr/libexec/bacula/make_${mydbtype}_tables"
		einfo "  /usr/libexec/bacula/grant_${mydbtype}_privileges"
		einfo
		einfo "If you're upgrading from a major release, you must upgrade your bacula catalog database."
		einfo "Please read the manual chapter for how to upgrade your database."
		einfo "You can find database upgrade scripts in /usr/libexec/bacula/updatedb."
		einfo
	fi
}