home *** CD-ROM | disk | FTP | other *** search
/ Clickx 115 / Clickx 115.iso / software / tools / windows / tails-i386-0.16.iso / live / filesystem.squashfs / var / lib / dpkg / info / udev.postinst < prev    next >
Encoding:
Text File  |  2010-12-12  |  5.0 KB  |  213 lines

  1. #!/bin/sh -e
  2.  
  3. supported_kernel() {
  4.   case "$(uname -r)" in
  5.     2.[012345].*|2.6.[0-9]|2.6.[0-9][!0-9]*) return 1 ;;
  6.     2.6.1[0-9]|2.6.1[0-9][!0-9]*) return 1 ;;
  7.     2.6.2[0-5]|2.6.2[0-5][!0-9]*) return 1 ;;
  8.   esac
  9.   return 0
  10. }
  11.  
  12. tempdir() {
  13.   local dir=$(tempfile --prefix=udev.)
  14.   rm $dir
  15.   mkdir $dir
  16.   echo $dir
  17. }
  18.  
  19. chrooted() {
  20.   if [ "$(stat -c %d/%i /)" = "$(stat -Lc %d/%i /proc/1/root 2>/dev/null)" ];
  21.   then
  22.     # the devicenumber/inode pair of / is the same as that of /sbin/init's
  23.     # root, so we're *not* in a chroot and hence return false.
  24.     return 1
  25.   fi
  26.   echo "A chroot environment has been detected, udev not started."
  27.   return 0
  28. }
  29.  
  30. in_debootstrap() {
  31.   # debootstrap --second-stage may be run in an emulator instead of a chroot,
  32.   # we need to check for this special case because start-stop-daemon would
  33.   # not be available. (#520742)
  34.   if [ -d /debootstrap/ ]; then
  35.     echo "Being installed by debootstrap, udev not started."
  36.     return 0
  37.   fi
  38.   return 1
  39.  
  40. restart_udevd() {
  41.   start-stop-daemon --stop --name udevd --oknodo --quiet --retry 5
  42.  
  43.   local rc=0
  44.   udevd --daemon || rc=$?
  45.   if [ $rc -ne 0 ]; then
  46.     echo "Cannot start udevd. (rc=$rc)"
  47.     return $rc
  48.   fi
  49. }
  50.  
  51. can_start_udevd() {
  52.   if ! supported_kernel; then
  53.     echo "udev requires a kernel >= 2.6.26, not started."
  54.     return 1
  55.   fi
  56.  
  57.   if [ ! -d /sys/class/ ]; then
  58.     echo "udev requires a mounted sysfs, not started."
  59.     return 1
  60.   fi
  61.  
  62.   if [ ! -e /sys/kernel/uevent_helper ]; then
  63.     echo "udev requires hotplug support, not started."
  64.     return 1
  65.   fi
  66.  
  67.   if ! grep -q '[[:space:]]tmpfs$' /proc/filesystems; then
  68.     echo "udev requires tmpfs support, not started."
  69.     return 1
  70.   fi
  71.  
  72.   if [ -e /etc/udev/disabled ]; then
  73.     echo "/etc/udev/disabled has been detected, udev not started."
  74.     return 1
  75.   fi
  76.  
  77.   return 0
  78. }
  79.  
  80. enable_udev() {
  81.   can_start_udevd || return 0
  82.  
  83.   echo > /sys/kernel/uevent_helper
  84.  
  85.   # create the directory which will hold our new /dev
  86.   TEMPDEV=$(tempdir)
  87.  
  88.   export UDEV_ROOT=$TEMPDEV
  89.   UDEV_RUN=no restart_udevd
  90.  
  91.   if ! mount -n -o size=10M,mode=0755 -t tmpfs tmpfs $TEMPDEV; then
  92.     echo "Not enabling udev because the system lacks tmpfs support!"
  93.     rm -f $TEMPDEV/.udev/uevent_seqnum
  94.     rmdir $TEMPDEV/.udev/ 2> /dev/null || true
  95.     return
  96.   fi
  97.  
  98.   echo "Populating the new /dev filesystem temporarily mounted on $TEMPDEV/..."
  99.   /lib/udev/create_static_nodes $TEMPDEV
  100.   udevadm trigger --action=add
  101.  
  102.   # wait for the udevd children to finish
  103.   udevadm settle || true
  104.  
  105.   for dir in pts shm; do
  106.     [ -d /dev/$dir ] || continue
  107.     mkdir -p $TEMPDEV/$dir
  108.     if mountpoint -q /dev/$dir; then
  109.       mount -n --move /dev/$dir $TEMPDEV/$dir
  110.     fi
  111.   done
  112.  
  113.   mount -n --move $TEMPDEV /dev
  114.  
  115.   # start the final daemon with the normal configuration
  116.   unset UDEV_ROOT
  117.   restart_udevd
  118.  
  119.   # XXX Some people reported that the directory was not empty.
  120.   # This should fix the issue (udevd reopens the file for each event):
  121.   rm -f $TEMPDEV/.udev/uevent_seqnum
  122.   rmdir $TEMPDEV/.udev/ 2> /dev/null || true
  123.  
  124.   if ! rmdir $TEMPDEV; then
  125.     echo "WARNING: $TEMPDEV is not empty!"
  126.     ls -laR $TEMPDEV
  127.   fi
  128.  
  129.   # restart some daemons because their /dev sockets have been hidden by
  130.   # the tmpfs
  131.   kill -s HUP 1
  132.   local sysloginits="inetutils-syslogd rsyslog socklog-run sysklogd syslog-ng"
  133.   for script in $sysloginits; do
  134.     [ -x /etc/init.d/$script ] && invoke-rc.d $script restart || true
  135.   done
  136. }
  137.  
  138. update_initramfs() {
  139.   [ -x /usr/sbin/update-initramfs -a -e /etc/initramfs-tools/initramfs.conf ] \
  140.     || return 0
  141.   update-initramfs -u
  142. }
  143.  
  144. write_interfaces_rules() {
  145.   local devpath
  146.   for devpath in /sys/class/net/*; do
  147.     [ -d "$devpath" ] || continue
  148.     udevadm test --action=add $devpath > /dev/null || true
  149.   done
  150. }
  151.  
  152. fix_persistent_net_rules() {
  153.   if [ -e /etc/udev/rules.d/70-persistent-net.rules ]; then
  154.     sed -i -e 's/\bATTRS{/ATTR{/g' /etc/udev/rules.d/70-persistent-net.rules
  155.   fi
  156. }
  157.  
  158. upgrade_fixes() {
  159.   if dpkg --compare-versions "$2" lt "140-2"; then
  160.     fix_persistent_net_rules
  161.   fi
  162. }
  163.  
  164. case "$1" in
  165.     configure)
  166.     if [ -z "$2" ]; then # first install
  167.       write_interfaces_rules
  168.       if ! chrooted && ! in_debootstrap; then
  169.     enable_udev
  170.       fi
  171.     else # upgrades
  172.       upgrade_fixes "$@"
  173.       if ! chrooted; then
  174.     if [ -e /etc/udev/kernel-upgrade ]; then
  175.       echo "Kernel upgrade mode, udevd has not been restarted."
  176.       echo "Please reboot the system as soon as possible."
  177.       rm /etc/udev/kernel-upgrade
  178.     elif can_start_udevd; then
  179.       restart_udevd
  180.     fi
  181.       fi
  182.     fi
  183.  
  184.     update_initramfs
  185.     ;;
  186.  
  187.     abort-upgrade|abort-remove|abort-deconfigure)
  188.     ;;
  189.  
  190.     interfaces)
  191.     write_interfaces_rules
  192.     ;;
  193.  
  194.     *)
  195.     echo "$0 called with unknown argument '$1'" >&2
  196.     exit 1
  197.     ;;
  198. esac
  199.  
  200. # Automatically added by dh_installinit
  201. if [ -x "/etc/init.d/udev" ]; then
  202.     update-rc.d udev start 03 S . >/dev/null || exit $?
  203. fi
  204. # End automatically added section
  205. # Automatically added by dh_installinit
  206. if [ -x "/etc/init.d/udev-mtab" ]; then
  207.     update-rc.d udev-mtab start 36 S . >/dev/null || exit $?
  208. fi
  209. # End automatically added section
  210.  
  211.  
  212.