Most probably haven't noticed yet but I finished the Mono 2.10.1 debian packaging effort of the past 3 months and uploaded it to Debian/Experimental.

With Mono 2.10 I had to make the biggest changes in Mono packaging since the big Mono 2.0 upload. The runtime no longer supports the 1.0 and 2.0 runtime profile, instead it now supports the 2.0 and 4.0 runtime profile. This meant I had to drop all libmono1.0-cil packages and add libmono4.0-cil packages. This sounds like a lot of s/1.0/4.0/ work but it actually wasn't. Mono 2.10 ships a lot of new libraries over 2.6 and I had again to decide where they should go. "Where should this $library go?" I have been playing this game for the past 7 years maintaining Mono and I finally gave up on it... What, where, when, why? I could give now a 2 hours talk of the issues behind the current packaging approach (keeping the number of library packages low) but instead I will do something else. Please, just take a look at this picture for a second:

Brain Melting Device

If your browser crashed, your eyes hurt or your brain simply melted, I think you have got the idea.

The Big Split

The cure? cli-common-dev! This is a package that contains 2 extremely important debhelper packaging tools for packaging Mono/CLI related packages called dh_makeclilibs and dh_clideps. If you don't know these, they do exact the same thing as dh_makeshlibs and dh_shlibdeps do. dh_makeclilibs generates library dependency tracking information and dh_clideps consumes that information to automatically generate the package dependencies for you. So each library of the 4.0 runtime profile has now it's own package, simple as that, the rest does cli-common-dev for me and you.

"Hey, that Mono packaging bastard is polluting the Debian archive because of his laziness!" No, I am not. This packaging change not only has the advantage of simplifying the packaging and with that bringing new Mono versions faster to you but also reduces the typical install size for applications as they will only pull in the really used libraries of Mono instead of groups of them. I don't have any numbers handy right now as none of the applications are built against Mono 2.10 (yet), but when the transition starts we will get numbers.

New Features

There is also a new SGen flavor of Mono available called mono-runtime-sgen which is no longer using the conservative non-generational Boehm's garbage collector but SGen which is a simple generational garbage collector with promising advantages.

And here some more Mono 2.8/2.10 news from /usr/share/doc/mono-runtime/NEWS.Debian.gz:

  • SGen Precise Stack Scanning
  • Enhanced SIMD with new methods for Vector data type conversions and swapping elements in vectors
  • ASP.NET MVC 3.0 (not included, only supported)
  • The C# Interactive Shell can now be used as shebang: #!/usr/bin/csharp
  • .NET 4.0 runtime
  • C# 4.0 compiler
  • ASP.NET 4.0
  • Managed Extensibility Framework (MEF)
  • System.Data.Services.Client (OData)
  • glib was replaced with eglib
  • Removed .NET 1.1 runtime

Architecture Regressions

With the initial upload of Mono 2.10.1 to Debian/Experimental the architecture world broke apart and it regressed on all Mono architectures except for i386 and amd64 :-D There is a reason it's called experimental isn't there?

In mono 2.10.1-3 I could solve all regressions except for kfreebsd-* and armel. Jo Shields fixed the remaining regressions and the world started to look good again in mono 2.10.1-4! He also took care of mono-basic, mod-mono and xsp, but mod-mono and xsp are still waiting for the translation call deadline to pass by so they can also be uploaded to Debian/Experimental.

Planned Transition

As mentioned above, there will be a Mono 2.10 transition needed when the packages hit Debian/Unstable. There is no ETA yet on this when it will happen as I have to coordinate this with debian-release first. But as things are not showtime ready in experimental anyhow, this will not happen too soonish. The Mono 2.10 transition plan will be covered in a following post.

GIVMENOWPLX

OMG, all this rumbling about Mono 2.10 and I still haven't said a word on how to obtain it, sorry about this, just do this and I will shut up now:

echo "deb http://ftp.debian.org/debian experimental main" >> /etc/apt/sources.list
apt-get update
apt-get install -t experimental mono-complete
apt-get install libmono-addins0.2-cil libmono-addins-gui0.2-cil

