Bladeren bron

Completely repair package and implement features in ticket #202

Michael Schloh von Bennewitz 22 jaren geleden
bovenliggende
commit
1a910d0984
4 gewijzigde bestanden met toevoegingen van 283 en 49 verwijderingen
  1. 51 3
      powerdns/fsl.powerdns
  2. 94 0
      powerdns/powerdns.patch
  3. 63 34
      powerdns/powerdns.spec
  4. 75 12
      powerdns/rc.powerdns

+ 51 - 3
powerdns/fsl.powerdns

@@ -2,14 +2,62 @@
 ##  fsl.powerdns -- OSSP fsl configuration
 ##
 
-ident (powerdns)/.+ q{
+ident (pdns)/.+ q{
     prefix(
         prefix="%b %d %H:%M:%S %N <%L> $1[%P]: "
     )
     -> {
         debug: file(
-            path="@l_prefix@/var/powerdns/powerdns.log",
-            perm=0600
+            path="@l_prefix@/var/powerdns/pdns.log",
+            perm=0660, jitter=1, monitor=3600
+        )
+    }
+};
+
+ident (bindbe)/.+ q{
+    prefix(
+        prefix="%b %d %H:%M:%S %N <%L> $1[%P]: "
+    )
+    -> {
+        debug: file(
+            path="@l_prefix@/var/powerdns/bindbe.log",
+            perm=0660, jitter=1, monitor=3600
+        )
+    }
+};
+
+ident (bind2be)/.+ q{
+    prefix(
+        prefix="%b %d %H:%M:%S %N <%L> $1[%P]: "
+    )
+    -> {
+        debug: file(
+            path="@l_prefix@/var/powerdns/bind2be.log",
+            perm=0660, jitter=1, monitor=3600
+        )
+    }
+};
+
+ident (randbe)/.+ q{
+    prefix(
+        prefix="%b %d %H:%M:%S %N <%L> $1[%P]: "
+    )
+    -> {
+        debug: file(
+            path="@l_prefix@/var/powerdns/randbe.log",
+            perm=0660, jitter=1, monitor=3600
+        )
+    }
+};
+
+ident (gsqlbe)/.+ q{
+    prefix(
+        prefix="%b %d %H:%M:%S %N <%L> $1[%P]: "
+    )
+    -> {
+        debug: file(
+            path="@l_prefix@/var/powerdns/gsqlbe.log",
+            perm=0660, jitter=1, monitor=3600
         )
     }
 };

+ 94 - 0
powerdns/powerdns.patch

@@ -0,0 +1,94 @@
+diff -Naur pdns-2.9.11.orig/pdns/backends/bind/bindbackend.cc pdns-2.9.11/pdns/backends/bind/bindbackend.cc
+--- pdns-2.9.11.orig/pdns/backends/bind/bindbackend.cc	2003-08-22 15:33:31.000000000 +0200
++++ pdns-2.9.11/pdns/backends/bind/bindbackend.cc	2003-10-09 18:24:43.000000000 +0200
+@@ -40,9 +40,21 @@
+ #include "misc.hh"
+ #include "dynlistener.hh"
+ #include "lock.hh"
++
++#undef L
++#define L ::bindLog()
++
+ using namespace std;
+ 
+ 
++// use own logger across corresponding classes
++// to properly identify log text from BindBackend
++Logger &bindLog(void)
++{
++  static Logger lbind("bindbe");
++  return lbind;
++}
++
+ cmap_t BindBackend::d_qnames;
+ map<int,vector<vector<BBResourceRecord>* > > BindBackend::d_zone_id_map;  
+ set<string> BindBackend::s_contents;
+diff -Naur pdns-2.9.11.orig/pdns/backends/bind/bindbackend2.cc pdns-2.9.11/pdns/backends/bind/bindbackend2.cc
+--- pdns-2.9.11.orig/pdns/backends/bind/bindbackend2.cc	2003-08-22 15:33:31.000000000 +0200
++++ pdns-2.9.11/pdns/backends/bind/bindbackend2.cc	2003-10-09 18:24:11.000000000 +0200
+@@ -40,8 +40,21 @@
+ #include "misc.hh"
+ #include "dynlistener.hh"
+ #include "lock.hh"
++
++#undef L
++#define L ::bind2Log()
++
+ using namespace std;
+ 
++
++// use own logger across corresponding classes
++// to properly identify log text from Bind2Backend
++Logger &bind2Log(void)
++{
++  static Logger lbind2("bind2be");
++  return lbind2;
++}
++
+ /** new scheme of things:
+     we have zone-id map
+     a zone-id has a vector of DNSResourceRecords */
+diff -Naur pdns-2.9.11.orig/pdns/backends/gsql/gsqlbackend.cc pdns-2.9.11/pdns/backends/gsql/gsqlbackend.cc
+--- pdns-2.9.11.orig/pdns/backends/gsql/gsqlbackend.cc	2003-08-22 15:33:31.000000000 +0200
++++ pdns-2.9.11/pdns/backends/gsql/gsqlbackend.cc	2003-10-09 18:25:07.000000000 +0200
+@@ -17,6 +17,18 @@
+ 
+ #include <sstream>
+ 
++#undef L
++#define L ::gsqlLog()
++
++
++// use own logger across corresponding classes
++// to properly identify log text from GSQLBackend
++Logger &gsqlLog(void)
++{
++  static Logger lgsql("gsql");
++  return lgsql;
++}
++
+ void GSQLBackend::setNotified(u_int32_t domain_id, u_int32_t serial)
+ {
+   char output[1024];
+diff -Naur pdns-2.9.11.orig/pdns/randombackend.cc pdns-2.9.11/pdns/randombackend.cc
+--- pdns-2.9.11.orig/pdns/randombackend.cc	2003-08-22 14:57:14.000000000 +0200
++++ pdns-2.9.11/pdns/randombackend.cc	2003-10-09 18:25:23.000000000 +0200
+@@ -24,6 +24,18 @@
+ #include "ahuexception.hh"
+ #include "logger.hh"
+ 
++#undef L
++#define L ::randLog()
++
++
++// use own logger across corresponding classes
++// to properly identify log text from RandomBackend
++Logger &randLog(void)
++{
++  static Logger lrand("randbe");
++  return lrand;
++}
++
+ /* FIRST PART */
+ class RandomBackend : public DNSBackend
+ {

+ 63 - 34
powerdns/powerdns.spec

@@ -23,19 +23,17 @@
 ##  SUCH DAMAGE.
 ##
 
-#   FIXME: mlelstv: JUNK because not well tested and no config
-
 #   package information
 Name:         powerdns
 Summary:      PowerDNS high performance authoritative-only name server
 URL:          http://www.powerdns.com/products/powerdns/
 Vendor:       PowerDNS.COM BV
 Packager:     The OpenPKG Project
-Distribution: OpenPKG [JUNK]
+Distribution: OpenPKG [EVAL]
 Group:        DNS
 License:      GPL
 Version:      2.9.11
-Release:      20030822
+Release:      20031009
 
 #   package options
 %option       with_fsl   yes
@@ -48,6 +46,7 @@ Source0:      http://downloads.powerdns.com/releases/pdns-%{version}.tar.gz
 Source1:      rc.powerdns
 Source2:      fsl.powerdns
 Source3:      powerdnssetup
+Patch0:       powerdns.patch
 
 #   build information
 Prefix:       %{l_prefix}
@@ -55,8 +54,8 @@ BuildRoot:    %{l_buildroot}
 BuildPreReq:  OpenPKG, openpkg >= 20030718
 PreReq:       OpenPKG, openpkg >= 20030718
 %if "%{with_fsl}" == "yes"
-BuildPreReq:  fsl >= 1.2.0
-PreReq:       fsl >= 1.2.0
+BuildPreReq:  fsl >= 1.3.0
+PreReq:       fsl >= 1.3.0
 %endif
 %if "%{with_mysql}" == "yes"
 BuildPreReq:  mysql
@@ -71,20 +70,31 @@ AutoReqProv:  no
 Conflicts:    bind, bind8
 
 %description
-    The PowerDNS name server is a modern, advanced and high performance
-    authoritative-only nameserver. It is written from scratch and
-    conforms to all the relevant DNS standards documents. The PowerDNS
-    name server utilizes a flexible backend architecture which can
-    access DNS information from any data source. This includes file
-    formats, Bind zone files, relational databases or LDAP directories.
-    By connecting directly to a database, no 'reloading' is needed.
-    Changes committed to the database are effective immediately. If you
-    have specific needs for your DNS infrastructure then you can use the
-    Backend Developers Kit to write the 'glue' between PowerDNS and your
-    data or logic.
+    The PowerDNS name server is a modern, advanced and high
+    performance authoritative-only nameserver. It is written
+    from scratch in ISO C++ and conforms to all the relevant
+    DNS standards documents. The PowerDNS name server utilizes
+    a flexible backend architecture which can access DNS
+    information from any data source. This includes many file
+    formats, Bind zone files, or LDAP directories. PowerDNS
+    can connect directly to a relational database as well, and
+    benefit from immediate zone updates on any changes to the
+    database (no traditional reloading is needed). Lastly, a
+    Backend Developers Kit exists to negotiate between
+    PowerDNS and your data or logic.
 
 %prep
     %setup -q -n pdns-%{version}
+    %patch -p1
+    %{l_shtool} subst \
+        -e 's;\([^a-zA-Z0-9]\)PC\([^a-zA-Z0-9]\);\1PCa\2;g' \
+        pdns/packethandler.cc \
+        pdns/tcpreceiver.cc \
+        pdns/ueberbackend.cc \
+        pdns/dynhandler.cc \
+        pdns/dnsproxy.cc \
+        pdns/common_startup.cc \
+        pdns/common_startup.hh
 
 %build
     MODULES=""
@@ -101,10 +111,9 @@ Conflicts:    bind, bind8
     CC="%{l_cc}" \
     CXX="%{l_cxx}" \
     CFLAGS="%{l_cflags -O}" \
-    CXXFLAGS="%{l_cxxflags -O} -DDLLIMPORT=" \
-    CPPFLAGS="%{l_cppflags} -DDLLIMPORT=" \
-    LDFLAGS="%{l_ldflags} %{l_fsl_ldflags}"
-    LIBS="%{l_fsl_libs}"
+    CXXFLAGS="%{l_cxxflags -O}" \
+    CPPFLAGS="%{l_cppflags}" \
+    LDFLAGS="%{l_fsl_ldflags}" \
     ./configure \
         --prefix=%{l_prefix} \
         --sysconfdir=%{l_prefix}/etc/powerdns \
@@ -125,13 +134,14 @@ Conflicts:    bind, bind8
         --with-modules="$MODULES" \
         --with-dynmodules="" \
         --disable-shared
-         %{l_make} %{l_mflags -O} \
-            CXXFLAGS="%{l_cxxflags -O} -DDLLIMPORT= -DHAVE_NAMESPACE_STD" \
-            CPPFLAGS="%{l_cppflags} -DDLLIMPORT= -DHAVE_NAMESPACE_STD"
+    %{l_make} %{l_mflags -O} LDADD="%{l_fsl_libs}"
 
 %install
     rm -rf $RPM_BUILD_ROOT
+    %{l_shtool} mkdir -f -p -m 755 $RPM_BUILD_ROOT%{l_prefix}/var/powerdns
     %{l_make} %{l_mflags} install AM_MAKEFLAGS="DESTDIR=$RPM_BUILD_ROOT"
+    strip $RPM_BUILD_ROOT%{l_prefix}/bin/*  >/dev/null 2>&1 || true
+    strip $RPM_BUILD_ROOT%{l_prefix}/sbin/* >/dev/null 2>&1 || true
 
     #   clean up installation
     rm -rf $RPM_BUILD_ROOT%{l_prefix}/lib
@@ -142,15 +152,24 @@ Conflicts:    bind, bind8
     %{l_shtool} subst %{l_value -s -a} \
         $RPM_BUILD_ROOT%{l_prefix}/etc/powerdns/pdns.conf
 
+    #   provide some reasonable default configuration values
+    %{l_shtool} subst \
+        -e 's;# \(daemon=\)no;\1yes;' \
+        -e 's;# \(launch=\);\1bind;' \
+        -e 's;# \(local-address=\)0.0.0.0;\1127.0.0.1;' \
+        -e 's;# \(logfile=\)pdns.log;\1%{l_prefix}/var/powerdns/pdns.log;' \
+        -e 's;# \(setgid=\);\1%{l_mgid};' \
+        -e 's;# \(setuid=\);\1%{l_muid};' \
+        -e 's;# \(socket-dir=\)/var/run;\1%{l_prefix}/var/powerdns;' \
+        -e 's;# \(use-logfile=\)no;\1yes;' \
+        $RPM_BUILD_ROOT%{l_prefix}/etc/powerdns/pdns.conf
+
     #   install run-command script
-    %{l_shtool} mkdir -f -p -m 755 \
-        $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d
+    %{l_shtool} mkdir -f -p -m 755 $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d
     %{l_shtool} install -c -m 755 %{l_value -s -a} \
         %{SOURCE rc.powerdns} $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d/
 
     #   install setup script
-    %{l_shtool} mkdir -p -m 755 \
-        $RPM_BUILD_ROOT%{l_prefix}/sbin
     %{l_shtool} install -c -m 755 \
         %{SOURCE powerdnssetup} $RPM_BUILD_ROOT%{l_prefix}/sbin/
 
@@ -159,18 +178,14 @@ Conflicts:    bind, bind8
     %{l_shtool} install -c -m 644 %{l_value -s -a} \
         %{SOURCE fsl.powerdns} \
         $RPM_BUILD_ROOT%{l_prefix}/etc/fsl/
-    %{l_shtool} mkdir -f -p -m 755 \
-        $RPM_BUILD_ROOT%{l_prefix}/var/powerdns
-
-    strip $RPM_BUILD_ROOT%{l_prefix}/bin/*  >/dev/null 2>&1 || true
-    strip $RPM_BUILD_ROOT%{l_prefix}/sbin/* >/dev/null 2>&1 || true
 
     #   determine installation files
     %{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT \
         %{l_files_std} \
         '%not %dir %{l_prefix}/etc/fsl' \
-        '%attr(775,%{l_musr},%{l_rgrp}) %{l_prefix}/var/powerdns' \
         '%config %{l_prefix}/etc/fsl/fsl.powerdns' \
+        '%dir %attr(0775,%{l_susr},%{l_mgrp}) %{l_prefix}/var/powerdns' \
+        '%dir %attr(0700,%{l_susr},%{l_mgrp}) %{l_prefix}/etc/powerdns' \
         '%config %attr(0600,%{l_susr},%{l_mgrp}) %{l_prefix}/etc/powerdns/*'
 
 %files -f files
@@ -178,3 +193,17 @@ Conflicts:    bind, bind8
 %clean
     rm -rf $RPM_BUILD_ROOT
 
+%post
+    #   after upgrade, restart service
+    [ $1 -eq 2 ] || exit 0
+    eval `%{l_rc} powerdns status 2>/dev/null`
+    [ ".$powerdns_active" = .yes ] && %{l_rc} powerdns restart
+    exit 0
+
+%preun
+    #   before erase, stop service and remove log files
+    [ $1 -eq 0 ] || exit 0
+    %{l_rc} powerdns stop 2>/dev/null
+    rm -f $RPM_INSTALL_PREFIX/var/powerdns/*.log* >/dev/null 2>&1 || true
+    exit 0
+

+ 75 - 12
powerdns/rc.powerdns

@@ -5,30 +5,93 @@
 
 %config
     powerdns_enable="$openpkg_rc_def"
-    powerdns_log_prolog="true"
-    powerdns_log_epilog="true"
-    powerdns_log_numfiles="10"
-    powerdns_log_minsize="1M"
-    powerdns_log_complevel="9"
+    powerdns_pdns_file="@l_prefix@/var/powerdns/pdns.log"
+    powerdns_pdns_prolog="true"
+    powerdns_pdns_epilog="true"
+    powerdns_pdns_numfiles="10"
+    powerdns_pdns_minsize="1M"
+    powerdns_pdns_complevel="9"
+    powerdns_bindbe_file="@l_prefix@/var/powerdns/bindbe.log"
+    powerdns_bindbe_prolog="true"
+    powerdns_bindbe_epilog="true"
+    powerdns_bindbe_numfiles="10"
+    powerdns_bindbe_minsize="1M"
+    powerdns_bindbe_complevel="9"
+    powerdns_bind2be_file="@l_prefix@/var/powerdns/bind2be.log"
+    powerdns_bind2be_prolog="true"
+    powerdns_bind2be_epilog="true"
+    powerdns_bind2be_numfiles="10"
+    powerdns_bind2be_minsize="1M"
+    powerdns_bind2be_complevel="9"
+    powerdns_gsqlbe_file="@l_prefix@/var/powerdns/gsqlbe.log"
+    powerdns_gsqlbe_prolog="true"
+    powerdns_gsqlbe_epilog="true"
+    powerdns_gsqlbe_numfiles="10"
+    powerdns_gsqlbe_minsize="1M"
+    powerdns_gsqlbe_complevel="9"
+
+%common
+    powerdns_pidfile="@l_prefix@/var/powerdns/pdns.pid"
+    powerdns_sckfile="@l_prefix@/var/powerdns/pdns.controlsocket"
+    powerdns_cfgfile="@l_prefix@/etc/powerdns/pdns.conf"
+    powerdns_signal () {
+        [ -f $powerdns_pidfile ] && kill -$1 `cat $powerdns_pidfile`
+    }
+
+%status -u @l_susr@ -o
+    powerdns_usable="unknown"
+    powerdns_active="no"
+    rcService powerdns enable yes && \
+        powerdns_signal 0 && powerdns_active="yes"
+    echo "powerdns_enable=\"$powerdns_enable\""
+    echo "powerdns_usable=\"$powerdns_usable\""
+    echo "powerdns_active=\"$powerdns_active\""
 
 %start -u @l_susr@
     rcService powerdns enable yes || exit 0
+    rcService powerdns active yes && exit 0
     @l_prefix@/sbin/pdns_server --daemon=yes
 
 %stop -u @l_susr@
     rcService powerdns enable yes || exit 0
-    @l_prefix@/bin/pdns_control quit
+    rcService powerdns active no && exit 0
+    powerdns_signal TERM
+    rm -f $powerdns_pidfile
+    rm -f $powerdns_sckfile
 
 %restart -u @l_susr@
     rcService powerdns enable yes || exit 0
-    @l_prefix@/bin/pdns_control cycle
+    rcService powerdns active no && exit 0
+    rc powerdns stop
+    sleep 2
+    rc powerdns start
 
 %daily -u @l_susr@
     rcService powerdns enable yes || exit 0
+
+    #   rotate logfiles
+    shtool rotate -f \
+        -n ${powerdns_pdns_numfiles} -s ${powerdns_pdns_minsize} -d \
+        -z ${powerdns_pdns_complevel} -o @l_susr@ -g @l_mgrp@ -m 660 \
+        -P "${powerdns_pdns_prolog}" \
+        -E "${powerdns_pdns_epilog}" \
+        powerdns_pdns_file
+    shtool rotate -f \
+        -n ${powerdns_bindbe_numfiles} -s ${powerdns_bindbe_minsize} -d \
+        -z ${powerdns_bindbe_complevel} -o @l_susr@ -g @l_mgrp@ -m 660 \
+        -P "${powerdns_bindbe_prolog}" \
+        -E "${powerdns_bindbe_epilog}" \
+        powerdns_bindbe_file
+    shtool rotate -f \
+        -n ${powerdns_bind2be_numfiles} -s ${powerdns_bind2be_minsize} -d \
+        -z ${powerdns_bind2be_complevel} -o @l_susr@ -g @l_mgrp@ -m 660 \
+        -P "${powerdns_bind2be_prolog}" \
+        -E "${powerdns_bind2be_epilog}" \
+        powerdns_bind2be_file
     shtool rotate -f \
-        -n ${powerdns_log_numfiles} -s ${powerdns_log_minsize} -d \
-        -z ${powerdns_log_complevel} -o @l_rusr@ -g @l_rgrp@ -m 644 \
-        -P "${powerdns_log_prolog}" \
-        -E "${powerdns_log_epilog}" \
-        @l_prefix@/var/powerdns/powerdns.log
+        -n ${powerdns_gsqlbe_numfiles} -s ${powerdns_gsqlbe_minsize} -d \
+        -z ${powerdns_gsqlbe_complevel} -o @l_susr@ -g @l_mgrp@ -m 660 \
+        -P "${powerdns_gsqlbe_prolog}" \
+        -E "${powerdns_gsqlbe_epilog}" \
+        powerdns_gsqlbe_file