summaryrefslogtreecommitdiffstats
path: root/debian/udev.postinst
diff options
context:
space:
mode:
Diffstat (limited to 'debian/udev.postinst')
-rw-r--r--debian/udev.postinst139
1 files changed, 139 insertions, 0 deletions
diff --git a/debian/udev.postinst b/debian/udev.postinst
new file mode 100644
index 0000000..7a78ede
--- /dev/null
+++ b/debian/udev.postinst
@@ -0,0 +1,139 @@
+#!/bin/sh -e
+
+chrooted() {
+ if [ "$(stat -c %d/%i /)" = "$(stat -Lc %d/%i /proc/1/root 2>/dev/null)" ];
+ then
+ # the devicenumber/inode pair of / is the same as that of /sbin/init's
+ # root, so we're *not* in a chroot and hence return false.
+ return 1
+ fi
+ echo "A chroot environment has been detected, udev not started."
+ return 0
+}
+
+in_debootstrap() {
+ # debootstrap --second-stage may be run in an emulator instead of a chroot,
+ # we need to check for this special case because start-stop-daemon would
+ # not be available. (#520742)
+ if [ -d /debootstrap/ ]; then
+ echo "Being installed by debootstrap, udev not started."
+ return 0
+ fi
+ return 1
+}
+
+can_start_udevd() {
+ if [ ! -d /sys/class/ ]; then
+ echo "udev requires a mounted sysfs, not started."
+ return 1
+ fi
+ return 0
+}
+
+enable_udev() {
+ can_start_udevd || return 0
+ invoke-rc.d udev start
+}
+
+update_initramfs() {
+ [ -x /usr/sbin/update-initramfs -a -e /etc/initramfs-tools/initramfs.conf ] \
+ || return 0
+ update-initramfs -u
+}
+
+upgrade_fixes() {
+ if dpkg --compare-versions "$2" lt "226-1"; then
+ update-rc.d udev-finish remove
+ fi
+
+ # we enabled net.ifnames in 220-7 by default; don't change iface names in
+ # virtualized envs (where 75-persistent-net-generator.rules didn't work)
+ if dpkg --compare-versions "$2" lt-nl "220-7~" &&
+ [ ! -e /etc/udev/rules.d/70-persistent-net.rules ] &&
+ [ ! -e /etc/udev/rules.d/80-net-setup-link.rules ] &&
+ [ ! -e /etc/systemd/network/99-default.link ] &&
+ [ ! -L /etc/systemd/network/99-default.link ] &&
+ ! grep -q net.ifnames /proc/cmdline && ! chrooted; then
+ mkdir -p /etc/systemd/network
+ cat <<EOF > /etc/systemd/network/99-default.link
+# This machine is most likely a virtualized guest, where the old persistent
+# network interface mechanism (75-persistent-net-generator.rules) did not work.
+# This file disables /lib/systemd/network/99-default.link to avoid
+# changing network interface names on upgrade. Please read
+# /usr/share/doc/udev/README.Debian.gz about how to migrate to the currently
+# supported mechanism.
+EOF
+ fi
+
+ # 226 introduced predictable interface names for virtio
+ # (https://github.com/systemd/systemd/pull/1119); disable for upgrades
+ if dpkg --compare-versions "$2" lt-nl "226-2~" &&
+ [ ! -e /etc/systemd/network/50-virtio-kernel-names.link ] &&
+ ls -d /sys/bus/virtio/drivers/virtio_net/virt* >/dev/null 2>&1; then
+ echo "virtio network devices detected, disabling predictable interface names in /etc/systemd/network/50-virtio-kernel-names.link"
+ mkdir -p /etc/systemd/network/
+ cat <<EOF > /etc/systemd/network/50-virtio-kernel-names.link
+# udev 226 introduced predictable interface names for virtio;
+# disable this for upgrades. You can remove this file if you update your
+# network configuration to move to the ens* names instead.
+# See /usr/share/doc/udev/README.Debian.gz for details about predictable
+# network interface names.
+[Match]
+Driver=virtio_net
+
+[Link]
+NamePolicy=onboard kernel
+EOF
+ fi
+
+ # new Default-Stop (see #791944)
+ if dpkg --compare-versions "$2" lt-nl "239-8"; then
+ update-rc.d -f udev remove
+ fi
+}
+
+update_hwdb() {
+ systemd-hwdb --usr update || true
+}
+
+case "$1" in
+ configure)
+ # update/create hwdb before we (re)start udev
+ update_hwdb
+
+ # Add new system group used by udev rules
+ addgroup --quiet --system input
+
+ # Make /dev/kvm accessible to kvm group
+ addgroup --quiet --system kvm
+
+ # Make /dev/dri/renderD* accessible to render group
+ addgroup --quiet --system render
+
+ if [ -z "$2" ]; then # first install
+ if ! chrooted && ! in_debootstrap; then
+ enable_udev
+ fi
+ else # upgrades
+ upgrade_fixes "$@"
+ if ! chrooted; then
+ if can_start_udevd; then
+ if [ -d /run/systemd/system ] ; then
+ systemctl daemon-reload || true
+ fi
+ invoke-rc.d udev restart
+ fi
+ fi
+ fi
+
+ update_initramfs
+ ;;
+
+ triggered)
+ update_hwdb
+ exit 0
+ ;;
+esac
+
+#DEBHELPER#
+