YaST/Development/Minimizing YaST Cross-Dependencies

From openSUSE

Contents

About

There are/were several cross-dependencies in YaST RPMs in openSUSE 10.3. These cross-dependencies make almost impossible to create install minimal system with dependencies fully-satisfied.

I've started a discussion about this theme at yast-devel mailing-list.

Goals

  • Less cross-dependencies
  • No build-cycles

Achievements

Well, it's still not complete but there are several achievements done.

Used Tools

  • For checking the dependencies, I often used my check_deps script.
  • For generating the dependency data-files I used gen_logic_deps script.
  • For generating only limited segments of dependency-graphs I used gen_logic_deps_nodes script.

Big Picture

Here you can see a big picture displaying all YaST RPMs that some other YaST RPM depens on. The base package yast2.rpm is not visible because every other single YaST package depends on it.

An arrow-representation means:

  this-package -> is required by this-one

openSUSE 10.3

openSUSE 11.0


YaST Runlevel

openSUSE 10.3

  • yast2-runlevel required:
    • yast2-update required:
      • yast2-storage...
      • yast2-country...
      • yast2-packager...

Image:YaST-openSUSE_10.3-runlevel-deps.png

openSUSE 11.0

  • yast2-runlevel doesn't require any additional YaST module

Image:YaST-openSUSE_11.0-runlevel-deps.png


YaST Update

openSUSE 10.3

Here you can see two dependency-loops:

  • yast2-update <-> yast2-packager
  • yast2-update <-> yast2-storage

The dependency loop actually means that by importing:

  • yast2-packager
    • yast2-update was required as well
      • all RPM dependencies of yast2-update were required as well

by importing:

  • yast2-storage
    • yast2-update was required as well
      • all RPM dependencies of yast2-update were required as well

Image:YaST-openSUSE_10.3-update-deps.png

openSUSE 11.0

Those dependency loops were removed.

Additionally, these YaST modules don't require yast2-update anymore:

  • yast2-bootloader
  • yast2-runlevel

Image:YaST-openSUSE_11.0-update-deps.png


YaST Mouse

openSUSE 10.3

  • autoyast2-installation required
    • yast2-mouse
    • and many other YaST modules...
  • yast2-mouse required
    • autoyast2-installation

So, if any other YaST module had required yast2-mouse, dependency solver would have added all RPM dependencies of autoyast2-installation (which there were many).

Package yast2-mouse is required by yast2-installation and yast2-packager which is needed by many (14) other packages.

Image:YaST-openSUSE_10.3-mouse-deps.png

openSUSE 11.0

  • yast2-mouse doesn't require autoyast2-installation anymore
    • By requiring yast2-mouse no other YaST package is needed

Image:YaST-openSUSE_11.0-mouse-deps.png


YaST Storage

openSUSE 10.3

  • yast2-storage required autoyast2-installation
  • autoyast2-installation required yast2-storage
  • yast2-storage was required by several other modules (that are required by many other YaST modules)

By requiring either yast2-storage or autoyast2-installation, all RPM dependencies of the other one would have been required too.

Image:YaST-openSUSE_10.3-storage-deps.png

openSUSE 11.0

  • the dependency of yast2-storage on autoyast2-installation has been broken

Image:YaST-openSUSE_11.0-storage-deps.png


and more :)