February 26, 2010

enhancerepo 0.4.1 released

You can find the packages in my home project.

Changes

  • Gemified. It is now available as a ruby gem. The rpm package is now therefore rubygem-enhancerepo
  • Changed command line option parsing: for multiple items in an option, don’t use commas anymore: –generate-update pkg1,pkg2 becomes –generate-update pkg1 pkg2
  • Support for product metadata generation from release packages. Enhancerepo will scan *-release rpm packages and insert product.xml information in the metadata.
  • Bugfixes for delta and updates generation
  • Improved output

Thanks

This release was possible thanks to contributions and testing from Michael Calmer and Jordi Massaguer Pla

Next release

A 0.4.2 release will follow shortly, because 0.4.1 was queued from some time already. At least 2 features are planned for 0.4.2/0.4.3

  • Merge splitting of any metadata patch from Jordi Massaguer Pla
  • Merge pattern conversion patch from Michael Calmer

About Enhancerepo

Enhancerepo is a tool to edit and index rpm-md (a.k.a yum) software repositories. It is developed in gitorious.

Main features:

  • Reindex metadata
  • Generate delta rpms from different package versions, and the corresponding metadata
  • Generate updates (patches) metadata from different package versions
  • Insert keywords and other properties
  • Create product descriptions from -release packages
June 30, 2009

Quickly testing Google Chrome binary on openSUSE

Get the deb package from the developer release site.

Unpack the deb:

ar x google-chrome-unstable_current_i386.deb 
lzma -d data.tar.lzma 
tar xpvf data.tar

Now you got a opt directory in the current directory with the full tree. Go to the Chrome directory.

cd opt/google/chrome

Symlink the libraries:

ln -s /usr/lib/libnss3.so ./libnss3.so.1d
ln -s /usr/lib/libnssutil3.so ./libnssutil3.so.1d
ln -s /usr/lib/libsmime3.so ./libsmime3.so.1d
ln -s /usr/lib/libssl3.so ./libssl3.so.1d
ln -s /usr/lib/libplds4.so ./libplds4.so.0d
ln -s /usr/lib/libplc4.so ./libplc4.so.0d
ln -s /usr/lib/libnspr4.so ./libnspr4.so.0d

Run it and enjoy!. Be sure to read about privacy features of this preview release.

LD_LIBRARY_PATH=$PWD ./google-chrome
October 11, 2008

Cuidado Chile, se viene otro gol: SCD

Ahora se ha revelado Acuerdo Secreto SCD/Gobierno de Chile (léanlo), hoy sólo quiero comentar un solo punto:

  • ARTICULO 85 L. OPERADORAS DE INTERNET Lejos uno de los posibles artículos más populistas. En su afán de lucrarse, quieren cobrarle a las ISP que dan acceso a internet un valor por cada conexión, pues según la SCD TODOS los que tenemos internet pirateamos música, y no cualquier música, sino que la del repertorio que ellos gestionan. Esto, amigos, sería fijar una responsabilidad a las ISP que EN NINGUN PAIS DEL MUNDO está determinado a priori, siendo Chile los primeros en una medida inconstitucional como esta. Y no es que esté defendiendo a las pobres ISPs , sino a todos los consumidores, porque dicho valor se verá SI o SI reflejado en los precios de acceso a Internet, haciendo AUN MAS CARO y PROHIBITIVO la banda ancha, Y todo porque el gobierno acordó ASEGURAR los ingresos a la monopólica de la SCD.

Un ejemplo análogo a esto sería:

Yo soy desarrollador de software, y tengo mi asociación de autores de software, que agrupa a desconocidos como yo más otros conocidos. Hoy termine un nuevo programa, el cual he mantenido bajo “todos los derechos reservados” y pienso venderlo.

Sin importarme lo malo que es mi programa, y que nadie sabe que yo existo, usaremos la teta del gobierno para que este, mediante presunción, dictamine que cualquier persona que tenga acceso a Internet, tiene accesso a las redes p2p, y de esta manera acceso a descargar ilegalmente mi programa, y por lo tanto mi agrupación de programadores tiene derecho a recibir un sueldo pagado por los proveedores de Internet (que será por supuesto traspasado a los usuarios).

