LinuxQuestions.org
Download your favorite Linux distribution at LQ ISO.
Home Forums Tutorials Articles Register
Go Back   LinuxQuestions.org > Forums > Linux Forums > Linux - Distributions > antiX / MX Linux
User Name
Password
antiX / MX Linux This forum is for the discussion of antiX and MX Linux.

Notices


Reply
  Search this Thread
Old 12-09-2018, 10:26 AM   #1
hazel
LQ Guru
 
Registered: Mar 2016
Location: Harrow, UK
Distribution: LFS, AntiX, Slackware
Posts: 7,680
Blog Entries: 19

Rep: Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492
Some services not starting at boot: certainly udev and networking, maybe others


I have been running AntiX on my laptop for over a year now without any problems. It's usually a very well-behaved system.

Today when I booted up, my keyboard was dead in X. I managed to do a safe boot into a root console and found that the Xorg log had found no input devices because udevd was not running. Udevd is normally started by a script called bootmisc, but when I tried to run that by hand, nothing happened.

The network was down too: when I tried to start it, I was told that wpa_supplicant was not running, but I haven't found out so far what launches that; I suspect a hook script somewhere.

There may be other failed services. I don't really know where to start looking. If anyone can give me a few pointers, I'd be grateful.
 
Old 12-09-2018, 11:38 AM   #2
hazel
LQ Guru
 
Registered: Mar 2016
Location: Harrow, UK
Distribution: LFS, AntiX, Slackware
Posts: 7,680

Original Poster
Blog Entries: 19

Rep: Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492
I think I may have found the source of the problem, but I don't know where to go from here.

During my last apt update I purged udev. This is the old (systemd) udev which is now deprecated in AntiX. I have the replacement programs eudev and libeudev1 installed but I think the purge may have removed a configuration file that eudev depends on.
 
Old 12-09-2018, 12:32 PM   #3
hazel
LQ Guru
 
Registered: Mar 2016
Location: Harrow, UK
Distribution: LFS, AntiX, Slackware
Posts: 7,680

Original Poster
Blog Entries: 19

Rep: Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492
Also found this:
Quote:
openrc needs to start udev, wpa_supplicant and networkmanager in the right order.
udev doest (??) create the interface added events for the wlan interface on boot.
I'm not using openrc, but it looks like the wlan interface fails if udev isn't there. And if there are any other services missing, that will be due to the same thing. So the question is: why won't udevd run and how do I correct this?
 
Old 12-10-2018, 11:30 AM   #4
hazel
LQ Guru
 
Registered: Mar 2016
Location: Harrow, UK
Distribution: LFS, AntiX, Slackware
Posts: 7,680

Original Poster
Blog Entries: 19

Rep: Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492
OK. Nobody had any bright ideas, so I booted up again today and tried launching udevd by hand to see if I got any error or crash messages. Nothing untoward, but no response from the kernel either. So I combed through the scripts in /etc/init.d and found one called udev. I hadn't noticed it before for reasons that will become apparent in a moment.

I launched the script and suddenly there was a flurry of kernel activity. Obviously the kernel and udevd were talking to each other and devices were being recognised. Then I ran the /etc/init.d/networking script and up came wlan0 with dhcp.

The first thing I did after that was the weekly update. Strike while the iron's hot! Then I su'd to myself and ran startx. And glory be! X came up with mouse and keyboard working normally.

When I checked the links in /etc/rcS.d, I couldn't find one to udev. There was that bootmisc one but that was obviously a red herring. So it was the absence of that link that stopped udevd from starting and the other problems all stemmed from that.

The problem now is that I don't know where to put the link in. I mean I don't know how to number it in the S series so that it runs correctly in the boot sequence. I tried calling it S02udev and rebooted, but that didn't work. S02 seems to be too early. If someone can tell me where to put it in, I should be able to solve this.
 
Old 12-11-2018, 02:22 PM   #5
hazel
LQ Guru
 
Registered: Mar 2016
Location: Harrow, UK
Distribution: LFS, AntiX, Slackware
Posts: 7,680

Original Poster
Blog Entries: 19

Rep: Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492
This should have been fixed by now, but it isn't. There's something missing and I don't know what it is. Please somebody give me a clue!

