#
# Conditional build:
-%bcond_with ldap # with support for ldap storage
-#
+%bcond_without ldap # without support for ldap storage
+%bcond_without static_libs # don't build static library
+
+%define ver 4.2.5
+%if 1
+%define pverdot .P1
+%define pverdir -P1
+%else
+%define pverdot %{nil}
+%define pverdir %{nil}
+%endif
+
+# vendor string
+%define vvendor PLD/Linux
Summary: DHCP Server
Summary(es.UTF-8): Servidor DHCP
Summary(pl.UTF-8): Serwer DHCP
Summary(pt_BR.UTF-8): Servidor DHCP (Protocolo de configuração dinâmica de hosts)
Name: dhcp
-Version: 3.1.0a3
-Release: 0.1
+Version: %{ver}%{pverdot}
+Release: 3
Epoch: 4
-License: distributable
+License: MIT
Group: Networking/Daemons
-Source0: ftp://ftp.isc.org/isc/dhcp/%{name}-%{version}.tar.gz
-# Source0-md5: d09be1a80982b78482e8fbd416924468
+Source0: ftp://ftp.isc.org/isc/dhcp/%{ver}%{pverdir}/%{name}-%{ver}%{pverdir}.tar.gz
+# Source0-md5: f68e3c1f00a9af5742bc5e71d567cf93
Source1: %{name}.init
-Source2: %{name}-relay.init
-Source3: %{name}-relay.sysconfig
-Source4: %{name}d.conf.sample
-Source5: %{name}.sysconfig
-Patch0: %{name}-if_buffer_size.patch
-Patch1: %{name}-ldap.patch
-Patch2: %{name}-ldap1.patch
-Patch3: %{name}-client-script-redhat.patch
-Patch4: %{name}-3.0.3-x-option.patch
-Patch5: %{name}-typo.patch
-Patch6: %{name}-arg-concat.patch
+Source2: %{name}6.init
+Source3: %{name}-relay.init
+Source4: %{name}.sysconfig
+Source5: %{name}-relay.sysconfig
+Source10: %{name}.schema
+Source11: %{name}-README.ldap
+Source12: draft-ietf-dhc-ldap-schema-01.txt
+Source13: %{name}d-conf-to-ldap
+Source14: %{name}-dhclient-script
+Patch0: %{name}-release-by-ifup.patch
+Patch2: %{name}-3.0.3-x-option.patch
+Patch3: %{name}-paths.patch
+Patch5: %{name}-timeouts.patch
+Patch6: %{name}-options.patch
+Patch9: %{name}-errwarn-message.patch
+Patch10: %{name}-memory.patch
+Patch11: %{name}-dhclient-decline-backoff.patch
+Patch12: %{name}-unicast-bootp.patch
+Patch16: %{name}-default-requested-options.patch
+Patch17: %{name}-xen-checksum.patch
+Patch19: %{name}-manpages.patch
+Patch20: %{name}-NetworkManager-crash.patch
+# http://www.csupomona.edu/~bldewolf/dhcp-uid/
+Patch21: %{name}-ignore-client-uids.patch
URL: http://www.isc.org/sw/dhcp/
+BuildRequires: autoconf
+BuildRequires: automake
BuildRequires: groff
+BuildRequires: libtool
%{?with_ldap:BuildRequires: openldap-devel}
-BuildRequires: rpmbuild(macros) >= 1.268
-Requires(post): fileutils
+%{?with_ldap:BuildRequires: openssl-devel}
+BuildRequires: rpmbuild(macros) >= 1.304
+Requires(post): coreutils
Requires(post,preun): /sbin/chkconfig
Requires: rc-scripts >= 0.2.0
Provides: dhcpd
+Obsoletes: dhcpv6-server
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
+%define _sbindir /sbin
+%define schemadir /usr/share/openldap/schema
+
%description
DHCP (Dynamic Host Configuration Protocol) is a protocol which allows
individual devices on an IP network to get their own network
atende aquelas requisições. Esta versão é ainda considerada um
software BETA.
+%package -n openldap-schema-dhcp
+Summary: LDAP Schema for DHCP Server
+Summary(pl.UTF-8): Schemat LDAP dla serwera DHCP
+Group: Networking/Daemons
+Requires(post,postun): sed >= 4.0
+Requires: openldap-servers
+%if "%{_rpmversion}" >= "5"
+BuildArch: noarch
+%endif
+
+%description -n openldap-schema-dhcp
+This package contains LDAPv3 schema for use with the DHCP Server.
+
+%description -n openldap-schema-dhcp -l pl.UTF-8
+Ten pakiet zawiera schemat LDAPv3 do używania z serwerem DHCP.
+
%package client
Summary: DHCP Client
Summary(pl.UTF-8): Klient DHCP
Group: Networking/Daemons
-Requires(post): fileutils
+Requires: coreutils
+Requires: iproute2
+Requires: net-tools
+Suggests: avahi-autoipd
+Provides: dhclient = %{epoch}:%{version}-%{release}
Obsoletes: dhclient
-Obsoletes: pump
+Obsoletes: dhcpv6-client
+Obsoletes: libdhcp4client
+Obsoletes: libdhcp4client-devel
+Obsoletes: libdhcp4client-static
%description client
Dynamic Host Configuration Protocol Client.
%description client -l pl.UTF-8
Klient DHCP (Dynamic Host Configuration Protocol).
+%package client-dirs
+Summary: DHCP Client common dirs
+Summary(pl.UTF-8): Katalogi klienta DHCP
+Group: Networking/Daemons
+
+%description client-dirs
+Directories for scripts for dhcp-client.
+
+%description client-dirs -l pl.UTF-8
+Katalog przeznaczony na skrypty dla klienta dhcp.
+
%package relay
Summary: DHCP Relay Agent
Summary(pl.UTF-8): Agent przekazywania informacji DHCP
Group: Networking/Daemons
-Requires(post): fileutils
+Requires(post): coreutils
Requires(post,preun): /sbin/chkconfig
Requires: rc-scripts >= 0.2.0
+Obsoletes: dhcpv6-relay
%description relay
Dhcp relay is a relay agent for DHCP packets. It is used on a subnet
komunikacji z działającym serwerem ISC DHCP i jego kontroli.
%prep
-%setup -q
-install %{SOURCE4} .
+%setup -q -n %{name}-%{ver}%{pverdir}
%patch0 -p1
-%{?with_ldap:%patch1 -p1}
-%{?with_ldap:%patch2 -p1}
-%patch3 -p1
# This patch is required for dhcdbd to function
-%patch4 -p1
+# CHECK ME: adds -x (formerly -y):
+#The -x argument enables extended option information to be created in the
+#-s dhclient-script environment, which would allow applications running
+#in that environment to handle options they do not know about in advance -
+#this is a Red Hat extension to support dhcdbd and NetworkManager.
+# however, fedora doesn't have this patch anymore, so can drop?
+#%%patch2 -p1
+%patch3 -p1
%patch5 -p1
%patch6 -p1
+%patch9 -p1
+%patch10 -p1
+%patch11 -p1
+%patch12 -p1
+%patch16 -p1
+%patch17 -p1
+%patch19 -p1
+%patch20 -p1
+%patch21 -p1
+
+# Copy in documentation and example scripts for LDAP patch to dhcpd
+cp -a %{SOURCE11} README.ldap
+cp -a %{SOURCE12} doc
+cp -a %{SOURCE13} contrib
+
+# Replace @PRODUCTNAME@
+%{__sed} -i -e 's|@PRODUCTNAME@|%{vvendor}|g' common/dhcp-options.5
+%{__sed} -i -e 's|@PRODUCTNAME@|%{vvendor}|g' configure.ac
+
+# Update paths in all man pages
+for page in client/dhclient.conf.5 client/dhclient.leases.5 client/dhclient-script.8 client/dhclient.8; do
+ %{__sed} -i -e 's|CLIENTBINDIR|/sbin|g' \
+ -e 's|RUNDIR|%{_localstatedir}/run|g' \
+ -e 's|DBDIR|%{_localstatedir}/db/dhclient|g' \
+ -e 's|ETCDIR|%{_sysconfdir}|g' $page
+done
+
+for page in server/dhcpd.conf.5 server/dhcpd.leases.5 server/dhcpd.8; do
+ %{__sed} -i -e 's|CLIENTBINDIR|/sbin|g' \
+ -e 's|RUNDIR|%{_localstatedir}/run|g' \
+ -e 's|DBDIR|%{_localstatedir}/db/dhcpd|g' \
+ -e 's|ETCDIR|%{_sysconfdir}|g' $page
+done
%build
-# NOTE: this is not autoconf configure - do not change it to %%configure
-./configure
-
-%{__make} \
- CC="%{__cc}" \
- CC_OPTIONS="%{rpmcflags} \
- -D_PATH_DHCPD_DB=\\\"/var/lib/%{name}/dhcpd.leases\\\" \
- -DEXTENDED_NEW_OPTION_INFO \
- -D_PATH_DHCLIENT_DB=\\\"/var/lib/%{name}/dhclient.leases\\\" \
- "
- LFLAGS="%{rpmldflags}" \
- DEBUG="" \
- VARDB="/var/lib/%{name}"
+%{__libtoolize}
+%{__aclocal}
+%{__autoconf}
+%{__autoheader}
+%{__automake}
+CFLAGS="%{rpmcflags} -fPIC -D_GNU_SOURCE=1"
+%configure \
+ %{!?with_static_libs:--disable-static} \
+ --enable-dhcpv6 \
+ --with-srv-lease-file=/var/lib/dhcpd/dhcpd.leases \
+ --with-cli-lease-file=/var/lib/dhclient/dhclient.leases \
+ --with-srv-pid-file=/var/run/dhcpd.pid \
+ --with-cli-pid-file=/var/run/dhclient.pid \
+ --with-relay-pid-file=/var/run/dhcrelay.pid \
+ --with%{!?with_ldap:out}-ldap
+%{__make}
%install
rm -rf $RPM_BUILD_ROOT
-install -d $RPM_BUILD_ROOT{/sbin,%{_sbindir},%{_bindir},%{_mandir}/man{5,8}} \
- $RPM_BUILD_ROOT{/var/lib/%{name},%{_sysconfdir}/{rc.d/init.d,sysconfig}}
+install -d $RPM_BUILD_ROOT{/etc/{rc.d/init.d,sysconfig,dhclient-enter-hooks.d,dhclient-exit-hooks.d},%{_pkgconfigdir},/var/lib/{dhcpd,dhclient}}
%{__make} install \
- DESTDIR=$RPM_BUILD_ROOT \
- CLIENTBINDIR=/sbin \
- BINDIR=%{_sbindir} \
- LIBDIR=%{_libdir} \
- INCDIR=%{_includedir} \
- ADMMANDIR=%{_mandir}/man8 \
- ADMMANEXT=.8 \
- FFMANDIR=%{_mandir}/man5 \
- LIBMANDIR=%{_mandir}/man3 \
- LIBMANEXT=.3 \
- USRMANDIR=%{_mandir}/man1 \
- USRMANEXT=.1 \
- VARDB=/var/lib/%{name} \
- FFMANEXT=.5
+ DESTDIR=$RPM_BUILD_ROOT
install %{SOURCE1} $RPM_BUILD_ROOT/etc/rc.d/init.d/dhcpd
-install %{SOURCE2} $RPM_BUILD_ROOT/etc/rc.d/init.d/dhcp-relay
-install %{SOURCE3} $RPM_BUILD_ROOT/etc/sysconfig/dhcp-relay
-install %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/dhcpd.conf
-install %{SOURCE5} $RPM_BUILD_ROOT/etc/sysconfig/dhcpd
-
-mv $RPM_BUILD_ROOT%{_mandir}/man3/omshell.3 \
- $RPM_BUILD_ROOT%{_mandir}/man1/omshell.1
-
-install client/scripts/linux $RPM_BUILD_ROOT%{_sbindir}/dhclient-script
-
-touch $RPM_BUILD_ROOT/var/lib/%{name}/{dhcpd,dhclient}.leases
+install %{SOURCE2} $RPM_BUILD_ROOT/etc/rc.d/init.d/dhcpd6
+install %{SOURCE3} $RPM_BUILD_ROOT/etc/rc.d/init.d/dhcp-relay
+install %{SOURCE4} $RPM_BUILD_ROOT/etc/sysconfig/dhcpd
+install %{SOURCE5} $RPM_BUILD_ROOT/etc/sysconfig/dhcp-relay
+install %{SOURCE14} $RPM_BUILD_ROOT/sbin/dhclient-script
+
+install server/dhcpd.conf.example $RPM_BUILD_ROOT%{_sysconfdir}/dhcpd.conf
+install doc/examples/dhcpd-dhcpv6.conf $RPM_BUILD_ROOT%{_sysconfdir}/dhcpd6.conf
+
+%if %{with ldap}
+install -d $RPM_BUILD_ROOT%{schemadir}
+install %{SOURCE10} $RPM_BUILD_ROOT%{schemadir}
+%endif
+
+:> $RPM_BUILD_ROOT%{_sysconfdir}/dhclient.conf
+
+touch $RPM_BUILD_ROOT/var/lib/dhcpd/dhcpd.leases
+touch $RPM_BUILD_ROOT/var/lib/dhclient/dhclient.leases
+
+touch $RPM_BUILD_ROOT/var/lib/dhcpd/dhcpd6.leases
+touch $RPM_BUILD_ROOT/var/lib/dhclient/dhclient6.leases
+
+%if %{with static_libs}
+# HACK: strip doesn't like .a inside .a
+install -d stripworkdir
+cd stripworkdir
+for a in $RPM_BUILD_ROOT%{_libdir}/*.a; do
+ archives=$(ar t $a | grep '\.a$' || :)
+ [ "$archives" ] || continue
+
+ # hope we don't have to recurse here
+ for ar in $archives; do
+ rm -f *.o *.a
+ ar x $a $ar
+ ar x $ar
+ ar d $a $ar
+ ar cr $a *.o
+ done
+done
+cd -
+%endif
%clean
rm -rf $RPM_BUILD_ROOT
%post
+touch /var/lib/dhcpd/dhcpd.leases
+touch /var/lib/dhcpd/dhcpd6.leases
/sbin/chkconfig --add dhcpd
-touch /var/lib/%{name}/dhcpd.leases
%service dhcpd restart "dhcpd daemon"
+/sbin/chkconfig --add dhcpd6
+%service dhcpd6 restart "dhcpd IPv6 daemon"
%preun
if [ "$1" = "0" ];then
%service dhcpd stop
/sbin/chkconfig --del dhcpd
+ %service dhcpd6 stop
+ /sbin/chkconfig --del dhcpd6
fi
-%post client
-# TODO: fix this
-if [ ! -d /var/lib/dhcp ]; then
- install -d /var/lib/dhcp
+%triggerpostun -- dhcp < 3.0
+if ! grep -q ddns-update-style /etc/dhcpd.conf; then
+ %{__sed} -i -e '1iddns-update-style none;' /etc/dhcpd.conf
+fi
+
+%post -n openldap-schema-dhcp
+%openldap_schema_register %{schemadir}/dhcp.schema -d core
+%service -q ldap restart
+
+%postun -n openldap-schema-dhcp
+if [ "$1" = "0" ]; then
+ %openldap_schema_unregister %{schemadir}/dhcp.schema
+ %service -q ldap restart
fi
%post relay
/sbin/chkconfig --del dhcp-relay
fi
-%triggerpostun -- dhcp < 3.0
-if [ "`grep ddns-update-style /etc/dhcpd.conf`" = "" ]; then
- umask 027
- echo "ddns-update-style none;" > /etc/dhcpd.conf.tmp
- echo "" >> /etc/dhcpd.conf.tmp
- cat /etc/dhcpd.conf >>/etc/dhcpd.conf.tmp
- mv -f /etc/dhcpd.conf.tmp /etc/dhcpd.conf
+%triggerun client -- %{name}-client < 4:4.0.2-2
+if [ -f /etc/dhclient-enter-hooks ] ; then
+ mv /etc/dhclient-enter-hooks /etc/dhclient-enter-hooks.d/
+fi
+if [ -f /etc/dhclient-exit-hooks ] ; then
+ mv /etc/dhclient-exit-hooks /etc/dhclient-exit-hooks.d/
fi
%files
%defattr(644,root,root,755)
-%doc doc/* README RELNOTES dhcpd.conf.sample LICENSE
-%{?with_ldap:%doc contrib/*}
-%{_mandir}/man1/*
-%{_mandir}/man5/dhcp*
-%{_mandir}/man8/dhcp*
+%doc doc/* README RELNOTES server/dhcpd.conf.example LICENSE
+%doc contrib/ms2isc %{?with_ldap:contrib/dhcpd-conf-to-ldap README.ldap}
%config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/dhcpd
%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/dhcpd.conf
-%attr(755,root,root) %{_bindir}/*
+%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/dhcpd6.conf
+%attr(755,root,root) %{_bindir}/omshell
%attr(755,root,root) %{_sbindir}/dhcpd
%attr(754,root,root) /etc/rc.d/init.d/dhcpd
-%attr(750,root,root) %dir /var/lib/%{name}
-%ghost /var/lib/%{name}/dhcpd.leases
+%attr(754,root,root) /etc/rc.d/init.d/dhcpd6
+%attr(750,root,root) %dir /var/lib/dhcpd
+%ghost /var/lib/dhcpd/dhcpd.leases
+%ghost /var/lib/dhcpd/dhcpd6.leases
+%{_mandir}/man1/omshell.1*
+%{_mandir}/man5/dhcp-eval.5*
+%{_mandir}/man5/dhcp-options.5*
+%{_mandir}/man5/dhcpd.conf.5*
+%{_mandir}/man5/dhcpd.leases.5*
+%{_mandir}/man8/dhcpd.8*
%files client
%defattr(644,root,root,755)
+%doc contrib/sethostname.sh client/dhclient.conf.example
+%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/dhclient.conf
%attr(755,root,root) /sbin/dhclient
%attr(755,root,root) /sbin/dhclient-script
-%{_mandir}/man[58]/dhclient*
-%ghost /var/lib/%{name}/dhclient.leases
+%{_mandir}/man5/dhclient.conf.5*
+%{_mandir}/man5/dhclient.leases.5*
+%{_mandir}/man8/dhclient.8*
+%{_mandir}/man8/dhclient-script.8*
+%dir %attr(750,root,root) /var/lib/dhclient
+%ghost /var/lib/dhclient/dhclient.leases
+%ghost /var/lib/dhclient/dhclient6.leases
+
+%files client-dirs
+%defattr(644,root,root,755)
+%dir %{_sysconfdir}/dhclient-enter-hooks.d
+%dir %{_sysconfdir}/dhclient-exit-hooks.d
%files relay
%defattr(644,root,root,755)
-%{_mandir}/man8/dhcrelay*
%config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/dhcp-relay
%attr(755,root,root) %{_sbindir}/dhcrelay
%attr(754,root,root) /etc/rc.d/init.d/dhcp-relay
+%{_mandir}/man8/dhcrelay.8*
%files devel
%defattr(644,root,root,755)
-%{_mandir}/man3/*
-%{_libdir}/*.a
-%{_includedir}/*
+%{_libdir}/libdhcpctl.a
+%{_libdir}/libdst.a
+%{_libdir}/libomapi.a
+%{_includedir}/dhcpctl
+%{_includedir}/isc-dhcp
+%{_includedir}/omapip
+%{_mandir}/man3/dhcpctl.3*
+%{_mandir}/man3/omapi.3*
+
+%if %{with ldap}
+%files -n openldap-schema-dhcp
+%defattr(644,root,root,755)
+%{schemadir}/dhcp.schema
+%endif