On 06/12/14 at 08:43am, Vivek Goyal wrote:
On Tue, Jun 10, 2014 at 01:20:05PM +0800, Arthur Zou wrote:
> This patch is a contrast of patch v3 which pass a commandline to second kenel
> to tell the ip address type. In this approach, Install extra getent and head in
Arthur,
Except subject line, changelog don't tell me that what's the problem, why
are we putting this patch and how this patch fixes it.
> initramfs so that we can use it to tell the ip address type in the second kernel.
> Comparing with patch v3, this approach will cause the size of decompressed
initramfs
> increase about 72K which I think is acceptable.
>
> Resolves: bz821620
>
Hi Marc, Bao and Dave,
Can you please help review ipv6 support?
Arthur explained about the detail of this patch to us (chao, bhe and me) f2f.
The patch overall looks good but I think there should be some documentaion changes
as well in this patch.
Thanks
Vivek
> Currently dracut has supported for ipv6, and it is a significant feture for
> kdump to enhance to support ipv6.
>
> For ipv6 nfs dump:
> if ipv6 address type is link scope, /etc/kdump.conf should be edited like
> "nfs [fe80::5054:ff:fe48:ca80%eth0]:/mnt"
> else /etc/kdump.conf should be edited like "nfs
[2001:db8:0:f101::2]:/mnt"
> For ipv6 ssh dump
> if ipv6 address type is link scope, /etc/kdump.conf should be edited like
> "ssh root@fe80::5054:ff:fe48:ca80%eth0"
> else /etc/kdump.conf should be edited like "ssh
root@2001:db8:0:f101::2"
>
> Signed-off-by: Arthur Zou <zzou(a)redhat.com>
> ---
> dracut-kdump.sh | 10 ++++++++--
> dracut-module-setup.sh | 37 ++++++++++++++++++++++++++++++-------
> kdump-lib.sh | 23 +++++++++++++++++++++++
> 3 files changed, 61 insertions(+), 9 deletions(-)
>
> diff --git a/dracut-kdump.sh b/dracut-kdump.sh
> index cb13d92..c215bee 100755
> --- a/dracut-kdump.sh
> +++ b/dracut-kdump.sh
> @@ -206,10 +206,16 @@ get_host_ip()
> then
> kdumpnic=$(getarg kdumpnic=)
> [ -z "$kdumpnic" ] && echo "kdump: failed to get
kdumpnic!" && return 1
> - _host=`ip addr show dev $kdumpnic|grep 'inet '`
> + if is_ipv6_target
> + then
> + _host=`ip addr show dev $kdumpnic|grep 'inet6'`
> + else
> + _host=`ip addr show dev $kdumpnic|grep 'inet '`
> + fi
> [ $? -ne 0 ] && echo "kdump: wrong kdumpnic: $kdumpnic"
&& return 1
> - _host="${_host##*inet }"
> + _host="${_host#*inet}"
> _host="${_host%%/*}"
> + _host=`echo $_host | cut -d' ' -f2`
> [ -z "$_host" ] && echo "kdump: wrong kdumpnic:
$kdumpnic" && return 1
> HOST_IP=$_host
> fi
> diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh
> index 2a16900..e3e0ee6 100755
> --- a/dracut-module-setup.sh
> +++ b/dracut-module-setup.sh
> @@ -64,6 +64,7 @@ kdump_setup_dns() {
> . /etc/sysconfig/network-scripts/ifcfg-$1
> [ -n "$DNS1" ] && echo "nameserver=$DNS1" >
"$_dnsfile"
> [ -n "$DNS2" ] && echo "nameserver=$DNS2" >>
"$_dnsfile"
> + [ -f /etc/resolv.conf ] && cat /etc/resolv.conf >>
"$_dnsfile"
> }
>
> #$1: netdev name
> @@ -71,10 +72,20 @@ kdump_setup_dns() {
> #if it use static ip echo it, or echo null
> kdump_static_ip() {
> . /etc/sysconfig/network-scripts/ifcfg-$1
> - if [ -n "$IPADDR" ]; then
> - [ -z "$NETMASK" -a -n "$PREFIX" ] && \
> + if is_ipv6_target
> + then
> + if [ -n "$IPV6ADDR" ]; then
> + IPV6ADDR=${IPV6ADDR%/*} #strip the prefix
> + IPV6ADDR="[${IPV6ADDR}]"
> + IPV6_DEFAULTGW="[${IPV6_DEFAULTGW}]"
> + echo -n "${IPV6ADDR}::${IPV6_DEFAULTGW}:64::"
> + fi
> + else
> + if [ -n "$IPADDR" ]; then
> + [ -z "$NETMASK" -a -n "$PREFIX" ] && \
> NETMASK=$(ipcalc -m $IPADDR/$PREFIX | cut -d'=' -f2)
> - echo -n "${IPADDR}::${GATEWAY}:${NETMASK}::"
> + echo -n "${IPADDR}::${GATEWAY}:${NETMASK}::"
> + fi
> fi
> }
>
> @@ -227,16 +238,26 @@ kdump_install_net() {
> local _server _netdev
> local config_val="$1"
>
> - _server=`echo $config_val | sed 's/.*@//' | cut -d':' -f1`
> + _server=`echo $config_val | sed 's/.*@//'`
> + _server=${_server%:/*}
> + _server=${_server#[}
> + _server=${_server%]}
> + _server=${_server%\%*} #strip the zone_ID if exist
>
> - _need_dns=`echo $_server|grep "[a-zA-Z]"`
> - [ -n "$_need_dns" ] && _server=`getent hosts $_server|cut
-d' ' -f1`
> + if is_ipv6_target
> + then
> + _need_dns=`echo $_server|grep "[:]"`
> + [ -z "$_need_dns" ] && _server=`getent hosts $_server|
head -n 1 | cut -d' ' -f1`
> + else
> + _need_dns=`echo $_server|grep "[a-zA-Z]"`
> + [ -n "$_need_dns" ] && _server=`getent hosts $_server|
head -n 1 | cut -d' ' -f1`
> + fi
>
> _netdev=`/sbin/ip route get to $_server 2>&1`
> [ $? != 0 ] && echo "Bad kdump location: $config_val"
&& exit 1
>
> #the field in the ip output changes if we go to another subnet
> - if [ -n "`echo $_netdev | grep via`" ]
> + if [ -n "`echo $_netdev | grep -E 'via|from'`" ]
> then
> # we are going to a different subnet
> _netdev=`echo $_netdev|awk '{print $5;}'|head -n 1`
> @@ -542,6 +563,8 @@ install() {
> inst "/bin/date" "/bin/date"
> inst "/bin/sync" "/bin/sync"
> inst "/bin/cut" "/bin/cut"
> + inst "/bin/getent" "/bin/getent"
> + inst "/bin/head" "/bin/head"
> inst "/sbin/makedumpfile" "/sbin/makedumpfile"
> inst "/sbin/vmcore-dmesg" "/sbin/vmcore-dmesg"
> inst_hook pre-pivot 9999 "$moddir/kdump.sh"
> diff --git a/kdump-lib.sh b/kdump-lib.sh
> index a20c6e8..5e9f973 100755
> --- a/kdump-lib.sh
> +++ b/kdump-lib.sh
> @@ -44,6 +44,29 @@ strip_comments()
> echo $@ | sed -e 's/\(.*\)#.*/\1/'
> }
>
> +# check the remote server ip address tpye
> +is_ipv6_target()
> +{
> + local _server _server_tmp
> + if is_ssh_dump_target; then
> + _server=`grep "^ssh " /etc/kdump.conf`
> + elif is_nfs_dump_target; then
> + _server=`grep "^nfs " /etc/kdump.conf`
> + fi
> +
> + [ -z "$_server" ] && return 1
> + _server=`strip_comments $_server`
> + _server=${_server#*@}
> + _server=${_server%:/*}
> + _server=${_server#[}
> + _server=${_server%]}
> + _server=${_server%\%*}
> + _server_tmp=$_server
> + _server=`getent hosts $_server | head -n 1 | cut -d' ' -f1`
> + _server=${_server:-$_server_tmp}
> + echo $_server | grep -q ":"
> +}
> +
> # Check if fence kdump is configured in Pacemaker cluster
> is_pcs_fence_kdump()
> {
> --
> 1.8.4.2
>
> _______________________________________________
> kexec mailing list
> kexec(a)lists.fedoraproject.org
>
https://lists.fedoraproject.org/mailman/listinfo/kexec