FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Redhat > Fedora Packaging

 
 
LinkBack Thread Tools
 
Old 03-02-2011, 10:11 PM
Toshio Kuratomi
 
Default Systemd guidelines architectural decisions to be made

https://fedorahosted.org/fpc/ticket/31

Okay, we ran out of time at today's meeting so I'm going to post the list of
architectural decisions FPC needs to decide on in order to keep going on the
systemd guidelines.

Status report on bugs:
* I've submitted a patch to notting to fix the chkconfig bug introduced by
having chkconfig fallback on calling systemctl:
https://bugzilla.redhat.com/show_bug.cgi?id=616857
We should be able to use chkconfig --no-redirect in our scriptlets once
that's applied

* I've fixed a lot of bugs in the proposed scriptlets and added some notes
about other issues discovered to the scriptlets on the guidelines. Some
of those issues lead to the decisions we need to make next:

= Triggers or no triggers =

notting raises the point in the Guidelines ticket that triggers are
conceptually the right tool for this job. Additionally, I think that some
of the things we're trying to do are very difficult without triggers. For
instance, telling the difference between a systemv init script that exists
from an old package versus a systemv init script that exists from a new
package is not possible just by using chkconfig. So we can't tell using
just chkconfig if we are supposed to run a migration from systemv init
script to systemd or not:

foo-1.0 has only a SysV init script in /etc/init.d/foo
foo-2.0 has both a SysV init script and a unit file in
/lib/systemd/system/foo

foo-2.1 has both a SysV init script and a unit file.

If I do yum upgrade foo and it wants to install foo-2.1, how do I know if
foo-1.0 or foo-2.0 is what is being replaced in %post? If I don't know,
then how do I know whether to try to migrate the runlevel information from
the systemv init script?

If other FPC members feel strongly that we still want to avoid triggers,
we can try to eliminate each of the corner-case scenarios and see if we can
avoid them but my present inclination is that triggers are the way to go.

= Migration of user customization =

A lot of the other discussion in the FPC ticket right now is how to migrate
information about what services are started. This includes what runlevels
to migrate and also which commands to use to perform the migrations. I'll
list the options that I can think of in a bit but I think the basic question
is: do we want the user's system settings to just work when they do an
upgrade or do we want them to start over with our defaults, redoing any of
their customizations?

== Starting over with the defaults ==
If the latter, the option that I think works best is to use systemctl enable
in if the package being upgraded from is a sysVinit user. Using trigger
scripts, this would be implemented something like this:

%post
if [ $1 -eq 1 ] ; then
# Initial installation
# If a package is allowed to autostart:
/bin/systemctl enable foo.service >/dev/null 2>&1 || :
# No autostart:
# /bin/systemctl daemon-reload >/dev/null 2>&1 || :
fi

# Note: the NEVR in trigger scripts should all be the version in
# which the package switched to systemd unit files and the comparision
# should be less than. Using <= the last version with the sysV script won't
# work for several reasons:
# 1) disttag is different between Fedora releases
# 2) An update in an old Fedora release may create a newer NEVR
%triggerun -- foo < 1.0-2
# Run this because the chkconfig --del in the SysV providing package won't
# fire unless the package is removed
/sbin/chkconfig --del bar >/dev/null 2>&1 || :
# I think that we need this as well
# /bin/systemctl try-restart foo.service >/dev/null 2>&1 || :

# If the package is allowed to autostart, do the following
/bin/systemctl enable foo.service >/dev/null 2>&1
/bin/systemctl daemon-reload >/dev/null 2>&1 || :

(The %preun and %postun will remain as they are in the current proposal)

In this example, systemctl enable is working similarly to chkconfig --add.
It looks in the unit file for the Wanted-By entry. Then it enables the
service in all of the targets listed there.

=== Some thoughts on this ===
Under this model, it would be most user friendly if we migrated to systemd
unit files all in one release cycle. Failing that, it would be user
friendly to have a policy that pacakgers must not update from sysv to
systemd scripts over the course of a released Fedora. The reasoning behind
either of those rules would be that services may be enabled or disabled when
a package updates from the systemV to the systemd version so we'd want to
minimize that happening when the user doesn't expect.

Failing either of those, this will only hit the user once per package that
they have installed that migrates from sysV to systemd which may or may not
be acceptable.

== Migrating the user's settings ==