I have established that the source of the problem was a missing symbolic link to udev in rcS.d. That link should have been called S02udev (or possibly S02udev.sh) and is supposed to point to ../init.d/udev. I have created the link but when I boot, it doesn't work. udevd doesn't start.

I can start udevd by hand in recovery mode by running /etc/init.d/udev from the terminal and everything else then works. Why is it not starting in the normal boot? And while we are at it, why do none of the S-links work from the terminal when they all work at boot (except for the udev one apparently)?

When I first started with Linux, it was all sysvinit5 and I was told that init scripts check the name they are called with: if it begins with an "S", they add the argument "start". If it's "K", they add "stop". But I can't find any code for doing that in the scripts themselves and it doesn't happen when the links are used to launch a script from the console. Instead you get an error message saying to use an argument (start|stop|restart, etc).

I am out of my depth here. What am I missing?

Last edited by hazel; 12-11-2018 at 02:24 PM.
 
Old 12-11-2018, 03:36 PM   #6
notKlaatu
Senior Member
 
Registered: Sep 2010
Location: Lawrence, New Zealand
Distribution: Slackware
Posts: 1,077

Rep: Reputation: 732Reputation: 732Reputation: 732Reputation: 732Reputation: 732Reputation: 732Reputation: 732
I've never used AntiX but from a quick look at its downloadable ISO, it looks like /etc/init.d/udev is just executable (not symlinked to anything).

Here's the script, as copied from the ISO:

Code:
#!/bin/sh -e
### BEGIN INIT INFO
# Provides:          udev
# Required-Start:    mountkernfs
# Required-Stop:
# Default-Start:     S
# Default-Stop:
# Short-Description: Start udevd, populate /dev and load drivers.
### END INIT INFO

# we need to unmount /dev/pts/ and remount it later over the devtmpfs
unmount_devpts() {
  if mountpoint -q /dev/pts/; then
    umount -n -l /dev/pts/
  fi

  if mountpoint -q /dev/shm/; then
    umount -n -l /dev/shm/
  fi
}

# mount a devtmpfs over /dev, if somebody did not already do it
mount_devtmpfs() {
  if grep -E -q "^[^[:space:]]+ /dev devtmpfs" /proc/mounts; then
    mount -n -o remount,size=$tmpfs_size,mode=0755 -t devtmpfs devtmpfs /dev
    return
  fi

  if ! mount -n -o size=$tmpfs_size,mode=0755 -t devtmpfs devtmpfs /dev; then
    log_failure_msg "udev requires devtmpfs support, not started"
    log_end_msg 1
  fi

  return 0
}

create_dev_makedev() {
  if [ -e /sbin/MAKEDEV ]; then
    ln -sf /sbin/MAKEDEV /dev/MAKEDEV
  else
    ln -sf /bin/true /dev/MAKEDEV
  fi
}

# If the initramfs does not have /run, the initramfs udev database must
# be migrated from /dev/.udev/ to /run/udev/.
move_udev_database() {
  [ -e "/dev/.udev/" ] || return 0
  [ ! -e /run/udev/ ] || return 0
  [ -e /run/ ] || return 0
  mountpoint -q /run/ || return 0

  mv /dev/.udev/ /run/udev/ || true
}

supported_kernel() {
  case "$(uname -r)" in
    2.[012345].*|2.6.[0-9]|2.6.[0-9][!0-9]*) return 1 ;;
    2.6.[12][0-9]|2.6.[12][0-9][!0-9]*) return 1 ;;
    2.6.3[0-1]|2.6.3[0-1][!0-9]*) return 1 ;;
  esac
  return 0
}

# shell version of /usr/bin/tty
my_tty() {
  [ -x /bin/readlink ] || return 0
  [ -e /proc/self/fd/0 ] || return 0
  readlink --silent /proc/self/fd/0 || true
}

warn_if_interactive() {
  if [ "$RUNLEVEL" = "S" -a "$PREVLEVEL" = "N" ]; then
    return
  fi

  TTY=$(my_tty)
  if [ -z "$TTY" -o "$TTY" = "/dev/console" -o "$TTY" = "/dev/null" ]; then
    return
  fi

  printf "\n\n\nIt has been detected that the command\n\n\t$0 $*\n\n"
  printf "has been run from an interactive shell.\n"
  printf "It will probably not do what you expect, so this script will wait\n"
  printf "60 seconds before continuing. Press ^C to stop it.\n"
  printf "RUNNING THIS COMMAND IS HIGHLY DISCOURAGED!\n\n\n\n"
  sleep 60
}