ESO ES EL ANÁLOGO DE LO QUE INTENTA LA SCD Y SUS ARTISTAS.

¿Por qué es el análogo al programador desconocido?

Porque si bien sé que Fernando Ubiergo es un músico, jamás he escuchado su música. De Quique Neira sólo he escuchado lo que ha sonado de fondo en alguna TV encendida. De Horacio Saavedra no conozco nada más que su cortina del festival de Viña, y de Eduardo Gatti sólo debo haber tocado “Los momentos” en la guitarra alguna vez en una fogata, pero no tengo ni siquiera la versión original. De esta lista sólo ubico a uno cada cien. ¿Porque tienen los chilenos que mantenerlos si no escuchamos ni disfrutamos sus canciones?.

¿Que sería del mundo si las empresas nos cobraran por lo que ellas creen que hemos hablado por teléfono y no lo que dice el marcador?

La estrategia de estos artistas agrupados en la SCD, es de ser mantenidos por el sistema, es decir, pasar a ser parte del patrimonio nacional sin importar su popularidad o importancia.

Quizás vamos en camino recto al absurdo canon digital Español, que significa un impuesto a cualquier medio de grabación, el cual mediante presunción, podría ser usado para copias ilegales de algún artista (que quizás tampoco conoces). O sea, cuando un español compra un CD virgen, o incluso un disco duro para archivar sus propias fotos, le está pagando a estos artistas.

En la misma línea, los programadores que hayan puesto a disposición obras con “todos los derechos reservados” podrían exigir al gobierno una ayuda, cargando un impuesto a cualquier medio de almacenamiento. Justicia para todos no? Esto se podría extender a cualquier oficio cuyas obras estén sujetas al copyright. Una locura.

Chile, que no te metan otro gol. Tu no tienes porque financiar a Ubiergo o la Cecilia Echeñique si no utilizas su música.

Update

  • El post en Fayerwayer sobre el tema.
  • Sería interesante también aprovechar la blogósfera para ver que diputados y senadores están a favor y en contra de esta ley.

Update 2

Efectivamente, la SCD busca instaurar un sistema de canon, aunque al parecer no es parte de los aterradores puntos del “secreto acuerdo”. Más sobre eso aquí.

Update 3 – En que posición están los senadores y diputados?

Es importante aprovechar estos polémicos temas para que veas como vota tu senador o diputado.

September 18, 2008

Introducing ZYpp services

Credits

The following cool stuff would have not been possible without the hard work of Jan Kupec, Michael Andres and Michael Calmer, who implemented and tested this stuff. The original concept dates back from ZLM and the Novell Customer Center.

Usecase #1: The project with multiple repositories and layers

Imagine the following usecase (with this one I am using some real request from our KDE guys)

The build service provides a KDE4 repository. Which in turn requires the Qt4 repository, because is built on openSUSE 11.0 + the new Qt4 repo.

When looking at this problem, repository dependencies is what comes to head in the first place. But forget about them. If package dependencies are complicated right now, imagine adding a secondary (and duplicated) layer of information. Packages already know their dependencies.

Now imagine our KDE guys can provide an URL, which you add to zypper. And this url returns a dynamic list of repositories. And zypper adds and remove repositories based on the information returned by this url on every refresh.

Usecase #2: Update repositories based on the customer

This is actually where services where originated. Services were present in Novell ZenWorks. How it works?

The service url nu.novell.com is added to the system. But in this url also a customer id is present as a http username. When you registered, Novell knows the product this customer is linked to, and can return a dynamic list of update repositories based on the customer preferences, products and entitlements and the customer does not need to keep them in sync.

Now that we don’t have Zenworks in the base system, we still want this cool functionality for our customers.

Technically, this even allows us to offer hotfixes to L3 supported customers on the fly!

Usecase #3: Dynamic repository collections

