From e31d7cec9e48617a7509bab38cac32958f431d4e Mon Sep 17 00:00:00 2001 From: Evgeni Golov Date: Sat, 29 Mar 2014 14:28:02 +0100 Subject: [PATCH] Supporting resolvconf in the squashfs. When resolvconf is used in the squashfs, /etc/resolv.conf is a symlink to the generated version. Depending on the size of the squashfs and other factors, sometimes we try to write to /etc/resolv.conf while it still points to nirvana, as resolvconf did not generate it yet. Instead of being racy and writing to a file which will be regenerated anyways, let's detect resolvconf and write to its base file instead. Initial detection idea by Mika Prokop --- components/9990-main.sh | 12 +++++++++--- components/9990-netbase.sh | 15 ++++++++++----- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/components/9990-main.sh b/components/9990-main.sh index 83f087f..85b8a1d 100755 --- a/components/9990-main.sh +++ b/components/9990-main.sh @@ -178,10 +178,16 @@ Live () fi fi - if [ -f /etc/resolv.conf ] && [ ! -s ${rootmnt}/etc/resolv.conf ] + if [ -L /root/etc/resolv.conf ] ; then + # assume we have resolvconf + DNSFILE="${rootmnt}/etc/resolvconf/resolv.conf.d/base" + else + DNSFILE="${rootmnt}/etc/resolv.conf" + fi + if [ -f /etc/resolv.conf ] && [ ! -s ${DNSFILE} ] then - log_begin_msg "Copying /etc/resolv.conf to ${rootmnt}/etc/resolv.conf" - cp -v /etc/resolv.conf ${rootmnt}/etc/resolv.conf + log_begin_msg "Copying /etc/resolv.conf to ${DNSFILE}" + cp -v /etc/resolv.conf ${DNSFILE} log_end_msg fi diff --git a/components/9990-netbase.sh b/components/9990-netbase.sh index af3522f..a32a47b 100755 --- a/components/9990-netbase.sh +++ b/components/9990-netbase.sh @@ -16,7 +16,12 @@ Netbase () log_begin_msg "Preconfiguring networking" IFFILE="/root/etc/network/interfaces" - DNSFILE="/root/etc/resolv.conf" + if [ -L /root/etc/resolv.conf ] ; then + # assume we have resolvconf + DNSFILE="/root/etc/resolvconf/resolv.conf.d/base" + else + DNSFILE="/root/etc/resolv.conf" + fi if [ "${STATICIP}" = "frommedia" ] && [ -e "${IFFILE}" ] then @@ -102,7 +107,7 @@ EOF done fi - if [ ! -f /root/etc/resolv.conf ] || [ -z "$(cat /root/etc/resolv.conf)" ] + if [ ! -f "${DNSFILE}" ] || [ -z "$(cat ${DNSFILE})" ] then if [ -f /netboot.config ] then @@ -112,7 +117,7 @@ EOF rc_search=$(cat netboot.config | awk '/domain/ { print $3 }') rc_server0="$(cat netboot.config | awk '/dns0/ { print $5 }')" -cat > /root/etc/resolv.conf << EOF +cat > $DNSFILE << EOF search ${rc_search} domain ${rc_search} nameserver ${rc_server0} @@ -122,10 +127,10 @@ EOF if [ "${rc_server1}" != "0.0.0.0" ] then - echo "nameserver ${rc_server1}" >> /root/etc/resolv.conf + echo "nameserver ${rc_server1}" >> $DNSFILE fi - cat /root/etc/resolv.conf >> /root/var/log/netboot.config + cat $DNSFILE >> /root/var/log/netboot.config fi fi fi -- 2.1.4