From 415856bdd4f48ab4f2732996f0bae58595092bbe Mon Sep 17 00:00:00 2001 From: Parabola Date: Tue, 5 Apr 2011 14:26:38 +0000 Subject: Tue Apr 5 14:26:38 UTC 2011 --- extra/dhcp/ChangeLog | 11 ++ extra/dhcp/PKGBUILD | 81 ++++++++++++++ extra/dhcp/dhclient-script-pathFixes.patch | 118 +++++++++++++++++++++ extra/dhcp/dhcp-4.1.1-missing-ipv6-not-fatal.patch | 39 +++++++ extra/dhcp/dhcp.conf.d | 6 ++ extra/dhcp/dhcp.install | 11 ++ extra/dhcp/dhcpd | 40 +++++++ 7 files changed, 306 insertions(+) create mode 100644 extra/dhcp/ChangeLog create mode 100644 extra/dhcp/PKGBUILD create mode 100644 extra/dhcp/dhclient-script-pathFixes.patch create mode 100644 extra/dhcp/dhcp-4.1.1-missing-ipv6-not-fatal.patch create mode 100644 extra/dhcp/dhcp.conf.d create mode 100644 extra/dhcp/dhcp.install create mode 100755 extra/dhcp/dhcpd (limited to 'extra/dhcp') diff --git a/extra/dhcp/ChangeLog b/extra/dhcp/ChangeLog new file mode 100644 index 000000000..9cffaa9d0 --- /dev/null +++ b/extra/dhcp/ChangeLog @@ -0,0 +1,11 @@ + +2010-07-16 kevin + * dhcp 4.2.0-1 + +2009-07-19 kevin + * dhcp 4.1.0.p1-1 + * Adopted RedHat patch to fix bug where dhcpd won't start if ipv6 module + is not loaded. Fixes FS#12792. + * Added /etc/conf.d/dhcp feature contributed by Fabiano Furtado Pessoa + Coelho + diff --git a/extra/dhcp/PKGBUILD b/extra/dhcp/PKGBUILD new file mode 100644 index 000000000..fe232f5bb --- /dev/null +++ b/extra/dhcp/PKGBUILD @@ -0,0 +1,81 @@ +# $Id: PKGBUILD 104595 2011-01-04 13:21:07Z daniel $ +# Maintainer: Daniel Isenmann + +pkgbase=dhcp +pkgname=('dhcp' 'dhclient') + +# separate patch levels with a period to maintain proper versioning. +pkgver=4.2.0.2 +_pkgver=4.2.0-P2 + +pkgrel=1 +arch=('i686' 'x86_64') +license=('custom:isc-dhcp') +url="https://www.isc.org/software/dhcp" +source=(http://ftp.isc.org/isc/${pkgname}/${pkgname}-${_pkgver}.tar.gz + dhcpd dhcp.conf.d + dhcp-4.1.1-missing-ipv6-not-fatal.patch + dhclient-script-pathFixes.patch) +md5sums=('a98f4ce3ca651e7e28a5a1ae6398689e' + 'df22cffa7d7415ece7bb025b7bf774dd' + '49da3192e5c885e3c7d02f447c2dea5e' + 'fd64aeb4f399dcc41ea43089a3811094' + 'ddcc5cd576ec631ade6c4da21952b50b') + +build() { + cd ${srcdir}/${pkgname}-${_pkgver} + + # Define _GNU_SOURCE to fix IPV6. + sed '/^CFLAGS="$CFLAGS/ s/INGS"/INGS -D_GNU_SOURCE"/' -i configure + + # Make not having ipv6 non-fatal. + patch -Np0 -i ${srcdir}/dhcp-4.1.1-missing-ipv6-not-fatal.patch + + ./configure --prefix=/usr --sysconfdir=/etc \ + --with-srv-lease-file=/var/state/dhcp/dhcpd.leases \ + --with-srv6-lease-file=/var/state/dhcp/dhcpd6.leases + + make + + patch -i ${srcdir}/dhclient-script-pathFixes.patch client/scripts/linux +} + +package_dhcp(){ + pkgdesc="A DHCP server, client, and relay agent" + depends=('openssl>=0.9.8a') + backup=('etc/dhcpd.conf' 'etc/conf.d/dhcp') + install=dhcp.install + + cd ${srcdir}/${pkgname}-${_pkgver} + make DESTDIR=${pkgdir} install + + install -D -m755 ${srcdir}/dhcpd ${pkgdir}/etc/rc.d/dhcpd + install -D -m644 ${srcdir}/dhcp.conf.d ${pkgdir}/etc/conf.d/${pkgbase} + mkdir -p ${pkgdir}/var/state/dhcp + + # Remove dhclient + make -C client DESTDIR=${pkgdir} uninstall + + # install license + install -m644 -D LICENSE ${pkgdir}/usr/share/licenses/dhcp/LICENSE +} + +package_dhclient(){ + pkgdesc="dhclient is standalone client from the dhcp package" + depends=('bash') + + cd ${srcdir}/${pkgname}-${_pkgver} + make -C client DESTDIR=${pkgdir} install + + # move dhclient.conf to dhclient.conf.example + mv ${pkgdir}/etc/dhclient.conf{,.example} + + # directory needed for leasefiles + mkdir -p ${pkgdir}/var/lib/dhclient + + # install dhclient linux script + install -m755 -D client/scripts/linux ${pkgdir}/sbin/dhclient-script + + # install license + install -m644 -D LICENSE ${pkgdir}/usr/share/licenses/dhclient/LICENSE +} diff --git a/extra/dhcp/dhclient-script-pathFixes.patch b/extra/dhcp/dhclient-script-pathFixes.patch new file mode 100644 index 000000000..e19c328d2 --- /dev/null +++ b/extra/dhcp/dhclient-script-pathFixes.patch @@ -0,0 +1,118 @@ +--- linux 2009-04-21 16:21:09.000000000 +0200 ++++ linux_new 2010-06-30 19:06:20.000000000 +0200 +@@ -23,7 +23,7 @@ + # of the $1 in its args. + + # 'ip' just looks too weird. /sbin/ip looks less weird. +-ip=/sbin/ip ++ip=/usr/sbin/ip + + make_resolv_conf() { + if [ x"$new_domain_name_servers" != x ]; then +@@ -112,9 +112,9 @@ + if [ x$reason = xPREINIT ]; then + if [ x$alias_ip_address != x ]; then + # Bring down alias interface. Its routes will disappear too. +- ifconfig $interface:0- inet 0 ++ /sbin/ifconfig $interface:0- inet 0 + fi +- ifconfig $interface 0 up ++ /sbin/ifconfig $interface 0 up + + # We need to give the kernel some time to get the interface up. + sleep 1 +@@ -141,32 +141,32 @@ + if [ x$old_ip_address != x ] && [ x$alias_ip_address != x ] && \ + [ x$alias_ip_address != x$old_ip_address ]; then + # Possible new alias. Remove old alias. +- ifconfig $interface:0- inet 0 ++ /sbin/ifconfig $interface:0- inet 0 + fi + if [ x$old_ip_address != x ] && [ x$old_ip_address != x$new_ip_address ]; then + # IP address changed. Bringing down the interface will delete all routes, + # and clear the ARP cache. +- ifconfig $interface inet 0 down ++ /sbin/ifconfig $interface inet 0 down + + fi + if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \ + [ x$reason = xBOUND ] || [ x$reason = xREBOOT ]; then + +- ifconfig $interface inet $new_ip_address $new_subnet_arg \ ++ /sbin/ifconfig $interface inet $new_ip_address $new_subnet_arg \ + $new_broadcast_arg $mtu_arg + # Add a network route to the computed network address. + for router in $new_routers; do + if [ "x$new_subnet_mask" = "x255.255.255.255" ] ; then +- route add -host $router dev $interface ++ /sbin/route add -host $router dev $interface + fi +- route add default gw $router $metric_arg dev $interface ++ /sbin/route add default gw $router $metric_arg dev $interface + done + fi + if [ x$new_ip_address != x$alias_ip_address ] && [ x$alias_ip_address != x ]; + then +- ifconfig $interface:0- inet 0 +- ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg +- route add -host $alias_ip_address $interface:0 ++ /sbin/ifconfig $interface:0- inet 0 ++ /sbin/ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg ++ /sbin/route add -host $alias_ip_address $interface:0 + fi + make_resolv_conf + exit_with_hooks 0 +@@ -176,42 +176,42 @@ + || [ x$reason = xSTOP ]; then + if [ x$alias_ip_address != x ]; then + # Turn off alias interface. +- ifconfig $interface:0- inet 0 ++ /sbin/ifconfig $interface:0- inet 0 + fi + if [ x$old_ip_address != x ]; then + # Shut down interface, which will delete routes and clear arp cache. +- ifconfig $interface inet 0 down ++ /sbin/ifconfig $interface inet 0 down + fi + if [ x$alias_ip_address != x ]; then +- ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg +- route add -host $alias_ip_address $interface:0 ++ /sbin/ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg ++ /sbin/route add -host $alias_ip_address $interface:0 + fi + exit_with_hooks 0 + fi + + if [ x$reason = xTIMEOUT ]; then + if [ x$alias_ip_address != x ]; then +- ifconfig $interface:0- inet 0 ++ /sbin/ifconfig $interface:0- inet 0 + fi +- ifconfig $interface inet $new_ip_address $new_subnet_arg \ ++ /sbin/ifconfig $interface inet $new_ip_address $new_subnet_arg \ + $new_broadcast_arg $mtu_arg + set $new_routers + if ping -q -c 1 $1; then + if [ x$new_ip_address != x$alias_ip_address ] && \ + [ x$alias_ip_address != x ]; then +- ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg +- route add -host $alias_ip_address dev $interface:0 ++ /sbin/ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg ++ /sbin/route add -host $alias_ip_address dev $interface:0 + fi + for router in $new_routers; do + if [ "x$new_subnet_mask" = "x255.255.255.255" ] ; then +- route add -host $router dev $interface ++ /sbin/route add -host $router dev $interface + fi +- route add default gw $router $metric_arg dev $interface ++ /sbin/route add default gw $router $metric_arg dev $interface + done + make_resolv_conf + exit_with_hooks 0 + fi +- ifconfig $interface inet 0 down ++ /sbin/ifconfig $interface inet 0 down + exit_with_hooks 1 + fi + diff --git a/extra/dhcp/dhcp-4.1.1-missing-ipv6-not-fatal.patch b/extra/dhcp/dhcp-4.1.1-missing-ipv6-not-fatal.patch new file mode 100644 index 000000000..cc5ddb843 --- /dev/null +++ b/extra/dhcp/dhcp-4.1.1-missing-ipv6-not-fatal.patch @@ -0,0 +1,39 @@ +--- common/discover.c 2009-09-29 21:44:49.000000000 +0200 ++++ common/discover.c_new 2010-06-30 19:40:02.000000000 +0200 +@@ -443,7 +443,7 @@ + } + + #ifdef DHCPv6 +- if (local_family == AF_INET6) { ++ if ((local_family == AF_INET6) && !access("/proc/net/if_inet6", R_OK)) { + ifaces->fp6 = fopen("/proc/net/if_inet6", "r"); + if (ifaces->fp6 == NULL) { + log_error("Error opening '/proc/net/if_inet6' to " +@@ -454,6 +454,8 @@ + ifaces->fp = NULL; + return 0; + } ++ } else { ++ ifaces->fp6 = NULL; + } + #endif + +@@ -721,7 +723,7 @@ + return 1; + } + #ifdef DHCPv6 +- if (!(*err)) { ++ if (!(*err) && ifaces->fp6) { + if (local_family == AF_INET6) + return next_iface6(info, err, ifaces); + } +@@ -740,7 +742,8 @@ + ifaces->sock = -1; + #ifdef DHCPv6 + if (local_family == AF_INET6) { +- fclose(ifaces->fp6); ++ if(ifaces->fp6) ++ fclose(ifaces->fp6); + ifaces->fp6 = NULL; + } + #endif diff --git a/extra/dhcp/dhcp.conf.d b/extra/dhcp/dhcp.conf.d new file mode 100644 index 000000000..99ba6d13d --- /dev/null +++ b/extra/dhcp/dhcp.conf.d @@ -0,0 +1,6 @@ +# +# Arguments to be passed to the DHCP server daemon +# + +DHCP_ARGS="-q" + diff --git a/extra/dhcp/dhcp.install b/extra/dhcp/dhcp.install new file mode 100644 index 000000000..c0ad39e36 --- /dev/null +++ b/extra/dhcp/dhcp.install @@ -0,0 +1,11 @@ +# arg 1: the new package version +post_install() { + [ -f var/state/dhcp/dhcpd.leases ] || : >var/state/dhcp/dhcpd.leases + #echo "If dhcpd doesn't start, ensure the ipv6 kernel module is loaded." +} + +# arg 1: the new package version +# arg 2: the old package version +post_upgrade() { + post_install $1 +} diff --git a/extra/dhcp/dhcpd b/extra/dhcp/dhcpd new file mode 100755 index 000000000..1fbb31e7c --- /dev/null +++ b/extra/dhcp/dhcpd @@ -0,0 +1,40 @@ +#!/bin/bash + +. /etc/rc.conf +. /etc/rc.d/functions +. /etc/conf.d/dhcp + +PIDFILE="/var/run/dhcpd.pid" +PID=`cat $PIDFILE 2>/dev/null` +case "$1" in + start) + stat_busy "Starting DHCP Server" + if [ "$PID" = "" ]; then + /usr/sbin/dhcpd $DHCP_ARGS + fi + if [ "$PID" != "" -o $? -gt 0 ]; then + stat_fail + else + add_daemon dhcpd + stat_done + fi + ;; + stop) + stat_busy "Stopping DHCP Server" + [ ! -z "$PID" ] && kill $PID &> /dev/null + rm -f $PIDFILE + if [ $? -gt 0 ]; then + stat_fail + else + rm_daemon dhcpd + stat_done + fi + ;; + restart) + $0 stop + sleep 1 + $0 start + ;; + *) + echo "usage: $0 {start|stop|restart}" +esac -- cgit v1.2.3-54-g00ecf