[PATCH] module-setup: Use "ip=" command of the dracut to handle DNS
by Xunlei Pang
Currently kdump uses dracut's "nameserver=" command to hande DNS,
it is acquired both from ifcfg files and "/etc/resolv.conf".
This is improper for dhcp cases, as "/etc/resolv.conf" is generated
by dhcp, the proper logic should be:
1) For static cases, DNS can be acquired from corresponding ifcfg file.
2) For dhcp cases, DNS is normally generated by dhcp, but extra DNS
can still be specified in the ifcfg files mannually.
3) For special user-assigned DNS not specified in any ifcfg file, we can
pass it to dracut via "nameserver=".
This patch improves the logic using the following "ip=" command format
provided by dracut:
ip=<client-IP>:[<peer>]:<gateway-IP>:<netmask>:<client_hostname>:
<interface>:{none|off|dhcp|on|any|dhcp6|auto6|ibft}[:[<dns1>][:<dns2>]]
Signed-off-by: Xunlei Pang <xlpang(a)redhat.com>
---
dracut-module-setup.sh | 46 ++++++++++++++++++++++++----------------------
1 file changed, 24 insertions(+), 22 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh
index 4cd7107..a18fdc0 100755
--- a/dracut-module-setup.sh
+++ b/dracut-module-setup.sh
@@ -63,26 +63,19 @@ kdump_is_vlan() {
}
# $1: netdev name
-kdump_setup_dns() {
- local _nameserver _dns
- local _dnsfile=${initdir}/etc/cmdline.d/42dns.conf
- . /etc/sysconfig/network-scripts/ifcfg-$1
-
- [ -n "$DNS1" ] && echo "nameserver=$DNS1" > "$_dnsfile"
- [ -n "$DNS2" ] && echo "nameserver=$DNS2" >> "$_dnsfile"
+# return pattern ":<dns1>[<:dns2>]" if not ""
+kdump_get_dns_from_ifcfg() {
+ local _dns
- while read content;
- do
- _nameserver=$(echo $content | grep ^nameserver)
- [ -z "$_nameserver" ] && continue
+ unset DNS1 DNS2
+ if [ -e /etc/sysconfig/network-scripts/ifcfg-$1 ]; then
+ . /etc/sysconfig/network-scripts/ifcfg-$1
+ fi
- _dns=$(echo $_nameserver | cut -d' ' -f2)
- [ -z "$_dns" ] && continue
+ [ -n "$DNS1" ] && _dns=${_dns}:$(echo $DNS1)
+ [ -n "$DNS2" ] && _dns=${_dns}:$(echo $DNS2)
- if [ ! -f $_dnsfile ] || [ ! $(cat $_dnsfile | grep -q $_dns) ]; then
- echo "nameserver=$_dns" >> "$_dnsfile"
- fi
- done < "/etc/resolv.conf"
+ echo -n "${_dns}" | cut -d':' -f1,2,3
}
#$1: netdev name
@@ -254,22 +247,27 @@ kdump_setup_znet() {
# Setup dracut to bringup a given network interface
kdump_setup_netdev() {
local _netdev=$1 _srcaddr=$2
- local _static _proto _ip_conf _ip_opts _ifname_opts
+ local _static _proto _ip_conf _ip_opts _ifname_opts _ifcfg_dns
+ local _global_dnsfile=${initdir}/etc/cmdline.d/42dns.conf
if [ "$(uname -m)" = "s390x" ]; then
kdump_setup_znet $_netdev
fi
- _netmac=$(kdump_get_mac_addr $_netdev)
+ # Using below "ip=" command format provided by dracut:
+ # ip=<client-IP>:[<peer>]:<gateway-IP>:<netmask>:<client_hostname>:
+ # <interface>:{none|off|dhcp|on|any|dhcp6|auto6|ibft}[:[<dns1>][:<dns2>]]
_static=$(kdump_static_ip $_netdev $_srcaddr)
if [ -n "$_static" ]; then
_proto=none
else
_proto=dhcp
+ _static=":::::"
fi
+ _ifcfg_dns=$(kdump_get_dns_from_ifcfg $_netdev)
_ip_conf="${initdir}/etc/cmdline.d/40ip.conf"
- _ip_opts=" ip=${_static}$(kdump_setup_ifname $_netdev):${_proto}"
+ _ip_opts=" ip=${_static}$(kdump_setup_ifname $_netdev):${_proto}${_ifcfg_dns}"
# dracut doesn't allow duplicated configuration for same NIC, even they're exactly the same.
# so we have to avoid adding duplicates
@@ -278,6 +276,12 @@ kdump_setup_netdev() {
if [ ! -f $_ip_conf ] || ! grep -q $_ip_opts $_ip_conf &&\
! grep -q "ip=[^[:space:]]*$_netdev" /proc/cmdline; then
echo "$_ip_opts" >> $_ip_conf
+ # In case of no DNS specified by iscsi.
+ if [ -n "${_ifcfg_dns}" ]; then
+ _ifcfg_dns=${_ifcfg_dns##:}
+ echo "nameserver=${_ifcfg_dns%%:*}" >> ${_global_dnsfile}
+ [ "${_ifcfg_dns}" = "${_ifcfg_dns%%:*}" ] || echo "nameserver=${_ifcfg_dns##*:}" >> ${_global_dnsfile}
+ fi
fi
if kdump_is_bridge "$_netdev"; then
@@ -292,8 +296,6 @@ kdump_setup_netdev() {
_ifname_opts=" ifname=$(kdump_setup_ifname $_netdev):$(kdump_get_mac_addr $_netdev)"
echo "$_ifname_opts" >> $_ip_conf
fi
-
- kdump_setup_dns "$_netdev"
}
get_ip_route_field()
--
1.8.3.1
8 years, 1 month
Re: Detecting kdump-lib-initramfs.sh errors
by Dave Young
Hi, Joe
On 02/26/16 at 04:09pm, Joe Lawrence wrote:
> Hi Dave,
>
> Stratus has a question about monitoring various error scenarios out of
> kdump-lib-initramfs.sh.
>
> This file looks to be Red Hat specific (at least it's not in my upstream
> kexec-tools git tree), so I wasn't sure where to direct the question.
> Feel free to point us in the direction of an appropriate mailing list,
> bugzilla, etc.
We are using Fedora kexec mailing list as the upstream of kdump scripts.
see below page:
https://lists.fedoraproject.org/admin/lists/kexec.lists.fedoraproject.org/
>
> Basically we're interested in reporting kdump progress over IPMI,
> including the mounting / creation of kdump directories, vmcore-dmesg and
> vmcore files.
>
> We could obviously modify kdump-lib-initramfs.sh directly to accomplish
> this [1], but we were wondering if there was a cleaner approach -- for
> example, functions in kdump-lib-initramfs.sh could return status or log
> errors somewhere that we could read later.
>
> We would gladly prototype and test examples if this is something that
> could be reasonably supported.
>
> [1] https://paste.fedoraproject.org/330114/
The better way is to send patches to kexec(a)lists.fedoraproject.org
so that we can review and discuss it.
The latest code stays in Fedora kexec git tree, you can clone the tree by:
fedpkg clone -a kexec-tools
Thanks
Dave
8 years, 1 month