[Haskell-cafe] Ubuntu and ghc

Claus Reinke claus.reinke at talk21.com
Thu May 22 06:34:15 EDT 2008


>> https://bugs.launchpad.net/ubuntu/+source/gtk2hs/+bug/229489 .... this
>> is almost identical to my problem. I am just trying to help others on
>> this list who are using Ubuntu Linux to avoid my predicament!
> 
> I had that problem upgrading too.
> 
> I posted a workaround:
> 
> http://bugs.launchpad.net/ubuntu/+source/gtk2hs/+bug/229489/comments/9

|What's going on:
|--------------------------
|Every Haskell library gets registered with the Haskell compiler ghc. 
|The ghc-pkg program is used to do that. Packages get registered 
|(ghc-pkg register) when they're installed and unregistered (ghc-pkg 
|unregister) when they get uninstalled or upgraded. To be unregistered 
|they have to be registered in the first pace.
|So what's gone wrong is that ghc itself has been upgraded before the 
|other libs (gtk2hs, mtl etc) were unregistered.When ghc gets upgraded 
|it includes an empty package database. So now when it comes time to 
|upgrade the other Haskell libs they are of course no longer registered 
|(because they were registered with the older version of the compiler 
|and not the new one). The uninstall script then fails because ghc-pkg 
|unregister fails, since the package is not registered.

this sounds as if the uninstall simply needs an option deciding
between uninstall-or-fail and achieve-uninstalled-state? but then
again, uninstall should know from which compiler version/package
database to uninstall, and uninstalling ghc should not disappear
things without notifying other (un-)installation tools.

i'll abuse this real-life opportunity to point once again at a serious 
flaw in the "throw-away installations" idea in common use for haskell 
compilers and libraries: there is no support for upgrading or cross-version
consistency!

throw-away installation:
- if you install a library or a compiler version or tool, it puts itself 
    in a separate place, free from interference with other libraries
    or compiler versions
- usual practice then cleans away/forgets about the source for
    the installation, so the installation is not repeatable; it also
    forgets about the other dependencies that were used to 
    build this installation (specific package or compiler versions
    needed to build this library/compiler/tool)
- if you uninstall a library or a compiler version, it just removes
    itself (and even that isn't all that well supported, beyond
    unregistration..)

there are so many ways this can go wrong that it is surprising
that the real-life bugs have taken so long to show up.here are
some examples (many of which have been discussed earlier,
but have always been tracked as low priority/nice to have..):

- if i update my ghc, i want to take all my libraries with me
    (especially since binary incompatibility means that i
    can't just reuse the existing installations..)
- if i uninstall a version of ghc, i want to be reminded of which
    libraries are installed only for this ghc version (the libraries
    i'd lose by uninstalling, as opposed to libraries also installed
    for later ghc versions), and which installed tools were built
    using this ghc version (in case upgrading them still requires
    that old version..)
- if i install a new library, i don't want version conflicts because
    an older, incompatible library version is in use by other packages
- if i uninstall a library, i don't want dangling references to it
    in the package database
- i don't want to have to remove anything explicitly, because 
    that would mean bypassing the haskell installation managers
- i would want to see a single haskell installation manager
    for each system, covering compiler versions as well, not
    to mention collaboration between all cabal/ghc-pkg
    versions currently installed; so that i can ask about all
    the package databases/compiler versions/packages;
    this might also help as a coordination point for upgrades
- i would like to be able to determine, for each installed tool,
    library and compiler, which package and compiler versions
    were involved in building it, by querying that haskell
    installation manager
- ..

it just isn't sufficient not to interfere with existing stuff, it is
important to be aware of relationships with existing stuff, and
to adjust actions and practices accordingly (to guard against
inconsistencies/disappearing dependencies, and to support
upgrades/reproducable installations).

perhaps the existing tickets in this direction could be
given higher priorities, and the various groups and tools
concerned with packaging could coordinate on this?

claus




More information about the Haskell-Cafe mailing list