+NAME = baculum
+VERSION = 7.0.6b
+SAMPLETYPE = rpm-template
+SYSUSRDIR = /usr
+SYSCONFDIR = /etc
+SYSVARDIR = /var
+CONFDIR = $(SYSCONFDIR)/$(NAME)
+HTTPDCONFDIR = $(SYSCONFDIR)/httpd/conf.d
+UNITDIR = $(SYSUSRDIR)/lib/systemd/system
+WWWDIR = $(SYSUSRDIR)/share/$(NAME)/htdocs
+SELINUXDIR = $(SYSUSRDIR)/share/selinux/packages/$(NAME)
+CACHEDIR = $(SYSVARDIR)/cache/$(NAME)
+LOGDIR = $(SYSVARDIR)/log
+HTTPDLOGS = $(LOGDIR)/httpd
+LIGHTTPDLOGS = $(LOGDIR)/$(NAME)
-prefix = .
-builddir = $(prefix)/build
+# Internal application directories
datadir = protected
frameworkdir = framework
themesdir = themes
+cachedir = assets
+configdir = $(datadir)/Data
+configcachedir = $(datadir)/runtime
+samplesdir = examples/$(SAMPLETYPE)
datadirsrc = $(datadir)/Class \
- $(datadir)/Data \
$(datadir)/JavaScript \
$(datadir)/Lang \
$(datadir)/Layouts \
LICENSE \
README
-all: build
-
-build: prepare_build prepare_data prepare_externals prepare_themes
-
+build: prepare_build prepare_data prepare_externals prepare_themes setup
prepare_build:
- [ -d $(builddir) ] || mkdir -p $(builddir)
+ mkdir -p $(DESTDIR)$(SYSCONFDIR) \
+ $(DESTDIR)$(CONFDIR) \
+ $(DESTDIR)$(HTTPDCONFDIR) \
+ $(DESTDIR)$(UNITDIR) \
+ $(DESTDIR)$(WWWDIR) \
+ $(DESTDIR)$(SELINUXDIR) \
+ $(DESTDIR)$(LIGHTTPDLOGS) \
+ $(DESTDIR)$(CACHEDIR)
+ mkdir -p -m 700 $(DESTDIR)$(WWWDIR)/$(cachedir) \
+ $(DESTDIR)$(WWWDIR)/$(configdir) \
+ $(DESTDIR)$(WWWDIR)/$(configcachedir)
prepare_data: prepare_build
- [ -d "$(builddir)/$(datadir)" ] || mkdir -p $(builddir)/$(datadir)
- cp -ra $(datadirsrc) $(builddir)/$(datadir)
- cp -a $(datafilesrc) $(builddir)/$(datadir)
- cp -a $(miscfilesrc) $(builddir)
+ mkdir -p $(DESTDIR)$(WWWDIR)/$(datadir)
+ cp -ra $(datadirsrc) $(DESTDIR)$(WWWDIR)/$(datadir)
+ cp -a $(datafilesrc) $(DESTDIR)$(WWWDIR)/$(datadir)
+ cp -a $(miscfilesrc) $(DESTDIR)$(WWWDIR)/
prepare_externals: prepare_build
- cp -ra $(frameworkdir) $(builddir)
+ cp -ra $(frameworkdir) $(DESTDIR)$(WWWDIR)
prepare_themes: prepare_build
- cp -ra $(themesdir) $(builddir)
+ cp -ra $(themesdir) $(DESTDIR)$(WWWDIR)
+
+prepare_samples:
+ install -m 640 $(samplesdir)/$(NAME)-lighttpd.conf $(DESTDIR)$(CONFDIR)
+ install -m 644 $(samplesdir)/$(NAME)-lighttpd.service $(DESTDIR)$(UNITDIR)
+ install -m 640 $(samplesdir)/$(NAME)-apache.conf $(DESTDIR)$(HTTPDCONFDIR)/$(NAME).conf
+ install -m 600 $(samplesdir)/$(NAME).users $(DESTDIR)$(WWWDIR)/$(configdir)
-install: build
- [ -d $(INSTALL_ROOT) ] || mkdir -p $(INSTALL_ROOT)
- cp -ra $(builddir) $(INSTALL_ROOT)/
+setup: prepare_samples
+ sed -i -e "s#%DOCUMENTROOT#$(WWWDIR)#g" -e "s#%LOGDIR#$(HTTPDLOGS)#g" $(DESTDIR)$(HTTPDCONFDIR)/$(NAME).conf
+ sed -i -e "s#%DOCUMENTROOT#$(WWWDIR)#g" -e "s#%LOGDIR#$(LIGHTTPDLOGS)#g" $(DESTDIR)$(CONFDIR)/$(NAME)-lighttpd.conf
+ sed -i -e "s#%CONFDIR#$(CONFDIR)#g" $(DESTDIR)$(UNITDIR)/$(NAME)-lighttpd.service
--- /dev/null
+# Baculum WebGUI tool for Bacula Community
+#
+# Web Server Configuration
+#
+
+server.port = 9095
+server.username = "lighttpd"
+server.groupname = "lighttpd"
+server.document-root = "%DOCUMENTROOT"
+server.errorlog = "%LOGDIR/baculum-error.log"
+accesslog.filename = "%LOGDIR/baculum-access.log"
+server.pid-file = "/var/run/baculum.pid"
+
+server.modules = (
+ "mod_auth",
+ "mod_alias",
+ "mod_rewrite",
+ "mod_fastcgi",
+ "mod_accesslog"
+)
+
+auth.backend = "htpasswd"
+auth.backend.htpasswd.userfile = "%DOCUMENTROOT/protected/Data/baculum.users"
+auth.require = ( "/" => (
+ "method" => "basic",
+ "realm" => "Baculum Auth",
+ "require" => "valid-user"
+))
+
+index-file.names = ( "index.php" )
+
+static-file.exclude-extensions = ( ".php" )
+
+dir-listing.encoding = "utf-8"
+
+mimetype.assign = (
+ ".html" => "text/html",
+ ".gif" => "image/gif",
+ ".png" => "image/png",
+ ".ico" => "image/x-icon",
+ ".css" => "text/css",
+ ".js" => "application/javascript",
+)
+
+alias.url = (
+ "/" => "%DOCUMENTROOT/"
+)
+
+fastcgi.server = (".php"=>((
+ "bin-path"=>"/usr/bin/php-cgi",
+ "socket"=>"/tmp/php.sock",
+ "max-procs" => 1,
+ "bin-environment" => (
+ "PHP_FCGI_CHILDREN" => "4",
+ "PHP_FCGI_MAX_REQUESTS" => "10000"
+ ),
+ "bin-copy-environment" => (
+ "PATH", "SHELL", "USER"
+ ),
+ "broken-scriptfilename" => "enable"
+)))
+
+url.rewrite-once = (
+ "^/themes/(.+)$" => "/themes/$1",
+ "^/assets/(.+)$" => "/assets/$1",
+ "^/(.+)$" => "/index.php/$1"
+)
--- /dev/null
+Summary: WebGUI tool for Bacula Community program
+Name: baculum
+Version: 7.0.6
+Release: 0.3.b%{?dist}
+License: AGPLv3
+Group: Applications/Internet
+URL: http://bacula.org/
+Source0: http://bacula.org/downloads/baculum/baculum-7.0.6b.tar.gz
+Source1: baculum.users
+Source2: baculum-apache.conf
+Source3: baculum-lighttpd.conf
+Source4: baculum-lighttpd.service
+BuildRequires: systemd-units
+BuildRequires: selinux-policy
+BuildRequires: selinux-policy-devel
+BuildRequires: checkpolicy
+Requires: bacula-console
+# Lower version of PHP ( < 5.3.4) does not provide php-mysqlnd db driver
+# and from this reason the lowest is 5.3.4
+Requires: php >= 5.3.4
+Requires: php-bcmath
+Requires: php-common
+Requires: php-mbstring
+Requires: php-mysqlnd
+Requires: php-pdo
+Requires: php-pgsql
+Requires: php-xml
+BuildArch: noarch
+
+%description
+The Baculum program allows the user to administer and manage Bacula jobs.
+By using Baculum it is possible to execute backup/restore operations, monitor
+current Bacula jobs, media management and others. Baculum has integrated web
+console that communicates with Bacula bconsole program.
+
+%package selinux
+Summary: SELinux module for Baculum WebGUI tool
+Requires: %name = %version-%release
+Group: Applications/Internet
+Requires(post): policycoreutils-python
+Requires(preun): policycoreutils-python
+
+%description selinux
+This package provides an SELinux module for Baculum WebGUI tool.
+You should install this package if you are using SELinux, that Baculum
+can be run in enforcing mode.
+
+%package httpd
+Summary: Apache configuration for Baculum WebGUI tool
+Requires: %name = %version-%release
+Group: Applications/Internet
+Requires: httpd
+# This conflict field is required because Lighttpd and Apache
+# cannot listen on the same port at the same time. Even using diffeernt
+# ports cause problems like shared framework cache and
+# web server specific directories permissions (for lighttpd and apache
+# users).
+Conflicts: %{name}-lighttpd
+
+%description httpd
+This package provides the Apache configuration for Baculum WebGUI tool.
+By using this module it is possible to run Baculum in Apache environment.
+
+%package lighttpd
+Summary: Lighttpd configuration for Baculum WebGUI tool
+Requires: %name = %version-%release
+Group: Applications/Internet
+Requires: lighttpd
+Requires: lighttpd-fastcgi
+# This conflict field is required because Lighttpd and Apache
+# cannot listen on the same port at the same time. Even using diffeernt
+# ports cause problems like shared framework cache and
+# web server specific directories permissions (for lighttpd and apache
+# users).
+Conflicts: %{name}-httpd
+
+%description lighttpd
+This package provides the Lighttpd configuration for Baculum WebGUI tool.
+By using this module it is possible to run Baculum in Lighttpd environment.
+
+%prep
+%autosetup
+
+%build
+# Execute files preparation in build directory by Makefile
+make build
+# Compilation SELinuxu policies before loading them
+make -C examples/selinux/ -f %{_datadir}/selinux/devel/Makefile %{name}.pp
+
+%install
+mkdir -p %{buildroot}%{_datadir}/%{name}/htdocs/protected
+mkdir -p %{buildroot}%{_sysconfdir}/%{name}
+mkdir -p %{buildroot}%{_sysconfdir}/httpd/conf.d
+mkdir -p %{buildroot}%{_unitdir}
+mkdir -p %{buildroot}%{_localstatedir}/cache/%{name}
+mkdir -p %{buildroot}%{_var}/log/%{name}
+mkdir -p %{buildroot}%{_datadir}/selinux/packages/%{name}
+
+cp -ra build/. %{buildroot}%{_datadir}/%{name}/htdocs
+install -m 640 %{SOURCE2} %{buildroot}%{_sysconfdir}/httpd/conf.d/%{name}.conf
+install -m 640 %{SOURCE3} %{buildroot}%{_sysconfdir}/%{name}/
+install -m 644 %{SOURCE4} %{buildroot}%{_unitdir}/
+install -m 600 %{SOURCE1} %{buildroot}%{_datadir}/%{name}/htdocs/protected/Data/%{name}.users
+install -m 644 examples/selinux/%{name}.pp %{buildroot}%{_datadir}/selinux/packages/%{name}/%{name}.pp
+# these symbolic links indicates to Baculum's cache directory
+ln -s %{_localstatedir}/cache/%{name} %{buildroot}%{_datadir}/%{name}/htdocs/assets
+ln -s %{_localstatedir}/cache/%{name} %{buildroot}%{_datadir}/%{name}/htdocs/protected/runtime
+
+%post lighttpd
+%systemd_post baculum.service
+
+%post selinux
+if [ $1 -le 1 ] ; then
+# Write access is possible for web servers user only to two directories
+# - Data/ directory stores settings and web server HTTP Basic credentials
+# - /var/cache/baculum - cache used by framework in specific locations (assets/ and protected/runtime/)
+# by symbolic links to cache directory
+ semanage fcontext -a -t httpd_sys_rw_content_t '%{_datadir}/%{name}/htdocs/protected/Data(/.*)?' 2>/dev/null || :
+ restorecon -i -R '%{_datadir}/%{name}/htdocs/protected/Data' || :
+ semanage fcontext -a -t httpd_cache_t '%{_localstatedir}/cache/%{name}(/.*)?' 2>/dev/null || :
+ restorecon -i -R %{_localstatedir}/cache/%{name} || :
+ semodule -i %{_datadir}/selinux/packages/%{name}/%{name}.pp 2>/dev/null || :
+fi
+
+%preun
+if [ $1 -lt 1 ] ; then
+ # remove settings and logs if exist
+ [ ! -e %{_datadir}/%{name}/htdocs/protected/Data/settings.conf ] ||
+ rm %{_datadir}/%{name}/htdocs/protected/Data/settings.conf
+ [ ! -e %{_datadir}/%{name}/htdocs/protected/Data/baculum.log ] ||
+ rm %{_datadir}/%{name}/htdocs/protected/Data/baculum*.log
+fi
+
+%preun lighttpd
+%systemd_preun baculum-lighttpd.service
+
+%postun lighttpd
+%systemd_postun_with_restart baculum-lighttpd.service
+
+%postun selinux
+if [ $1 -eq 0 ] ; then
+ semanage fcontext -d -t httpd_sys_rw_content_t '%{_datadir}/%{name}/htdocs/protected/Data(/.*)?' 2>/dev/null || :
+ semanage fcontext -d -t httpd_cache_t '%{_localstatedir}/cache/%{name}(/.*)?' 2>/dev/null || :
+ semodule -r %{name} 2>/dev/null || :
+fi
+
+%files
+%defattr(-,root,root)
+# directory excluded here, because it needs to be provided
+# with selected web server privileges (lighttpd or apache)
+%exclude %{_datadir}/%{name}/htdocs/protected/Data/
+%{_datadir}/%{name}
+%license LICENSE
+%doc AUTHORS INSTALL README
+
+%files selinux
+%defattr(-,root,root)
+%{_datadir}/selinux/packages/%{name}/%{name}.pp
+
+%files httpd
+%defattr(644,root,root)
+# Apache logs are stored in /var/log/httpd/
+%config %{_sysconfdir}/httpd/conf.d/%{name}.conf
+%attr(700,apache,apache) %{_localstatedir}/cache/%{name}/
+%attr(-,apache,apache) %{_datadir}/%{name}/htdocs/protected/Data/
+
+%files lighttpd
+%defattr(644,root,root)
+# Lighttpd logs are stored in /var/log/baculum
+%attr(750,lighttpd,lighttpd) %{_var}/log/%{name}/
+%attr(700,lighttpd,lighttpd) %{_localstatedir}/cache/%{name}/
+%attr(-,lighttpd,lighttpd) %{_datadir}/%{name}/htdocs/protected/Data/
+%{_unitdir}/%{name}-lighttpd.service
+%config %{_sysconfdir}/%{name}/%{name}-lighttpd.conf
+
+%changelog
+ * Tue Jul 14 2015 Marcin Haba <marcin.haba@bacula.pl> - 7.0.6-0.3.b
+ - Separate to subpackage Lighttpd support
+ - Add Apache subpackage
+ - Use upstream Makefile to prepare build files
+ - Cache symlbolic links only in install section
+ - Add comments to Spec
+ - Compile SELinux policies instead of install pre-compiled
+ - Add source files: baculum.users, baculum-apache.conf
+ baculum-lighttpd.conf and baculum-lighttpd.service
+ * Mon Jul 13 2015 Marcin Haba <marcin.haba@bacula.pl> - 7.0.6-0.2.b
+ - Remove chkconfig and service dependencies from Spec
+ - Change Spec sections order
+ - Correct package description typos and errors
+ * Mon Jul 06 2015 Marcin Haba <marcin.haba@bacula.pl> - 7.0.6-0.1.b
+ - Spec create