#! /bin/bash # Copyright (C) 2004 Enrico Scholz # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. function showHelp() { echo \ $"Usage: clamd-gen --service= --version= --release= --license= --username=>USERNAME> " exit 0 } function rpm.generatePreamble() { cat < sysv Requires(post): %name = %epoch:%version-%release Requires(post): diffutils mktemp %__chkconfig Requires(preun): %__chkconfig Requires(pre): %_initrddir Requires(postun): %_initrddir %package minit Summary: minit initscripts for a %service clamav-server Group: System Environment/Daemons Provides: init(%name) = minit Conflicts: init(%name) < minit Conflicts: init(%name) > minit Requires(post): %name = %epoch:%version-%release Requires(post): diffutils mktemp Requires(pre): minit-setup Requires(postun): minit-setup Requires(triggers): minit-tools %description Basic setup for a clamav server for '%service'. %description sysv Basic setup for a clamav server for '%service'. This package contains initscripts for SysV based systems. %description minit Basic setup for a clamav server for '%service'. This package contains initscripts for minit based systems. EOF } function rpm.genBody() { cat <<"XEOFX" %prep %build %install rm -rf $RPM_BUILD_ROOT %__install -d -m755 $RPM_BUILD_ROOT{%minitsvcdir,%_sbindir,%rundir,/var/log} d=/usr/share/clamav/template function subst { src=$d/$1 dst=$RPM_BUILD_ROOT$2 %__install -d -m755 $(dirname "$dst") sed -e 's!^\(#?LogFile \).*!\1%logfile!g; s!^#?\(LocalSocket \).*!\1%rundir/clamd.sock!g; s!^#?\(PidFile \).*!\1%rundir/clamd.pid!g; s!!%service!g; s!!%username!g;' "$src" >"$dst" chmod --reference "$src" "$dst" } subst clamd.conf %conffile subst clamd.logrotate %_sysconfdir/logrotate.d/clamd.%service %if 0%{!?_without_sysv:1} subst clamd.sysconfig %_sysconfdir/sysconfig/clamd.%service subst clamd.init %_initrddir/clamd.%service %endif ln -s clamd $RPM_BUILD_ROOT%_sbindir/clamd.%service touch $RPM_BUILD_ROOT%logfile touch $RPM_BUILD_ROOT%rundir/clamd.sock %if 0%{!?_without_minit:1} ln -s %_sbindir/clamd.%service $RPM_BUILD_ROOT%minitsvcdir/run touch $RPM_BUILD_ROOT%minitsvcdir/respawn cat <$RPM_BUILD_ROOT%minitsvcdir/params -c %conffile EOF %endif %clean rm -rf $RPM_BUILD_ROOT %triggerin minit -- %baseservice minit-svc add services/clamd.%service services/%baseservice/ %triggerun minit -- %baseservice test "$1" != 0 -a "$2" != 0 || \ minit-svc del services/clamd.%service services/%baseservice/ %post minit d=$(mktemp /tmp/clamd.%service.XXXXXX) sed -e 's!^#Foreground!Foreground!' "%conffile" >"$d" grep -q '^Foreground' $d || echo 'Foreground' >>$d cmp -s "$d" %conffile || cat "$d" >"%conffile" rm -f "$d" %post sysv d=$(mktemp /tmp/clamd.%service.XXXXXX) sed -e 's!^Foreground!#Foreground!' "%conffile" >"$d" cmp -s "$d" %conffile || cat "$d" >"%conffile" rm -f "$d" %__chkconfig --add %name %preun sysv test "$1" != 0 || %__chkconfig --del %name XEOFX } function rpm.genFiles { cat <<"EOF" %files %defattr(-,root,root,-) %doc %config(noreplace) %verify(not size md5 mtime) %attr(0620,root,%username) %logfile %config(noreplace) %verify(not mtime) %conffile %config(noreplace) %verify(not mtime) %_sysconfdir/logrotate.d/clamd.%service %_sbindir/clamd.%service %dir %attr(0700,%username,root) %rundir %ghost %rundir/clamd.sock %if 0%{!?_without_sysv:1} %files sysv %defattr(-,root,root,-) %config %verify(not mtime) %_initrddir/clamd.%service %config(noreplace) %verify(not mtime) %_sysconfdir/sysconfig/clamd.%service %endif %if 0%{!?_without_minit:1} %files minit %defattr(-,root,root,-) %dir %minitsvcdir %config(noreplace) %verify(not mtime) %minitsvcdir/params %config %minitsvcdir/run %minitsvcdir/respawn %endif EOF } SERVICE= VERSION= RELEASE= LICENSE= USERNAME= tmp=$(getopt -o '' --long service:,version:,release:,license:,username:,help -n "$0" -- "$@") || exit 1 eval set -- "$tmp" while true; do case "$1" in (--help) showHelp $0;; (--service) SERVICE=$2; shift;; (--version) VERSION=$2; shift;; (--release) RELEASE=$2; shift;; (--license) LICENSE=$2; shift;; (--username) USERNAME=$2; shift;; (--) shift; break;; esac shift done for i in SERVICE VERSION RELEASE LICENSE USERNAME; do eval tmp=\$${i} test "$tmp" || { echo $"No value for $i specified; assuming @${i}@" >&2; eval $i=@${i}@; } done rpm.generatePreamble rpm.generateHeader rpm.genBody rpm.genFiles