October 26, 2009

On upgrading openSUSE with 3rd party repositories

With the availability of up to date software for openSUSE, thanks to the amazing build service, our users have started managing the software in ways we did not imagined some years ago.

Update? Upgrade?

This has created some confusion between operations like update and upgrade, package vendors and the package selector functionality. This new situation plus the confusion leads to bug 548551

When you install a package, it has a vendor. Official packages have the “openSUSE” vendor. While packman packages vendor is something like “Packman Project”, and packages from the build service, have a vendor based on the project name, like “OBS KDE Project”.

Updating your system means looking for the latest package of the same vendor that can be installed without doing destructive operations to your system, like uninstalling another package due to a conflict. This is the reason for behaviors like:

  • “zypper up” does not pick latest KDE packages even if the repository is added
  • An official update (same vendor) for SoftwareFoo is available, but because your custom libSomething packages conflict with it, the update is not applied.
  • However, if you manually switch to the packman package, “zypper up” will upgrade from now on using new versions of the package in the packman repository, and therefore ignoring the openSUSE one.

This behavior is expected as we don’t consider a package with the same name to be the same package across vendors. A packman package may include mp3 support and the one in the openSUSE repo may not. If packman updates this package every monday, and openSUSE does every Friday, “zypper up” would end with your application having mp3 support depending on the day you are upgrading.

Bleeding edge repositories

If you are using a distribution like openSUSE Factory, packages are removed, split, renamed and aggressively replaced by new versions. This makes moving from a openSUSE Factory installation on a given day, to the state of the repository some time later a process that may require more aggressive operations, like downgrading packages or removing others, in order to reach the goal of moving to the second point.

As we explained above, the update operation won’t do this. The right way to do it is to perform a distribution upgrade. People using “zypper dup” are doing exactly this. This operation will move your system to the versions of the available packages. This may actually mean downgrading and removing installed packages. The recommended way to do this, is to perform it against a specific repository. This helps narrowing the “goal” further than telling the solver to do a “wide” distribution upgrade. This is what “zypper dup –from repo” should do.

If you intend to use “zypper dup” without an specific repository. You need to define repository priorities if you don’t want to encounter some surprises. For example you could set packman to a higher priority than openSUSE Factory so every Factory update does not remove your mp3 support.

What was missing?

Part of the confusion, and the difficulties to follow repositories with latest versions of big components (like KDE) on top of a stable release (like 11.1) comes from two sides:

  • “zypper dup –from” was broken, and therefore performing a “wide” distribution upgrade ( bug #549490), which is fixed now (1.2.7).
  • YaST package selector had no support for performing upgrade operations. This is available starting yast2-qt-pkg 2.18.18.

Upgrade operations are requests to the solver. When selecting packages by selecting the latest one manually (what “upgrade all in this list” did) you are not necessarily selecting the one the solver will select. Therefore such operations are best represented as “requests”, which can be combined with manual user selection/removal of other packages.

When browsing the packages in the repository view, you will see a notification that allows to insert a request to the solver to switch all installed packages to the versions of this repository.

upgrade-repo-1

Once you file the request, you will see the list of repository upgrade requests. You can cancel any of these.

upgrade-repo-2

And finally, you can do this in multiple repositories (equivalent to passing –from multiple times to zypper).

upgrade-repo-3

I hope this post made more clear how this operations work. The changes described above should be available in Factory soon. And may be we need to think what to do with legacy functionality like “upgrade all in this list”.

You can use the new functionality to stay current with your favorite desktop environment community repositories, or why not, to stay current with Factory.

October 16, 2009

What is with rpm-metadata (createrepo) and yum on openSUSE?

Long time ago, I wrote about our interoperability efforts built around rpm-metadata format and first-class PackageKit support.

On the rpm-metadata side however, even if we depend a lot on these tools, the situation was far from ideal:

  • We need usually extensions to the rpm-metadata to support the features that make the openSUSE software management more powerful compared to other tools
  • We are in continuous talk with the yum team to make those extensions common so they can be standardized instead of staying in suseinfo/susedata.xml
  • Some of those extensions got implemented, in createrepo 0.9.x
  • We are stuck with createrepo 0.4.x plus a high stack of patches
  • createrepo 0.9.x requires a recent yum
  • yum on openSUSE is unmaintained, and not included in the distribution
  • openSUSE Build Service and other infrastructure depend on a proven createrepo (which means they depend on the custom patches)

This situation won’t sustain in the long term, so the following action plan was agreed between various stakeholders:

  • we will update yum and createrepo to the upstream latest versions, and maintain them in [the system:packagemanager] project
  • all patches except a couple were discarded, so don’t expect those versions to work flawlessly for now, we will reevaluate them one by one, upstream them or discard them
  • openSUSE infrastructure will freeze their production version from our project once the newer versions work, instead of maintaining a fork
  • as we don’t want to include yum in the default package selection, but createrepo depends on it, yum was split in yum and yum-common (libraries).
  • yum is still available in the system:packagemanager, and will be kept up-to-date. We are interested in competition, as it makes the [ZYpp][10] team work harder :-)
  • I will improve enhancerepo (for custom tag extensions generation) and include it in this project in a near future
  • Most patches in the current packages were one liner fixes where the developer did not spent 5 minutes to upstream it. This attitude created a uncomfortable patch mess. We will change this by upstreaming fixes or just rejecting having those patches in the package.

If you use createrepo or yum in your infrastructure, we invite you to contribute to this project! yum-3.2.25 was released a couple of days ago, and it is already available there.

[10]: http://en.opensuse.org/Libzypp

kopete-facebook 0.1.4

I have released kopete-facebook 0.1.4 which fixes idle status of contacts and message sending.

I still have some important bugs, which I hope I can fix before the openSUSE 11.2 release.

From those known bugs, one is the inability to reconnect (go offline and offline), which is due to the “myself” contact using the email as userid, which is in turn due to a Kopete limitation of needing to know an id, but facebook sends it after login. I have tried so many hacks (like switching the myself contact at runtime), but all have other side effects.

Another one is a crash at exit, which I still can’t understand. Help appreciated.

Note: this plugin is not affiliated with Facebook in any way.

Should appear here soon (or build it yourself).