You are a build service user, and you have an account, and of course you have a list of watched projects you are interested to. What if you could keep your system repositores in sync with your watched project list.

Or what if the build service could offer a service based on keywords or other data: like http://build.opensuse.org/services/mostpopular/repo/repoindex.xml would contain dynamically the 15 most popular repositories. You add that service, and then ZYpp does the work for you of adding new popular repositories, and remove the old ones.

Quick test

For a quick test, I needed a service provider, and I have none. I could have used our Subscription Management Tool, which can act as a local proxy replacement of a Novell Update service provider, but I decided to implement a quick and dirty service that could be used as an example for other people that have nice ideas for this stuff.

So I created a rails application, a very simple one, that returns a dynamic repository index by searching for the “emacs” keyword using the opensuse-community search API.

require 'open-uri'
require 'rexml/document'
require 'uri'

include REXML

class RepoController < ApplicationController

  def index

    # do a package search on a keyword
    f = open('http://api.opensuse-community.org/searchservice/Search/Simple/openSUSE_110/emacs')
    buffer = f.read
    doc = Document.new(buffer)
    repourls = Set.new
    
    counter = 0
    doc.elements.each('ns2:packages/package/repoURL') do | repourl |
      # get all repourls
      repourls.add repourl.text.to_s
    end

    # create the repoindex
    outdoc = Document.new
    root = Element.new('repoindex')
    outdoc.add_element root
    counter = 0
    repourls.each do |repourl|
      al = URI.parse(repourl).path.gsub(/\/repositories\//, '').gsub(/[\:]/, '').gsub(/\//, '_')
      root.add_element 'repo'  , { 'url' => repourl,
        'alias' => al }
    end
    
    render :x ml => outdoc.to_s
  end
end

And I need also to configure a route, as the service is searched in the service url + “repo/repoindex.xml”.

  map.connect ':controller/repoindex.xml', :action => 'index'

Requesting my new service http://localhost:3000/repo/repoindex.xml returns me the following.

<repoindex>
<repo url="http://download.opensuse.org/repositories/Education:/desktop/openSUSE_11.0" alias="Education_desktop_openSUSE_11.0"/>
<repo url="http://download.opensuse.org/repositories/server:/mail/openSUSE_11.0" alias="server_mail_openSUSE_11.0"/>
<repo url="http://download.opensuse.org/repositories/home:/tiwai/openSUSE_11.0" alias="home_tiwai_openSUSE_11.0"/>
<repo url="http://download.opensuse.org/repositories/home:/sjcundy/openSUSE_11.0" alias="home_sjcundy_openSUSE_11.0"/>
<repo url="http://download.opensuse.org/repositories/home:/hmacht/openSUSE_11.0" alias="home_hmacht_openSUSE_11.0"/>
<repo url="http://download.opensuse.org/repositories/home:/marcinzalewski/openSUSE_11.0" alias="home_marcinzalewski_openSUSE_11.0"/>
<repo url="http://download.opensuse.org/repositories/home:/beyerle/openSUSE_11.0" alias="home_beyerle_openSUSE_11.0"/>
<repo url="http://download.opensuse.org/repositories/home:/dsteuer/openSUSE_11.0" alias="home_dsteuer_openSUSE_11.0"/>
<repo url="http://download.opensuse.org/repositories/M17N/openSUSE_11.0" alias="M17N_openSUSE_11.0"/>
<repo url="http://download.opensuse.org/repositories/home:/jefferyfernandez/openSUSE_11.0" alias="home_jefferyfernandez_openSUSE_11.0"/>
<repo url="http://download.opensuse.org/distribution/11.0/repo/oss/suse" alias="_distribution_11.0_repo_oss_suse"/>
<repo url="http://download.opensuse.org/repositories/home:/maw:/bzr/openSUSE_11.0" alias="home_maw_bzr_openSUSE_11.0"/>
</repoindex>

Adding your service can be done with zypper:

# zypper sa http://localhost:3000 myservice
Service 'myservice' has been successfully added.          

As you may note, services have their own commands. every repository not part of a service is also a service. So working with repositories at the service level basically groups all repositories that belong to the same service.

Now, when you refresh the service:

# zypper refs
Refreshing service 'myservice'.
Adding repository 'Education_desktop_openSUSE_11.0' [done]
Adding repository 'server_mail_openSUSE_11.0' [done]
Adding repository 'home_tiwai_openSUSE_11.0' [done]
Adding repository 'home_sjcundy_openSUSE_11.0' [done]
Adding repository 'home_hmacht_openSUSE_11.0' [done]
Adding repository 'home_marcinzalewski_openSUSE_11.0' [done]
Adding repository 'home_beyerle_openSUSE_11.0' [done]
Adding repository 'home_dsteuer_openSUSE_11.0' [done]
Adding repository 'M17N_openSUSE_11.0' [done]
Adding repository 'home_jefferyfernandez_openSUSE_11.0' [done]
Adding repository '_distribution_11.0_repo_oss_suse' [done]
Adding repository 'home_maw_bzr_openSUSE_11.0' [done]
Repository 'FATE' is up to date.
Repository 'KDE 4.1.x Packages (openSUSE_11.0)' is up to date.
Repository 'The (default) Factory KDE 4 desktop with extra apps (openSUSE_11.0)' is up to date.
Repository 'Current Qt 4.x packages (openSUSE_11.0)' is up to date.
Retrieving repository 'VirtualBox' metadata [done]
Building repository 'VirtualBox' cache [done]
Repository 'Latest YaST svn snapshots (openSUSE_11.0)' is up to date.
Repository 'Python and Python Modules (openSUSE_11.0)' is up to date.
Repository 'home:jnweiger' is up to date.
Repository 'PackageKit experiments (openSUSE_11.0)' is up to date.
Repository 'Network Utilities (openSUSE_11.0)' is up to date.
Repository 'openSUSE-11.0' is up to date.
Repository 'openSUSE-11.0-NONOSS' is up to date.
Repository 'openSUSE-11.0-Update' is up to date.
Repository 'openSUSE.org tools (openSUSE_11.0)' is up to date.
Repository 'outdated' is up to date.

Did you see how zypper automatically added the needed repositories? (it also would remove them if in the future the service does not list them).

Now, let list them:

Now if we list the services:

# zypper ls
#  | Alias                       | Name                                                                | Enabled | Refresh | Type
---+-----------------------------+---------------------------------------------------------------------+---------+---------+-------
1  | myservice                   | myservice                                                           | Yes     | No      | ris
2  | FATE                        | FATE                                                                | Yes     | Yes     | rpm-md
3  | KDE_KDE4_Factory_Desktop    | KDE 4.1.x Packages (openSUSE_11.0)                                  | Yes     | Yes     | rpm-md
4  | KDE_KDE4_Factory_Extra-Apps | The (default) Factory KDE 4 desktop with extra apps (openSUSE_11.0) | Yes     | Yes     | rpm-md
5  | KDE_Qt                      | Current Qt 4.x packages (openSUSE_11.0)                             | Yes     | No      | rpm-md
6  | Virtualization:VirtualBox   | VirtualBox                                                          | Yes     | No      | rpm-md
7  | YaST_SVN                    | Latest YaST svn snapshots (openSUSE_11.0)                           | Yes     | Yes     | rpm-md
8  | devel_languages_python      | Python and Python Modules (openSUSE_11.0)                           | Yes     | Yes     | rpm-md
9  | home:jnweiger               | home:jnweiger                                                       | Yes     | Yes     | rpm-md
10 | home_dmacvicar_packagekit   | PackageKit experiments (openSUSE_11.0)                              | Yes     | No      | rpm-md
11 | network_utilities           | Network Utilities (openSUSE_11.0)                                   | Yes     | Yes     | rpm-md
12 | openSUSE-11.0               | openSUSE-11.0                                                       | Yes     | No      | yast2
13 | openSUSE-11.0-NONOSS        | openSUSE-11.0-NONOSS                                                | Yes     | No      | yast2
14 | openSUSE-11.0-Update        | openSUSE-11.0-Update                                                | Yes     | No      | rpm-md
15 | openSUSE_Tools              | openSUSE.org tools (openSUSE_11.0)                                  | Yes     | No      | rpm-md
16 | outdated                    | outdated                                                            | Yes     | No      | rpm-md
17 | packman                     | packman                                                             | Yes     | Yes     | rpm-md
18 | rpms                        | rpms                                                                | Yes     | No      | rpm-md
19 | ruby                        | Ruby                                                                | No      | No      | rpm-md
20 | zypp_svn                    | ZYPP SVN Builds (openSUSE_11.0)                                     | Yes     | Yes     | rpm-md

Do you see that all the added repositories are “hidden” behind the added service.

If you want to see them, then you need to list the repositories instead:

# zypper lr
#  | Alias                               | Name                                                                | Enabled | Refresh
---+-------------------------------------+---------------------------------------------------------------------+---------+--------
1  | Education_desktop_openSUSE_11.0     | Education_desktop_openSUSE_11.0                                     | No      | Yes
2  | FATE                                | FATE                                                                | Yes     | Yes
3  | KDE_KDE4_Factory_Desktop            | KDE 4.1.x Packages (openSUSE_11.0)                                  | Yes     | Yes
4  | KDE_KDE4_Factory_Extra-Apps         | The (default) Factory KDE 4 desktop with extra apps (openSUSE_11.0) | Yes     | Yes
5  | KDE_Qt                              | Current Qt 4.x packages (openSUSE_11.0)                             | Yes     | No
6  | M17N_openSUSE_11.0                  | M17N_openSUSE_11.0                                                  | No      | Yes
7  | Virtualization:VirtualBox           | VirtualBox                                                          | Yes     | No
8  | YaST_SVN                            | Latest YaST svn snapshots (openSUSE_11.0)                           | Yes     | Yes
9  | _distribution_11.0_repo_oss_suse    | _distribution_11.0_repo_oss_suse                                    | No      | Yes
10 | devel_languages_python              | Python and Python Modules (openSUSE_11.0)                           | Yes     | Yes
11 | home:jnweiger                       | home:jnweiger                                                       | Yes     | Yes
12 | home_beyerle_openSUSE_11.0          | home_beyerle_openSUSE_11.0                                          | No      | Yes
13 | home_dmacvicar_packagekit           | PackageKit experiments (openSUSE_11.0)                              | Yes     | No
14 | home_dsteuer_openSUSE_11.0          | home_dsteuer_openSUSE_11.0                                          | No      | Yes
15 | home_hmacht_openSUSE_11.0           | home_hmacht_openSUSE_11.0                                           | No      | Yes
16 | home_jefferyfernandez_openSUSE_11.0 | home_jefferyfernandez_openSUSE_11.0                                 | No      | Yes
17 | home_marcinzalewski_openSUSE_11.0   | home_marcinzalewski_openSUSE_11.0                                   | No      | Yes
18 | home_maw_bzr_openSUSE_11.0          | home_maw_bzr_openSUSE_11.0                                          | No      | Yes
19 | home_sjcundy_openSUSE_11.0          | home_sjcundy_openSUSE_11.0                                          | No      | Yes
20 | home_tiwai_openSUSE_11.0            | home_tiwai_openSUSE_11.0                                            | No      | Yes
21 | network_utilities                   | Network Utilities (openSUSE_11.0)                                   | Yes     | Yes
22 | openSUSE-11.0                       | openSUSE-11.0                                                       | Yes     | No
23 | openSUSE-11.0-NONOSS                | openSUSE-11.0-NONOSS                                                | Yes     | No
24 | openSUSE-11.0-Update                | openSUSE-11.0-Update                                                | Yes     | No
25 | openSUSE_Tools                      | openSUSE.org tools (openSUSE_11.0)                                  | Yes     | No
26 | outdated                            | outdated                                                            | Yes     | No
27 | packman                             | packman                                                             | Yes     | Yes
28 | rpms                                | rpms                                                                | Yes     | No
29 | ruby                                | Ruby                                                                | No      | No
30 | server_mail_openSUSE_11.0           | server_mail_openSUSE_11.0                                           | No      | Yes
31 | zypp_svn                            | ZYPP SVN Builds (openSUSE_11.0)                                     | Yes     | Yes

There you have them all. You should also note that service configuration is very similar to repository configuration. Only services.d intead of repos.d.

Conclusion

As you can see, services implement a kind of “black box” repository, that allows subscription to dynamic repository sets. The concept is simple, optional (you can not use them at all), and the potential is very big, if people start to offer them.

August 12, 2008

Dead blog

Long time since I haven’t blogged.

The server where I have my blog suffered a big crash, and after they had reenabled most services, the status of the databases was unclear. For some days, my blog was gone, forever.

I had some backup, and also experimented recreating it from google cache using a html parser using hpricot. I was successful in recreating an atom feed from there, but had no much luck with the comments (because atom comments are not very standard). Well, I learned a lot on the way :-)

