| Current Path : /var/lib/dpkg/info/ |
| Current File : /var/lib/dpkg/info/udev.postinst |
#!/bin/sh -e
supported_kernel() {
case "$(uname -r)" in
2.[012345].*|2.6.[0-9]|2.6.[0-9][!0-9]*) return 1 ;;
2.6.1[0-9]|2.6.1[0-9][!0-9]*) return 1 ;;
2.6.2[0-5]|2.6.2[0-5][!0-9]*) return 1 ;;
esac
return 0
}
tempdir() {
local dir=$(tempfile --prefix=udev.)
rm $dir
mkdir $dir
echo $dir
}
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
}
restart_udevd() {
start-stop-daemon --stop --name udevd --oknodo --quiet --retry 5
local rc=0
udevd --daemon || rc=$?
if [ $rc -ne 0 ]; then
echo "Cannot start udevd. (rc=$rc)"
return $rc
fi
}
can_start_udevd() {
if ! supported_kernel; then
echo "udev requires a kernel >= 2.6.26, not started."
return 1
fi
if [ ! -d /sys/class/ ]; then
echo "udev requires a mounted sysfs, not started."
return 1
fi
if [ ! -e /sys/kernel/uevent_helper ]; then
echo "udev requires hotplug support, not started."
return 1
fi
if ! grep -q '[[:space:]]tmpfs$' /proc/filesystems; then
echo "udev requires tmpfs support, not started."
return 1
fi
if [ -e /etc/udev/disabled ]; then
echo "/etc/udev/disabled has been detected, udev not started."
return 1
fi
return 0
}
enable_udev() {
can_start_udevd || return 0
echo > /sys/kernel/uevent_helper
# create the directory which will hold our new /dev
TEMPDEV=$(tempdir)
export UDEV_ROOT=$TEMPDEV
UDEV_RUN=no restart_udevd
if ! mount -n -o size=10M,mode=0755 -t tmpfs tmpfs $TEMPDEV; then
echo "Not enabling udev because the system lacks tmpfs support!"
rm -f $TEMPDEV/.udev/uevent_seqnum
rmdir $TEMPDEV/.udev/ 2> /dev/null || true
return
fi
echo "Populating the new /dev filesystem temporarily mounted on $TEMPDEV/..."
/lib/udev/create_static_nodes $TEMPDEV
udevadm trigger --action=add
# wait for the udevd children to finish
udevadm settle || true
for dir in pts shm; do
[ -d /dev/$dir ] || continue
mkdir -p $TEMPDEV/$dir
if mountpoint -q /dev/$dir; then
mount -n --move /dev/$dir $TEMPDEV/$dir
fi
done
mount -n --move $TEMPDEV /dev
# start the final daemon with the normal configuration
unset UDEV_ROOT
restart_udevd
# XXX Some people reported that the directory was not empty.
# This should fix the issue (udevd reopens the file for each event):
rm -f $TEMPDEV/.udev/uevent_seqnum
rmdir $TEMPDEV/.udev/ 2> /dev/null || true
if ! rmdir $TEMPDEV; then
echo "WARNING: $TEMPDEV is not empty!"
ls -laR $TEMPDEV
fi
# restart some daemons because their /dev sockets have been hidden by
# the tmpfs
kill -s HUP 1
local sysloginits="inetutils-syslogd rsyslog socklog-run sysklogd syslog-ng"
for script in $sysloginits; do
[ -x /etc/init.d/$script ] && invoke-rc.d $script restart || true
done
}
update_initramfs() {
[ -x /usr/sbin/update-initramfs -a -e /etc/initramfs-tools/initramfs.conf ] \
|| return 0
update-initramfs -u
}
write_interfaces_rules() {
local devpath
for devpath in /sys/class/net/*; do
[ -d "$devpath" ] || continue
udevadm test --action=add $devpath > /dev/null || true
done
}
fix_persistent_net_rules() {
if [ -e /etc/udev/rules.d/70-persistent-net.rules ]; then
sed -i -e 's/\bATTRS{/ATTR{/g' /etc/udev/rules.d/70-persistent-net.rules
fi
}
upgrade_fixes() {
if dpkg --compare-versions "$2" lt "140-2"; then
fix_persistent_net_rules
fi
}
case "$1" in
configure)
if [ -z "$2" ]; then # first install
write_interfaces_rules
if ! chrooted && ! in_debootstrap; then
enable_udev
fi
else # upgrades
upgrade_fixes "$@"
if ! chrooted; then
if [ -e /etc/udev/kernel-upgrade ]; then
echo "Kernel upgrade mode, udevd has not been restarted."
echo "Please reboot the system as soon as possible."
rm /etc/udev/kernel-upgrade
elif can_start_udevd; then
restart_udevd
fi
fi
fi
update_initramfs
;;
abort-upgrade|abort-remove|abort-deconfigure)
;;
interfaces)
write_interfaces_rules
;;
*)
echo "$0 called with unknown argument '$1'" >&2
exit 1
;;
esac
# Automatically added by dh_installinit
if [ -x "/etc/init.d/udev" ]; then
update-rc.d udev start 03 S . >/dev/null || exit $?
fi
# End automatically added section
# Automatically added by dh_installinit
if [ -x "/etc/init.d/udev-mtab" ]; then
update-rc.d udev-mtab start 36 S . >/dev/null || exit $?
fi
# End automatically added section