Around three years ago, I created +the isenkram +system to get a more practical solution in Debian for handing +hardware related packages. A GUI system in the isenkram package will +present a pop-up dialog when some hardware dongle supported by +relevant packages in Debian is inserted into the machine. The same +lookup mechanism to detect packages is available as command line +tools in the isenkram-cli package. In addition to mapping hardware, +it will also map kernel firmware files to packages and make it easy to +install needed firmware packages automatically. The key for this +system to work is a good way to map hardware to packages, in other +words, allow packages to announce what hardware they will work +with.
+ +I started by providing data files in the isenkram source, and +adding code to download the latest version of these data files at run +time, to ensure every user had the most up to date mapping available. +I also added support for storing the mapping in the Packages file in +the apt repositories, but did not push this approach because while I +was trying to figure out how to best store hardware/package mappings, +the +appstream system was announced. I got in touch and suggested to +add the hardware mapping into that data set to be able to use +appstream as a data source, and this was accepted at least for the +Debian version of appstream.
+ +A few days ago using appstream in Debian for this became possible, +and today I uploaded a new version 0.20 of isenkram adding support for +appstream as a data source for mapping hardware to packages. The only +package so far using appstream to announce its hardware support is my +pymissile package. I got help from Matthias Klumpp with figuring out +how do add the required +metadata +in pymissile. I added a file debian/pymissile.metainfo.xml with +this content:
+ ++ ++<?xml version="1.0" encoding="UTF-8"?> +<component> + <id>pymissile</id> + <metadata_license>MIT</metadata_license> + <name>pymissile</name> + <summary>Control original Striker USB Missile Launcher</summary> + <description> + <p> + Pymissile provides a curses interface to control an original + Marks and Spencer / Striker USB Missile Launcher, as well as a + motion control script to allow a webcamera to control the + launcher. + </p> + </description> + <provides> + <modalias>usb:v1130p0202d*</modalias> + </provides> +</component> +
The key for isenkram is the component/provides/modalias value, +which is a glob style match rule for hardware specific strings +(modalias strings) provided by the Linux kernel. In this case, it +will map to all USB devices with vendor code 1130 and product code +0202.
+ +Note, it is important that the license of all the metadata files +are compatible to have permissions to aggregate them into archive wide +appstream files. Matthias suggested to use MIT or BSD licenses for +these files. A challenge is figuring out a good id for the data, as +it is supposed to be globally unique and shared across distributions +(in other words, best to coordinate with upstream what to use). But +it can be changed later or, so we went with the package name as +upstream for this project is dormant.
+ +To get the metadata file installed in the correct location for the +mirror update scripts to pick it up and include its content the +appstream data source, the file must be installed in the binary +package under /usr/share/appdata/. I did this by adding the following +line to debian/pymissile.install:
+ ++ ++debian/pymissile.metainfo.xml usr/share/appdata +
With that in place, the command line tool isenkram-lookup will list +all packages useful on the current computer automatically, and the GUI +pop-up handler will propose to install the package not already +installed if a hardware dongle is inserted into the machine in +question.
+ +Details of the modalias field in appstream is available from the +DEP-11 proposal.
+ +To locate the modalias values of all hardware present in a machine, +try running this command on the command line:
+ ++ ++cat $(find /sys/devices/|grep modalias) +
To learn more about the isenkram system, please check out +my +blog posts tagged isenkram.
+