From 8acc92809505421d076ac8f68de81b6bcf79f8db Mon Sep 17 00:00:00 2001 From: Evgeni Golov Date: Tue, 25 Mar 2014 17:48:13 +0100 Subject: [PATCH] address resolvconf issues when using netboot which were raised on the ml --- ...operly-check-if-rc_server1-is-not-0.0.0.0.patch | 26 ++++++ debian/patches/series | 2 + .../support-resolvconf-in-the-squashfs.patch | 96 ++++++++++++++++++++++ 3 files changed, 124 insertions(+) create mode 100644 debian/patches/properly-check-if-rc_server1-is-not-0.0.0.0.patch create mode 100644 debian/patches/support-resolvconf-in-the-squashfs.patch diff --git a/debian/patches/properly-check-if-rc_server1-is-not-0.0.0.0.patch b/debian/patches/properly-check-if-rc_server1-is-not-0.0.0.0.patch new file mode 100644 index 0000000..d06c243 --- /dev/null +++ b/debian/patches/properly-check-if-rc_server1-is-not-0.0.0.0.patch @@ -0,0 +1,26 @@ +From ec970bc1135d4bded85a1e02021bb25adc2629b5 Mon Sep 17 00:00:00 2001 +From: Evgeni Golov +Date: Tue, 25 Mar 2014 08:03:31 +0100 +Subject: [PATCH 1/2] properly check if $rc_server1 is not "0.0.0.0" + +`if [ "${rc_server1}" ! = "0.0.0.0" ]` is wrong shell syntax +--- + components/9990-netbase.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/components/9990-netbase.sh b/components/9990-netbase.sh +index 496c3ff..af3522f 100755 +--- a/components/9990-netbase.sh ++++ b/components/9990-netbase.sh +@@ -120,7 +120,7 @@ EOF + + rc_server1=$(cat netboot.config | awk '/dns0/ { print $8 }') + +- if [ "${rc_server1}" ! = "0.0.0.0" ] ++ if [ "${rc_server1}" != "0.0.0.0" ] + then + echo "nameserver ${rc_server1}" >> /root/etc/resolv.conf + fi +-- +1.9.1 + diff --git a/debian/patches/series b/debian/patches/series index dce736d..66ef6c5 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -17,3 +17,5 @@ grml-specific/package_rename.patch reverts/drop_nameserver_from_ip_option.patch reverts/restore_support_for_old_persistence.patch 41_vlan_support.patch +properly-check-if-rc_server1-is-not-0.0.0.0.patch +support-resolvconf-in-the-squashfs.patch diff --git a/debian/patches/support-resolvconf-in-the-squashfs.patch b/debian/patches/support-resolvconf-in-the-squashfs.patch new file mode 100644 index 0000000..52b172c --- /dev/null +++ b/debian/patches/support-resolvconf-in-the-squashfs.patch @@ -0,0 +1,96 @@ +From 5fff70167b23195380c1e18dd9ac785641ab9f3e Mon Sep 17 00:00:00 2001 +From: Evgeni Golov +Date: Tue, 25 Mar 2014 08:38:58 +0100 +Subject: [PATCH 2/2] support 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, the +moon phase and the charge of the flux capacitor, we sometimes 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 +-- +1.9.1 + -- 2.1.4