Hurd Debian-Installer
My proposal to work on porting d-i on Hurd as a Google Summer of Code student has been accepted by the Debian project.
I will be keeping track of my progress on this page.
Links
Roadmap
mach: initrd support
 preliminary patch posted and self-built (2010-06-12)- adjustments will be needed (postponed)
 - consider the alternatives discussed on bug-hurd (postponed)
 
glibc: fix
mkdir("/")which returnedEINVAL
 eglibc 2.11.2-1 includes a quick fix by youpi (2010-06-15)
 more complete patch posted to bug-hurd,
since other calls return incorrect errors under some circumstances
(2010-06-16)- more work on it will be needed to make it fix the whole thing (postponed)
 
 partman (2010-06-23)
 add hurd-i386 to
partman-partitioning/lib/disk-label.sh(2010-06-16, commited by youpi on 2010-06-23)
 short-circuit
partman-basicfilesystems/init.d/kernelmodules_basicfilesystems(2010-06-16)
 partman-auto recipes:
make the default filesystem os-dependent
when it has not been preseeded (ie. the seen flag is clear)
 force 4k blocks and 128 bytes inodes
 submit patches to bugs.debian.org
(Debian bug #586870 and Debian bug #586871)
 rebuild with responsible version numbers and upload to my repository
 libparted (2010-06-23)
 fix device paths (Debian bug #586696)
 fix crash on exit for part:* stores (Debian bug #586682)
hurd-udeb (2010-06-23)
 rebuild with the hack suggested by youpi for qemu network configuration
 fix mount to accept -o defaults- cleanup, ask youpi to commit
 
reloading the partition table (2010-06-25)
- User-space part stores
 hurd-udeb now uses part:N:device:Xfor partition devices (2010-06-23)
 it also provides /lib/partman/commit.d/??hurd_reloadpart,
which basically does settrans -ag /dev/[hs]d*. (2010-06-24)
 - Kernel-based partition devices
 Mach's drivers from Linux support reloading partitions.
With help from youpi this has been made available through a
device_set_status() call.
 make libparted use it- Reminder: I should file a bug against libparted with the patch sometime.
 
 
- User-space part stores
 
 The /servers/execissue (2010-06-26)- Due to /servers being inexistant, the bootstrap ext2fs could not register the initial exec server, meaning that non-bootstrap filesystems used a different one (started from the passive translator), which for some reason died on shell scripts, making them stall.
 - Adding the 
/serversdirectory to hurd-udeb fixed it, as well as the /hurd/proc issue (failed to be run by init the first time around). - Reminder: report the non-bootstrap exec servers failure on scripts.
 
 base-installer: (2010-06-26)- Work around non-existant /proc/mounts.
- A mtab translator now exists; can use that for
proc/mounts? 
 - A mtab translator now exists; can use that for
 - Firmlink /servers into /target after debootstrap to make the network available.
 
- Work around non-existant /proc/mounts.
 
 grub-installer
 add hurd support (2010-06-27)
 grub-legacy still needs to be tested- submit changes as a Debian bug
 
Milestone (2010-06-28): installer kindof works, with documented manual intervention required
 Sort out the situation with dev node creation (2010-07-07):- Devices and servers used to be set up by debootstrap; the hurd package would add some missing nodes.
 - New strategy implemented in hurd and debootstrap:
- debootstrap uses active firmlinks into the host system for the target system's /dev and /servers.
 - the hurd package now include a 
setup-translatorsscript, which is used to register the passive translators by the installer's/libexec/runsystemand hurd's postinst script. 
 
busybox: submit upstream and to Debian bug #323670 (waiting for upstream to review)
 I have mentioned my work on the upstream mailing list,
 merge the recent changes from upstream,
notably to the build system.
(2010-06-23)
 ask upstream for review and merge
(2010-06-25)
 sent as patches as requested
(2010-07-08)
 backport any additional changes onto the debian branch
 hijack Debian bug #323670 and submit my patches
aptitude:
- Currently broken on hurd-i386: gtest fails to build because of a segfault in one of the test cases, google-mock and hence aptitude are missing it as a build-dep. The older package is not installable anymore because it's linked against an older version of libept, which has been removed.
 
 I bypassed the tests and uploaded the 3 packages to my repository
(2010-07-08)- The segfault will have to be sorted out. (postponed)
 
 "Fix" the swap situation. (2010-07-08)- The device_close() libstore patch had the unfortunate effect of making swapon fail, since the device it activates has to be kept open.
 - add options for MAKEDEV and setup-devices to use the libparted stores
 - disable youpi's patch
 - make partman-basicfilesystems re-create the device as a kernel partition, which is needed for swapon
 
 netcfg-static: port to hurd (2010-07-09)- There was some amount of hurd support already (namely, activating the interface by replacing the socket translator)
 - However, this code started an active translator with di_exec_shell_log("settrans -a ...), which stalled as a consequence of it capturing libdi's pipe as its standard output.
 - Network devices must be probed by trying to open Mach devices with predetermined names (currently eth%d, wl%d), because getifaddrs() does not seem to work on Hurd.
 
 netcfg, and configuring the installed system, postponed.
procps 3.2.7-11 (current hurd-i386 version) has Debian bug #546888
 Submit Debian bug #588677 and upload the result to my repository.
(2010-07-11)
 Set up a Debian mirror with modified packages for installation- the mirror is now up and running (2010-07-06)
 - hacked the image build script to include its public key in debian-archive-keyring at image build time (2010-07-08)
 - Apparently debootstrap does not handle multiple versions very well. Fix by using dpkg-scan{package,sources} rather than apt-ftparchive to create index files. (2010-07-10)
 - Use the override files from ftp.debian.org, to avoid debootstrap grabbing inappropriate packages.
 - Changed them to make ifupdown, dhcp3-client and dhcp3-client priority extra, because they're uninstallable at the moment. (2010-07-12)
 
 Put together a "jk-archive-keyring" package,
so that the mirror is authenticated in the target system as well.
(2010-07-12)
 Fix grub for user-space partitions (2010-07-16)- grub-probe detects the whole device rather than the partition as the device behind /boot/grub. Consequently, grub-install fails.
 One approach would be to replace /dev/hd* by kernel devices for file systems as well as for swap partitions.
 this makes the installer crash,
possibly due to cache coherency issue between hdX and hdXsY.
 GRUB2 kern/emu/getroot.c
patched
to support part stores.
 Fix finish-install to skip finish-install.d/90consoleon Hurd (2010-07-17)
 Avoid starting unnecessary /dev translators in a burst (2010-07-20)- Use debootstrap use the extracted /usr/lib/hurd/setup-translators to create device and server nodes in /target, then firmlink the whole /target/dev and /target/servers to the outer system.
 - Make hurd.postinst not touch them on initial install.
 
 Fix mach-defpager for file and part stores on larger devices- Use DEVICE_GET_RECORDS instead of DEVICE_GET_SIZE, which overflows an int (2010-07-22)
 
Milestone (2010-07-22): installer works but it's still somewhat ugly and broken
 Ship the UTF-8 font for the hurd console
(2010-07-22)- Upload a version of bogl with youpi's patch for Hurd. (see Debian bug #589987)
 - Fix the hurd console for fonts with 16 pixels wide glyphs (ie. handle the 8-wide glyph in there correclty)
 - Support double-width glyphs (2010-07-24)
 
 However the reduced font can't be loaded yet,
so make installer/build/Makefile
ship the whole /usr/src/unifont.bgfas/usr/share/hurd/vga-system.bgf.
 Make the installer used the extended capabilities of the Hurd console
(2010-07-23)- Set an UTF-8 locale in 
/lib/debian-installer.d/S41term-hurd. - localechooser: set the language display level to 3 when using the hurd console.
 
- Set an UTF-8 locale in 
 
 busybox: cross-platform package uploaded to experimental
(2010-08-03?)- Aurelien Jarno updated the packaging to busybox 1.17.1, fixed a whole lot of bugs, and uploaded a new package with both our changes;
 - most patches adopted upstream, and included in the new package;
 - (u)mount/swaponoff ported to kFreeBSD;
 - per-OS configuration overrides.
 
 Update custom packages to the latest versions
and send updated patches to the BTS
(2010-08-11)- updated partman-base to choose a default filesystem in debian/rules rather than at runtime, as suggested by Aurelien Jarno in Debian bug #586870
 - patch submitted for debian-installer-utils (Debian bug #592684).
 - patch submitted for locale-chooser (Debian bug #592690).
 - debootstrap, grub-installer and finish-install not yet submitted, since the details may still change.
 
 partman-target: fix fstab creation
(2010-08-11)- See Debian bug #592671
 - debian/rules: set 
partman/mount_styletotraditionalon Hurd. - finish.d/create_fstab_header: add a Hurd case.
 
 rootskel: FTBFS on Hurd and other quirks
(to be fixed very soon)d-i/installer/build: (expected soon)
- publish the patch I use
 - sort out the changes suitable for inclusion and ask youpi and/or debian-boot@l.d.o to commit them
 
call for testing and fix the bugs
Bug in setup-translators/MAKEDEV: permissions are broken for nodes re-created through
MAKEDEV -k, because MAKEDEV's chmod/chown reaches the pre-existing translator- Maybe settrans could be made to accept -o/--owner and -p/--perm, to set the permissions for the underlying node?
 
 Silence the "no kernel" warning somehow.Investigate the wget/libc/pfinet/whatever bug which corrupts Packages.gz, see the IRC log for 2010-07-23, around 1am UTC+0200
Try to resolve problems with udebs which are uninstallable on hurd-i386, such as installation-locale and partman-whatever.
Provide
/proc/cmdline -> 2/cmdline, or something.Prepare a NMU for genext2fs (which is orphaned), and ask youpi to sponsor the upload.
busybox: port
- fix stty/stat/ipcs on kFreeBSD,
 - generally port more stuff,
 - ip is needed (maybe) for network configuration,
 - mount, swaponoff can be from hurd-udeb for now, though the kFreeBSD people will need them
 
partman: further adjustments
- partman-base: handle /dev/hd?s* in lib/base.h
 - hide irrelevant mount options? (sync, relatime)
 
Network configuration on the installed system. This includes porting ifupdown and isc-dhcp-client, which are currently uninstallable on hurd-i386.
Also, better DHCP support during and after installation
improve the initrd situation: ajust the ramdisk support in Mach, use tmpfs if possible.
mklibs{,-copy}: test library reduction, make it copy the ld.so -> ld.so.1 symlink.
 hurd console fonts
Milestone (expected 2010-07-19): it works great and it's beautiful
- test, fix, document
 - support more types of installation images
 - give a shot at the graphical installer if time permits
 - integrate wireless drivers with netcfg
 - see how zhengda's work on DDE could be integrated
 - etc..
 
Mostly done
Week 1 (2010-05-24)
- genext2fs: patches submitted, Debian bug #562999 which add support for all block sizes and choosing them at runtime.
 - busybox: started porting the upstream and Debian package to Hurd and FreeBSD
 - rebuilding hurd-udeb from the pkg-hurd version and adding a ld.so link to the initrd fixes the exec translator crashing on startup. (BTW would there be a mean to detect this from the libdiskfs bootstrap code and report it ?)
 
Week 2 (2010-05-31 to 2010-06-06)
- busybox: patches posted.
 - libdebian-installer4: Debian bug #584538
 - started working on mach initrd support
 - the installation images could boot into the main-menu
with the following changes:
- rebuild hurd-udeb from with the latest pkg-hurd patches
 - use busybox from my osports-debian branch (see link above)
 - tweak the d-i image build scripts
 - the symlink /lib/ld.so -> ld.so.1 needs to be created somehow (youpi mentioned it being the job of libc0.3-udeb I think)
 - fix the poll() issue in libdebian-installer (patch to be submitted soon), also there is some hurd doxygen short-circuiting stuff there which does not apply any more and prevents is to build.
 - feed the initrd as a hard drive in qemu (with some more space added to avoid it from becoming full)