At the end, the sysadmins were able to recover everything, and my blog came to life again, except for some encoding issue that crashed wordpress, which was solved by the sysadmins without any intervention (thanks guys).

So here I am, back. I will be posting some stuff I had on the queue.

May 21, 2008

The greatest unknown openSUSE 11.0 package management feature

During the development of openSUSE 11.0, we have been reporting in real time cool improvements like the fast installation, how YaST became sexy, how YaST/ZYpp/zypper became fast, how YaST/ZYpp/zypper performs better than others and even that our solver is also really smart.

However, there is something else…

Interoperability

Background

One of the features of our stack is the availability of patches and patterns. The first provide updates in a sense of “fix for a problem” (which can mean various, or none updated packages), while patterns are intelligent groups that can recommend, require and suggest packages in order to make certain functionality available, without being too strict in the specific packages to install.

Unlike in other systems where groups and updates are handled as special entities, ZYpp patterns and patches are just objects with dependencies like packages, and the solver threats them in the same way.

Because rpm installed packages database does not know about patterns and patches, in openSUSE 10.x (and SLE10) those objects are installed in a separate database, only viewable to libzypp. This is hidden to the users, but does not allow for easy management using 3rd party tools.

In addition to that, the patch metadata format is our own extension to the metadata handled by yum, the tool used by Fedora and Centos. That means, even if other distribution provide similar concepts, they will mostly ignore our extended metadata.

