Re: Automatically populate resolv.conf when new DNS is acquired
On 2018-06-27 03:31, john doe wrote: > Good morningĀ Brian, bottom posting. > By Windows Admin you mean "Windows Admin Center"? Line wrapped - Windows Admin Tools - on W10 - or search for event (log) viewer > I'm using Cygwin on a laptop (win 7 pro) and sadly, if I'm not mistaking, > "Windows Admin" is not available on non-server platform. May be Administrative Tools on W7 > If I can't find a way to determine when my DNS changes I can clearly emulate > an hourly cron job by using "task scheduler". If you're using DHCP it could potentially change when your lease expires, sometimes a couple of days, (depends on your router settings or ISP: my external IP changes every few months, internal and DNS never) or if on WiFi, when you connect to a new AP. -- Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Re: Automatically populate resolv.conf when new DNS is acquired
Good morning Brian, bottom posting. On 6/26/2018 4:18 PM, Brian Inglis wrote: On 2018-06-26 04:33, john doe wrote: In gnupg2 the use of dirmngr utility is required to interact with a keyserver. Dirmngr requires that '/etc/resolv.conf' be populated with my name servers. That means that everytime the dns changes (new network ...) I need to manually edit that file. How can I let Cygwin update that file whenever the DNS is changed? Attached an awk script to generate resolv.conf from Windows ipconfig /all output, run from .cygwin_profile (sourced under Cygwin from login .bash_profile) using the stanza below: it only replaces an existing writable /etc/resolv.conf when the content changes - touch, chown, chmod /etc/resolv.conf to enable. # update /etc/resolv.conf if changed c=/etc/resolv.conf test -w $c && \ i=$(/usr/bin/which -- ipconfig) && \ r=$(/usr/bin/which -- resolv.awk) && \ t=$(/bin/mktemp -t -- resolv.conf.$$.) && \ if $i /all | $r > $t; then /usr/bin/cmp -s -- $t $c || \ /bin/cp -fv -- $t $c /bin/rm -f -- $t fi unset c i r t This could be used in a bash script run from a Windows scheduled task when a relevant DHCP event occurs: you can find DHCP events by checking Windows Admin Tools/Event Viewer/Window Logs/System/Filter Current Log/Event Sources/Dhcp-Client,DHCPv6-Client, or a similar PowerShell script. Thanks for the awk script and the explanation on how to use it! :) By Windows Admin you mean "Windows Admin Center"? I'm using Cygwin on a laptop (win 7 pro) and sadly, if I'm not mistaking, "Windows Admin" is not available on non-server platform. If I can't find a way to determine when my DNS changes I can clearly emulate an hourly cron job by using "task scheduler". Many thanks for the task scheduler hint and for your help. -- John Doe -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Re: Automatically populate resolv.conf when new DNS is acquired
On 2018-06-26 04:33, john doe wrote: > In gnupg2 the use of dirmngr utility is required to interact with a keyserver. > Dirmngr requires that '/etc/resolv.conf' be populated with my name servers. > That means that everytime the dns changes (new network ...) I need to manually > edit that file. > How can I let Cygwin update that file whenever the DNS is changed? Attached an awk script to generate resolv.conf from Windows ipconfig /all output, run from .cygwin_profile (sourced under Cygwin from login .bash_profile) using the stanza below: it only replaces an existing writable /etc/resolv.conf when the content changes - touch, chown, chmod /etc/resolv.conf to enable. # update /etc/resolv.conf if changed c=/etc/resolv.conf test -w $c && \ i=$(/usr/bin/which -- ipconfig) && \ r=$(/usr/bin/which -- resolv.awk) && \ t=$(/bin/mktemp -t -- resolv.conf.$$.) && \ if $i /all | $r > $t; then /usr/bin/cmp -s -- $t $c|| \ /bin/cp -fv -- $t $c /bin/rm -f -- $t fi unset c i r t This could be used in a bash script run from a Windows scheduled task when a relevant DHCP event occurs: you can find DHCP events by checking Windows Admin Tools/Event Viewer/Window Logs/System/Filter Current Log/Event Sources/Dhcp-Client,DHCPv6-Client, or a similar PowerShell script. -- Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada #!/usr/bin/awk -f # resolv.awk - create Windows resolv.conf from ipconfig /all output { sub( /\r/, "", $NF) } # trim \r # collect DNS domain suffixes /D[Nn][Ss]\sSuffix[^:]*:\s\S/ { domain[$NF] = $NF } # collect DNS search suffixes /Search\sList[^:]*:\s\S/{ search[$NF] = $NF } # collect DNS server IP addresses /DNS\sServers[^:]*:\s\S/{ dns = 1 } # enable dns && $NF ~ /^[0-9.]+$/{ nameserver[++ns] = $NF } # collect dns && $NF !~ /^[0-9.]+$/ { dns = 0 } # disable # output unique resolv.conf entries END { for (n = 1; n <= ns; ++n) { print "nameserver", nameserver[n] } for (d in domain) { print "domain", domain[d] } p = "search" for (s in search) { printf "%s %s", p, search[s] p = "" } if (!p) { print p } } -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple