Monday, July 30, 2012

My hackweek8 project: dracut

Now that SUSE Hackweek 8 is over, here is recap of my own project and how it went:

I've worked on dracut (a mkinitrd replacement), to see if it works nicely on openSUSE (with the hope to replace the three different initrd we have in openSUSE, main one created by mkinitrd, the one used by YaST installer and a third one in kiwi).

Fortunately, I was not alone working on dracut for openSUSE. Thomas Renniger had started packaging dracut for openSUSE and I was able to reuse his work and improve it. Moreover, Mike Gorse uses his hackweek to also improve dracut (adding support for CIFS for instance).

  • Day 1:
    • modified my own grub2 configuration to add a additional dracut menu entry (hard coded atm)
    • succesfully booted a 12.2 VM with dracut image !
  • Day 2:
    • discussed with upstream if they would accept "compatibility" patches to team dracut about openSUSE / SLE own initrd command line and got no as an answer, because they don't want to maintain compability cruft on their own side.
    • worked on a separate module which is able to convert at boot time SUSE initrd commands into dracut one (when they are available). Works fine for "shell=1" "linuxrc=trace" and "sysrq". Upstream proposed to review the module for mistake when we are done with it
    • asked upstream if they were interested in "sysrq" feature for dracut. No response yet
    • worked on separate journal (reiserfs / XFS). Need to create VM to test it and ask upstream if they want to integrate it
  • Day 3:
    • got trenn cflags patch merged upstream
    • continue digging into dracut internals
    • journaldev is working on boot command line (tested with XFS)
    • need improvement to configure initrd with system fstab value, when available and try to use a more generic term (root.journaldev)
  • Day 4:
    • subscribed to initramfs mailing list
    • got my first patch merged upstream (journaldev support)
    • added cmdline support for mduuid and isci (TargetAddress / TargetPort / TargetName), untested (don't have the right setup)
    • ran test suite, found some issues: some in dracut upstream (fixed immediatly by upstream), some in our package (fixed mdadm and device-mapper to not call blkid binary but use udev builtin-blkid, will be faster and we save some fork ;)
  • Day 5:
    • sr mdadm and device-mapper fixes
    • tried to get all test suite to pass
      • some fixes were made to dracut, with more test passing
      • still getting issue with network based test (NFS, iSCSI, etc..). Partially working (DHCP server is working now in test suite), partially not (impossible to mount stuff in server test image, getting "EUID=1000" for root, even when booting the image with init=/bin/sh .. No clue to fix that and upstream never got this issue either, if you have an idea, I'm all ears..)

In short, this hackweek worked well for me, even if I didn't finished all I wanted to do. I'll make sure everything is pushed in Factory soon, so we could try (maybe) to switch openSUSE 12.3 to dracut.


  1. Somehow I thought more distributions used Dracut. Interesting that opensuse is so behind.

  2. Heya,

    I am trying Dracut but I can't find the packages. Did you (re)move them?


  3. Ok, I grabbed dracut from Factory and am trying it on openSUSE 12.2 :D

    1. Sorry, I've just updated the blog post to mention packages are now in openSUSE:Factory.

  4. ... and now I've got Dracut to speed up the boot of my laptop - from 7.2 to 5.2 sec ;-)

    Get this in 12.3, it's awesome!

    /me goes for further digging to speed things up

    1. If you didn't already, I suggest to try to build a "customized" dracut image for your system, using dracut --host-only, it will probably speed-up things even more.