(this is the easiest way of getting only mono 2.10.1 from experimental)

Update: mono-addins 0.4 breaks with mono 2.10.1 so you need to make sure you have the 0.6 version from Debian/Unstable installed!

If you run the .dot graph through "tred" before rendering, the result does not look as crazy any more. Anyways, you are not the only group suffering from such graphs: http://pkg-haskell.alioth.debian.org/haskell-pkg-graph.pdf
Comment by nomeata Fri Apr 15 11:50:40 2011
I simply wasn't aware there is such tool! I will give a try and post the new image then. Thanks for the pointer.
Comment by meebey Fri Apr 15 15:46:35 2011

If your browser crashed, your eyes hurt or your brain simply melted, I think you have got the idea.

My X crashed when loading the picture (yeas, for real).

Comment by Anonymous Fri Apr 15 21:15:17 2011

@meebey, I tried the instruction on my Ubuntu 11.04 box but I hit by this warning W: GPG error: http://ftp.debian.org experimental InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY AED4B06F473041FA how can I pass this warning?

Comment by csokun Sun May 22 03:18:27 2011
@csokun that message goes away if you install the debian-archive-keyring package which includes the key that your APT is whining about
Comment by meebey Sun May 29 13:49:56 2011
If I try to install mono-complete or mod-mono from the experimental repo I just get a Broken packages error (installing mono-runtime however works)
Comment by t-master Tue May 31 13:35:37 2011
Thanks for your effort in packaging Mono 2.10 for Debian! This will come in handy :)
Comment by Daniel15 Mon Jun 6 12:58:22 2011

Are you planning to add fsharp packages to the repository? Today I've found that fsharp .deb package downloadable from here conficts in vesion with mscorlib.dll. So I've recompiled F# and it works! :-)

The big problem is to compile F# PowerPack for mono, but it is an another story...

Comment by Kakadu Fri Sep 23 19:50:00 2011
Thanks for your work, it is appreciated!
Comment by Crispy Sat Oct 15 07:53:07 2011

I tried this on clean squeeze x64 but got broken packages error below.

How to install ?

apt-get install –reinstall mono-complete monodevelop mono-devel -t experimental Reading package lists… Done Building dependency tree Reading state information… Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation:

The following packages have unmet dependencies: mono-complete : Depends: mono-1.0-devel (= 2.6.7-5) but it is not going to be i nstalled Depends: mono-2.0-devel (= 2.6.7-5) but it is not going to be i nstalled Depends: monodoc-base (= 2.6.7-5) but it is not going to be ins talled Depends: libmono-cil-dev (= 2.6.7-5) but it is not going to be installed mono-devel : Depends: libmono-system-data-linq2.0-cil (>= 1.0) but it is not go ing to be installed Depends: libmono-system-runtime1.0-cil (>= 1.0) but it is not goin g to be installed Depends: libmono-system-web1.0-cil (>= 1.0) but it is not going to be installed Depends: libmono-system-web2.0-cil (>= 1.9.1) but it is not going to be installed Depends: libmono-wcf3.0-cil (>= 2.6.3) but it is not going to be i nstalled Depends: libmono2.0-cil (>= 2.6.3) but it is not going to be insta lled Depends: mono-2.0-devel (= 2.6.7-5) but it is not going to be inst alled Depends: libmono-cil-dev (= 2.6.7-5) but it is not going to be ins talled monodevelop : Depends: libcairo2 (>= 1.8.0-2) but it is not going to be install ed Depends: libglade2.0-cil (>= 2.12.10) but it is not going to be i nstalled Depends: libgnome-vfs2.0-cil (>= 2.24.0) but it is not going to b e installed Depends: libgnome2.24-cil (>= 2.24.0) but it is not going to be i nstalled Depends: libgtk2.0-0 (>= 2.20.0) but it is not going to be instal led Depends: libgtk2.0-cil (>= 2.12.10) but it is not going to be ins talled Depends: libgtkspell0 but it is not going to be installed Depends: libmetacity-private0 (>= 1:2.26.0) but it is not going t o be installed Depends: libmono-addins-gui0.2-cil (>= 0.4) but it is not going t o be installed Depends: libmono-cairo2.0-cil (>= 2.4) but it is not going to be installed Depends: libmono-system-runtime2.0-cil (>= 2.4) but it is not goi ng to be installed Depends: libmono-system-web2.0-cil (>= 1.9.1) but it is not going to be installed Depends: libmono-wcf3.0-cil (>= 2.6.3) but it is not going to be installed Depends: libmono-winforms2.0-cil (>= 2.4) but it is not going to be installed Depends: libpango1.0-0 (>= 1.25.5) but it is not going to be inst alled Depends: monodoc-base (>= 1.0) but it is not going to be installe d Depends: gnome-icon-theme (>= 1.1.3) but it is not going to be in stalled Depends: xterm but it is not going to be installed or x-terminal-emulator Recommends: libgtk2.0-cil-dev but it is not going to be installed Recommends: libglade2.0-cil-dev but it is not going to be install ed E: Broken packages

