1 <?xml version=
"1.0" encoding=
"utf-8"?>
2 <rss version='
2.0' xmlns:lj='http://www.livejournal.org/rss/lj/
1.0/'
>
4 <title>Petter Reinholdtsen - Entries tagged isenkram
</title>
5 <description>Entries tagged isenkram
</description>
6 <link>http://people.skolelinux.org/pere/blog/
</link>
10 <title>Appstream just learned how to map hardware to packages too!
</title>
11 <link>http://people.skolelinux.org/pere/blog/Appstream_just_learned_how_to_map_hardware_to_packages_too_.html
</link>
12 <guid isPermaLink=
"true">http://people.skolelinux.org/pere/blog/Appstream_just_learned_how_to_map_hardware_to_packages_too_.html
</guid>
13 <pubDate>Fri,
23 Dec
2016 10:
30:
00 +
0100</pubDate>
14 <description><p
>I received a very nice Christmas present today. As my regular
15 readers probably know, I have been working on the
16 <a href=
"http://packages.qa.debian.org/isenkram
">the Isenkram
17 system
</a
> for many years. The goal of the Isenkram system is to make
18 it easier for users to figure out what to install to get a given piece
19 of hardware to work in Debian, and a key part of this system is a way
20 to map hardware to packages. Isenkram have its own mapping database,
21 and also uses data provided by each package using the AppStream
22 metadata format. And today,
23 <a href=
"https://tracker.debian.org/pkg/appstream
">AppStream
</a
> in
24 Debian learned to look up hardware the same way Isenkram is doing it,
25 ie using fnmatch():
</p
>
28 % appstreamcli what-provides modalias \
29 usb:v1130p0202d0100dc00dsc00dp00ic03isc00ip00in00
30 Identifier: pymissile [generic]
32 Summary: Control original Striker USB Missile Launcher
34 % appstreamcli what-provides modalias usb:v0694p0002d0000
35 Identifier: libnxt [generic]
37 Summary: utility library for talking to the LEGO Mindstorms NXT brick
40 Identifier: t2n [generic]
42 Summary: Simple command-line tool for Lego NXT
45 Identifier: python-nxt [generic]
47 Summary: Python driver/interface/wrapper for the Lego Mindstorms NXT robot
50 Identifier: nbc [generic]
52 Summary: C compiler for LEGO Mindstorms NXT bricks
55 </pre
></p
>
57 <p
>A similar query can be done using the combined AppStream and
58 Isenkram databases using the isenkram-lookup tool:
</p
>
61 % isenkram-lookup usb:v1130p0202d0100dc00dsc00dp00ic03isc00ip00in00
63 % isenkram-lookup usb:v0694p0002d0000
69 </pre
></p
>
71 <p
>If you want to make this system a success and help Debian users
72 make the most of the hardware they have, please
73 help
<a href=
"https://wiki.debian.org/AppStream/Guidelines
">add
74 AppStream metadata for your package following the guidelines
</a
>
75 documented in the wiki. So far only
11 packages provide such
76 information, among the several hundred hardware specific packages in
77 Debian. The Isenkram database on the other hand contain
101 packages,
78 mostly related to USB dongles. Most of the packages with hardware
79 mapping in AppStream are LEGO Mindstorms related, because I have, as
80 part of my involvement in
81 <a href=
"https://wiki.debian.org/LegoDesigners
">the Debian LEGO
82 team
</a
> given priority to making sure LEGO users get proposed the
83 complete set of packages in Debian for that particular hardware. The
84 team also got a nice Christmas present today. The
85 <a href=
"https://tracker.debian.org/pkg/nxt-firmware
">nxt-firmware
86 package
</a
> made it into Debian. With this package in place, it is
87 not possible to use the LEGO Mindstorms NXT unit with only free
88 software, as the nxt-firmware package contain the source and firmware
89 binaries for the NXT brick.
</p
>
91 <p
>As usual, if you use Bitcoin and want to show your support of my
92 activities, please send Bitcoin donations to my address
93 <b
><a href=
"bitcoin:
15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
&label=PetterReinholdtsenBlog
">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a
></b
>.
</p
>
98 <title>Isenkram updated with a lot more hardware-package mappings
</title>
99 <link>http://people.skolelinux.org/pere/blog/Isenkram_updated_with_a_lot_more_hardware_package_mappings.html
</link>
100 <guid isPermaLink=
"true">http://people.skolelinux.org/pere/blog/Isenkram_updated_with_a_lot_more_hardware_package_mappings.html
</guid>
101 <pubDate>Tue,
20 Dec
2016 11:
55:
00 +
0100</pubDate>
102 <description><p
><a href=
"http://packages.qa.debian.org/isenkram
">The Isenkram
103 system
</a
> I wrote two years ago to make it easier in Debian to find
104 and install packages to get your hardware dongles to work, is still
105 going strong. It is a system to look up the hardware present on or
106 connected to the current system, and map the hardware to Debian
107 packages. It can either be done using the tools in isenkram-cli or
108 using the user space daemon in the isenkram package. The latter will
109 notify you, when inserting new hardware, about what packages to
110 install to get the dongle working. It will even provide a button to
111 click on to ask packagekit to install the packages.
</p
>
113 <p
>Here is an command line example from my Thinkpad laptop:
</p
>
132 </pre
></p
>
134 <p
>It can also list the firware package providing firmware requested
135 by the load kernel modules, which in my case is an empty list because
136 I have all the firmware my machine need:
139 % /usr/sbin/isenkram-autoinstall-firmware -l
140 info: did not find any firmware files requested by loaded kernel modules. exiting
142 </pre
></p
>
144 <p
>The last few days I had a look at several of the around
250
145 packages in Debian with udev rules. These seem like good candidates
146 to install when a given hardware dongle is inserted, and I found
147 several that should be proposed by isenkram. I have not had time to
148 check all of them, but am happy to report that now there are
97
149 packages packages mapped to hardware by Isenkram.
11 of these
150 packages provide hardware mapping using AppStream, while the rest are
151 listed in the modaliases file provided in isenkram.
</p
>
153 <p
>These are the packages with hardware mappings at the moment. The
154 <strong
>marked packages
</strong
> are also announcing their hardware
155 support using AppStream, for everyone to use:
</p
>
157 <p
>air-quality-sensor, alsa-firmware-loaders, argyll,
158 <strong
>array-info
</strong
>, avarice, avrdude, b43-fwcutter,
159 bit-babbler, bluez, bluez-firmware,
<strong
>brltty
</strong
>,
160 <strong
>broadcom-sta-dkms
</strong
>, calibre, cgminer, cheese, colord,
161 <strong
>colorhug-client
</strong
>, dahdi-firmware-nonfree, dahdi-linux,
162 dfu-util, dolphin-emu, ekeyd, ethtool, firmware-ipw2x00, fprintd,
163 fprintd-demo,
<strong
>galileo
</strong
>, gkrellm-thinkbat, gphoto2,
164 gpsbabel, gpsbabel-gui, gpsman, gpstrans, gqrx-sdr, gr-fcdproplus,
165 gr-osmosdr, gtkpod, hackrf, hdapsd, hdmi2usb-udev, hpijs-ppds, hplip,
166 ipw3945-source, ipw3945d, kde-config-tablet, kinect-audio-setup,
167 <strong
>libnxt
</strong
>, libpam-fprintd,
<strong
>lomoco
</strong
>,
168 madwimax, minidisc-utils, mkgmap, msi-keyboard, mtkbabel,
169 <strong
>nbc
</strong
>,
<strong
>nqc
</strong
>, nut-hal-drivers, ola,
170 open-vm-toolbox, open-vm-tools, openambit, pcgminer, pcmciautils,
171 pcscd, pidgin-blinklight, printer-driver-splix,
172 <strong
>pymissile
</strong
>, python-nxt, qlandkartegt,
173 qlandkartegt-garmin, rosegarden, rt2x00-source, sispmctl,
174 soapysdr-module-hackrf, solaar, squeak-plugins-scratch, sunxi-tools,
175 <strong
>t2n
</strong
>, thinkfan, thinkfinger-tools, tlp, tp-smapi-dkms,
176 tp-smapi-source, tpb, tucnak, uhd-host, usbmuxd, viking,
177 virtualbox-ose-guest-x11, w1retap, xawtv, xserver-xorg-input-vmmouse,
178 xserver-xorg-input-wacom, xserver-xorg-video-qxl,
179 xserver-xorg-video-vmware, yubikey-personalization and
180 zd1211-firmware
</p
>
182 <p
>If you know of other packages, please let me know with a wishlist
183 bug report against the isenkram-cli package, and ask the package
185 <a href=
"https://wiki.debian.org/AppStream/Guidelines
">add AppStream
186 metadata according to the guidelines
</a
> to provide the information
187 for everyone. In time, I hope to get rid of the isenkram specific
188 hardware mapping and depend exclusively on AppStream.
</p
>
190 <p
>Note, the AppStream metadata for broadcom-sta-dkms is matching too
191 much hardware, and suggest that the package with with any ethernet
192 card. See
<a href=
"http://bugs.debian.org/
838735">bug #
838735</a
> for
193 the details. I hope the maintainer find time to address it soon. In
194 the mean time I provide an override in isenkram.
</p
>
199 <title>Isenkram, Appstream and udev make life as a LEGO builder easier
</title>
200 <link>http://people.skolelinux.org/pere/blog/Isenkram__Appstream_and_udev_make_life_as_a_LEGO_builder_easier.html
</link>
201 <guid isPermaLink=
"true">http://people.skolelinux.org/pere/blog/Isenkram__Appstream_and_udev_make_life_as_a_LEGO_builder_easier.html
</guid>
202 <pubDate>Fri,
7 Oct
2016 09:
50:
00 +
0200</pubDate>
203 <description><p
><a href=
"http://packages.qa.debian.org/isenkram
">The Isenkram
204 system
</a
> provide a practical and easy way to figure out which
205 packages support the hardware in a given machine. The command line
206 tool
<tt
>isenkram-lookup
</tt
> and the tasksel options provide a
207 convenient way to list and install packages relevant for the current
208 hardware during system installation, both user space packages and
209 firmware packages. The GUI background daemon on the other hand provide
210 a pop-up proposing to install packages when a new dongle is inserted
211 while using the computer. For example, if you plug in a smart card
212 reader, the system will ask if you want to install
<tt
>pcscd
</tt
> if
213 that package isn
't already installed, and if you plug in a USB video
214 camera the system will ask if you want to install
<tt
>cheese
</tt
> if
215 cheese is currently missing. This already work just fine.
</p
>
217 <p
>But Isenkram depend on a database mapping from hardware IDs to
218 package names. When I started no such database existed in Debian, so
219 I made my own data set and included it with the isenkram package and
220 made isenkram fetch the latest version of this database from git using
221 http. This way the isenkram users would get updated package proposals
222 as soon as I learned more about hardware related packages.
</p
>
224 <p
>The hardware is identified using modalias strings. The modalias
225 design is from the Linux kernel where most hardware descriptors are
226 made available as a strings that can be matched using filename style
227 globbing. It handle USB, PCI, DMI and a lot of other hardware related
228 identifiers.
</p
>
230 <p
>The downside to the Isenkram specific database is that there is no
231 information about relevant distribution / Debian version, making
232 isenkram propose obsolete packages too. But along came AppStream, a
233 cross distribution mechanism to store and collect metadata about
234 software packages. When I heard about the proposal, I contacted the
235 people involved and suggested to add a hardware matching rule using
236 modalias strings in the specification, to be able to use AppStream for
237 mapping hardware to packages. This idea was accepted and AppStream is
238 now a great way for a package to announce the hardware it support in a
239 distribution neutral way. I wrote
240 <a href=
"http://people.skolelinux.org/pere/blog/Using_appstream_with_isenkram_to_install_hardware_related_packages_in_Debian.html
">a
241 recipe on how to add such meta-information
</a
> in a blog post last
242 December. If you have a hardware related package in Debian, please
243 announce the relevant hardware IDs using AppStream.
</p
>
245 <p
>In Debian, almost all packages that can talk to a LEGO Mindestorms
246 RCX or NXT unit, announce this support using AppStream. The effect is
247 that when you insert such LEGO robot controller into your Debian
248 machine, Isenkram will propose to install the packages needed to get
249 it working. The intention is that this should allow the local user to
250 start programming his robot controller right away without having to
251 guess what packages to use or which permissions to fix.
</p
>
253 <p
>But when I sat down with my son the other day to program our NXT
254 unit using his Debian Stretch computer, I discovered something
255 annoying. The local console user (ie my son) did not get access to
256 the USB device for programming the unit. This used to work, but no
257 longer in Jessie and Stretch. After some investigation and asking
258 around on #debian-devel, I discovered that this was because udev had
259 changed the mechanism used to grant access to local devices. The
260 ConsoleKit mechanism from
<tt
>/lib/udev/rules.d/
70-udev-acl.rules
</tt
>
261 no longer applied, because LDAP users no longer was added to the
262 plugdev group during login. Michael Biebl told me that this method
263 was obsolete and the new method used ACLs instead. This was good
264 news, as the plugdev mechanism is a mess when using a remote user
265 directory like LDAP. Using ACLs would make sure a user lost device
266 access when she logged out, even if the user left behind a background
267 process which would retain the plugdev membership with the ConsoleKit
268 setup. Armed with this knowledge I moved on to fix the access problem
269 for the LEGO Mindstorms related packages.
</p
>
271 <p
>The new system uses a udev tag,
'uaccess
'. It can either be
272 applied directly for a device, or is applied in
273 /lib/udev/rules.d/
70-uaccess.rules for classes of devices. As the
274 LEGO Mindstorms udev rules did not have a class, I decided to add the
275 tag directly in the udev rules files included in the packages. Here
276 is one example. For the nqc C compiler for the RCX, the
277 <tt
>/lib/udev/rules.d/
60-nqc.rules
</tt
> file now look like this:
280 SUBSYSTEM==
"usb
", ACTION==
"add
", ATTR{idVendor}==
"0694", ATTR{idProduct}==
"0001", \
281 SYMLINK+=
"rcx-%k
", TAG+=
"uaccess
"
282 </pre
></p
>
284 <p
>The key part is the
'TAG+=
"uaccess
"' at the end. I suspect all
285 packages using plugdev in their /lib/udev/rules.d/ files should be
286 changed to use this tag (either directly or indirectly via
287 <tt
>70-uaccess.rules
</tt
>). Perhaps a lintian check should be created
288 to detect this?
</p
>
290 <p
>I
've been unable to find good documentation on the uaccess feature.
291 It is unclear to me if the uaccess tag is an internal implementation
292 detail like the udev-acl tag used by
293 <tt
>/lib/udev/rules.d/
70-udev-acl.rules
</tt
>. If it is, I guess the
294 indirect method is the preferred way. Michael
295 <a href=
"https://github.com/systemd/systemd/issues/
4288">asked for more
296 documentation from the systemd project
</a
> and I hope it will make
297 this clearer. For now I use the generic classes when they exist and
298 is already handled by
<tt
>70-uaccess.rules
</tt
>, and add the tag
299 directly if no such class exist.
</p
>
301 <p
>To learn more about the isenkram system, please check out
302 <a href=
"http://people.skolelinux.org/pere/blog/tags/isenkram/
">my
303 blog posts tagged isenkram
</a
>.
</p
>
305 <p
>To help out making life for LEGO constructors in Debian easier,
306 please join us on our IRC channel
307 <a href=
"irc://irc.debian.org/%
23debian-lego
">#debian-lego
</a
> and join
308 the
<a href=
"https://alioth.debian.org/projects/debian-lego/
">Debian
309 LEGO team
</a
> in the Alioth project we created yesterday. A mailing
310 list is not yet created, but we are working on it. :)
</p
>
312 <p
>As usual, if you use Bitcoin and want to show your support of my
313 activities, please send Bitcoin donations to my address
314 <b
><a href=
"bitcoin:
15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
&label=PetterReinholdtsenBlog
">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a
></b
>.
</p
>
319 <title>Isenkram with PackageKit support - new version
0.23 available in Debian unstable
</title>
320 <link>http://people.skolelinux.org/pere/blog/Isenkram_with_PackageKit_support___new_version_0_23_available_in_Debian_unstable.html
</link>
321 <guid isPermaLink=
"true">http://people.skolelinux.org/pere/blog/Isenkram_with_PackageKit_support___new_version_0_23_available_in_Debian_unstable.html
</guid>
322 <pubDate>Wed,
25 May
2016 10:
20:
00 +
0200</pubDate>
323 <description><p
><a href=
"https://tracker.debian.org/pkg/isenkram
">The isenkram
324 system
</a
> is a user-focused solution in Debian for handling hardware
325 related packages. The idea is to have a database of mappings between
326 hardware and packages, and pop up a dialog suggesting for the user to
327 install the packages to use a given hardware dongle. Some use cases
328 are when you insert a Yubikey, it proposes to install the software
329 needed to control it; when you insert a braille reader list it
330 proposes to install the packages needed to send text to the reader;
331 and when you insert a ColorHug screen calibrator it suggests to
332 install the driver for it. The system work well, and even have a few
333 command line tools to install firmware packages and packages for the
334 hardware already in the machine (as opposed to hotpluggable hardware).
</p
>
336 <p
>The system was initially written using aptdaemon, because I found
337 good documentation and example code on how to use it. But aptdaemon
338 is going away and is generally being replaced by
339 <a href=
"http://www.freedesktop.org/software/PackageKit/
">PackageKit
</a
>,
340 so Isenkram needed a rewrite. And today, thanks to the great patch
341 from my college Sunil Mohan Adapa in the FreedomBox project, the
342 rewrite finally took place. I
've just uploaded a new version of
343 Isenkram into Debian Unstable with the patch included, and the default
344 for the background daemon is now to use PackageKit. To check it out,
345 install the
<tt
>isenkram
</tt
> package and insert some hardware dongle
346 and see if it is recognised.
</p
>
348 <p
>If you want to know what kind of packages isenkram would propose for
349 the machine it is running on, you can check out the isenkram-lookup
350 program. This is what it look like on a Thinkpad X230:
</p
>
352 <p
><blockquote
><pre
>
368 </pre
></blockquote
></p
>
370 <p
>The hardware mappings come from several places. The preferred way
371 is for packages to announce their hardware support using
372 <a href=
"https://www.freedesktop.org/software/appstream/docs/
">the
373 cross distribution appstream system
</a
>.
375 <a href=
"http://people.skolelinux.org/pere/blog/tags/isenkram/
">previous
376 blog posts about isenkram
</a
> to learn how to do that.
</p
>
381 <title>Using appstream with isenkram to install hardware related packages in Debian
</title>
382 <link>http://people.skolelinux.org/pere/blog/Using_appstream_with_isenkram_to_install_hardware_related_packages_in_Debian.html
</link>
383 <guid isPermaLink=
"true">http://people.skolelinux.org/pere/blog/Using_appstream_with_isenkram_to_install_hardware_related_packages_in_Debian.html
</guid>
384 <pubDate>Sun,
20 Dec
2015 12:
20:
00 +
0100</pubDate>
385 <description><p
>Around three years ago, I created
386 <a href=
"http://packages.qa.debian.org/isenkram
">the isenkram
387 system
</a
> to get a more practical solution in Debian for handing
388 hardware related packages. A GUI system in the isenkram package will
389 present a pop-up dialog when some hardware dongle supported by
390 relevant packages in Debian is inserted into the machine. The same
391 lookup mechanism to detect packages is available as command line
392 tools in the isenkram-cli package. In addition to mapping hardware,
393 it will also map kernel firmware files to packages and make it easy to
394 install needed firmware packages automatically. The key for this
395 system to work is a good way to map hardware to packages, in other
396 words, allow packages to announce what hardware they will work
399 <p
>I started by providing data files in the isenkram source, and
400 adding code to download the latest version of these data files at run
401 time, to ensure every user had the most up to date mapping available.
402 I also added support for storing the mapping in the Packages file in
403 the apt repositories, but did not push this approach because while I
404 was trying to figure out how to best store hardware/package mappings,
405 <a href=
"http://www.freedesktop.org/software/appstream/docs/
">the
406 appstream system
</a
> was announced. I got in touch and suggested to
407 add the hardware mapping into that data set to be able to use
408 appstream as a data source, and this was accepted at least for the
409 Debian version of appstream.
</p
>
411 <p
>A few days ago using appstream in Debian for this became possible,
412 and today I uploaded a new version
0.20 of isenkram adding support for
413 appstream as a data source for mapping hardware to packages. The only
414 package so far using appstream to announce its hardware support is my
415 pymissile package. I got help from Matthias Klumpp with figuring out
416 how do add the required
417 <a href=
"https://appstream.debian.org/html/sid/main/metainfo/pymissile.html
">metadata
418 in pymissile
</a
>. I added a file debian/pymissile.metainfo.xml with
419 this content:
</p
>
421 <blockquote
><pre
>
422 &lt;?xml version=
"1.0" encoding=
"UTF-
8"?
&gt;
423 &lt;component
&gt;
424 &lt;id
&gt;pymissile
&lt;/id
&gt;
425 &lt;metadata_license
&gt;MIT
&lt;/metadata_license
&gt;
426 &lt;name
&gt;pymissile
&lt;/name
&gt;
427 &lt;summary
&gt;Control original Striker USB Missile Launcher
&lt;/summary
&gt;
428 &lt;description
&gt;
430 Pymissile provides a curses interface to control an original
431 Marks and Spencer / Striker USB Missile Launcher, as well as a
432 motion control script to allow a webcamera to control the
435 &lt;/description
&gt;
436 &lt;provides
&gt;
437 &lt;modalias
&gt;usb:v1130p0202d*
&lt;/modalias
&gt;
438 &lt;/provides
&gt;
439 &lt;/component
&gt;
440 </pre
></blockquote
>
442 <p
>The key for isenkram is the component/provides/modalias value,
443 which is a glob style match rule for hardware specific strings
444 (modalias strings) provided by the Linux kernel. In this case, it
445 will map to all USB devices with vendor code
1130 and product code
448 <p
>Note, it is important that the license of all the metadata files
449 are compatible to have permissions to aggregate them into archive wide
450 appstream files. Matthias suggested to use MIT or BSD licenses for
451 these files. A challenge is figuring out a good id for the data, as
452 it is supposed to be globally unique and shared across distributions
453 (in other words, best to coordinate with upstream what to use). But
454 it can be changed later or, so we went with the package name as
455 upstream for this project is dormant.
</p
>
457 <p
>To get the metadata file installed in the correct location for the
458 mirror update scripts to pick it up and include its content the
459 appstream data source, the file must be installed in the binary
460 package under /usr/share/appdata/. I did this by adding the following
461 line to debian/pymissile.install:
</p
>
463 <blockquote
><pre
>
464 debian/pymissile.metainfo.xml usr/share/appdata
465 </pre
></blockquote
>
467 <p
>With that in place, the command line tool isenkram-lookup will list
468 all packages useful on the current computer automatically, and the GUI
469 pop-up handler will propose to install the package not already
470 installed if a hardware dongle is inserted into the machine in
473 <p
>Details of the modalias field in appstream is available from the
474 <a href=
"https://wiki.debian.org/DEP-
11">DEP-
11</a
> proposal.
</p
>
476 <p
>To locate the modalias values of all hardware present in a machine,
477 try running this command on the command line:
</p
>
479 <blockquote
><pre
>
480 cat $(find /sys/devices/|grep modalias)
481 </pre
></blockquote
>
483 <p
>To learn more about the isenkram system, please check out
484 <a href=
"http://people.skolelinux.org/pere/blog/tags/isenkram/
">my
485 blog posts tagged isenkram
</a
>.
</p
>
490 <title>Debian Jessie, PXE and automatic firmware installation
</title>
491 <link>http://people.skolelinux.org/pere/blog/Debian_Jessie__PXE_and_automatic_firmware_installation.html
</link>
492 <guid isPermaLink=
"true">http://people.skolelinux.org/pere/blog/Debian_Jessie__PXE_and_automatic_firmware_installation.html
</guid>
493 <pubDate>Fri,
17 Oct
2014 14:
10:
00 +
0200</pubDate>
494 <description><p
>When PXE installing laptops with Debian, I often run into the
495 problem that the WiFi card require some firmware to work properly.
496 And it has been a pain to fix this using preseeding in Debian.
497 Normally something more is needed. But thanks to
498 <a href=
"https://packages.qa.debian.org/i/isenkram.html
">my isenkram
499 package
</a
> and its recent tasksel extension, it has now become easy
500 to do this using simple preseeding.
</p
>
502 <p
>The isenkram-cli package provide tasksel tasks which will install
503 firmware for the hardware found in the machine (actually, requested by
504 the kernel modules for the hardware). (It can also install user space
505 programs supporting the hardware detected, but that is not the focus
506 of this story.)
</p
>
508 <p
>To get this working in the default installation, two preeseding
509 values are needed. First, the isenkram-cli package must be installed
510 into the target chroot (aka the hard drive) before tasksel is executed
511 in the pkgsel step of the debian-installer system. This is done by
512 preseeding the base-installer/includes debconf value to include the
513 isenkram-cli package. The package name is next passed to debootstrap
514 for installation. With the isenkram-cli package in place, tasksel
515 will automatically use the isenkram tasks to detect hardware specific
516 packages for the machine being installed and install them, because
517 isenkram-cli contain tasksel tasks.
</p
>
519 <p
>Second, one need to enable the non-free APT repository, because
520 most firmware unfortunately is non-free. This is done by preseeding
521 the apt-mirror-setup step. This is unfortunate, but for a lot of
522 hardware it is the only option in Debian.
</p
>
524 <p
>The end result is two lines needed in your preseeding file to get
525 firmware installed automatically by the installer:
</p
>
527 <p
><blockquote
><pre
>
528 base-installer base-installer/includes string isenkram-cli
529 apt-mirror-setup apt-setup/non-free boolean true
530 </pre
></blockquote
></p
>
532 <p
>The current version of isenkram-cli in testing/jessie will install
533 both firmware and user space packages when using this method. It also
534 do not work well, so use version
0.15 or later. Installing both
535 firmware and user space packages might give you a bit more than you
536 want, so I decided to split the tasksel task in two, one for firmware
537 and one for user space programs. The firmware task is enabled by
538 default, while the one for user space programs is not. This split is
539 implemented in the package currently in unstable.
</p
>
541 <p
>If you decide to give this a go, please let me know (via email) how
542 this recipe work for you. :)
</p
>
544 <p
>So, I bet you are wondering, how can this work. First and
545 foremost, it work because tasksel is modular, and driven by whatever
546 files it find in /usr/lib/tasksel/ and /usr/share/tasksel/. So the
547 isenkram-cli package place two files for tasksel to find. First there
548 is the task description file (/usr/share/tasksel/descs/isenkram.desc):
</p
>
550 <p
><blockquote
><pre
>
551 Task: isenkram-packages
553 Description: Hardware specific packages (autodetected by isenkram)
554 Based on the detected hardware various hardware specific packages are
556 Test-new-install: show show
558 Packages: for-current-hardware
560 Task: isenkram-firmware
562 Description: Hardware specific firmware packages (autodetected by isenkram)
563 Based on the detected hardware various hardware specific firmware
564 packages are proposed.
565 Test-new-install: mark show
567 Packages: for-current-hardware-firmware
568 </pre
></blockquote
></p
>
570 <p
>The key parts are Test-new-install which indicate how the task
571 should be handled and the Packages line referencing to a script in
572 /usr/lib/tasksel/packages/. The scripts use other scripts to get a
573 list of packages to install. The for-current-hardware-firmware script
574 look like this to list relevant firmware for the machine:
576 <p
><blockquote
><pre
>
581 isenkram-autoinstall-firmware -l
582 </pre
></blockquote
></p
>
584 <p
>With those two pieces in place, the firmware is installed by
585 tasksel during the normal d-i run. :)
</p
>
587 <p
>If you want to test what tasksel will install when isenkram-cli is
588 installed, run
<tt
>DEBIAN_PRIORITY=critical tasksel --test
589 --new-install
</tt
> to get the list of packages that tasksel would
592 <p
><a href=
"https://wiki.debian.org/DebianEdu/
">Debian Edu
</a
> will be
593 pilots in testing this feature, as isenkram is used there now to
594 install firmware, replacing the earlier scripts.
</p
>
599 <title>Install hardware dependent packages using tasksel (Isenkram
0.7)
</title>
600 <link>http://people.skolelinux.org/pere/blog/Install_hardware_dependent_packages_using_tasksel__Isenkram_0_7_.html
</link>
601 <guid isPermaLink=
"true">http://people.skolelinux.org/pere/blog/Install_hardware_dependent_packages_using_tasksel__Isenkram_0_7_.html
</guid>
602 <pubDate>Wed,
23 Apr
2014 14:
50:
00 +
0200</pubDate>
603 <description><p
>It would be nice if it was easier in Debian to get all the hardware
604 related packages relevant for the computer installed automatically.
605 So I implemented one, using
606 <a href=
"http://packages.qa.debian.org/isenkram
">my Isenkram
607 package
</a
>. To use it, install the tasksel and isenkram packages and
608 run tasksel as user root. You should be presented with a new option,
609 "Hardware specific packages (autodetected by isenkram)
". When you
610 select it, tasksel will install the packages isenkram claim is fit for
611 the current hardware, hot pluggable or not.
<p
>
613 <p
>The implementation is in two files, one is the tasksel menu entry
614 description, and the other is the script used to extract the list of
615 packages to install. The first part is in
616 <tt
>/usr/share/tasksel/descs/isenkram.desc
</tt
> and look like
619 <p
><blockquote
><pre
>
622 Description: Hardware specific packages (autodetected by isenkram)
623 Based on the detected hardware various hardware specific packages are
625 Test-new-install: mark show
627 Packages: for-current-hardware
628 </pre
></blockquote
></p
>
630 <p
>The second part is in
631 <tt
>/usr/lib/tasksel/packages/for-current-hardware
</tt
> and look like
634 <p
><blockquote
><pre
>
639 isenkram-autoinstall-firmware -l
641 </pre
></blockquote
></p
>
643 <p
>All in all, a very short and simple implementation making it
644 trivial to install the hardware dependent package we all may want to
645 have installed on our machines. I
've not been able to find a way to
646 get tasksel to tell you exactly which packages it plan to install
647 before doing the installation. So if you are curious or careful,
648 check the output from the isenkram-* command line tools first.
</p
>
650 <p
>The information about which packages are handling which hardware is
651 fetched either from the isenkram package itself in
652 /usr/share/isenkram/, from git.debian.org or from the APT package
653 database (using the Modaliases header). The APT package database
654 parsing have caused a nasty resource leak in the isenkram daemon (bugs
655 <a href=
"http://bugs.debian.org/
719837">#
719837</a
> and
656 <a href=
"http://bugs.debian.org/
730704">#
730704</a
>). The cause is in
657 the python-apt code (bug
658 <a href=
"http://bugs.debian.org/
745487">#
745487</a
>), but using a
659 workaround I was able to get rid of the file descriptor leak and
660 reduce the memory leak from ~
30 MiB per hardware detection down to
661 around
2 MiB per hardware detection. It should make the desktop
662 daemon a lot more useful. The fix is in version
0.7 uploaded to
663 unstable today.
</p
>
665 <p
>I believe the current way of mapping hardware to packages in
666 Isenkram is is a good draft, but in the future I expect isenkram to
667 use the AppStream data source for this. A proposal for getting proper
668 AppStream support into Debian is floating around as
669 <a href=
"https://wiki.debian.org/DEP-
11">DEP-
11</a
>, and
670 <a href=
"https://wiki.debian.org/SummerOfCode2014/Projects#SummerOfCode2014.2FProjects
.2FAppStreamDEP11Implementation.AppStream
.2FDEP-
11_for_the_Debian_Archive
">GSoC
671 project
</a
> will take place this summer to improve the situation. I
672 look forward to seeing the result, and welcome patches for isenkram to
673 start using the information when it is ready.
</p
>
675 <p
>If you want your package to map to some specific hardware, either
676 add a
"Xb-Modaliases
" header to your control file like I did in
677 <a href=
"http://packages.qa.debian.org/pymissile
">the pymissile
678 package
</a
> or submit a bug report with the details to the isenkram
680 <a href=
"http://people.skolelinux.org/pere/blog/tags/isenkram/
">all my
681 blog posts tagged isenkram
</a
> for details on the notation. I expect
682 the information will be migrated to AppStream eventually, but for the
683 moment I got no better place to store it.
</p
>
688 <title>Automatically locate and install required firmware packages on Debian (Isenkram
0.4)
</title>
689 <link>http://people.skolelinux.org/pere/blog/Automatically_locate_and_install_required_firmware_packages_on_Debian__Isenkram_0_4_.html
</link>
690 <guid isPermaLink=
"true">http://people.skolelinux.org/pere/blog/Automatically_locate_and_install_required_firmware_packages_on_Debian__Isenkram_0_4_.html
</guid>
691 <pubDate>Tue,
25 Jun
2013 11:
50:
00 +
0200</pubDate>
692 <description><p
>It annoys me when the computer fail to do automatically what it is
693 perfectly capable of, and I have to do it manually to get things
694 working. One such task is to find out what firmware packages are
695 needed to get the hardware on my computer working. Most often this
696 affect the wifi card, but some times it even affect the RAID
697 controller or the ethernet card. Today I pushed version
0.4 of the
698 <a href=
"http://packages.qa.debian.org/isenkram
">Isenkram package
</a
>
699 including a new script isenkram-autoinstall-firmware handling the
700 process of asking all the loaded kernel modules what firmware files
701 they want, find debian packages providing these files and install the
702 debian packages. Here is a test run on my laptop:
</p
>
705 # isenkram-autoinstall-firmware
706 info: kernel drivers requested extra firmware: ipw2200-bss.fw ipw2200-ibss.fw ipw2200-sniffer.fw
707 info: fetching http://http.debian.net/debian/dists/squeeze/Contents-i386.gz
708 info: locating packages with the requested firmware files
709 info: Updating APT sources after adding non-free APT source
710 info: trying to install firmware-ipw2x00
713 Preconfiguring packages ...
714 Selecting previously deselected package firmware-ipw2x00.
715 (Reading database ...
259727 files and directories currently installed.)
716 Unpacking firmware-ipw2x00 (from .../firmware-ipw2x00_0.28+squeeze1_all.deb) ...
717 Setting up firmware-ipw2x00 (
0.28+squeeze1) ...
719 </pre
></p
>
721 <p
>When all the requested firmware is present, a simple message is
722 printed instead:
</p
>
725 # isenkram-autoinstall-firmware
726 info: did not find any firmware files requested by loaded kernel modules. exiting
728 </pre
></p
>
730 <p
>It could use some polish, but it is already working well and saving
731 me some time when setting up new machines. :)
</p
>
733 <p
>So, how does it work? It look at the set of currently loaded
734 kernel modules, and look up each one of them using modinfo, to find
735 the firmware files listed in the module meta-information. Next, it
736 download the Contents file from a nearby APT mirror, and search for
737 the firmware files in this file to locate the package with the
738 requested firmware file. If the package is in the non-free section, a
739 non-free APT source is added and the package is installed using
740 <tt
>apt-get install
</tt
>. The end result is a slightly better working
743 <p
>I hope someone find time to implement a more polished version of
744 this script as part of the hw-detect debian-installer module, to
745 finally fix
<a href=
"http://bugs.debian.org/
655507">BTS report
746 #
655507</a
>. There really is no need to insert USB sticks with
747 firmware during a PXE install when the packages already are available
748 from the nearby Debian mirror.
</p
>
753 <title>Isenkram
0.2 finally in the Debian archive
</title>
754 <link>http://people.skolelinux.org/pere/blog/Isenkram_0_2_finally_in_the_Debian_archive.html
</link>
755 <guid isPermaLink=
"true">http://people.skolelinux.org/pere/blog/Isenkram_0_2_finally_in_the_Debian_archive.html
</guid>
756 <pubDate>Wed,
3 Apr
2013 23:
40:
00 +
0200</pubDate>
757 <description><p
>Today the
<a href=
"http://packages.qa.debian.org/isenkram
">Isenkram
758 package
</a
> finally made it into the archive, after lingering in NEW
759 for many months. I uploaded it to the Debian experimental suite
760 2013-
01-
27, and today it was accepted into the archive.
</p
>
762 <p
>Isenkram is a system for suggesting to users what packages to
763 install to work with a pluggable hardware device. The suggestion pop
764 up when the device is plugged in. For example if a Lego Mindstorm NXT
765 is inserted, it will suggest to install the program needed to program
766 the NXT controller. Give it a go, and report bugs and suggestions to
772 <title>Welcome to the world, Isenkram!
</title>
773 <link>http://people.skolelinux.org/pere/blog/Welcome_to_the_world__Isenkram_.html
</link>
774 <guid isPermaLink=
"true">http://people.skolelinux.org/pere/blog/Welcome_to_the_world__Isenkram_.html
</guid>
775 <pubDate>Tue,
22 Jan
2013 22:
00:
00 +
0100</pubDate>
776 <description><p
>Yesterday, I
777 <a href=
"http://people.skolelinux.org/pere/blog/First_prototype_ready_making_hardware_easier_to_use_in_Debian.html
">asked
778 for testers
</a
> for my prototype for making Debian better at handling
779 pluggable hardware devices, which I
780 <a href=
"http://people.skolelinux.org/pere/blog/Lets_make_hardware_dongles_easier_to_use_in_Debian.html
">set
781 out to create
</a
> earlier this month. Several valuable testers showed
782 up, and caused me to really want to to open up the development to more
783 people. But before I did this, I want to come up with a sensible name
784 for this project. Today I finally decided on a new name, and I have
785 renamed the project from hw-support-handler to this new name. In the
786 process, I moved the source to git and made it available as a
787 <a href=
"http://anonscm.debian.org/gitweb/?p=collab-maint/isenkram.git
">collab-maint
</a
>
788 repository in Debian. The new name? It is
<strong
>Isenkram
</strong
>.
789 To fetch and build the latest version of the source, use
</p
>
792 git clone http://anonscm.debian.org/git/collab-maint/isenkram.git
793 cd isenkram
&& git-buildpackage -us -uc
796 <p
>I have not yet adjusted all files to use the new name yet. If you
797 want to hack on the source or improve the package, please go ahead.
798 But please talk to me first on IRC or via email before you do major
799 changes, to make sure we do not step on each others toes. :)
</p
>
801 <p
>If you wonder what
'isenkram
' is, it is a Norwegian word for iron
802 stuff, typically meaning tools, nails, screws, etc. Typical hardware
803 stuff, in other words. I
've been told it is the Norwegian variant of
804 the German word eisenkram, for those that are familiar with that
807 <p
><strong
>Update
2013-
01-
26</strong
>: Added -us -us to build
808 instructions, to avoid confusing people with an error from the signing
811 <p
><strong
>Update
2013-
01-
27</strong
>: Switch to HTTP URL for the git
812 clone argument to avoid the need for authentication.
</p
>
817 <title>First prototype ready making hardware easier to use in Debian
</title>
818 <link>http://people.skolelinux.org/pere/blog/First_prototype_ready_making_hardware_easier_to_use_in_Debian.html
</link>
819 <guid isPermaLink=
"true">http://people.skolelinux.org/pere/blog/First_prototype_ready_making_hardware_easier_to_use_in_Debian.html
</guid>
820 <pubDate>Mon,
21 Jan
2013 12:
00:
00 +
0100</pubDate>
821 <description><p
>Early this month I set out to try to
822 <a href=
"http://people.skolelinux.org/pere/blog/Lets_make_hardware_dongles_easier_to_use_in_Debian.html
">improve
823 the Debian support for pluggable hardware devices
</a
>. Now my
824 prototype is working, and it is ready for a larger audience. To test
826 <a href=
"http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/
">source
827 from the Debian Edu subversion repository
</a
>, build and install the
828 package. You might have to log out and in again activate the
829 autostart script.
</p
>
831 <p
>The design is simple:
</p
>
835 <li
>Add desktop entry in /usr/share/autostart/ causing a program
836 hw-support-handlerd to start when the user log in.
</li
>
838 <li
>This program listen for kernel events about new hardware (directly
839 from the kernel like udev does), not using HAL dbus events as I
840 initially did.
</li
>
842 <li
>When new hardware is inserted, look up the hardware modalias in
843 the APT database, a database
844 <a href=
"http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/modaliases?view=markup
">available
845 via HTTP
</a
> and a database available as part of the package.
</li
>
847 <li
>If a package is mapped to the hardware in question, the package
848 isn
't installed yet and this is the first time the hardware was
849 plugged in, show a desktop notification suggesting to install the
850 package or packages.
</li
>
852 <li
>If the user click on the
'install package now
' button, ask
853 aptdaemon via the PackageKit API to install the requrired package.
</li
>
855 <li
>aptdaemon ask for root password or sudo password, and install the
856 package while showing progress information in a window.
</li
>
860 <p
>I still need to come up with a better name for the system. Here
861 are some screen shots showing the prototype in action. First the
862 notification, then the password request, and finally the request to
863 approve all the dependencies. Sorry for the Norwegian Bokmål GUI.
</p
>
865 <p
><img src=
"http://people.skolelinux.org/pere/blog/images/
2013-
01-
21-hw-support-
1-notification.png
">
866 <br
><img src=
"http://people.skolelinux.org/pere/blog/images/
2013-
01-
21-hw-support-
2-password.png
">
867 <br
><img src=
"http://people.skolelinux.org/pere/blog/images/
2013-
01-
21-hw-support-
3-dependencies.png
">
868 <br
><img src=
"http://people.skolelinux.org/pere/blog/images/
2013-
01-
21-hw-support-
4-installing.png
">
869 <br
><img src=
"http://people.skolelinux.org/pere/blog/images/
2013-
01-
21-hw-support-
5-installing-details.png
" width=
"70%
"></p
>
871 <p
>The prototype still need to be improved with longer timeouts, but
872 is already useful. The database of hardware to package mappings also
873 need more work. It is currently compatible with the Ubuntu way of
874 storing such information in the package control file, but could be
875 changed to use other formats instead or in addition to the current
876 method. I
've dropped the use of discover for this mapping, as the
877 modalias approach is more flexible and easier to use on Linux as long
878 as the Linux kernel expose its modalias strings directly.
</p
>
880 <p
><strong
>Update
2013-
01-
21 16:
50</strong
>: Due to popular demand,
881 here is the command required to check out and build the source: Use
882 '<tt
>svn checkout
883 svn://svn.debian.org/debian-edu/trunk/src/hw-support-handler/; cd
884 hw-support-handler; debuild
</tt
>'. If you lack debuild, install the
885 devscripts package.
</p
>
887 <p
><strong
>Update
2013-
01-
23 12:
00</strong
>: The project is now
888 renamed to Isenkram and the source moved from the Debian Edu
889 subversion repository to a Debian collab-maint git repository. See
890 <a href=
"http://people.skolelinux.org/pere/blog/Welcome_to_the_world__Isenkram_.html
">build
891 instructions
</a
> for details.
</p
>
896 <title>Using modalias info to find packages handling my hardware
</title>
897 <link>http://people.skolelinux.org/pere/blog/Using_modalias_info_to_find_packages_handling_my_hardware.html
</link>
898 <guid isPermaLink=
"true">http://people.skolelinux.org/pere/blog/Using_modalias_info_to_find_packages_handling_my_hardware.html
</guid>
899 <pubDate>Tue,
15 Jan
2013 08:
00:
00 +
0100</pubDate>
900 <description><p
>Yesterday, I wrote about the
901 <a href=
"http://people.skolelinux.org/pere/blog/Modalias_strings___a_practical_way_to_map__stuff__to_hardware.html
">modalias
902 values provided by the Linux kernel
</a
> following my hope for
903 <a href=
"http://people.skolelinux.org/pere/blog/Lets_make_hardware_dongles_easier_to_use_in_Debian.html
">better
904 dongle support in Debian
</a
>. Using this knowledge, I have tested how
905 modalias values attached to package names can be used to map packages
906 to hardware. This allow the system to look up and suggest relevant
907 packages when I plug in some new hardware into my machine, and replace
908 discover and discover-data as the database used to map hardware to
911 <p
>I create a modaliases file with entries like the following,
912 containing package name, kernel module name (if relevant, otherwise
913 the package name) and globs matching the relevant hardware
916 <p
><blockquote
>
917 Package: package-name
918 <br
>Modaliases: module(modaliasglob, modaliasglob, modaliasglob)
</p
>
919 </blockquote
></p
>
921 <p
>It is fairly trivial to write code to find the relevant packages
922 for a given modalias value using this file.
</p
>
924 <p
>An entry like this would suggest the video and picture application
925 cheese for many USB web cameras (interface bus class
0E01):
</p
>
927 <p
><blockquote
>
929 <br
>Modaliases: cheese(usb:v*p*d*dc*dsc*dp*ic0Eisc01ip*)
</p
>
930 </blockquote
></p
>
932 <p
>An entry like this would suggest the pcmciautils package when a
933 CardBus bridge (bus class
0607) PCI device is present:
</p
>
935 <p
><blockquote
>
937 <br
>Modaliases: pcmciautils(pci:v*d*sv*sd*bc06sc07i*)
938 </blockquote
></p
>
940 <p
>An entry like this would suggest the package colorhug-client when
941 plugging in a ColorHug with USB IDs
04D8:F8DA:
</p
>
943 <p
><blockquote
>
944 Package: colorhug-client
945 <br
>Modaliases: colorhug-client(usb:v04D8pF8DAd*)
</p
>
946 </blockquote
></p
>
948 <p
>I believe the format is compatible with the format of the Packages
949 file in the Debian archive. Ubuntu already uses their Packages file
950 to store their mappings from packages to hardware.
</p
>
952 <p
>By adding a XB-Modaliases: header in debian/control, any .deb can
953 announce the hardware it support in a way my prototype understand.
954 This allow those publishing packages in an APT source outside the
955 Debian archive as well as those backporting packages to make sure the
956 hardware mapping are included in the package meta information. I
've
957 tested such header in the pymissile package, and its modalias mapping
958 is working as it should with my prototype. It even made it to Ubuntu
961 <p
>To test if it was possible to look up supported hardware using only
962 the shell tools available in the Debian installer, I wrote a shell
963 implementation of the lookup code. The idea is to create files for
964 each modalias and let the shell do the matching. Please check out and
966 <a href=
"http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/hw-support-lookup?view=co
">hw-support-lookup
</a
>
967 shell script. It run without any extra dependencies and fetch the
968 hardware mappings from the Debian archive and the subversion
969 repository where I currently work on my prototype.
</p
>
971 <p
>When I use it on a machine with a yubikey inserted, it suggest to
972 install yubikey-personalization:
</p
>
974 <p
><blockquote
>
975 % ./hw-support-lookup
976 <br
>yubikey-personalization
978 </blockquote
></p
>
980 <p
>When I run it on my Thinkpad X40 with a PCMCIA/CardBus slot, it
981 propose to install the pcmciautils package:
</p
>
983 <p
><blockquote
>
984 % ./hw-support-lookup
985 <br
>pcmciautils
987 </blockquote
></p
>
989 <p
>If you know of any hardware-package mapping that should be added to
990 <a href=
"http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/modaliases?view=co
">my
991 database
</a
>, please tell me about it.
</p
>
993 <p
>It could be possible to generate several of the mappings between
994 packages and hardware. One source would be to look at packages with
995 kernel modules, ie packages with *.ko files in /lib/modules/, and
996 extract their modalias information. Another would be to look at
997 packages with udev rules, ie packages with files in
998 /lib/udev/rules.d/, and extract their vendor/model information to
999 generate a modalias matching rule. I have not tested any of these to
1000 see if it work.
</p
>
1002 <p
>If you want to help implementing a system to let us propose what
1003 packages to install when new hardware is plugged into a Debian
1004 machine, please send me an email or talk to me on
1005 <a href=
"irc://irc.debian.org/%
23debian-devel
">#debian-devel
</a
>.
</p
>
1010 <title>Modalias strings - a practical way to map
"stuff
" to hardware
</title>
1011 <link>http://people.skolelinux.org/pere/blog/Modalias_strings___a_practical_way_to_map__stuff__to_hardware.html
</link>
1012 <guid isPermaLink=
"true">http://people.skolelinux.org/pere/blog/Modalias_strings___a_practical_way_to_map__stuff__to_hardware.html
</guid>
1013 <pubDate>Mon,
14 Jan
2013 11:
20:
00 +
0100</pubDate>
1014 <description><p
>While looking into how to look up Debian packages based on hardware
1015 information, to find the packages that support a given piece of
1016 hardware, I refreshed my memory regarding modalias values, and decided
1017 to document the details. Here are my findings so far, also available
1019 <a href=
"http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/
">the
1020 Debian Edu subversion repository
</a
>:
1022 <p
><strong
>Modalias decoded
</strong
></p
>
1024 <p
>This document try to explain what the different types of modalias
1025 values stands for. It is in part based on information from
1026 &lt;URL:
<a href=
"https://wiki.archlinux.org/index.php/Modalias
">https://wiki.archlinux.org/index.php/Modalias
</a
> &gt;,
1027 &lt;URL:
<a href=
"http://unix.stackexchange.com/questions/
26132/how-to-assign-usb-driver-to-device
">http://unix.stackexchange.com/questions/
26132/how-to-assign-usb-driver-to-device
</a
> &gt;,
1028 &lt;URL:
<a href=
"http://code.metager.de/source/history/linux/stable/scripts/mod/file2alias.c
">http://code.metager.de/source/history/linux/stable/scripts/mod/file2alias.c
</a
> &gt; and
1029 &lt;URL:
<a href=
"http://cvs.savannah.gnu.org/viewvc/dmidecode/dmidecode.c?root=dmidecode
&view=markup
">http://cvs.savannah.gnu.org/viewvc/dmidecode/dmidecode.c?root=dmidecode
&view=markup
</a
> &gt;.
1031 <p
>The modalias entries for a given Linux machine can be found using
1032 this shell script:
</p
>
1035 find /sys -name modalias -print0 | xargs -
0 cat | sort -u
1038 <p
>The supported modalias globs for a given kernel module can be found
1039 using modinfo:
</p
>
1042 % /sbin/modinfo psmouse | grep alias:
1043 alias: serio:ty05pr*id*ex*
1044 alias: serio:ty01pr*id*ex*
1048 <p
><strong
>PCI subtype
</strong
></p
>
1050 <p
>A typical PCI entry can look like this. This is an Intel Host
1051 Bridge memory controller:
</p
>
1053 <p
><blockquote
>
1054 pci:v00008086d00002770sv00001028sd000001ADbc06sc00i00
1055 </blockquote
></p
>
1057 <p
>This represent these values:
</p
>
1062 sv
00001028 (subvendor)
1063 sd
000001AD (subdevice)
1065 sc
00 (bus subclass)
1069 <p
>The vendor/device values are the same values outputted from
'lspci
1070 -n
' as
8086:
2770. The bus class/subclass is also shown by lspci as
1071 0600. The
0600 class is a host bridge. Other useful bus values are
1072 0300 (VGA compatible card) and
0200 (Ethernet controller).
</p
>
1074 <p
>Not sure how to figure out the interface value, nor what it
1077 <p
><strong
>USB subtype
</strong
></p
>
1079 <p
>Some typical USB entries can look like this. This is an internal
1080 USB hub in a laptop:
</p
>
1082 <p
><blockquote
>
1083 usb:v1D6Bp0001d0206dc09dsc00dp00ic09isc00ip00
1084 </blockquote
></p
>
1086 <p
>Here is the values included in this alias:
</p
>
1089 v
1D6B (device vendor)
1090 p
0001 (device product)
1092 dc
09 (device class)
1093 dsc
00 (device subclass)
1094 dp
00 (device protocol)
1095 ic
09 (interface class)
1096 isc
00 (interface subclass)
1097 ip
00 (interface protocol)
1100 <p
>The
0900 device class/subclass means hub. Some times the relevant
1101 class is in the interface class section. For a simple USB web camera,
1102 these alias entries show up:
</p
>
1104 <p
><blockquote
>
1105 usb:v0AC8p3420d5000dcEFdsc02dp01ic01isc01ip00
1106 <br
>usb:v0AC8p3420d5000dcEFdsc02dp01ic01isc02ip00
1107 <br
>usb:v0AC8p3420d5000dcEFdsc02dp01ic0Eisc01ip00
1108 <br
>usb:v0AC8p3420d5000dcEFdsc02dp01ic0Eisc02ip00
1109 </blockquote
></p
>
1111 <p
>Interface class
0E01 is video control,
0E02 is video streaming (aka
1112 camera),
0101 is audio control device and
0102 is audio streaming (aka
1113 microphone). Thus this is a camera with microphone included.
</p
>
1115 <p
><strong
>ACPI subtype
</strong
></p
>
1117 <p
>The ACPI type is used for several non-PCI/USB stuff. This is an IR
1118 receiver in a Thinkpad X40:
</p
>
1120 <p
><blockquote
>
1121 acpi:IBM0071:PNP0511:
1122 </blockquote
></p
>
1124 <p
>The values between the colons are IDs.
</p
>
1126 <p
><strong
>DMI subtype
</strong
></p
>
1128 <p
>The DMI table contain lots of information about the computer case
1129 and model. This is an entry for a IBM Thinkpad X40, fetched from
1130 /sys/devices/virtual/dmi/id/modalias:
</p
>
1132 <p
><blockquote
>
1133 dmi:bvnIBM:bvr1UETB6WW(
1.66):bd06/
15/
2005:svnIBM:pn2371H4G:pvrThinkPadX40:rvnIBM:rn2371H4G:rvrNotAvailable:cvnIBM:ct10:cvrNotAvailable:
1134 </blockquote
></p
>
1136 <p
>The values present are
</p
>
1139 bvn IBM (BIOS vendor)
1140 bvr
1UETB
6WW(
1.66) (BIOS version)
1141 bd
06/
15/
2005 (BIOS date)
1142 svn IBM (system vendor)
1143 pn
2371H4G (product name)
1144 pvr ThinkPadX40 (product version)
1145 rvn IBM (board vendor)
1146 rn
2371H4G (board name)
1147 rvr NotAvailable (board version)
1148 cvn IBM (chassis vendor)
1149 ct
10 (chassis type)
1150 cvr NotAvailable (chassis version)
1153 <p
>The chassis type
10 is Notebook. Other interesting values can be
1154 found in the dmidecode source:
</p
>
1158 4 Low Profile Desktop
1171 17 Main Server Chassis
1172 18 Expansion Chassis
1174 20 Bus Expansion Chassis
1175 21 Peripheral Chassis
1177 23 Rack Mount Chassis
1186 <p
>The chassis type values are not always accurately set in the DMI
1187 table. For example my home server is a tower, but the DMI modalias
1188 claim it is a desktop.
</p
>
1190 <p
><strong
>SerIO subtype
</strong
></p
>
1192 <p
>This type is used for PS/
2 mouse plugs. One example is from my
1193 test machine:
</p
>
1195 <p
><blockquote
>
1196 serio:ty01pr00id00ex00
1197 </blockquote
></p
>
1199 <p
>The values present are
</p
>
1208 <p
>This type is supported by the psmouse driver. I am not sure what
1209 the valid values are.
</p
>
1211 <p
><strong
>Other subtypes
</strong
></p
>
1213 <p
>There are heaps of other modalias subtypes according to
1214 file2alias.c. There is the rest of the list from that source: amba,
1215 ap, bcma, ccw, css, eisa, hid, i2c, ieee1394, input, ipack, isapnp,
1216 mdio, of, parisc, pcmcia, platform, scsi, sdio, spi, ssb, vio, virtio,
1217 vmbus, x86cpu and zorro. I did not spend time documenting all of
1218 these, as they do not seem relevant for my intended use with mapping
1219 hardware to packages when new stuff is inserted during run time.
</p
>
1221 <p
><strong
>Looking up kernel modules using modalias values
</strong
></p
>
1223 <p
>To check which kernel modules provide support for a given modalias,
1224 one can use the following shell script:
</p
>
1227 for id in $(find /sys -name modalias -print0 | xargs -
0 cat | sort -u); do \
1228 echo
"$id
" ; \
1229 /sbin/modprobe --show-depends
"$id
"|sed
's/^/ /
' ; \
1233 <p
>The output can look like this (only the first few entries as the
1234 list is very long on my test machine):
</p
>
1238 insmod /lib/modules/
2.6.32-
5-
686/kernel/drivers/acpi/ac.ko
1240 FATAL: Module acpi:device: not found.
1242 insmod /lib/modules/
2.6.32-
5-
686/kernel/drivers/char/nvram.ko
1243 insmod /lib/modules/
2.6.32-
5-
686/kernel/drivers/leds/led-class.ko
1244 insmod /lib/modules/
2.6.32-
5-
686/kernel/net/rfkill/rfkill.ko
1245 insmod /lib/modules/
2.6.32-
5-
686/kernel/drivers/platform/x86/thinkpad_acpi.ko
1246 acpi:IBM0071:PNP0511:
1247 insmod /lib/modules/
2.6.32-
5-
686/kernel/lib/crc-ccitt.ko
1248 insmod /lib/modules/
2.6.32-
5-
686/kernel/net/irda/irda.ko
1249 insmod /lib/modules/
2.6.32-
5-
686/kernel/drivers/net/irda/nsc-ircc.ko
1253 <p
>If you want to help implementing a system to let us propose what
1254 packages to install when new hardware is plugged into a Debian
1255 machine, please send me an email or talk to me on
1256 <a href=
"irc://irc.debian.org/%
23debian-devel
">#debian-devel
</a
>.
</p
>
1258 <p
><strong
>Update
2013-
01-
15:
</strong
> Rewrite
"cat $(find ...)
" to
1259 "find ... -print0 | xargs -
0 cat
" to make sure it handle directories
1260 in /sys/ with space in them.
</p
>
1265 <title>Moved the pymissile Debian packaging to collab-maint
</title>
1266 <link>http://people.skolelinux.org/pere/blog/Moved_the_pymissile_Debian_packaging_to_collab_maint.html
</link>
1267 <guid isPermaLink=
"true">http://people.skolelinux.org/pere/blog/Moved_the_pymissile_Debian_packaging_to_collab_maint.html
</guid>
1268 <pubDate>Thu,
10 Jan
2013 20:
40:
00 +
0100</pubDate>
1269 <description><p
>As part of my investigation on how to improve the support in Debian
1270 for hardware dongles, I dug up my old Mark and Spencer USB Rocket
1271 Launcher and updated the Debian package
1272 <a href=
"http://packages.qa.debian.org/pymissile
">pymissile
</a
> to make
1273 sure udev will fix the device permissions when it is plugged in. I
1274 also added a
"Modaliases
" header to test it in the Debian archive and
1275 hopefully make the package be proposed by jockey in Ubuntu when a user
1276 plug in his rocket launcher. In the process I moved the source to a
1277 git repository under collab-maint, to make it easier for any DD to
1278 contribute.
<a href=
"http://code.google.com/p/pymissile/
">Upstream
</a
>
1279 is not very active, but the software still work for me even after five
1280 years of relative silence. The new git repository is not listed in
1281 the uploaded package yet, because I want to test the other changes a
1282 bit more before I upload the new version. If you want to check out
1283 the new version with a .desktop file included, visit the
1284 <a href=
"http://anonscm.debian.org/gitweb/?p=collab-maint/pymissile.git
">gitweb
1285 view
</a
> or use
"<tt
>git clone
1286 git://anonscm.debian.org/collab-maint/pymissile.git
</tt
>".
</p
>
1291 <title>Lets make hardware dongles easier to use in Debian
</title>
1292 <link>http://people.skolelinux.org/pere/blog/Lets_make_hardware_dongles_easier_to_use_in_Debian.html
</link>
1293 <guid isPermaLink=
"true">http://people.skolelinux.org/pere/blog/Lets_make_hardware_dongles_easier_to_use_in_Debian.html
</guid>
1294 <pubDate>Wed,
9 Jan
2013 15:
40:
00 +
0100</pubDate>
1295 <description><p
>One thing that annoys me with Debian and Linux distributions in
1296 general, is that there is a great package management system with the
1297 ability to automatically install software packages by downloading them
1298 from the distribution mirrors, but no way to get it to automatically
1299 install the packages I need to use the hardware I plug into my
1300 machine. Even if the package to use it is easily available from the
1301 Linux distribution. When I plug in a LEGO Mindstorms NXT, it could
1302 suggest to automatically install the python-nxt, nbc and t2n packages
1303 I need to talk to it. When I plug in a Yubikey, it could propose the
1304 yubikey-personalization package. The information required to do this
1305 is available, but no-one have pulled all the pieces together.
</p
>
1307 <p
>Some years ago, I proposed to
1308 <a href=
"http://lists.debian.org/debian-devel/
2010/
05/msg01206.html
">use
1309 the discover subsystem to implement this
</a
>. The idea is fairly
1314 <li
>Add a desktop entry in /usr/share/autostart/ pointing to a program
1315 starting when a user log in.
</li
>
1317 <li
>Set this program up to listen for kernel events emitted when new
1318 hardware is inserted into the computer.
</li
>
1320 <li
>When new hardware is inserted, look up the hardware ID in a
1321 database mapping to packages, and take note of any non-installed
1322 packages.
</li
>
1324 <li
>Show a message to the user proposing to install the discovered
1325 package, and make it easy to install it.
</li
>
1329 <p
>I am not sure what the best way to implement this is, but my
1330 initial idea was to use dbus events to discover new hardware, the
1331 discover database to find packages and
1332 <a href=
"http://www.packagekit.org/
">PackageKit
</a
> to install
1335 <p
>Yesterday, I found time to try to implement this idea, and the
1336 draft package is now checked into
1337 <a href=
"http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/
">the
1338 Debian Edu subversion repository
</a
>. In the process, I updated the
1339 <a href=
"http://packages.qa.debian.org/d/discover-data.html
">discover-data
</a
>
1340 package to map the USB ids of LEGO Mindstorms and Yubikey devices to
1341 the relevant packages in Debian, and uploaded a new version
1342 2.2013.01.09 to unstable. I also discovered that the current
1343 <a href=
"http://packages.qa.debian.org/d/discover.html
">discover
</a
>
1344 package in Debian no longer discovered any USB devices, because
1345 /proc/bus/usb/devices is no longer present. I ported it to use
1346 libusb as a fall back option to get it working. The fixed package
1347 version
2.1.2-
6 is now in experimental (didn
't upload it to unstable
1348 because of the freeze).
</p
>
1350 <p
>With this prototype in place, I can insert my Yubikey, and get this
1351 desktop notification to show up (only once, the first time it is
1352 inserted):
</p
>
1354 <p align=
"center
"><img src=
"http://people.skolelinux.org/pere/blog/images/
2013-
01-
09-hw-autoinstall.png
"></p
>
1356 <p
>For this prototype to be really useful, some way to automatically
1357 install the proposed packages by pressing the
"Please install
1358 program(s)
" button should to be implemented.
</p
>
1360 <p
>If this idea seem useful to you, and you want to help make it
1361 happen, please help me update the discover-data database with mappings
1362 from hardware to Debian packages. Check if
'discover-pkginstall -l
'
1363 list the package you would like to have installed when a given
1364 hardware device is inserted into your computer, and report bugs using
1365 reportbug if it isn
't. Or, if you know of a better way to provide
1366 such mapping, please let me know.
</p
>
1368 <p
>This prototype need more work, and there are several questions that
1369 should be considered before it is ready for production use. Is dbus
1370 the correct way to detect new hardware? At the moment I look for HAL
1371 dbus events on the system bus, because that is the events I could see
1372 on my Debian Squeeze KDE desktop. Are there better events to use?
1373 How should the user be notified? Is the desktop notification
1374 mechanism the best option, or should the background daemon raise a
1375 popup instead? How should packages be installed? When should they
1376 not be installed?
</p
>
1378 <p
>If you want to help getting such feature implemented in Debian,
1379 please send me an email. :)
</p
>