>
> Thierry Vignaud writes:
> > Juan Quintela <quintela@xxxxxxxxxxxxxxxx> writes:
> >
> > > > BTW, Juan: I haven't yet received a followup about what was
going
> > > > wrong with your /lib/dev-state and /dev/log problems.
> > >
> > > I don't know really, I think that it was a devfsd package here
that
> > > got a wrong config file :(
> >
> > the /dev/log problem has been traced back to the following portion
of
> > /etc/rc.d/rc.sysinit :
> >
> >
> > # Restart devfsd actions now that the filesystems are ready
> > if [ -c /dev/.devfsd ]; then
> > if [ -x /sbin/devfsd ]; then
> > # cleanup dynamic desktop directories before calling devfsd
actions
> > rm -f /usr/share/gnome/desktop/*
/usr/share/apps/kdesktop/Desktop/*
> >
> > action "Running devfsd actions: " killall -HUP devfsd
> > fi
> > fi
> >
> >
> > sometimes, the bootstraping process wait for minutes because of some
> > sort of race between devfsd and minilogd (remeber syslogd hasn't yet
> > be started since it's a service launched after rc.sysinit let rc
play
> > with init levels.
> >
> > we've found a solution: make a service of the previous piece of
script
> > and run it very late (ie in 99th position whereas syslogd service
has
> > a priority of 88).
>
> Ug! I hate work-arounds. Can you put time into helping track down
> whether there is a bug in devfs or devfsd, and what the cause of the
> bug is?
>
/dev/log is saved in /lib/dev-state first time after clean start and
restored upon starting devfsd. It means, /dev/log exists *immediately*
and devfsd tries to do openlog() before real syslog is started early in
rc.sysinit. When syslog is started it tries to remove /dev/log:
2628 unlink("/dev/log") = -1 ENOENT (No such file or
directory)
2628 socket(PF_UNIX, SOCK_DGRAM, 0) = 0
2628 bind(0, {sin_family=AF_UNIX, path="/dev/log"}, 10) = 0
2628 chmod("/dev/log", 0666) = 0
Any chance of deadlock here? Openlog does connect and send:
2678 connect(1, {sin_family=AF_UNIX, path="/dev/log"}, 16) = 0
2678 send(1, "<13>Feb 14 17:26:06 bor: test", 29, 0) = 29
2678 rt_sigaction(SIGPIPE, {SIG_DFL}, NULL, 8) = 0
2678 close(1) = 0
which means /dev/log is not empty (whatever it means) when syslog tries
to remove it because nobody was there to consume message yet?
-andrej
|