diff --git a/dhclient-script b/dhclient-script new file mode 100644 index 0000000..6f9ef7f --- /dev/null +++ b/dhclient-script @@ -0,0 +1,755 @@ +#!/bin/bash +# +# Copyright (C) 2010-2013 SUSE LINUX Products GmbH / Novell Inc. +# Copyright (C) 2013-2014 SUSE LINUX GmbH +# +# 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; either version 2 of the License, or (at your option) any later +# version. +# +# 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, see . +# +# Author: Marius Tomaschewski +# +# /sbin/dhclient-script for openSUSE / SUSE Linux Enterprise Server +# based on the scripts shipped with the ISC DHCP (4.1.1) client. +# +# Note: +# It is used by sysconfig alias netcontrol alias ifup-dhcp, +# but not by the NetworkManager that is using an own script. +# +# Wicked is using an another dhcp client (runtime conflict). +# As sysconfig-network is gone on sles12 and opensuse > 13.1, +# this script is obsolete and unsupported. +# + +## +## check mandatory parameters or ignore & exit +## +test "x$reason" = x -o "x$interface" = x && exit 1 + +# +# source sysconfig functions +# +SYSCONFIG_CFG_DIR="/etc/sysconfig/network" +if test -f "$SYSCONFIG_CFG_DIR/scripts/functions" ; then + . "$SYSCONFIG_CFG_DIR/scripts/functions" +fi +SYSCONFIG_RUN_DIR=${SYSCONFIG_RUN_DIR:-/dev/.sysconfig/network} + +# +# Debugging: +# logs entire run of dhclient-script to /var/log/${dhclient}-script.*.log, +# when DHCLIENT_DEBUG/DHCLIENT6_DEBUG are "yes" in sysconfig/network/dhcp +# +eval `grep '^DHCLIENT6\?_DEBUG=' "$SYSCONFIG_CFG_DIR/dhcp" 2>/dev/null` +case $reason in + *6) DEBUG=$DHCLIENT6_DEBUG ; dhclient=dhclient6 ; ipver=6 ;; + *) DEBUG=$DHCLIENT_DEBUG ; dhclient=dhclient ; ipver=4 ;; +esac +if [ "$DEBUG" = yes ]; then + set -a # allexport + ( + echo '****************' + echo "$0 $*" + date + echo '----------------' + env + echo '----------------' + ) >> /var/log/${dhclient}-script.$interface.log + exec 2>> /var/log/${dhclient}-script.$interface.log + set +a + set -x +fi + +network_service_conflicts() +{ + local _id=`/usr/bin/systemctl --no-pager -p Id show network.service 2>/dev/null` + case "${_id#Id=}" in + # wicked is using an another dhcp client - dhclient + # is not supported with enabled wicked and disabled. + wicked.service) + logger -t "${0##*/}" -p daemon.error -- \ + "dhclient conflicts with enabled ${_id#Id=} and disabled" + return 1 + ;; + + # NetworkManager is using an another script + # [disarmed except maintainer requests it] + #NetworkManager.service) + # logger -t "${0##*/}" -p daemon.error -- \ + # "dhclient-script conflicts with enabled ${_id#Id=} script and disabled" + # return 1 + #;; + + # sysconfig network [gone] were using it, other? + network.service|*) + return 0 + ;; + esac +} + +network_service_conflicts || exit 1 + +is_ifup_controlled() +{ + test -f "$SYSCONFIG_RUN_DIR/if-${interface}" +} +# netconfig makes all "additional" modifications as DNS or NTP +netconfig_modify() { + if test -x /sbin/netconfig -a -n "$interface" ; then + { + echo "INTERFACE='$interface'" + for v in ${!new_*}; do + case $ipver in + 6) + case $v in + (new_ip6_address) k='IPADDR' ;; + (new_ip6_prefixlen) k='PREFIXLEN' ;; + (new_dhcp6_client_id) k='DHCP6CID' ;; + (new_dhcp6_server_id) k='DHCP6SID' ;; + (new_dhcp6_domain_search) k='DNSSEARCH' ;; + (new_dhcp6_name_servers) k='DNSSERVERS' ;; + (new_dhcp6_sntp_servers) k='NTPSERVERS' ;; + #(new_dhcp6_nis_domain) k='NISDOMAIN' ;; + #(new_dhcp6_nis_servers) k='NISSERVERS' ;; + (*) k="dhclient6_${v#new_}" ;; + esac + ;; + 4) + case $v in + (new_ip_address) k='IPADDR' ;; + (new_subnet_mask) k='NETMASK' ;; + (new_network_number) k='NETWORK' ;; + (new_broadcast_address) k='BROADCAST' ;; + (new_interface_mtu) k='MTU' ;; + (new_rfc3442_classless_static_routes_formatted) + k='ROUTES' ;; + # (new_static_routes) k='ROUTES' ;; + (new_routers) k='GATEWAYS' ;; + (new_host_name) k='HOSTNAME' ;; + (new_domain_search) k='DNSSEARCH' ;; + (new_domain_name) k='DNSDOMAIN' ;; + (new_domain_name_servers) k='DNSSERVERS' ;; + (new_ntp_servers) k='NTPSERVERS' ;; + (new_nis_domain) k='NISDOMAIN' ;; + (new_nis_servers) k='NISSERVERS' ;; + (new_root_path) k='ROOTPATH' ;; + (new_dhcp_server_identifier)k='DHCPSID' ;; + (new_lpr_servers) k='LPRSERVER' ;; + (new_log_servers) k='LOGSERVER' ;; + (new_netbios_dd_server) k='NETBIOSDDSERVER' ;; + (new_netbios_name_servers) k='NETBIOSNAMESERVER' ;; + (new_netbios_node_type) k='NETBIOSNODETYPE' ;; + (new_netbios_scope) k='NETBIOSSCOPE' ;; + (*) k="dhclient_${v#new_}" ;; + esac + esac + [ "k${k}" != k ] && echo "${k}='${!v}'" + done + } | /sbin/netconfig modify -s "dhclient$ipver" -i "$interface" + fi +} +netconfig_remove() { + if test -x /sbin/netconfig -a -n "$interface" ; then + /sbin/netconfig remove -s "dhclient$ipver" -i "$interface" &1` && return 0 + case $err in + RTNETLINK*answers:*File*exists) ;; + RTNETLINK*answers:*No*such*process) + # + # The gateway seems to be not reachable via local network + # route (implicitly created by ifconfig based on the IP + # and netmask provided by dhcp). + # Check this, set an explicit host route to the gateway + # over the current interface and try again (bnc#266215). + # + retry=0 + for router in ${gate[@]} ; do + matches=$(/sbin/ip -f inet -o route list match $router | \ + grep -v ^default | grep -c -v "^$" 2>/dev/null) + if [ -n "$matches" -a $(($matches)) -eq 0 ] ; then + LC_ALL=C /sbin/ip route add $router/32 dev $interface || retry=1 + fi + done + if [ $retry -eq 0 ] ; then + LC_ALL=C /sbin/ip route replace ${args[*]} && return 0 + fi + ;; + esac + return 1 +} +get_ipv4_default_gw() +{ + if [ "x$new_rfc3442_classless_static_routes_formatted" != x ] ; then + local r route=() gw=() + for r in $new_rfc3442_classless_static_routes_formatted ; do + route=(${r//,/ }) + case ${route[0]}/${route[1]} in + 0.0.0.0/0.0.0.0) + [ "x${route[2]}" = "x0.0.0.0" ] || \ + gw+=(${route[2]}) + ;; + esac + done + echo "${gw[*]}" + elif [ "$new_routers" != x ] ; then + echo "$new_routers" + fi +} +set_ipv4_routes() +{ + if [ "x$new_rfc3442_classless_static_routes_formatted" != x ] ; then + local r route=() + # TODO: multiple gw's to one dest as in $new_routers? + for r in $new_rfc3442_classless_static_routes_formatted ; do + route=(${r//,/ }) + case ${route[0]}/${route[1]} in + 0.0.0.0/0.0.0.0) + [ "x$DHCLIENT_SET_DEFAULT_ROUTE" = xyes ] || continue ;; + esac + set_ipv4_route ${route[*]} + done + elif [ "$new_routers" != x ] ; then + if [ "x$DHCLIENT_SET_DEFAULT_ROUTE" = xyes ] ; then + set_ipv4_route default "" $new_routers + fi + fi +} +set_hostname() +{ + rx_host='^[[:alnum:]][[:alnum:]_-]{0,62}$' + if [ "$DHCLIENT_SET_HOSTNAME" = yes ] ; then + new_host_name="${new_host_name%%.*}" + [[ ${new_host_name} =~ ${rx_host} ]] || unset new_host_name + current_hostname=`hostname` + current_hostname="${current_hostname%%.*}" + [[ ${current_hostname} =~ ${rx_host} ]] || unset current_hostname + + if [ "x${current_hostname}" = "x" ] || \ + [ "x${current_hostname}" = "xlocalhost" ] || \ + [ "x${current_hostname}" != "x${new_host_name}" ]; then + if [ "x${new_host_name}" != "x" ]; then + hostname "${new_host_name}" + else + if [ -x /usr/bin/getent ] ; then + if out=`timeout 2s /usr/bin/getent hosts "$new_ip_address" 2>/dev/null` ; then + _hostname="`echo "$out" | sed 's:^.* ::; s:\..*::; s:.*[)]::'`" + [[ ${_hostname} =~ ${rx_host} ]] || unset _hostname + if [ "x${_hostname}" != "x" -a \ + "x${_hostname}" != "x${current_hostname}" ]; then + hostname "${_hostname}" + fi + fi + fi + fi + fi + fi + if is_ifup_controlled ; then + # check regardless the DHCLIENT_SET_HOSTNAME setting + # and whether we've set it above or not, because when + # it changed, we've to handle it anyway... + local OLD_HOSTNAME=`read_cached_config_data hostname $interface` + local CUR_HOSTNAME=`hostname 2>/dev/null` + CUR_HOSTNAME="${CUR_HOSTNAME%%.*}" + if [[ ${CUR_HOSTNAME} =~ ${rx_host} ]] && \ + [ "x$OLD_HOSTNAME" != "x$CUR_HOSTNAME" ] ; then + write_cached_config_data hostname "$CUR_HOSTNAME" $interface + commit_cached_config_data $interface + + # reload syslog so it knows the new hostname + if test -x /usr/bin/systemctl ; then + /usr/bin/systemctl reload syslog.service + fi + fi + fi +} +dhcp6_dad_check() +{ + local ifname="$1" word i + local ipaddr="$2" + local noaddr=1 nodad=0 tentative=0 dadfailed=0 + test -n "$ifname" -a -n "$ipaddr" || return 1 + + while read -a word ; do + test "${word[0]}" != "inet6" && continue + noaddr=0 + for((i=2; i<${#word[@]}; ++i)) ; do + case ${word[$i]} in + nodad) nodad=1 ;; + tentative) tentative=1 ;; + dadfailed) dadfailed=1 ;; + flags) ((i++)) + rx='^[[:xdigit:]]+$' + [[ "${word[$i]}" =~ $rx ]] || continue + hx="0x${word[$i]}" + ((hx & 0x02)) && nodad=1 + ((hx & 0x08)) && dadfailed=1 + ((hx & 0x40)) && tentative=1 + ;; + esac + done + ((nodad)) && continue + ((dadfailed)) && return 3 + ((tentative)) && return 2 + done < <(LC_ALL=C ip -6 addr show dev "${ifname}" to "${ipaddr}" 2>/dev/null) + # on dad failure of dynamic (non-persistent) address, + # the kernel deletes dad failed addresses + # that is, the address is tentative (2) and vanishes + # (4) and is not visible as dadfailed (3). + ((noaddr)) && return 4 || return 0 +} +dhcp6_dad_wait() +{ + local ifname="$1" + local ipaddr="$2" + local -i wsecs=${3:-0} + local -i uwait=25000 + local -i loops=$(((wsecs * 1000000) / uwait)) + local -i loop=0 ret=0 + + dhcp6_dad_check "$ifname" "$ipaddr" ; ret=$? + while ((ret == 2 && loop++ < loops)) ; do + sleep 0.25 + dhcp6_dad_check "$ifname" "$ipaddr" ; ret=$? + done + return $ret +} + +# Must be used on exit. Invokes the local dhcp client exit hooks, if any. +exit_with_hooks() { + exit_status=$1 + if [ -f /etc/${dhclient}-exit-hooks ]; then + . /etc/${dhclient}-exit-hooks + fi + # probably should do something with exit status of the local script + exit $exit_status +} + +# Invoke the local dhcp client enter hooks, if they exist. +if [ -f /etc/${dhclient}-enter-hooks ]; then + exit_status=0 + . /etc/${dhclient}-enter-hooks + # allow the local script to abort processing of this state + # local script must set exit_status variable to nonzero. + if [ $exit_status -ne 0 ]; then + exit $exit_status + fi +fi + +case $dhclient in +dhclient) + if is_ifup_controlled ; then + # STARTMODE + eval `grep --no-filename \ + '^[[:space:]]*STARTMODE=' \ + "$SYSCONFIG_CFG_DIR/ifcfg-${interface}" 2>/dev/null` + tmp_startmode=`read_cached_config_data startmode $INTERFACE` + [ -n "$tmp_startmode" ] && STARTMODE="$tmp_startmode" + + # DHCLIENT_SET_HOSTNAME and DHCLIENT_SET_DEFAULT_ROUTE + if grep -qs '^primary=yes' "$SYSCONFIG_RUN_DIR/if-${interface}" 2>/dev/null ; + then + eval `grep --no-filename \ + '^[[:space:]]*DHCLIENT_SET_\(HOSTNAME\|DEFAULT_ROUTE\)=' \ + "$SYSCONFIG_CFG_DIR/dhcp" \ + "$SYSCONFIG_CFG_DIR/ifcfg-${interface}" 2>/dev/null` + else + eval `grep --no-filename \ + '^[[:space:]]*DHCLIENT_SET_\(HOSTNAME\|DEFAULT_ROUTE\)=' \ + "$SYSCONFIG_CFG_DIR/ifcfg-${interface}" 2>/dev/null` + fi + else + STARTMODE=manual + eval `grep --no-filename \ + '^[[:space:]]*DHCLIENT_SET_\(HOSTNAME\|DEFAULT_ROUTE\)=' \ + "$SYSCONFIG_CFG_DIR/dhcp" 2>/dev/null` + fi + if [ "x$new_rfc3442_classless_static_routes" != x ] ; then + new_rfc3442_classless_static_routes_formatted=$( + parse_ipv4_classless_routes $new_rfc3442_classless_static_routes + ) + else + unset new_rfc3442_classless_static_routes_formatted + fi + if [ x$new_broadcast_address != x ] ; then + new_broadcast_arg="brd $new_broadcast_address" + elif [ "x$new_subnet_mask" != "x255.255.255.255" ] ; then + new_broadcast_arg="brd +" + fi + if [ x$new_interface_mtu != x -a \ + $(( $new_interface_mtu )) -le 576 ] ; + then + # 68 is the minimal legal value, but 576 the real life minimum + unset new_interface_mtu + fi + if [ x$IF_METRIC != x ]; then + metric_arg="metric $IF_METRIC" + fi +;; +dhclient6) + if is_ifup_controlled ; then + # STARTMODE + eval `grep --no-filename \ + '^[[:space:]]*STARTMODE=' \ + "$SYSCONFIG_CFG_DIR/ifcfg-${interface}" 2>/dev/null` + tmp_startmode=`read_cached_config_data startmode $INTERFACE` + [ -n "$tmp_startmode" ] && STARTMODE="$tmp_startmode" + else + STARTMODE=manual + fi +;; +esac + +case $reason in +###################################################################### +## DHCPv4 # +###################################################################### + +MEDIUM) + #################################################################### + exit_with_hooks 0 +;; + +PREINIT) + #################################################################### + if [ "x$alias_ip_address" != x ]; then + /sbin/ip addr del $alias_ip_address/$alias_subnet_mask dev $interface + fi + if [ "x$STARTMODE" != "xnfsroot" ] ; then + /sbin/ip -4 addr flush dev $interface + fi + /sbin/ip link set $interface up + + # We need to give the kernel some time to get the interface up. + sleep 1 + + exit_with_hooks 0 +;; + +ARPCHECK|ARPSEND) + #################################################################### + exit_with_hooks 0 +;; + +BOUND|RENEW|REBIND|REBOOT) + #################################################################### + + if [ x$alias_ip_address != x -a x$alias_ip_address != x$old_ip_address -a \ + x$new_ip_address != x$old_ip_address ] ; + then + # Possible new alias. Remove old alias. + /sbin/ip addr del $alias_ip_address/$alias_subnet_mask dev $interface + fi + if [ x$old_ip_address != x -a x$old_ip_address != x$new_ip_address ]; then + # IP address changed. Flush to clear routes and ARP cache. + if [ "x$STARTMODE" != "xnfsroot" ] ; then + /sbin/ip -4 addr flush dev $interface + fi + fi + + if [ x$new_interface_mtu != x ] ; then + /sbin/ip link set $interface mtu $new_interface_mtu + fi + if [ x$new_ip_address != x ] && \ + [ x$new_ip_address != x$old_ip_address -o \ + x$reason = xBOUND -o x$reason = xREBOOT ]; then + + /sbin/ip addr add $new_ip_address/${new_subnet_mask:-32} \ + ${new_broadcast_arg} \ + dev $interface + + set_ipv4_routes + fi + if [ x$new_ip_address != x$alias_ip_address -a x$alias_ip_address != x \ + -a x$new_ip_address != x$old_ip_address ]; + then + /sbin/ip addr add $alias_ip_address/$alias_subnet_mask \ + dev $interface + fi + + netconfig_modify + + if [ x$old_ip_address != x -a x$old_ip_address != x$new_ip_address ]; then + if is_ifup_controlled ; then + ifdown $interface -o dhcp + + write_cached_config_data dhcp4_state "up" $interface + commit_cached_config_data $interface + fi + else + if is_ifup_controlled ; then + write_cached_config_data dhcp4_state "new" $interface + commit_cached_config_data $interface + fi + fi + + set_hostname + + if is_ifup_controlled ; then + # execute ifservice and if-up.d scripts + ifup $interface -o dhcp + + write_cached_config_data dhcp4_state "complete" $interface + commit_cached_config_data $interface + fi + + exit_with_hooks 0 +;; + +EXPIRE|FAIL|RELEASE|STOP) + #################################################################### + if [ x$old_ip_address != x ]; then + if [ "x$STARTMODE" != "xnfsroot" ] ; then + /sbin/ip -4 addr flush dev $interface + fi + fi + if [ x$alias_ip_address != x ]; then + /sbin/ip addr add $alias_ip_address/$alias_subnet_mask \ + dev $interface + fi + + if is_ifup_controlled ; then + write_cached_config_data dhcp4_state "down" $interface + commit_cached_config_data $interface + fi + netconfig_remove + + exit_with_hooks 0 +;; + +TIMEOUT) + #################################################################### + if [ x$alias_ip_address != x ]; then + /sbin/ip addr del $alias_ip_address/$alias_subnet_mask \ + dev $interface + fi + + if [ x$new_ip_address != x -a x$old_ip_address != x$new_ip_address ]; + then + /sbin/ip addr add $new_ip_address/${new_subnet_mask:-32} \ + ${new_broadcast_arg} \ + dev $interface + + set -- $(get_ipv4_default_gw) + if [ -n "$1" ] && /usr/sbin/arping -q -c 1 -w 5 -I $interface $1 ; + then + if [ x$new_ip_address != x$alias_ip_address ] && \ + [ x$alias_ip_address != x ]; then + /sbin/ip addr add $alias_ip_address/$alias_subnet_arg + fi + + set_ipv4_routes + + netconfig_modify + + set_hostname + if is_ifup_controlled ; then + # execute ifservice and if-up.d scripts + ifup $interface -o dhcp + + write_cached_config_data dhcp4_state "complete" $interface + commit_cached_config_data $interface + fi + + exit_with_hooks 0 + else + if [ x$old_ip_address != x ]; then + if [ "x$STARTMODE" != "xnfsroot" ] ; then + /sbin/ip -4 addr flush dev $interface + fi + fi + + if is_ifup_controlled ; then + write_cached_config_data dhcp4_state "down" $interface + commit_cached_config_data $interface + fi + netconfig_remove + + exit_with_hooks 1 + fi + fi +;; + + +###################################################################### +## DHCPv6 # +###################################################################### + +PREINIT6) + #################################################################### + if [ "x$STARTMODE" != "xnfsroot" ] ; then + /sbin/ip -6 addr flush dev $interface scope global permanent + fi + /sbin/ip link set $interface up + + # We need to give the kernel some time to get the interface up. + sleep 1 + + exit_with_hooks 0 +;; + +BOUND6|RENEW6|REBIND6|REBOOT6) + #################################################################### + + if [ x$old_ip6_address != x -a x$old_ip6_address != x$new_ip6_address ]; + then + + /sbin/ip addr del "$old_ip6_address/$old_ip6_prefixlen" dev $interface + + if is_ifup_controlled ; then + write_cached_config_data dhcp6_state "up" $interface + commit_cached_config_data $interface + fi + else + if is_ifup_controlled ; then + write_cached_config_data dhcp6_state "new" $interface + commit_cached_config_data $interface + fi + fi + + if [ "x$new_ip6_address" != x -a "x$new_ip6_prefixlen" != x ] ; then + /sbin/ip addr replace "$new_ip6_address/$new_ip6_prefixlen" \ + scope global dev $interface \ + ${new_max_life:+valid_lft $new_max_life} \ + ${new_preferred_life:+preferred_lft $new_preferred_life} \ + || exit_with_hooks 2 + + echo >&2 "Checking DAD results for $new_ip6_address" + + if ! dhcp6_dad_wait "$interface" "$new_ip6_address/$new_ip6_prefixlen" 5 ; then + /sbin/ip addr del "$new_ip6_address/$new_ip6_prefixlen" dev $interface 2>/dev/null + exit_with_hooks 3 + fi + fi + + netconfig_modify + if [ x$old_ip6_address != x -a x$old_ip6_address != x$new_ip6_address ]; + then + if is_ifup_controlled ; then + /sbin/ifdown $interface -o dhcp + fi + fi + + #set_hostname + if is_ifup_controlled ; then + # execute ifservice and if-up.d scripts + /sbin/ifup $interface -o dhcp + + write_cached_config_data dhcp6_state "complete" $interface + commit_cached_config_data $interface + fi + + exit_with_hooks 0 +;; + +DEPREF6) + #################################################################### + if [ x$cur_ip6_address = x -o x$cur_ip6_prefixlen = x ] ; then + exit_with_hooks 2 + fi + + /sbin/ip addr change "$cur_ip6_address/$cur_ip6_prefixlen" \ + dev $interface scope global preferred_lft 0 + + exit_with_hooks 0 +;; + +EXPIRE6|RELEASE6|STOP6) + #################################################################### + if [ x$old_ip6_address != x -a x$old_ip6_prefixlen != x ] ; then + /sbin/ip addr del "$old_ip6_address/$old_ip6_prefixlen" \ + dev $interface + fi + + if is_ifup_controlled ; then + write_cached_config_data dhcp6_state "down" $interface + commit_cached_config_data $interface + fi + netconfig_remove + + exit_with_hooks 0 +;; +esac + +exit_with_hooks 0 diff --git a/dhcp.changes b/dhcp.changes index 1d48a00..398b1dc 100644 --- a/dhcp.changes +++ b/dhcp.changes @@ -1,3 +1,26 @@ +------------------------------------------------------------------- +Fri May 24 13:51:57 UTC 2024 - Thorsten Kukuk + +- Drop initscripts-legacy support [jsc#PED264] +- Drop rc symlinks [jsc#PED-264], [jsc#PED-266] + +------------------------------------------------------------------- +Mon Feb 26 07:45:20 UTC 2024 - Dominique Leuenberger + +- Use %patch -P N instead of deprecated %patchN. + +------------------------------------------------------------------- +Thu Dec 7 13:31:06 UTC 2023 - Jorik Cronenberg + +- Revert dhclient-script removal and instead change usleep to sleep + (boo#1216822) + +------------------------------------------------------------------- +Tue Dec 5 15:24:29 UTC 2023 - Jorik Cronenberg + +- Add new Kea migration assistant subpackage +- Switch doc subpackage to noarch + ------------------------------------------------------------------- Thu Nov 2 13:53:11 UTC 2023 - Petr Vorel diff --git a/dhcp.spec b/dhcp.spec index aebd4dc..4d5f5f9 100644 --- a/dhcp.spec +++ b/dhcp.spec @@ -1,7 +1,7 @@ # # spec file for package dhcp # -# Copyright (c) 2023 SUSE LLC +# Copyright (c) 2024 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -57,6 +57,7 @@ Source21: dhclient6.conf Source22: dhcpd.conf Source23: dhcpd6.conf Source26: sysconfig.syslog-dhcpd +Source27: dhclient-script # Source41: dhcp.README Source43: DDNS-howto.txt @@ -151,6 +152,7 @@ Requires: dhcp = %{version} %package doc Summary: Documentation Group: Productivity/Networking/Boot/Servers +BuildArch: noarch %description This package contains common programs used by both the ISC DHCP @@ -167,7 +169,9 @@ configure the network setup. IP address, hostname, routing, nameserver, netmask, and broadcast can be dynamically assigned while booting the machine. -It is configurable via the configuration file %{_sysconfdir}/dhclient.conf. +It is configurable via the configuration file %{_sysconfdir}/dhclient.conf and +you can define your own 'hooks' to be used by the /sbin/dhclient-script +(which is called by the daemon). %description relay This is the ISC DHCP relay agent. It can be used as a 'gateway' for @@ -183,6 +187,13 @@ the software. The manual pages are in the corresponding packages. This package contains all of the libraries and headers for developing with the Internet Software Consortium (ISC) dhcpctl API. +%package keama +Summary: Migration assistant from dhcp to kea + +%description keama +This package provides a migration assistant for kea, the successor of the ISC +DHCP server. + %prep if test "%version" != $(echo %isc_version | tr "-" "."); then echo "error: %%version and %%isc_version are not in sync." @@ -190,26 +201,26 @@ if test "%version" != $(echo %isc_version | tr "-" "."); then fi %setup -q -n %{name}-%{isc_version} -a 44 -a 45 ## -%patch1 -p1 -%patch2 -p1 -%patch3 -p1 -%patch4 -p1 -%patch5 -p1 -%patch6 -p1 -%patch7 -p1 -%patch8 -p1 -%patch9 -%patch10 -p1 -%patch12 -p1 -%patch14 -%patch15 -p1 -%patch16 -%patch17 -p1 -%patch18 -p1 -%patch20 -%patch21 -%patch22 -%patch23 +%patch -P 1 -p1 +%patch -P 2 -p1 +%patch -P 3 -p1 +%patch -P 4 -p1 +%patch -P 5 -p1 +%patch -P 6 -p1 +%patch -P 7 -p1 +%patch -P 8 -p1 +%patch -P 9 +%patch -P 10 -p1 +%patch -P 12 -p1 +%patch -P 14 +%patch -P 15 -p1 +%patch -P 16 +%patch -P 17 -p1 +%patch -P 18 -p1 +%patch -P 20 +%patch -P 21 +%patch -P 22 +%patch -P 23 ## find . -type f -name \*.cat\* -exec rm -f {} \; dos2unix contrib/ms2isc/* @@ -268,6 +279,7 @@ export CFLAGS LDFLAGS FFLAGS CXXFLAGS # SLE-12 compatbility still needed as of October 2021 %define make_build %{__make} %{?_smp_mflags} %endif +%make_build -j1 -C keama %make_build -j1 -C bind all cat bind/configure.log cat bind/build.log @@ -285,8 +297,10 @@ cat bind/install.log # check syntax in our scripts bash -n $RPM_SOURCE_DIR/dhcpd.script bash -n $RPM_SOURCE_DIR/dhcrelay.script +bash -n $RPM_SOURCE_DIR/dhclient-script %install +%make_install -C keama %make_install # # directories @@ -309,13 +323,12 @@ mv -f %{buildroot}%{_sbindir}/dhclient %{buildroot}/sbin/ ln -sf dhcpd %{buildroot}%{_sbindir}/dhcpd6 ln -sf dhcrelay %{buildroot}%{_sbindir}/dhcrelay6 ln -sf dhclient %{buildroot}%{sbindir}/dhclient6 -# install our adopted config examples: +# install our adopted config examples and dhclient-script: install -m0644 $RPM_SOURCE_DIR/dhcpd.conf %{buildroot}%{_sysconfdir}/ install -m0644 $RPM_SOURCE_DIR/dhcpd6.conf %{buildroot}%{_sysconfdir}/ install -m0644 $RPM_SOURCE_DIR/dhclient.conf %{buildroot}%{_sysconfdir}/ install -m0644 $RPM_SOURCE_DIR/dhclient6.conf %{buildroot}%{_sysconfdir}/ -# We don't ship dhclient-script any more (boo#1216822) -rm -f %{buildroot}%{_mandir}/man8/dhclient-script.8 +install -m0754 $RPM_SOURCE_DIR/dhclient-script %{buildroot}%{sbindir}/ # helper / wrapper scripts install -d -m0755 %{buildroot}%{_libexecdir}/dhcp install -m0755 $RPM_SOURCE_DIR/dhcpd.script \ @@ -334,31 +347,6 @@ install -m0644 $RPM_SOURCE_DIR/dhcrelay.service \ install -m0644 $RPM_SOURCE_DIR/dhcrelay6.service \ %{buildroot}%{_unitdir}/dhcrelay6.service sed -e 's,@LIBEXECDIR@,%{_libexecdir},g' -i %{buildroot}%{_unitdir}/d* -# rcservice links -ln -sf %{_sbindir}/service %{buildroot}%{_sbindir}/rcdhcpd -ln -sf %{_sbindir}/service %{buildroot}%{_sbindir}/rcdhcpd6 -ln -sf %{_sbindir}/service %{buildroot}%{_sbindir}/rcdhcrelay -ln -sf %{_sbindir}/service %{buildroot}%{_sbindir}/rcdhcrelay6 -# rcservice actions -legacy_actionsdir=%{buildroot}%{_libexecdir}/initscripts/legacy-actions -cat >dhcpd.action <<'EOF' -#!/bin/bash -exec %{_libexecdir}/dhcp/dhcpd -4 ${0##*/} -EOF -install -d -m0755 ${legacy_actionsdir}/dhcpd -install -m0755 dhcpd.action ${legacy_actionsdir}/dhcpd/syntax-check -ln -sf syntax-check ${legacy_actionsdir}/dhcpd/check-syntax -ln -sf syntax-check ${legacy_actionsdir}/dhcpd/check-lease -rm -f dhcpd.action -cat >dhcpd.action <<'EOF' -#!/bin/bash -exec %{_libexecdir}/dhcp/dhcpd -6 ${0##*/} -EOF -install -d -m0755 ${legacy_actionsdir}/dhcpd6 -install -m0755 dhcpd.action ${legacy_actionsdir}/dhcpd6/syntax-check -ln -sf syntax-check ${legacy_actionsdir}/dhcpd6/check-syntax -ln -sf syntax-check ${legacy_actionsdir}/dhcpd6/check-lease -rm -f dhcpd.action # sysconfig files install -m0644 $RPM_SOURCE_DIR/sysconfig.dhcpd \ %{buildroot}%{_fillupdir}/ @@ -484,17 +472,11 @@ fi %files server %{_sbindir}/dhcpd %{_sbindir}/dhcpd6 -%{_sbindir}/rcdhcpd -%{_sbindir}/rcdhcpd6 %{_unitdir}/dhcpd.service %{_unitdir}/dhcpd6.service %if %{with sysusers} %{_sysusersdir}/dhcp-user.conf %endif -%dir %{_libexecdir}/initscripts/legacy-actions/dhcpd -%{_libexecdir}/initscripts/legacy-actions/dhcpd/* -%dir %{_libexecdir}/initscripts/legacy-actions/dhcpd6 -%{_libexecdir}/initscripts/legacy-actions/dhcpd6/* %config(noreplace) %{_sysconfdir}/dhcpd.conf %config(noreplace) %{_sysconfdir}/dhcpd6.conf %attr(755,root,root) %dir %config(noreplace) %ghost %{_sysconfdir}/dhcpd.d/ @@ -537,19 +519,19 @@ fi %files client %{sbindir}/dhclient %{sbindir}/dhclient6 +%{sbindir}/dhclient-script %config(noreplace) %{_sysconfdir}/dhclient.conf %config(noreplace) %{_sysconfdir}/dhclient6.conf %{_mandir}/man5/dhclient.conf.5%{?ext_man} %{_mandir}/man5/dhclient.leases.5%{?ext_man} %{_mandir}/man8/dhclient.8%{?ext_man} +%{_mandir}/man8/dhclient-script.8%{?ext_man} %dir %{_localstatedir}/lib/dhcp %dir %{_localstatedir}/lib/dhcp6 %files relay %{_sbindir}/dhcrelay %{_sbindir}/dhcrelay6 -%{_sbindir}/rcdhcrelay -%{_sbindir}/rcdhcrelay6 %dir %{_libexecdir}/dhcp %{_libexecdir}/dhcp/dhcrelay %{_unitdir}/dhcrelay.service @@ -565,4 +547,8 @@ fi %{_mandir}/man3/omapi.3%{?ext_man} %{_mandir}/man3/dhcpctl.3%{?ext_man} +%files keama +%{_sbindir}/keama +%{_mandir}/man8/keama.8%{?ext_man} + %changelog