Bug 699286 - openssh upgrade to openssh-server-5.8p1-30.fc16 converts a working sshd service into a dead one
Summary: openssh upgrade to openssh-server-5.8p1-30.fc16 converts a working sshd servi...
Keywords:
Status: CLOSED NOTABUG
Alias: None
Product: Fedora
Classification: Fedora
Component: openssh
Version: rawhide
Hardware: Unspecified
OS: Unspecified
urgent
urgent
Target Milestone: ---
Assignee: Jan F. Chadima
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2011-04-24 21:46 UTC by Michal Jaegermann
Modified: 2011-04-28 10:13 UTC (History)
5 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2011-04-28 10:13:24 UTC
Type: ---
Embargoed:


Attachments (Terms of Use)

Description Michal Jaegermann 2011-04-24 21:46:34 UTC
Description of problem:

After a transition from a working openssh-5.8p1-27.fc16.1 to openssh-5.8p1-30.fc16.1 status for sshd service shows:

sshd.service - OpenSSH server daemon.
          Loaded: loaded (/lib/systemd/system/sshd.service)
          Active: inactive (dead)
          CGroup: name=systemd:/system/sshd.service

That despite that "chkconfig sshd --list" reports

.... 3:on    4:on    5:on ....

To ensure that sshd really starts on boot one has to add in /etc/systemd/system/multi-user.target.wants a mising link sshd.service to /lib/systemd/system/sshd.service.

If that would be a truly remote machine such "upgrade" would create a serious problem (and quite costly in a number of scenarios).

Version-Release number of selected component (if applicable):
openssh-5.8p1-30.fc16 

How reproducible:
always

Comment 1 Eric Paris 2011-04-26 16:01:32 UTC
This caused a serious problem for me.  I know if you look at daemon(7) it describes the right way to handle updates in the spec files.  I'm not sure how to fix it now that it's broken.  But hopefully you can quickly stop breaking people's working systems....

Comment 2 Michal Jaegermann 2011-04-26 17:57:53 UTC
(In reply to comment #1)
> I'm not sure how
> to fix it now that it's broken.  But hopefully you can quickly stop breaking
> people's working systems....

Something like that in %post of openssd-server package?

if chkconfig sshd --list | grep -q 3:on ; then
  if [ ! -L /etc/systemd/system/multi-user.target.wants/sshd.service ]; then
     ... do whatever magic required to unbreak the system ...
  fi
fi

Likely "magic" is something with 'systemctl enable ...' or just make that link.
Also instead of checking directly for that link one can probably do:

  if ! systemctl list-units | grep -q sshd ; then
    .....
  fi

Comment 3 Jan F. Chadima 2011-04-26 18:58:38 UTC
the scriptlets are now according to the systemd-packaging-guide

Comment 4 Eric Paris 2011-04-26 19:48:50 UTC
They are still wrong.  This will break every user who updates.  They will loose ssh access to their box.  Which guidelines did you look at?  I will make sure they get fixed to indicate that you need something like (from man (7) daemon): 


%triggerun -- foobar < 0.47.11-1
           if /sbin/chkconfig --level 3 foobar ; then
                   /bin/systemctl --no-reload enable foobar.service foobar.socket >/dev/null 2>&1 || :
           fi

This is what enables the service on an update IFF it was enabled in runlevel 3 before the update.  I'm not sure how that's going to work along with your chkconfig --add on every update, so it might take some testing.....

Comment 5 Michal Jaegermann 2011-04-27 04:05:42 UTC
(In reply to comment #4)
> 
> %triggerun -- foobar < 0.47.11-1

Maybe I am misinformed but I heard that package triggers are frowned upon.  OTOH checking that /sbin/chkconfig is aware of sshd but 'systemctl list-units' is not, and acting on that information in a %post script, does not look to me that complicated. That does not need any specific version information.

Comment 6 Jan F. Chadima 2011-04-27 07:26:28 UTC
(In reply to comment #4)
> 
> %triggerun -- foobar < 0.47.11-1
>            if /sbin/chkconfig --level 3 foobar ; then
>                    /bin/systemctl --no-reload enable foobar.service
> foobar.socket >/dev/null 2>&1 || :
>            fi
> 
this switch the service on every time when the package is updated and originaly was in runlevel 3. IMHO it's wrong.

Comment 7 Eric Paris 2011-04-27 12:56:25 UTC
You need to set the version there equal to the last version using sysinit.  This will only be run the first time one updates past the version that removes sshd from sysinit.

After you update to systemd you should remove it from chkconfig with --del.

I believe both the NM and the sssd packages have sucessfully implemented spec files that handle updates.

As it stands today every F16 box that you update will lose ssh on the next reboot.  That's a huge problem and why this method was documented....

Comment 8 Jan F. Chadima 2011-04-27 17:06:24 UTC
(In reply to comment #7)
> 
> After you update to systemd you should remove it from chkconfig with --del.
> 

This is a problem because deleting the ssh from sysv-init is problem for those who uses it instead of systemd.

Comment 9 Eric Paris 2011-04-27 19:02:28 UTC
I thought we were trying to move away from sysv-init and to just use systemd.  It's not possible or supported to install F16 without systemd.  I understand that upstream might not want to completely drop chkconfig, but in F16 we should.

In any case post seems wrong, since you are going to add it into chkconfig every time, not just on initial install.  (which explains why my box now has it enabled in chkconfig and in systemd)   I'd pretty strongly suggest putting the if [-x server] as an 'else' clause to systemd if you need support for both.

I'm guessing that postun is going to double restart it based on how it is coded there....

preun might be right....

I still think you should just convert all the way to systemd and use the trigger like in the man page....

Comment 10 Lennart Poettering 2011-04-27 19:07:01 UTC
Jan, non-systemd systems are not supported anymore on Fedora, no need for that compatibility.

Also, it is not strictly necessary to remove the old sysv services, as they are ignored when native services exist by the same name.

Comment 11 Jan F. Chadima 2011-04-28 10:13:24 UTC
Temporarily revert sytemd units according to https://bugzilla.redhat.com/show_bug.cgi?id=697698#c30
There is still nor fpc nor fesco guidance how to do it.


Note You need to log in before you can comment on or make changes to this bug.