resolv.conf handling: resolve symlink inside chroot + drop resolvconf from 96-apt...
authorMichael Prokop <mika@grml.org>
Sun, 27 Nov 2011 02:25:05 +0000 (03:25 +0100)
committerMichael Prokop <mika@grml.org>
Sun, 27 Nov 2011 03:10:11 +0000 (04:10 +0100)
When resolving the symlink on a system using
/lib/init/rw/resolvconf/ for resolvconf files but the chroot uses
/run/resolvconf then the readlink call from outside the chroot
fails.

| # readlink -f /var/lib/jenkins/workspace/grml64_sid/grml_chroot/etc/resolv.conf
| /lib/init/rw/resolvconf/resolv.conf
| # chroot /var/lib/jenkins/workspace/grml64_sid/grml_chroot/ readlink -f /etc/resolv.conf
| /run/resolvconf/resolv.conf

Also drop the resolvconf code from 96-apt-listbugs.
It's too error prone (meeeeeh) so people are supposed to either
have something like dnsmasq running on the host or have a proper
/etc/resolv.conf prepared.

etc/grml/fai/config/hooks/instsoft.GRMLBASE
etc/grml/fai/config/scripts/GRMLBASE/96-apt-listbugs

index c6760a5..51a0e77 100755 (executable)
@@ -21,7 +21,7 @@ if [ "$FAI_ACTION" = "softupdate" ] ; then
    echo "Action $FAI_ACTION of FAI (hooks/instsoft.GRMLBASE) via grml-live running"
 
    if [ -r /etc/resolv.conf ] ; then
    echo "Action $FAI_ACTION of FAI (hooks/instsoft.GRMLBASE) via grml-live running"
 
    if [ -r /etc/resolv.conf ] ; then
-     case "$(readlink -f ${target}/etc/resolv.conf)" in
+     case "$(chroot $target readlink -f /etc/resolv.conf)" in
        /run/*) # resolvconf with /run
          mkdir -p $target/run/resolvconf
          cat /etc/resolv.conf >> $target/run/resolvconf/resolv.conf
        /run/*) # resolvconf with /run
          mkdir -p $target/run/resolvconf
          cat /etc/resolv.conf >> $target/run/resolvconf/resolv.conf
index c75a141..8049d7e 100755 (executable)
@@ -23,34 +23,6 @@ set -u
   [ -r /etc/grml/grml-live.local ] && . /etc/grml/grml-live.local
   [ -n "$HOSTNAME" ] || HOSTNAME=grml
 
   [ -r /etc/grml/grml-live.local ] && . /etc/grml/grml-live.local
   [ -n "$HOSTNAME" ] || HOSTNAME=grml
 
-  if [ -r /etc/resolv.conf ] ; then
-    case "$(readlink -f ${target}/etc/resolv.conf)" in
-      /run/*) # resolvconf with /run
-        mkdir -p $target/run/resolvconf
-        cat /etc/resolv.conf >> $target/run/resolvconf/resolv.conf
-        ;;
-      /lib/*) # resolvconf without /run
-        # sanity check to avoid "input file is output file",
-        # see http://bts.grml.org/grml/issue984
-        if ! [ -L $target/etc/resolvconf/run/resolv.conf ] ; then
-          cat /etc/resolv.conf >> $target/etc/resolvconf/run/resolv.conf
-        else
-          echo "Error: /etc/resolvconf/run/resolv.conf in chroot should not be a symlink." >&2
-          echo "       Looks like something is wrong, please fix manually." >&2
-          exit 1
-        fi
-        ;;
-      *) # no resolvconf
-        if ! [ -L $target/etc/resolv.conf ] ; then
-          cat /etc/resolv.conf >> $target/etc/resolv.conf
-        else
-          echo "Error: /etc/resolv.conf in chroot should not be a symlink (resolvconf not installed)." >&2
-          exit 1
-        fi
-        ;;
-    esac
-  fi
-
   if [ -x $target/usr/sbin/apt-listbugs -a -x $target/usr/bin/apt-show-source ] && \
      [ -x $target/etc/apt/grml/listbugs ] ; then
      for severity in critical grave serious ; do
   if [ -x $target/usr/sbin/apt-listbugs -a -x $target/usr/bin/apt-show-source ] && \
      [ -x $target/etc/apt/grml/listbugs ] ; then
      for severity in critical grave serious ; do