make_static_nodes() {
  [ -e /lib/modules/$(uname -r)/modules.devname ] || return 0
  [ -x /bin/kmod ] || return 0

  /bin/kmod static-nodes --format=tmpfiles --output=/proc/self/fd/1 | \
  while read type name mode uid gid age arg; do
    [ -e $name ] && continue
    case "$type" in
      c|b|c!|b!) mknod -m $mode $name $type $(echo $arg | sed 's/:/ /') ;;
      d|d!) mkdir $name ;;
      *) echo "unparseable line ($type $name $mode $uid $gid $age $arg)" >&2 ;;
    esac

    if [ -x /sbin/restorecon ]; then
      /sbin/restorecon $name
    fi
  done
}


##############################################################################

[ -x /sbin/udevd ] || exit 0

PATH="/sbin:/bin"

# defaults
tmpfs_size="10M"

if [ -e /etc/udev/udev.conf ]; then
  . /etc/udev/udev.conf
fi

. /lib/lsb/init-functions

if ! supported_kernel; then
  log_failure_msg "udev requires a kernel >= 2.6.32, not started"
  log_end_msg 1
fi

if [ ! -e /proc/filesystems ]; then
  log_failure_msg "udev requires a mounted procfs, not started"
  log_end_msg 1
fi

if ! grep -q '[[:space:]]devtmpfs$' /proc/filesystems; then
  log_failure_msg "udev requires devtmpfs support, not started"
  log_end_msg 1
fi

if [ ! -d /sys/class/ ]; then
  log_failure_msg "udev requires a mounted sysfs, not started"
  log_end_msg 1
fi

if ! ps --no-headers --format args ax | egrep -q '^\['; then
  log_warning_msg "udev does not support containers, not started"
  exit 0
fi

if [ -d /sys/class/mem/null -a ! -L /sys/class/mem/null ] || \
   [ -e /sys/block -a ! -e /sys/class/block ]; then
  log_warning_msg "CONFIG_SYSFS_DEPRECATED must not be selected"
  log_warning_msg "Booting will continue in 30 seconds but many things will be broken"
  sleep 30
fi

# When modifying this script, do not forget that between the time that the
# new /dev has been mounted and udevadm trigger has been run there will be
# no /dev/null. This also means that you cannot use the "&" shell command.

case "$1" in
    start)
    if mountpoint -q /dev/; then
	TMPFS_MOUNTED=1
    elif [ -e "/dev/.udev/" ]; then
	log_warning_msg ".udev/ already exists on the static /dev"
    fi

    if [ ! -e "/dev/.udev/" -a ! -e "/run/udev/" ]; then
	warn_if_interactive
    fi

    if [ -w /sys/kernel/uevent_helper ]; then
	echo > /sys/kernel/uevent_helper
    fi

    move_udev_database

    if [ -z "$TMPFS_MOUNTED" ]; then
	unmount_devpts
	mount_devtmpfs
	[ -d /proc/1 ] || mount -n /proc
    fi

    make_static_nodes

    # clean up parts of the database created by the initramfs udev
    udevadm info --cleanup-db

    # set the SELinux context for devices created in the initramfs
    [ -x /sbin/restorecon ] && /sbin/restorecon -R /dev

    log_daemon_msg "Starting the hotplug events dispatcher" "udevd"
    if udevd --daemon; then
	log_end_msg $?
    else
	log_warning_msg $?
	log_warning_msg "Waiting 15 seconds and trying to continue anyway"
	sleep 15
    fi

    log_action_begin_msg "Synthesizing the initial hotplug events"
    if udevadm trigger --action=add; then
	log_action_end_msg $?
    else
	log_action_end_msg $?
    fi

    create_dev_makedev

    # wait for the udevd childs to finish
    log_action_begin_msg "Waiting for /dev to be fully populated"
    if udevadm settle; then
	log_action_end_msg 0
    else
	log_action_end_msg 0 'timeout'
    fi
    ;;

    stop)
    log_daemon_msg "Stopping the hotplug events dispatcher" "udevd"
    if start-stop-daemon --stop --name udevd --user root --quiet --oknodo --retry 5; then
	log_end_msg $?
    else
	log_end_msg $?
    fi
    ;;

    restart)
    log_daemon_msg "Stopping the hotplug events dispatcher" "udevd"
    if start-stop-daemon --stop --name udevd --user root --quiet --oknodo --retry 5; then
	log_end_msg $?
    else
	log_end_msg $? || true
    fi

    log_daemon_msg "Starting the hotplug events dispatcher" "udevd"
    if udevd --daemon; then
	log_end_msg $?
    else
	log_end_msg $?
    fi
    ;;

    reload|force-reload)
    udevadm control --reload-rules
    ;;

    status)
    status_of_proc /sbin/udevd udevd && exit 0 || exit $?
    ;;

    *)
    echo "Usage: /etc/init.d/udev {start|stop|restart|reload|force-reload|status}" >&2
    exit 1
    ;;