This is sad, if we share 90% of the metadata format, why not go further?. Sometimes it is no worth to wait that others do steps in becoming more interoperable with you, so what about doing those steps ourselves?

At this time, Fedora was implementing updates metadata by using a yum plugin and a updateinfo.xml description. Metadata for deltarpm availability is handled via the yum-presto plugin.

Sharing tools and data, a step for Interoperability

Metadata format

In openSUSE 11.0, ZYpp reads patches from updateinfo.xml too! (check 11.0 update repo!). Not only that, our delta rpm availability metadata will be in the same format yum-presto (with some modifications agreed with its author).

How will this benefit you?

  • You will be able to use yum stack with updates out of the box with updates and deltarpms, and they will just work.
  • You will be able to generate custom patches for openSUSE using existing tools like Bodhi, from Fedora, or generate custom deltarpm information using the yum-presto included tools.
  • We are working hard to get the ZYpp/YaST stack to build on Fedora (and other distros), in a near future, you will be able to enjoy ZYpp performance and features on Fedora with their own repositories!
  • We decoupled the delta-rpm information from patches, so we may start adding delta-rpm to normal factory packages and it will start to work out of the box!
  • Much more!

Handling of patches and patterns

As we mentioned, in 10.x codebase we used to install patterns and patches in a special database. This is no longer the case.

