From: Petter Reinholdtsen Date: Sun, 20 Dec 2015 11:13:33 +0000 (+0100) Subject: New post. X-Git-Url: https://pere.pagekite.me/gitweb/homepage.git/commitdiff_plain/e912851ba77ee65e11fa7fbf71e33f2fcfcb6130 New post. --- diff --git a/blog/data/2015-12-20-isenkram.txt b/blog/data/2015-12-20-isenkram.txt new file mode 100644 index 0000000000..c0cee331cf --- /dev/null +++ b/blog/data/2015-12-20-isenkram.txt @@ -0,0 +1,105 @@ +Title: Using appstream with isenkram to install hardware related packages in Debian +Tags: english, debian, isenkram +Date: 2015-12-20 12:20 + +

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.