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:
- Dropping some
DirectFB
start-up scripts. - Dropping a related configuration file.
Adding a start-up script doing trivial things:
Xorg -retro -noreset & export DISPLAY=:0
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.