Patterns and patches are no longer installed, which means your system is rpm only! Patches are shown now as (un)satisfied (and (un)relevant). Which means you have all the requirements to consider them present.

All the information of patches and patterns (and products) is extra information that openSUSE applications use to add more value to you. So if you for example remove a repository offering patches, then you just lose the information about which patches do you have, the real information is the rpm packages you have installed. When you re-add the update repository, and you can immediately see which patches published affect you, which ones are irrelevant, and which ones are relevant but you don’t need because your packages are up to date.

Patterns and patches become “advice” and “value”, not extra non-compatible information.

How will this benefit you?

  • Simpler system.
  • No conflicts because using 3rd party tools, “rpm by hand” or our native tools.

openSUSE, PackageKit enabled

PackageKit is the new actor in the package management world. It is a thin layer that provides applications access to the package management system as a DBUS service. You may heard about it because Fedora 9 is coming PackageKit enabled. How it benefits you?

  • Role based (non-root) package management, via PolicyKit.
  • Sharing of upstream tools across distributions.
  • Gives the desktop the chance to integrate with software manipulation.

So, openSUSE 11.0 is fully PackageKit enabled. You will be able to use all PackageKit compatible applications on openSUSE and they will use the ZYpp stack underneaths. Not only that it is enabled, but our hackers Scott Reeves and Stefan Haas did an amazing job on the backend, I would dare to say it is one of the most robust backend implementations, and it fully benefits from the ZYpp speed and features.