If we do think that we should be migrating the user's settings then we need
to think about what customizations the user may have performed and how we
can migrate them to a systemd equivalent. For the purposes of the
Guidelines, the user may have turned a service on or off in a particular
runlevel. Of the runlevels that system v init provides, there are five that
have a definite meaning with a map into systemd: 1 => rescue, 3 =>
multi-user, 5 => graphical, 0 => poweroff, and 6 => reboot. Of these, 0 and
6 don't seem to have any scripts in Fedora that are designed to start there
so we don't need to migrate anything that the user customized.

The other three can be migrated so that the user can use those targets under
systemd and have them start the same programs as they did when they were
using systemv initscripts. Migrating a service for a particular target
seems to need to use explicit symlinking; systemctl doesn't appear to have
a command that does that. The %triggerun script would look something like
this (the other scripts stay the same as the previous example):

%triggerun -- foo < 1.0-2
/sbin/chkconfig --del bar >/dev/null 2>&1 || :
if chkconfig --level --no-redirect 1 foo ; then
ln -sf /lib/systemd/system/foo.service /etc/systemd/system/rescue.target.wants/ 2>&1 >/dev/null
multiuser=0
if chkconfig --level 3 foo; then
ln -sf /lib/systemd/system/foo.service /etc/systemd/system/multi-user.target.wants/ 2>&1 >/dev/null
multiuser=1
fi
if chkconfig --level 5 foo; then
# If it's already in multi-user, it will be inherited automatically
if [ $multiuser -eq 0 ] ; then
ln -sf /lib/systemd/system/foo.service /etc/systemd/system/graphical.target.wants/ 2>&1 >/dev/null
fi
else
if [ $multiuser -eq 1 ] ; then
# We have the option of disabling the service in graphical here to
# match what the user explicitly customized their system to like
# this:
ln -sf /dev/null /etc/systemd/system/graphical.target.wants/foo.service
# But we could also decide that this is not something that we're going
# to migrate (as systemd itself sets graphical up as a strict
# superset of multi-user).
fi
fi
/bin/systemctl daemon-reload >/dev/null 2>&1 || :

= Migration between sysv and systemd settings post-package changes =
Also raised in the ticket is whether we should support moving back to
sysvinit. My view on that is that we should allow a user installing and
customizing a systemVinit system in parallel to the systemd files without
getting in their way but we shouldn't explicitly support migration from
the default init system to another init system in the standard packaging
guidelines. We can certainly have guidelines for each individual init
system that people who write scripts for them may follow but setting up
which runlevel-equivalents each of those start services in should be
independent of what's being done in systemd.

I think that's the basics of the issues we need to work on to keep moving
forward on the guidelines. There's certainly more information and
informational questions that could be asked and answered to make informed
decisions here, though. discuss away.

-Toshio
--
packaging mailing list
packaging@lists.fedoraproject.org
https://admin.fedoraproject.org/mailman/listinfo/packaging
 
Old 03-08-2011, 06:12 PM
Tom Callaway
 
Default Systemd guidelines architectural decisions to be made

On 03/02/2011 06:11 PM, Toshio Kuratomi wrote:
> = Migration of user customization =
>
> A lot of the other discussion in the FPC ticket right now is how to migrate
> information about what services are started. This includes what runlevels
> to migrate and also which commands to use to perform the migrations. I'll
> list the options that I can think of in a bit but I think the basic question
> is: do we want the user's system settings to just work when they do an
> upgrade or do we want them to start over with our defaults, redoing any of
> their customizations?

Okay, on this specific topic, I think there are three scenarios:

1) Users who do a fresh install.
They will get an experience with systemd where fewer services start
on boot than used to start on boot in Fedora 14.

2) Users have customized their runlevel settings, and then upgrade.

3) Users who have not customized their runlevel settings, and then upgrade.

The problem is that it is not possible to have scriptlets automatically
handle #2 (by migrating the customized settings into systemd) without
also affecting the experience of #3, when in an ideal universe, their
experience should be identical to #1.

I think the best compromise is to record the system runlevel state
during upgrade and not attempt to migrate settings. Document where the
state is recorded, and ideally, provide a tool to easily restore the
configuration into systemd, should the user wish it.

In talking with Toshio, he leans towards ensuring that #2 has a clean
experience as being more important, hence runlevel migration (this
affects #3).

What do other people think here?

~tom

==
Fedora Project
--
packaging mailing list
packaging@lists.fedoraproject.org
https://admin.fedoraproject.org/mailman/listinfo/packaging
 

Thread Tools




All times are GMT. The time now is 02:35 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org