Philipp Schafft wrote:
> Can you please try installing and purging again? if you only install
> muroard there should be no problem with *dnet* as it is a depends of
> libroar0 not muroard.

I have done that with the following results:

  $ sudo apt-get remove --purge muroard
  Reading package lists... Done
  Building dependency tree       
  Reading state information... Done
  The following packages will be REMOVED:
    muroard*
  0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
  After this operation, 81.9 kB disk space will be freed.
  Do you want to continue [Y/n]? 
  (Reading database ... 282131 files and directories currently installed.)
  Removing muroard ...
  Stopping muRoarD: muroard.
  Purging configuration files for muroard ...
  userdel: user muroard is currently logged in
  Processing triggers for man-db ...

The message "userdel: user muroard is currently logged in" is telling.
That is the root of the problem.  Processes are still running and
therefore the userdel is failing to remove the user.

The manual says:

       userdel will not allow you to remove an account if there are running
       processes which belong to this account. In that case, you may have to
       kill those processes or lock the user's password or account and remove
       the account later. The -f option can force the deletion of this
       account.

I instrumented the postrm with a 'ps|grep' and found:

  The following packages will be REMOVED:
    muroard*
  0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
  After this operation, 81.9 kB disk space will be freed.
  Do you want to continue [Y/n]? 
  (Reading database ... 282131 files and directories currently installed.)
  Removing muroard ...
  Stopping muRoarD: muroard.
  Purging configuration files for muroard ...
  root     28472 26580  0 15:39 pts/25   00:00:00       sudo apt-get remove 
--purge muroard
  root     28473 28472 22 15:39 pts/25   00:00:00         apt-get remove 
--purge muroard
  root     28477 28473 32 15:39 pts/28   00:00:00           /usr/bin/dpkg 
--status-fd 15 --force-depends --force-remove-essential --purge muroard
  root     28501 28477  0 15:39 pts/28   00:00:00             /bin/sh 
/var/lib/dpkg/info/muroard.postrm purge
  root     28503 28501  0 15:39 pts/28   00:00:00               grep muroard
  muroard  28463     1  1 15:39 ?        00:00:00   /usr/bin/muroard --bind 
/tmp/roar --unix
  userdel: user muroard is currently logged in
  Processing triggers for man-db ...

The problem appears to be that the muroard process takes a non-zero
time to exit after having been told to stop in the init.d script.  I
wondered how long this process continued to run.  I modified the
postrm script in this way:

  case "$1" in
          purge)
                while [ $(ps -ef | awk '$1 == "muroard"' | wc -l) -gt 0 ]; do
                  echo "Waiting for muroard process to exit..."
                  sleep 1
                done
                if getent passwd|grep -q ^muroard: ; then

That is not intended for any deployment but made an interesting test
case to get some debug information.  It produced the following output:

  The following packages will be REMOVED:
    muroard*
  0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
  After this operation, 81.9 kB disk space will be freed.
  Do you want to continue [Y/n]? 
  (Reading database ... 282131 files and directories currently installed.)
  Removing muroard ...
  Stopping muRoarD: muroard.
  Purging configuration files for muroard ...
  Waiting for muroard process to exit...
  Processing triggers for man-db ...

That tells me that for perhaps one second the process is still
running.  But I am NOT proposing making any changes in the postrm.
That was just part of the investigation.

I believe the best corrective action is to ensure in the init script
file /etc/init.d/muroard that start-stop-daemon ensures that the
process has actually exited before the script exits.  Currently it
does:

  start-stop-daemon --stop --pidfile /var/run/muroard.pid --user muroard --exec 
/usr/bin/muroard || true

I believe that start-stop-daemon can do all of the required action
here.  I recall --stop and --retry=schedule but will need to look into
it a bit further.  I will investigate that a little more and reply
with more in a bit.  The best case is so that when the script asks for
the daemon to stop that it does the right thing there.

Bob

Attachment: signature.asc
Description: Digital signature

Reply via email to