Ticket #21866: bacula-3.0.2.ebuild

File bacula-3.0.2.ebuild, 14.6 KB (added by claunia@…, 15 years ago)

Gentoo's Bacula 3.0.2 ebuild

Line 
1# Copyright 1999-2009 Gentoo Foundation
2# Distributed under the terms of the GNU General Public License v2
3# $Header: /var/cvsroot/gentoo-x86/app-backup/bacula/bacula-3.0.2.ebuild,v 1.3 2009/09/30 16:20:33 ayoy Exp $
4
5EAPI="2"
6inherit eutils
7
8IUSE="bacula-clientonly bacula-console bacula-nodir bacula-nosd gnome ipv6 logwatch mysql postgres python qt4 readline sqlite +sqlite3 ssl static tcpd wxwindows X"
9# bacula-web bimagemgr brestore bweb
10KEYWORDS="~amd64 ~hppa ~ppc ~sparc ~x86"
11
12DESCRIPTION="Featureful client/server network backup suite"
13HOMEPAGE="http://www.bacula.org/"
14
15MY_PV=${PV/_beta/-b}
16MY_P=${PN}-${MY_PV}
17S=${WORKDIR}/${MY_P}
18#DOC_VER="${MY_PV}"
19#DOC_SRC_URI="mirror://sourceforge/bacula/${PN}-docs-${DOC_VER}.tar.bz2"
20#GUI_VER="${PV}"
21#GUI_SRC_URI="mirror://sourceforge/bacula/${PN}-gui-${GUI_VER}.tar.gz"
22SRC_URI="mirror://sourceforge/bacula/${MY_P}.tar.gz"
23#               doc? ( ${DOC_SRC_URI} )
24#               bacula-web? ( ${GUI_SRC_URI} )
25#               bimagemgr? ( ${GUI_SRC_URI} )
26#               brestore? ( ${GUI_SRC_URI} )
27#               bweb? ( ${GUI_SRC_URI} )
28
29LICENSE="GPL-2"
30SLOT="0"
31
32DEPEND="
33        >=sys-libs/zlib-1.1.4
34        dev-libs/gmp
35        !bacula-clientonly? (
36                postgres? ( >=virtual/postgresql-server-7.4 )
37                mysql? ( virtual/mysql )
38                sqlite? ( =dev-db/sqlite-2* )
39                sqlite3? ( >=dev-db/sqlite-3.0.0 )
40                virtual/mta
41        )
42        bacula-console? (
43                wxwindows? ( =x11-libs/wxGTK-2.6* )
44                qt4? (
45                        x11-libs/qt-svg:4
46                        >=x11-libs/qwt-5
47                )
48                gnome? (
49                        >=gnome-base/libgnome-2
50                        >=gnome-base/libgnomeui-2
51                        x11-libs/gksu
52                )
53        )
54        ssl? ( dev-libs/openssl )
55        logwatch? ( sys-apps/logwatch )
56        tcpd? ( >=sys-apps/tcp-wrappers-7.6 )
57        readline? ( >=sys-libs/readline-4.1 )
58        python? ( dev-lang/python[threads] )"
59#       doc? (
60#               virtual/ghostscript
61#               dev-tex/latex2html[png]
62#               app-text/dvipdfm
63#       )
64RDEPEND="${DEPEND}
65        !bacula-clientonly? (
66                sys-block/mtx
67                app-arch/mt-st
68        )"
69
70pkg_setup() {
71        local dbnum
72        declare -i dbnum=0
73        if ! useq bacula-clientonly; then
74                if useq mysql; then
75                        export mydbtype='mysql'
76                        let dbnum++
77                fi
78                if useq postgres; then
79                        export mydbtype='postgresql'
80                        let dbnum++
81                fi
82                if useq sqlite; then
83                        export mydbtype='sqlite'
84                        let dbnum++
85                fi
86                if useq sqlite3; then
87                        export mydbtype='sqlite3'
88                        let dbnum++
89                fi
90                if [[ "${dbnum}" -lt 1 ]]; then
91                        eerror
92                        eerror "To use ${P} it is required to set a database in the USE flags."
93                        eerror "Supported databases are mysql, postgresql, sqlite, sqlite3"
94                        eerror
95                        die "No database type selected."
96                elif [[ "${dbnum}" -gt 1 ]]; then
97                        eerror
98                        eerror "You have set ${P} to use multiple database types."
99                        eerror "I don't know which to set as the default!"
100                        eerror "You can use /etc/portage/package.use to set per-package USE flags"
101                        eerror "Set it so only one database type, mysql, postgres, sqlite, sqlite3"
102                        eerror
103                        die "Multiple database types selected."
104                fi
105        fi
106
107        # create the daemon group and user
108        if [ -z "$(egetent group bacula)" ]; then
109                enewgroup bacula
110                einfo
111                einfo "The group 'bacula' has been created. Any users you add to this"
112                einfo "group have access to files created by the daemons."
113                einfo
114        fi
115        if ! useq bacula-clientonly; then
116                if [ -z "$(egetent passwd bacula)" ]; then
117                        enewuser bacula -1 -1 /var/lib/bacula bacula,disk,tape,cdrom,cdrw
118                        einfo
119                        einfo "The user 'bacula' has been created.  Please see the bacula manual"
120                        einfo "for information about running bacula as a non-root user."
121                        einfo
122                fi
123        fi
124}
125
126src_prepare() {
127        # adjusts default configuration files for several binaries
128        # to /etc/bacula/<config> instead of ./<config>
129        pushd src && epatch "${FILESDIR}/${PV}/${PN}"-default-configs.patch && popd
130
131        # replaces (deprecated) gnomesu with gksu in the gnome menu files
132        useq bacula-console && useq gnome && epatch "${FILESDIR}/${PV}/${PN}"-gnomesu2gksu.diff
133
134        # apply upstream patches
135        #epatch "${FILESDIR}"/${PV}/${PV}-foo.patch
136}
137
138src_configure() {
139        local myconf=''
140
141        if useq bacula-clientonly; then
142                myconf="${myconf} \
143                        $(use_enable bacula-clientonly client-only) \
144                        $(use_enable static static-fd)"
145        else
146                myconf="${myconf} \
147                        --with-${mydbtype} \
148                        $(use_enable static static-tools) \
149                        $(use_enable static static-fd) \
150                        $(use_enable !bacula-nodir build-dird) \
151                        $(use_enable !bacula-nosd build-stored)"
152                if ! useq bacula-nodir; then
153                        myconf="${myconf} $(use_enable static static-dir)"
154                fi
155                if ! useq bacula-nosd; then
156                        myconf="${myconf} $(use_enable static static-sd)"
157                fi
158                case "${mydbtype}" in
159                        sqlite) ;;
160                        *) myconf="${myconf} --enable-batch-insert" ;;
161                esac
162        fi
163
164        if useq bacula-console; then
165                if useq qt4 && has_version '<x11-libs/qwt-5'; then
166                        eerror "x11-libs/qwt found in a version < 5, thus the"
167                        eerror "compilation of 'bat' would fail (see"
168                        eerror "http://bugs.gentoo.org/188477#c11 for details)."
169                        eerror "please either unmerge <x11-libs/qwt-5 or disable"
170                        eerror "the qt4 USE flag to disable building 'bat'."
171                        die "incompatible slotted qwt version found"
172                fi
173                myconf="${myconf} \
174                        $(use_with X x) \
175                        $(use_enable gnome) \
176                        $(use_enable gnome tray-monitor) \
177                        $(use_enable wxwindows bwx-console) \
178                        $(use_enable qt4 bat) \
179                        $(use_enable static static-cons)"
180        fi
181
182        myconf="${myconf} \
183                $(use_with python) \
184                $(use_enable readline) \
185                $(use_with readline readline /usr) \
186                $(use_with ssl openssl) \
187                $(use_enable ipv6) \
188                $(use_with tcpd tcp-wrappers)"
189
190        ./configure \
191                --prefix=/usr \
192                --mandir=/usr/share/man \
193                --with-pid-dir=/var/run \
194                --sysconfdir=/etc/bacula \
195                --infodir=/usr/share/info \
196                --with-subsys-dir=/var/lock/subsys \
197                --with-working-dir=/var/lib/bacula \
198                --with-scriptdir=/usr/libexec/bacula \
199                --with-dir-user=bacula \
200                --with-dir-group=bacula \
201                --with-sd-user=root \
202                --with-sd-group=bacula \
203                --with-fd-user=root \
204                --with-fd-group=bacula \
205                --enable-smartalloc \
206                --host=${CHOST} \
207                ${myconf} \
208                || die "configure failed"
209}
210
211src_compile() {
212        emake || die "emake failed"
213
214        # build various GUIs from bacula-gui tarball
215#       if useq bacula-web || useq bimagemgr || useq brestore || useq bweb; then
216#               pushd "${WORKDIR}/${PN}-gui-${GUI_VER}"
217#               local myconf_gui=''
218#               if useq bimagemgr; then
219#                       ## TODO FIXME: webapp-config? !apache?
220#                       myconf_gui="${myconf_gui} \
221#                               --with-bimagemgr-cgidir=/var/www/localhost/cgi-bin \
222#                               --with-bimagemgr-docdir=/var/www/localhost/htdocs \
223#                               --with-bimagemgr-binowner=root \
224#                               --with-bimagemgr-bingroup=root \
225#                               --with-bimagemgr-dataowner=apache \
226#                               --with-bimagemgr-datagroup=apache \
227#                               "
228#               fi
229#               ./configure \
230#                       --with-bacula="${S}" \
231#                       ${myconf} \
232#                       || die "configure for bacula-gui failed"
233#               ## TODO FIXME: install files (see bacula-gui.spec)
234#               if useq bacula-web; then
235#                       : install
236#               fi
237#               if useq bimagemgr; then
238#                       : install
239#               fi
240#               if useq brestore; then
241#                       : install
242#               fi
243#               if useq bweb; then
244#                       : install
245#               fi
246#               popd
247#       fi
248
249        # build docs from bacula-docs tarball
250#       if useq doc; then
251#               pushd "${WORKDIR}/${PN}-docs-${DOC_VER}"
252#               ./configure \
253#                       --with-bacula="${S}" \
254#                       || die "configure for bacula-docs failed"
255#               emake -j1 || die "emake for bacula-docs failed"
256#               popd
257#       fi
258}
259
260src_install() {
261        emake DESTDIR="${D}" install || die "emake install failed"
262
263        # install bat when enabled (for some reason ./configure doesn't pick this up)
264        if useq bacula-console && useq qt4; then
265                dosbin "${S}"/src/qt-console/.libs/bat
266        fi
267
268        # remove some scripts we don't need at all
269        rm -f "${D}"/usr/libexec/bacula/{bacula,bacula-ctl-dir,bacula-ctl-fd,bacula-ctl-sd,startmysql,stopmysql}
270
271        # rename statically linked apps
272        if useq static; then
273                pushd "${D}"/usr/sbin
274                mv static-bacula-fd bacula-fd
275                mv static-bconsole bconsole
276                if ! useq bacula-clientonly; then
277                        mv static-bacula-dir bacula-dir
278                        mv static-bacula-sd bacula-sd
279                fi
280                if useq bacula-console && useq gnome; then
281                        mv static-gnome-console gnome-console
282                fi
283                if useq bacula-console && useq qt4; then
284                        mv static-bat bat
285                fi
286                popd
287        fi
288
289        # gnome-console menu entries using gksu
290        if useq bacula-console && useq gnome; then
291                emake DESTDIR="${D}" install-menu-xsu \
292                        || die "Failed to install gnome menu files"
293        fi
294
295        # extra files which 'make install' doesn't cover
296        if ! useq bacula-clientonly; then
297            # the database update scripts
298                diropts -m0750
299                insinto /usr/libexec/bacula/updatedb
300                insopts -m0754
301                doins "${S}"/updatedb/*
302                fperms 0640 /usr/libexec/bacula/updatedb/README
303
304                # the logrotate configuration
305                # (now unconditional wrt bug #258187)
306                diropts -m0755
307                insinto /etc/logrotate.d
308                insopts -m0644
309                newins "${S}"/scripts/logrotate bacula
310
311                # the logwatch scripts
312                if useq logwatch; then
313                        diropts -m0750
314                        dodir /etc/log.d/scripts/services
315                        dodir /etc/log.d/scripts/shared
316                        dodir /etc/log.d/conf/logfiles
317                        dodir /etc/log.d/conf/services
318                        cd "${S}"/scripts/logwatch
319                        emake DESTDIR="${D}" install || die "Failed to install logwatch scripts"
320                        cd "${S}"
321                fi
322        fi
323
324        # remove unwanted files
325        if ! use bacula-console; then
326                rm -vf "${D}"/etc/bacula/bconsole.conf
327                rm -vf "${D}"/usr/sbin/bconsole
328                rm -vf "${D}"/usr/libexec/bacula/bconsole
329        fi
330        if ! ( use bacula-console && use gnome ); then
331                rm -vf "${D}"/usr/share/man/man1/bacula-bgnome-console.1*
332                rm -vf "${D}"/usr/libexec/bacula/gconsole
333        fi
334        if ! ( use bacula-console && use wxwindows ); then
335                rm -vf "${D}"/usr/share/man/man1/bacula-bwxconsole.1*
336        fi
337        if use bacula-clientonly; then
338                rm -vf "${D}"/usr/share/man/man1/bat.1*
339                rm -vf "${D}"/usr/share/man/man1/bacula-tray-monitor.1*
340        fi
341        if use bacula-clientonly || use bacula-nodir; then
342                rm -vf "${D}"/usr/share/man/man8/bacula-dir.8*
343                rm -vf "${D}"/usr/share/man/man8/dbcheck.8*
344                rm -vf "${D}"/usr/share/man/man1/bsmtp.1*
345                rm -vf "${D}"/usr/libexec/bacula/create_*_database
346                rm -vf "${D}"/usr/libexec/bacula/drop_*_database
347                rm -vf "${D}"/usr/libexec/bacula/make_*_tables
348                rm -vf "${D}"/usr/libexec/bacula/update_*_tables
349                rm -vf "${D}"/usr/libexec/bacula/drop_*_tables
350                rm -vf "${D}"/usr/libexec/bacula/grant_*_privileges
351                rm -vf "${D}"/usr/libexec/bacula/*_catalog_backup
352        fi
353        if use bacula-clientonly || use bacula-nosd; then
354                rm -vf "${D}"/usr/share/man/man8/bacula-sd.8*
355                rm -vf "${D}"/usr/share/man/man8/bcopy.8*
356                rm -vf "${D}"/usr/share/man/man8/bextract.8*
357                rm -vf "${D}"/usr/share/man/man8/bls.8*
358                rm -vf "${D}"/usr/share/man/man8/bscan.8*
359                rm -vf "${D}"/usr/share/man/man8/btape.8*
360                rm -vf "${D}"/usr/libexec/bacula/disk-changer
361                rm -vf "${D}"/usr/libexec/bacula/mtx-changer
362                rm -vf "${D}"/usr/libexec/bacula/dvd-handler
363        fi
364
365        # documentation
366        for d in "${S}"/{ChangeLog,LICENSE,README,ReleaseNotes,SUPPORT,kernstodo,projects}; do
367                dodoc "${d}"
368        done
369#       if useq doc; then
370#               for i in catalog concepts console developers install problems utility; do
371#                       dodoc "${WORKDIR}/${PN}-docs-${DOC_VER}"/manuals/en/${i}/${i}.pdf
372#               done
373#       fi
374
375        # setup init scripts
376        myscripts="bacula-fd"
377        if ! useq bacula-clientonly; then
378                if ! useq bacula-nodir; then
379                        myscripts="${myscripts} bacula-dir"
380                fi
381                if ! useq bacula-nosd; then
382                        myscripts="${myscripts} bacula-sd"
383                fi
384        fi
385        for script in ${myscripts}; do
386                # copy over init script and config to a temporary location
387                # so we can modify them as needed
388                cp "${FILESDIR}/${PV}/${script}"-conf "${T}/${script}".conf || die "failed to copy ${script}-conf"
389                cp "${FILESDIR}/${PV}/${script}"-init "${T}/${script}".init || die "failed to copy ${script}-init"
390                # set database dependancy for the director init scripts
391                case "${script}" in
392                        bacula-dir)
393                                case "${mydbtype}" in
394                                        sqlite*)
395                                                # sqlite + sqlite3 databases don't have daemons
396                                                sed -i -e 's/need "%database%"/:/g' "${T}/${script}".init
397                                                ;;
398                                        *)
399                                                # all other databases have daemons
400                                                sed -i -e "s:%database%:${mydbtype}:" "${T}/${script}".init
401                                                ;;
402                                esac
403                                ;;
404                        *)
405                                ;;
406                esac
407                # install init script and config
408                newinitd "${T}/${script}".init "${script}"
409                newconfd "${T}/${script}".conf "${script}"
410        done
411
412        # make sure the working directory exists
413        diropts -m0750
414        keepdir /var/lib/bacula
415
416        # make sure bacula group can execute bacula libexec scripts
417        fowners -R root:bacula /usr/libexec/bacula
418}
419
420pkg_postinst() {
421        if useq bacula-clientonly; then
422                fowners root:bacula /var/lib/bacula
423        else
424                fowners bacula:bacula /var/lib/bacula
425        fi
426
427        if ! useq bacula-clientonly && ! useq bacula-nodir; then
428                einfo
429                einfo "If this is a new install, you must create the ${mydbtype} databases with:"
430                einfo "  /usr/libexec/bacula/create_${mydbtype}_database"
431                einfo "  /usr/libexec/bacula/make_${mydbtype}_tables"
432                einfo "  /usr/libexec/bacula/grant_${mydbtype}_privileges"
433                einfo
434                einfo "If you're upgrading from a major release, you must upgrade your bacula catalog database."
435                einfo "Please read the manual chapter for how to upgrade your database."
436                einfo "You can find database upgrade scripts in /usr/libexec/bacula/updatedb."
437                einfo
438        fi
439
440        ewarn
441        ewarn "*** ATTENTION! IMPORTANT! ATTENTION! IMPORTANT! ATTENTION! IMPORTANT! ***"
442        ewarn
443        ewarn "The bundled catalog backup script (/usr/libexec/bacula/make_catalog_backup)"
444        ewarn "is INSECURE. The script needs to be called with the database access password"
445        ewarn "as a command line parameter, thus, the password can be seen from any other"
446        ewarn "user on the system (if not using some non-default hardened/patched kernel"
447        ewarn "with /proc restrictions)!"
448        ewarn
449        ewarn "Our advice is to NOT USE the bundled script at all, but instead use something"
450        ewarn "like this in your catalog backup job definition (example using MySQL as the"
451        ewarn "catalog database):"
452        ewarn
453        ewarn "RunBeforeJob = \"mysqldump --defaults-file=/etc/bacula/my.cnf --opt -f -r /var/lib/bacula/bacula.sql bacula\""
454        ewarn "RunAfterJob  = \"rm -f /var/lib/bacula/bacula.sql\""
455        ewarn
456        ewarn "This requires you to put all database access parameters (like user, host and"
457        ewarn "password) into a dedicated file (/etc/bacula/my.cnf in this example) which"
458        ewarn "can (and should!) be secured by simple filesystem access permissions."
459        ewarn
460        ewarn "See also:"
461        ewarn "http://www.bacula.org/en/rel-manual/Bacula_Security_Issues.html"
462        ewarn "http://www.bacula.org/en/rel-manual/Catalog_Maintenance.html#BackingUpBaculaSecurityConsiderations"
463        ewarn
464        ewarn "*** ATTENTION! IMPORTANT! ATTENTION! IMPORTANT! ATTENTION! IMPORTANT! ***"
465        ewarn
466        ebeep 10
467        epause 20
468
469        ewarn
470        ewarn "*** NOTICE! NOTICE! NOTICE! NOTICE! NOTICE! NOTICE! NOTICE! NOTICE! ***"
471        ewarn
472        ewarn "Support for the bacula all-in-one init script has been removed from"
473        ewarn "this release -- if you were previously using the all-in-one init"
474        ewarn "script, please switch to using the individual init scripts now:"
475        ewarn
476        ewarn "- bacula-dir: bacula director       (for the central bacula server)"
477        ewarn "- bacula-fd:  bacula file daemon    (for hosts to be backed up)"
478        ewarn "- bacula-sd:  bacula storage daemon (for hosts storing the backup data)"
479        ewarn
480        ewarn "*** NOTICE! NOTICE! NOTICE! NOTICE! NOTICE! NOTICE! NOTICE! NOTICE! ***"
481        ewarn
482        ebeep 5
483        epause 10
484}