Future

All this improvements are available now. May be you are already enjoying them in Factory. However this opens the door for new possibilities, just a few examples come to mind:

  • The openSUSE Build Service, the great software building platform from our openSUSE team, builds packages for all major distributions since long time. The build service could allow to enter and generate patch information for fixed bugs and the update/patch information will be compatible across yum/Fedora and openSUSE. Same with deltarpm information.
  • We could extend ZYpp parser to understand Fedora groups stored in comps.xml and threat them as patterns.
  • Do you have more ideas?

Community involvement

We welcome any help on creating more interoperability possibilities, especially about building the ZYpp stack and YaST on Fedora, Mandriva and others. There are already some packages building in the build service, but we still have a long way to go.

May 17, 2008

Solving the famous “smart” case 3

In my last post, I showed how sat-solver (solver’s ZYpp uses) would solve correctly the “case 2″ included in smart’s README, an exercise smart uses to claim its “smartness” (because apt and yum can’t handle them).

How does it with case 3?

That’s another interesting case which was tested with APT-RPM and YUM.

In this case, there’s a package A version 1.0 installed in the system, and there are two versions available for upgrading: 1.5 and 2.0. Version 1.5 may be installed without problems, but version 2.0 has a dependency on B, which is not available anywhere.

In this case, the best possibility is upgrading to 1.5, since upgrading to 2.0 is not an option.

Here both yum and apt fail:

Just like APT, YUM selected version 2.0 and didn’t consider the availability of an intermediate version.

But smart does the right thing:

Smart correctly selects the intermediate version 1.5, which is the only viable possibility given the current options.

So, we setup a repository packages.xml with A version 1.5 and 2.0 ( 2.0 requiring an non-existing B) and a system.xml representing the installed packages, with only A 1.0 installed. We put all together in a test.xml file, and select a “upgrade” action.

We run the already introduced deptestomatic:

# deptestomatic test.xml
>!> Solution #1:
>!> upgrade A-1.0-1.noarch => A-1.5-1.noarch[test]
>!> !unflag A-2.0-1.noarch[test]
>!> installs=0, upgrades=1, uninstalls=0

And we confirm, that ZYpp (sat-solver) would also select A 1.5 as expected.

April 27, 2008

Package search and others

YaST ideas and research

We moved the summer of code ideas, and other projects to the YaST/Research page. We would like to find all the experiments that are lying around in the tmp and experimental branches and put them together in that page so previous attempts and knowledge is not lost.

Installation Branding

Some information on branding the installation is available on YaST/Tips#Brandingtheinstallation.

Package groups

The first thing that caught my attention in the rpm world was package groups. It is a 4 deep level tree which has become pretty useless with time. They are also not consistent across rpm distributions. I agree that they are interesting metadata (because they contain keywords), but nothing you want to display in a user interface.

