about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2010-11-17 21:58:42 +0000
committerMichael Biebl <biebl@debian.org>2010-11-17 21:58:42 +0000
commitb5ea3bfdeb0b6f2e1c53d0c565fd3636375d6712 (patch)
tree47990d1c4f94ada9a3022783e71b9411e6c7eb24
parentc3b3a3abf171490b6df155c8d8cd23bec4762c40 (diff)
Integrate debian/ifblacklist_migrate.sh from Ubuntu and install
it in /usr/lib/NetworkManager. Improve it to disable the interfaces
with a #NetworkManager# prefix and re-enable them when the package is
removed. (Closes: #530024)

git-svn-id: svn+ssh://svn.debian.org/svn/pkg-utopia/packages/unstable/networkmanager@3768 ceb527fc-18e6-0310-9fe2-813c157c29e7
-rw-r--r--debian/changelog10
-rw-r--r--debian/ifblacklist_migrate.sh66
-rw-r--r--debian/network-manager.install1
-rw-r--r--debian/network-manager.postinst6
-rw-r--r--debian/network-manager.postrm12
-rw-r--r--debian/network-manager.preinst1
6 files changed, 91 insertions, 5 deletions
diff --git a/debian/changelog b/debian/changelog
index a504c238..1ddc2ccc 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,13 @@
+network-manager (0.8.1-4) UNRELEASED; urgency=low
+
+  [ Raphaƫl Hertzog ]
+  * Integrate debian/ifblacklist_migrate.sh from Ubuntu and install
+    it in /usr/lib/NetworkManager. Improve it to disable the interfaces
+    with a #NetworkManager# prefix and re-enable them when the package is
+    removed. (Closes: #530024)
+
+ -- Michael Biebl <biebl@debian.org>  Wed, 17 Nov 2010 22:55:44 +0100
+
 network-manager (0.8.1-3) unstable; urgency=low
 
   * debian/control
diff --git a/debian/ifblacklist_migrate.sh b/debian/ifblacklist_migrate.sh
new file mode 100644
index 00000000..1d41266c
--- /dev/null
+++ b/debian/ifblacklist_migrate.sh
@@ -0,0 +1,66 @@
+#!/bin/sh
+
+# (C) 2007 Canonical Ltd.
+# Author: Alexander Sack <asac@jwsdot.com>
+# License: GNU General Public License, version 2 or any later version
+
+if test x$NIF_FILE = x; then
+   NIF_FILE=/etc/network/interfaces
+fi
+
+auto_ifs=$(cat $NIF_FILE | \
+    egrep "^auto|^allow-" | \
+    sed -e 's/auto//' | \
+    sed -e 's/allow-[^ ].* //')
+
+ifaces_to_disable=""
+
+echo Auto interfaces found: $auto_ifs
+
+# iterate over all auto interfaces
+for i in $auto_ifs; do
+  IFS_old=$IFS; IFS=""
+
+  NIF_FILE_content=$(cat $NIF_FILE | \
+      sed -e 's/^[ \t]*auto.*$//' | \
+      sed -e 's/^[ \t]*allow-.*$//' | \
+      sed -e 's/^[ \t]*#.*$//' | grep -v ^$)
+
+  # '--' is inserted by grep -A1 if there are multiple iface blocks
+  lines=$(echo $NIF_FILE_content | grep -A1 "^iface.*$i.*dhcp" | grep -v '\--')
+  IFS="
+"
+
+  # if there is no iface line for that interface, we would still get a line
+  # count of 1 ... so use word_count 0 below to exclude ifaces that have no
+  # configuration at all.
+  word_count=$(echo $lines | wc -w)
+  line_count=0
+  for line in $lines; do
+      nulled_line=$(echo "$line" | sed -e 's/[# ]//' | grep -v ^iface)
+      if test x$nulled_line != x; then
+	  line_count=$(expr $line_count + 1)
+      fi
+  done  
+
+  if test $line_count -eq 0 -a $word_count -gt 0; then
+     ifaces_to_disable="$ifaces_to_disable $i"
+     echo iface to disable = $i
+  fi
+  IFS=$IFS_old
+done
+
+backup_suffix=0
+while test -e ${NIF_FILE}.bak-${backup_suffix}; do
+   backup_suffix=$(expr $backup_suffix + 1)
+done
+
+if [ -n "$ifaces_to_disable" ]; then
+    cp $NIF_FILE "$NIF_FILE.bak-${backup_suffix}"
+    for i in $ifaces_to_disable; do
+	echo -n "Disabling interface: $i ... "
+	sed -i -e "s/^\([ \t]*iface.*$i.*\)$/#NetworkManager#\1/" $NIF_FILE
+	echo done.
+    done
+fi
+
diff --git a/debian/network-manager.install b/debian/network-manager.install
index dbe43cfa..20769cfe 100644
--- a/debian/network-manager.install
+++ b/debian/network-manager.install
@@ -18,4 +18,5 @@ debian/tmp/etc/dbus-1/system.d/nm-avahi-autoipd.conf
 debian/tmp/etc/NetworkManager/dispatcher.d/
 debian/tmp/etc/NetworkManager/system-connections/
 debian/tmp/lib/udev/rules.d/*.rules
+debian/ifblacklist_migrate.sh /usr/lib/NetworkManager
 debian/NetworkManager.conf etc/NetworkManager/
diff --git a/debian/network-manager.postinst b/debian/network-manager.postinst
index 5f372abe..2535f400 100644
--- a/debian/network-manager.postinst
+++ b/debian/network-manager.postinst
@@ -66,6 +66,11 @@ case "$1" in
         if dpkg --compare-versions "$2" lt "0.8.1-2"; then
             mv_conffile "/etc/NetworkManager/nm-system-settings.conf" "/etc/NetworkManager/NetworkManager.conf"
         fi
+
+        if [ -z "$2" ] || dpkg --compare-versions "$2" lt-nl "0.8.1-4"; then
+            echo "Disabling interfaces configured with plain DHCP in /etc/network/interfaces so that NetworkManager can take them over"
+            sh /usr/lib/NetworkManager/ifblacklist_migrate.sh
+        fi
         ;;
 
     abort-upgrade|abort-deconfigure|abort-remove)
@@ -78,5 +83,4 @@ case "$1" in
 esac
 
 #DEBHELPER#
-exit 0
 
diff --git a/debian/network-manager.postrm b/debian/network-manager.postrm
index ad970dc8..cf67e431 100644
--- a/debian/network-manager.postrm
+++ b/debian/network-manager.postrm
@@ -24,7 +24,15 @@ case "$1" in
             rmdir --ignore-fail-on-non-empty /var/lib/NetworkManager
         fi
         ;;
-    remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
+    remove)
+        # Restore the ifupdown configuration that were disabled at installation
+        backup_suffix=0
+        while test -e /etc/network/interfaces.bak-${backup_suffix}; do
+            backup_suffix=$(($backup_suffix + 1))
+        done
+        sed -i.bak-${backup_suffix} -e "s/^#NetworkManager#//g" /etc/network/interfaces
+        ;;
+    upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
         ;;
 
     *)
@@ -34,5 +42,3 @@ case "$1" in
 esac
 
 #DEBHELPER#
-
-exit 0
diff --git a/debian/network-manager.preinst b/debian/network-manager.preinst
index 80ab7a30..c02aca66 100644
--- a/debian/network-manager.preinst
+++ b/debian/network-manager.preinst
@@ -100,4 +100,3 @@ case "$1" in
 esac
 
 #DEBHELPER#
-exit 0