/etc/apt/sources.list :

deb http://ftp.de.debian.org/debian squeeze main contrib non-free deb http://ftp.de.debian.org/debian-security squeeze/updates main contrib non-free

deb http://backports.debian.org/debian-backports squeeze-backports main deb http://ftp.debian.org/debian experimental main

output from apt-get update:

Hit http://ftp.de.debian.org squeeze Release.gpg Ign http://ftp.de.debian.org/debian/ squeeze/contrib Translation-en Ign http://ftp.de.debian.org/debian/ squeeze/contrib Translation-et Ign http://ftp.de.debian.org/debian/ squeeze/main Translation-en Ign http://ftp.de.debian.org/debian/ squeeze/main Translation-et Ign http://ftp.de.debian.org/debian/ squeeze/non-free Translation-en Ign http://ftp.de.debian.org/debian/ squeeze/non-free Translation-et Hit http://ftp.de.debian.org squeeze/updates Release.gpg Ign http://ftp.de.debian.org/debian-security/ squeeze/updates/contrib Translation-en Ign http://ftp.de.debian.org/debian-security/ squeeze/updates/contrib Translation-et Ign http://ftp.de.debian.org/debian-security/ squeeze/updates/main Translation-en Ign http://ftp.de.debian.org/debian-security/ squeeze/updates/main Translation-et Ign http://ftp.de.debian.org/debian-security/ squeeze/updates/non-free Translation-en Ign http://ftp.de.debian.org/debian-security/ squeeze/updates/non-free Translation-et Hit http://ftp.de.debian.org squeeze Release Hit http://ftp.de.debian.org squeeze/updates Release Hit http://ftp.debian.org experimental Release.gpg Hit http://ftp.debian.org/debian/ experimental/main Translation-en Ign http://ftp.debian.org/debian/ experimental/main Translation-et Hit http://ftp.de.debian.org squeeze/main amd64 Packages Hit http://ftp.de.debian.org squeeze/contrib amd64 Packages Hit http://ftp.de.debian.org squeeze/non-free amd64 Packages Hit http://ftp.debian.org experimental Release Hit http://ftp.debian.org experimental/main amd64 Packages/DiffIndex Hit http://ftp.de.debian.org squeeze/updates/main amd64 Packages Hit http://ftp.de.debian.org squeeze/updates/contrib amd64 Packages Hit http://ftp.de.debian.org squeeze/updates/non-free amd64 Packages Reading package lists… Done

Comment by Andrus Wed Feb 15 19:57:40 2012

Can I use MonoDevelop after I install this? I get the error 'Error: Dependency is not satisfiable: mono-runtime (>= 2.10.1)' when I run it, after I installed your package. I would assume your package installs .NET 2.x and above runtimes. I am a NEWBIE to linux an mono fyi. How can I get what version of .NET I have in installed?

thx Ralph

Comment by Ralph Krausse Wed Mar 21 17:07:05 2012