1
0
mirror of https://github.com/CumulusNetworks/ifupdown2.git synced 2024-05-06 15:54:50 +00:00
CumulusNetworks-ifupdown2/debian/python-ifupdown2.postinst

94 lines
3.4 KiB
Plaintext
Raw Normal View History

#!/bin/bash
set -e
MYNAME="${0##*/}"
report() { echo "${MYNAME}: $*" ; }
report_warn() { report "Warning: $*" >&2 ; }
report_err() { report "Error: $*" >&2 ; }
case "$1" in
configure)
# Create /etc/network/run
[ -d /run/network ] || mkdir -p /run/network
# for backward compatibility
if [ ! -f /etc/network/run ]; then
ln -sf /run/network /etc/network/run
fi
ln -sf /usr/share/python-ifupdown2/generate_interfaces.py /usr/share/doc/python-ifupdown2/examples/generate_interfaces.py
[ -d /etc/network/if-pre-up.d ] || mkdir -p /etc/network/if-pre-up.d
[ -d /etc/network/if-up.d ] || mkdir -p /etc/network/if-up.d
[ -d /etc/network/if-post-up.d ] || mkdir -p /etc/network/if-post-up.d
[ -d /etc/network/if-pre-down.d ] || mkdir -p /etc/network/if-pre-down.d
[ -d /etc/network/if-down.d ] || mkdir -p /etc/network/if-down.d
[ -d /etc/network/if-post-down.d ] || mkdir -p /etc/network/if-post-down.d
# Generic stuff done on all configurations
if [ -f /etc/network/interfaces ] ; then
# TODO: This should be handled with debconf and the script
# could introduce the line there directly
if ! grep -q "^[[:space:]]*iface[[:space:]]\+lo0\?[[:space:]]\+inet[[:space:]]\+loopback\>" /etc/network/interfaces ; then
report_warn "No 'iface lo' definition found in /etc/network/interfaces"
fi
if ! grep -q "^[[:space:]]*\(allow-\|\)auto[[:space:]]\+\(.*[[:space:]]\+\|\)lo0\?\([[:space:]]\+\|$\)" /etc/network/interfaces ; then
report_warn "No 'auto lo' statement found in /etc/network/interfaces"
fi
else # ! -f /etc/network/interfaces
if [ -z "$2" ]; then
echo "Creating /etc/network/interfaces."
echo "# interfaces(5) file used by ifup(8) and ifdown(8)" > /etc/network/interfaces
echo "auto lo" >> /etc/network/interfaces
echo "iface lo inet loopback" >> /etc/network/interfaces
else
report_warn "/etc/network/interfaces does not exist"
fi
fi
[ -e /sbin/ifup ] || ln -sf /sbin/ifupdown /sbin/ifup
[ -e /sbin/ifdown ] || ln -sf /sbin/ifupdown /sbin/ifdown
[ -e /sbin/ifquery ] || ln -sf /sbin/ifupdown /sbin/ifquery
[ -e /sbin/ifreload ] || ln -sf /sbin/ifupdown /sbin/ifreload
(cd /usr/share/man/man8/ && ln -sf /usr/share/man/man8/ifup.8.gz ifdown.8.gz)
mkdir -p /etc/network/interfaces.d/
;;
purge)
# Note: We don't remove /etc/network/interfaces
rm -f /run/network/ifstate
rm -f /sbin/ifquery
rm -f /sbin/ifup
rm -f /sbin/ifdown
rm -f /usr/share/doc/python-ifupdown2/generate_interfaces.py
;;
esac
# override default udev bridge and hotplug rules because they interfere with
# networking init script
udev_user_rulesdir=/etc/udev/rules.d/
udev_sys_rulesdir=/lib/udev/rules.d/
if [ -e $udev_user_rulesdir ]; then
udev_ifupdown2_overrides=("80-networking.rules" "60-bridge-network-interface.rules")
for u in ${udev_ifupdown2_overrides[*]}
do
if [ -e ${udev_sys_rulesdir}/$u -a ! -e ${udev_user_rulesdir}/$u ]; then
(cd ${udev_user_rulesdir} && ln -sf /dev/null $u)
fi
done
fi
if [ -x "/etc/init.d/networking" ]; then
update-rc.d networking start 40 S . start 35 0 6 . >/dev/null || exit $?
fi
#DEBHELPER#
ifupdown2: fixup maintainer scripts to not crash on files not existing Ticket: CM-5735 Reviewed By: no one Testing Done: lots of repo upgrade testing by John B. This partially reverts commit 8959e8e4ec93487228733b17ef2b220ed47c1260 ("Fix bash completion for sudo users (mostly cosmetic)") in the sections where the Debian maintainer scripts were modified. In addition fixed up the Debian maintainer scripts to prevent a potential upgrade failure, discussion follows: The Cause For the upgrade Failure ================================= Commit 8959e8e4ec93487228733b17ef2b220ed47c1260 introduced changes to ifupdown2's package maintainer scripts to override some files provided by the bridge-utils and udev packages as they conflict with ifupdown2. The change to ifupdown2's postrm script is currently causing the script to exit with a failure code if the following files do not exist on the box: /etc/udev/rules.d/80-networking.rules /etc/udev/rules.d/60-bridge-network-interface.rules The reason for this is in how the script is written. Since the postrm script is configured to exit on the first command failure, the "set -e" on line 3, the commands on lines 20 and 22 will fail if the files being looked for do not exist, causing the script to exit with a non-zero exit code. Causing apt to fail the upgrade. .postrm script excerpt ---------- 20 udevlink=$(readlink /etc/udev/rules.d/80-networking.rules 2>/dev/null) 21 [ -n "$udevlink" -a "$udevlink" == "/dev/null" ] && rm -f /etc/udev/rules.d/80-networking.rules 22 udevlink=$(readlink /etc/udev/rules.d/60-bridge-network-interface.rules 2>/dev/null) 23 [ -n "$udevlink" -a "$udevlink" == "/dev/null" ] && rm -f /etc/udev/rules.d/60-bridge-network-interface.rules ---------- Solution -------- The solution requires having the newer version of the ifupdown2 package provide a preinst script that gets run before the older package's postrm script is run[1,2]. This gives us the opportunity to quietly fix the problem. We also fix the postrm script in newer versions of the package so it cannot bomb out in this way. Finally, removed what appears to be a poor merge from commit 5f5d84e3261bf70dd3541666a3d3a7f817727ce6. Fixes: 8959e8e4ec93487228733b17ef2b220ed47c1260 (cherry picked from commit 0eab79eb5aed4cdf0674e3f0ddad3631dd457bdc)
2015-04-20 13:41:05 -07:00
exit 0