esac

exit 0
So it seems that you just need to make it executable with chmod +x /etc/init.d/udev and then reboot (although it also kinda sounds like you've tried that, but maybe not).
 
Old 12-11-2018, 10:04 PM   #7
dolphin_oracle
MX Linux
 
Registered: Dec 2013
Posts: 402

Rep: Reputation: Disabled
try

Code:
sudo update-rc.d udev defaults
 
Old 12-12-2018, 04:40 AM   #8
hazel
LQ Guru
 
Registered: Mar 2016
Location: Harrow, UK
Distribution: LFS, AntiX, Slackware
Posts: 7,680

Original Poster
Blog Entries: 19

Rep: Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492Reputation: 4492
Quote:
Originally Posted by notKlaatu View Post
I've never used AntiX but from a quick look at its downloadable ISO, it looks like /etc/init.d/udev is just executable (not symlinked to anything).
That's correct. The links are in the various rc?.d directories, in this particular case rcS.d.

The scripts in init.d are executable and of course you can run them by hand if you supply a valid argument. But I have now discovered how they are run at boot. They don't recognise the name they are called under as I previously thought. They could easily have been scripted to do that but in fact the mechanism is different. The links are executed by a rather complex script called rc which explicitly adds the argument (start or stop) according to whether it is an S link or a K link. Another script called rcS runs rc on all the links in the rcS.d directory. This is why you can't simply run the links by hand unless you supply the argument, just as you would do with the target scripts.

Yesterday I asked my friend for whom I had installed AntiX what was the exact name of the udev link in /etc/rcS.d. It turned out to be S02udev. But adding that had no effect. So last night I was fiddling about, repeatedly running rc and rcS, and suddenly it started working. I still don't know why. I'm going to mark this thread as solved but I'm pretty cheesed off because I don't know exactly what happened.

I can tell you though what caused it. AntiX recently switched from udev to eudev. If I had completely removed (purged) udev before installing eudev, I don't think the problem would have arisen. But I only removed it and purged it much later, last week in fact. Now unlike most forks, eudev uses files with exactly the same names as udev. I suppose it has to in order to function at all. Purging udev took out the link to the script (though oddly enough it left the script itself in place). Everything else followed.
 
  


Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Similar Threads
Thread Thread Starter Forum Replies Last Post
When Centos 6.3 starting,All services starting OK and starting Atd: OK .And stop scr. DeSouffle Linux - General 4 08-29-2013 12:46 AM
"Well, udev in this devel cycle has certainly been interesting! " onebuck Slackware 2 08-05-2012 10:03 AM
[SOLVED] Chose udev for services... udev starts twice... hotplug fails flipjarg Linux - Newbie 2 09-19-2010 12:49 PM
LXer: Who's Afraid of the FBI? Certainly Not Hackers. LXer Syndicated Linux News 0 07-07-2006 03:21 AM
LXer: BI tools - certainly not commoditised LXer Syndicated Linux News 0 05-24-2006 12:54 PM

LinuxQuestions.org > Forums > Linux Forums > Linux - Distributions > antiX / MX Linux

All times are GMT -5. The time now is 09:01 PM.

Main Menu
Advertisement
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Open Source Consulting | Domain Registration