So I started to ask people around. Do you use the groups tree?. “YES” was the first reply. I was surprised. Were my initial guesses wrong?. “I use it to select the zzzAll group, which is the only way to select all packages”. Interesting point, any effort to change this should take that into account.

Luckily all the answers were the same. The famous “zzzAll” group was the only reason why people used that filter.

So when looking for a way to make that screen more easy to the eyes, PackageKit groups seemed like the way to go, as they are already in use in some applications.

That is how package groups looked like before:

rpm groups before

After matching the rpm groups to PackageKit groups, this is the result. Easy.

rpm groups after

Notice that “All packages” is still there. Also there is a recommended and suggested groups. The interesting thing is, that if you look at other applications, like Gnome PackageKit install, which is a braindead application (no features) compared to YaST, but still, now they look pretty consistent with each other:

packagekit search

Before you cry for your old 4 level deep tree, you can still reach the groups via search. Search will look into the groups field and also the generated keywords in the metadata (tags).

Package search

Now uses the sat solver APIs to query the solv files, which is much faster and we have transparent access to more attributes.

April 12, 2008

openSUSE 11.0 beta

openSUSE 11.0 beta is coming. This means that all the pieces of the update stack have to be in place by then.

While reading Review: Hat Trick For Fedora 9 Beta, it caught my attention that the author says “Fedora continues to wear the innovation hat” because some of the changes described there. I did not see any killer feature openSUSE 11.0 does not have too, and a few ones are worth to highlight:

  • KDE 4 integration: No distro will ever beat openSUSE here ;-) you know that. openSUSE is a multi desktop distribution and both the Gnome and the KDE team are unbeatable. Period. (I am objective today ;-) )
  • The installation experience and look essentially remained the same from Fedora 8: Sorry guys, but YaST installer looks far cooler than in our last release. The experience is also much different.
  • except there is now support for resizing ext2, ext3, and NTFS partitions from the installer: zzzzzzz. YaST resizes partitions before Linux was invented.
  • The installer also checks for password strength for the root account: YaST in the 80’s ?
  • The new package management solution, PackageKit, is another interesting feature: openSUSE 11.0 will have native PackageKit support (the backend is upstream) and it works really well. The yum backend has no good reputation. The ZYpp backend in 11.0 inherits all the unbeatable speed of ZYpp 4.x and it is robust at the same time.

Sorry guys, the innovation hat is green. Ok, enough with articles. Lets back to 11.0 beta.

We talked about package management speed, we talked about new looks and features already. However our work around patches and patterns was still missing.

During the last weeks, we have been working on this and now all the pieces start to fall together. Click on any image to see it in full size. Also note that ugly scrollbar in the disk usage is was also fixed already.

You may remember the pattern selector:

Old Pattern Selector

New pattern selector:

New Pattern Selector

If you go to the repository view, it was a little boring. openSUSE has the Build Service, which has generated a big community of repositories. Visually, we want to make a difference to the eye if a repo is a normal repository, or the home project of a friend, or a well known repository, or may be a update repository. Result?

New repo view

The old patch view was confusing. The category column never had space for itself.

Old patch selector

So we introduced categories just like in the patterns view.

Old patch selector

There are still some details. In that view the reboot patch should not be shown in the default filter, because I don’t have the package the patch fixes installed. For some reason isRelevant() is not working there. Same with the security patch. It shows correctly the fact that the patch is satisfied, but therefore it should be hidden.

In a next post I will write a bit about how patterns, products and patches are handled now, plus other features.

April 1, 2008

Package management reloaded II

Package management is the most used task by our users according to the YaST survey.

Not happy with the super speed and making other similar tools eat dust, our hackers continue to check in cool stuff:

Katarina showed the new face of our text-mode package selector:

new ncurses

Ladislav checked in a cool change. If you look at the package selector main screen. You will notice there is an option in the menu to go to the repository configuration.

main screen

Clicking there brings you to the repository editor without needing to switch modules:

repo editor

And now from there, you can go to edit which keys you trust for repositories:

gpg editor