jcnelson / vdev

A device-file manager for *nix
GNU General Public License v3.0
101 stars 13 forks source link

vdev: a device-file manager and filesystem

This system is mothballed. It's usable if you know what you're doing--I've been using it for years on my laptop without issues--but it's not for typical users. Expect to get your hands dirty.

I do not have time to work on it in the foreseeable future, nor do I have time to answer support requests.

Vdev is a portable userspace device-file manager for UNIX-like operating systems. It differs from existing device-file managers in that it provides an optional filesystem interface that implements a per-process view of /dev, thereby giving the host administrator the means to control device node access based on arbitrary criteria (such as process session ID, process seat assignment, etc.).

The Linux port of vdev aims to be a drop-in replacement for udev.

More information is available in the design document.

Project Goals

Project Non-Goals

Dependencies

There are two binaries in vdev: the hotplug daemon vdevd, and the userspace filesystem vdevfs. You can use one without the other. If you only intend to replace udevd, you can ignore vdevfs.

To build vdevd, you'll need:

For vdevfs, you'll need all of the above, plus:

Recommended Packages

Vdevd comes with a set of scripts that provide udev compatibility for the Linux port, and these scripts make use of the following packages. Vdevd's scripts can work without them, but some functionality will be missing:

Vdev's libudev-compat library removes the netlink connection to udev in favor of creating and watching a process- and udev_monitor-specific directory, which vdevd's helper scripts discover and use to send serialized device events by writing them as files. It is highly recommended that users install eventfs and use it to host libudev-compat's event directories. Eventfs is optimized for this use-case--it will ensure that libudev-compat's directories are backed by RAM, easily accessed in FIFO order, and automatically removed once the libudev-compat process that created them exits.

Building

By default, everything installs under /usr/local. To build and install everything with default options, run:

$ make
$ sudo make install

To build and install vdevd (with no configuration) to /usr/local/sbin, type:

$ make -C vdevd OS=$OS_TYPE
$ sudo make -C vdevd install

Substitute $OS_TYPE with:

$OS_TYPE defaults to "LINUX".

To build and install vdevd's default recommended configuration to /usr/local/etc, type:

$ make -C example
$ sudo make -C example install 

To build and install vdevd's hardware database to /usr/local/lib, type:

$ make -C hwdb 
$ sudo make -C hwdb install

To build and install libudev-compat to /usr/local/lib/ and its headers to /usr/local/include, type:

$ make -C libudev-compat 
$ sudo make -C libudev-compat install

To build and install vdevfs to /usr/local/sbin/, type:

$ make -C fs
$ sudo make -C fs install

You can override the installation directories at build-time by setting the PREFIX variable on the command-line (e.g. make -C vdevd PREFIX=/), and you can specify an alternative installation root by setting DESTDIR at install-time (e.g. sudo make -C vdevd install DESTDIR=/opt). You can also control where header files are installed by setting the INCLUDE_PREFIX variable (e.g. make -C libudev-compat install PREFIX=/ INCLUDE_PREFIX=/usr).

Replacing udev on Linux

If you want to replace udev with vdev, it is recommended that you install the binaries to your root partition and the libudev-compat headers to /usr. This is done by setting DESTDIR= PREFIX= INCLUDE_PREFIX=/usr when installing.

If you have an initramfs and rely on udevd during early boot, you will need to rebuild your initramfs so it will start vdevd instead. If you are installing on Debian or Devuan, please first read Appendix B of the how-to-test.md document, since it contains instructions on how to install vdevd's init script and rebuild your initramfs via the Debian/Devuan initramfs tools.

If you are replacing udev and libudev, you should back up their init scripts, header files, and libraries before installing vdev. You may need to revert to them if vdev does not work for you.

FAQ