At the end of that previous page Avoid systemd on Debian Jessie with Mate, I noticed that eliminating systemd won't be fully accomplished without also using an alternative to udev.

I will show here that it is possible to use eudev to reach that goal. eudev has been packaged for the latest Devuan distribution, see that announcement. So it should be easy to port that for straight Debian.

Modification to eudev source code

I started with source code version 3.2.5-1 from the latest Devuan. The goal is to obtain a smooth upgrade from the udev and libudev packages in Jessie (as it is what I am using). To ensure that, the new packages will provide the old names.

My modifications were aimed at reducing the number of dependencies of the packages and to correct the Devuanisms present in the installation/removal scripts.

For your convenience, all of the source files and the .deb packages (for i386) are here:

eudev 3.2.5-1bu1.dsc

eudev 3.2.5.orig.tar.gz

eudev 3.2.5-1bu1.debian.tar.xz

eudev 3.2.5-1bu1 i386.changes

libeudev1 3.2.5-1bu1 i386.deb

eudev 3.2.5-1bu1 i386.deb

Building the eudev packages

If you have installed the needed development packages, it's easy to rebuild files "libeudev1_3.2.5-1bu1_i386.deb" and "eudev_3.2.5-1bu1_i386.deb" with these simple commands:

# the 3 source files have to be downloaded in your current working directory
dpkg-source -x eudev_3.2.5-1bu1.dsc
cd eudev-3.2.5
dpkg-buildpackage -rfakeroot
cd ..

Notice that .udev packages and a development package of libeudev1 are also generated in the process.

Replacing udev by eudev

To install the two packages, you will need some local package repository. An easy method to do it is to run:

mkdir -p ~/my-repo/dists/jessie/main/binary-i386
mv libeudev1_3.2.5-1bu1_i386.deb eudev_3.2.5-1bu1_i386.deb ~/my-repo/
dpkg-scanpackages ~/my-repo /dev/null | gzip > ~/my-repo/dists/jessie/main/binary-i386/Packages.gz

Notice that "dpkg-scanpackages" is available through package dpkg-dev.

Then add line (if you are user "joe"):

deb file:/home/joe/my-repo/ jessie main 

to /etc/apt/sources.list and update the available packages in aptitude to take the content of your local repository into account.

You can then try to upgrade to the new eudev and libeudev with aptitude. You will get a conflict. Choose to solve it by suppressing udev and libudev, proceed with the upgrade and you are done! There will be some warnings during the installation because we are playing hard with the package versioning system, but they are harmless.

Final remarks

It should be obvious, but the process above is intended for a Jessie installation without systemd as the init process, as the one described here. Actually it has only be tested in that framework.

The only issue encountered was about firmare loading. The Jessie kernel 3.16 handles radeon uvd in a way which makes me loose resume/suspend. So I suppressed the needed firmware file. This triggers a futile attempt (because the file is not there) at user-space firmware loading. But with eudev, which lacks user-space firmware loading, this leads to a 60s delay in the boot process.

I will not add user-space firmware loading to eudev, as it is considered obsolete by the kernel people. Instead, you can either:

  1. Reduce the 60s delay by inserting for instance before the 'udevadm settle' command in /etc/init.d/eudev: echo 5 > /lib/class/firmware/timeout

  2. Upgrade to a better radeon driver, for instance the one of kernel 4.9 from jessie-backport

I have finally chosen solution 2).