A picture is worth a thousand words:

A slightly longer story follows, resuming from
the previous episode, where Gtk seemed
to be working.
Making sure
Gtk actually works
Since the
udebs are quite fat already, I decided to put the contents
of the
gtk2.0-examples package into a new revision of the new
libgtk-x11-udeb package.
gtk-demo was running fine (if one forgets
that this demo application is really easier to deal with if one uses a
window manager), although image handling was broken. Julien and I
spent quite some time double-checking that the
libpixbufloader-png.so plugin was present; that both previous
DirectFB-based
udeb and new
x11-based
udeb were very similar;
that configuration was generated properly; we went so far as to include
strace in the netboot image, and to check the configuration file
was
open() d, but the plugin was never to be even looked for. All
this resulting in a
Unrecognized file format message every time.
Josselin, our Messiah, enlightened us: although Gtk was previously
using some configuration files to determine which
pixbufloader
plugin to use, it still continues to access those files but relies on
a MIME database in the end. Installing the host s
/usr/share/mime/mime.cache database did the trick (we have a proper
fix pending), and all of a sudden, we got image support (which is
needed for the
logo_installer.png displayed on top of every screen,
as well as for some icons during the installation, like the final
one).
Tweaking d-i itself
Julien took care of
rootskel-gtk. It was mostly about:
Another easy step was
cdebconf. Mostly:
search and destroy on the
few bits using
DirectFB. An interesting issue we had was that even
though a proper cursor theme was installed and made the default, we
only had a black cross as
X pointer. That s where we learnt it s
needed to manually set a cursor for the root window, which can be done
this way:
GdkCursor *cursor = gdk_cursor_new(GDK_LEFT_PTR);
gdk_window_set_cursor(gdk_get_default_root_window(), cursor);
gdk_cursor_unref(cursor);
Tweaking
gtk2-engines was trivial, just a matter of building against
the
x11 flavour of
Gtk instead of the
directfb one. Some
substitutions in
debian/control and
debian/rules, and that was
done.
Julien also took care of tweaking
console-setup so that
keyboard-configuration s and
console-setup-udeb s postinst scripts
call
setxkbmap when
$DISPLAY is set. Meaning we were able to
replace
kbd-chooser with
console-setup-udeb, leading to a correct
setting within
X right after having selected the layout!
Reverting
d-i s r61645 (which disabled Gtk-based
d-i images) was
trivial (although while looking back, it was probably unnecessary),
and after having messed around with the packages lists (there s a lot
of local
udebs at this point), especially to add some fonts, we
managed to get an image which seems to work fine (at least in my
VirtualBox environment). I tried Chinese, Japanese, Arabic, and French
installations, and all of them seem to work fine (installed systems
were bootable after an installation in the selected language) while
issues were limited to some rendering or translation glitches, which
didn t seem critical at all.
Next steps
Since there were some iterations, and since the
trial-and-error
approach was chosen, the first goal is to generate
clean patches
against all modified packages, and make sure a single walk through all
packages in a clean chroot is sufficient to generate a working
d-i
image again.
Once that done, which should probably considered (at least, I hope!)
quite a good base already, the idea is to look into the various
udebs to see whether there are some parts that could be disabled
(maybe introducing a trimmed-down flavour especially for the
udeb in
some non-flavoured-yet libraries), so as to reduce the size of the
resulting image.
In the meanwhile, one can fetch the current hand-built netboot image
by browsing
http://people.debian.org/~kibi/di-x11/. It s only
available for
amd64, and weights
23MB. There s a
sha256sum as
well as a detached GPG signature in the same directory.