1 <!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Strict//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns=
"http://www.w3.org/1999/xhtml" dir=
"ltr">
5 <meta http-equiv=
"Content-Type" content=
"text/html;charset=utf-8" />
6 <title>Petter Reinholdtsen: Entries Tagged isenkram
</title>
7 <link rel=
"stylesheet" type=
"text/css" media=
"screen" href=
"http://people.skolelinux.org/pere/blog/style.css" />
8 <link rel=
"stylesheet" type=
"text/css" media=
"screen" href=
"http://people.skolelinux.org/pere/blog/vim.css" />
9 <link rel=
"alternate" title=
"RSS Feed" href=
"isenkram.rss" type=
"application/rss+xml" />
14 <a href=
"http://people.skolelinux.org/pere/blog/">Petter Reinholdtsen
</a>
21 <h3>Entries tagged "isenkram".
</h3>
25 <a href=
"http://people.skolelinux.org/pere/blog/Appstream_just_learned_how_to_map_hardware_to_packages_too_.html">Appstream just learned how to map hardware to packages too!
</a>
31 <p>I received a very nice Christmas present today. As my regular
32 readers probably know, I have been working on the
33 <a href=
"http://packages.qa.debian.org/isenkram">the Isenkram
34 system
</a> for many years. The goal of the Isenkram system is to make
35 it easier for users to figure out what to install to get a given piece
36 of hardware to work in Debian, and a key part of this system is a way
37 to map hardware to packages. Isenkram have its own mapping database,
38 and also uses data provided by each package using the AppStream
39 metadata format. And today,
40 <a href=
"https://tracker.debian.org/pkg/appstream">AppStream
</a> in
41 Debian learned to look up hardware the same way Isenkram is doing it,
42 ie using fnmatch():
</p>
45 % appstreamcli what-provides modalias \
46 usb:v1130p0202d0100dc00dsc00dp00ic03isc00ip00in00
47 Identifier: pymissile [generic]
49 Summary: Control original Striker USB Missile Launcher
51 % appstreamcli what-provides modalias usb:v0694p0002d0000
52 Identifier: libnxt [generic]
54 Summary: utility library for talking to the LEGO Mindstorms NXT brick
57 Identifier: t2n [generic]
59 Summary: Simple command-line tool for Lego NXT
62 Identifier: python-nxt [generic]
64 Summary: Python driver/interface/wrapper for the Lego Mindstorms NXT robot
67 Identifier: nbc [generic]
69 Summary: C compiler for LEGO Mindstorms NXT bricks
74 <p>A similar query can be done using the combined AppStream and
75 Isenkram databases using the isenkram-lookup tool:
</p>
78 % isenkram-lookup usb:v1130p0202d0100dc00dsc00dp00ic03isc00ip00in00
80 % isenkram-lookup usb:v0694p0002d0000
88 <p>You can find modalias values relevant for your machine using
89 <tt>cat $(find /sys/devices/ -name modalias)
</tt>.
91 <p>If you want to make this system a success and help Debian users
92 make the most of the hardware they have, please
93 help
<a href=
"https://wiki.debian.org/AppStream/Guidelines">add
94 AppStream metadata for your package following the guidelines
</a>
95 documented in the wiki. So far only
11 packages provide such
96 information, among the several hundred hardware specific packages in
97 Debian. The Isenkram database on the other hand contain
101 packages,
98 mostly related to USB dongles. Most of the packages with hardware
99 mapping in AppStream are LEGO Mindstorms related, because I have, as
100 part of my involvement in
101 <a href=
"https://wiki.debian.org/LegoDesigners">the Debian LEGO
102 team
</a> given priority to making sure LEGO users get proposed the
103 complete set of packages in Debian for that particular hardware. The
104 team also got a nice Christmas present today. The
105 <a href=
"https://tracker.debian.org/pkg/nxt-firmware">nxt-firmware
106 package
</a> made it into Debian. With this package in place, it is
107 now possible to use the LEGO Mindstorms NXT unit with only free
108 software, as the nxt-firmware package contain the source and firmware
109 binaries for the NXT brick.
</p>
111 <p>As usual, if you use Bitcoin and want to show your support of my
112 activities, please send Bitcoin donations to my address
113 <b><a href=
"bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&label=PetterReinholdtsenBlog">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a></b>.
</p>
119 Tags:
<a href=
"http://people.skolelinux.org/pere/blog/tags/debian">debian
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram
</a>.
124 <div class=
"padding"></div>
128 <a href=
"http://people.skolelinux.org/pere/blog/Isenkram_updated_with_a_lot_more_hardware_package_mappings.html">Isenkram updated with a lot more hardware-package mappings
</a>
134 <p><a href=
"http://packages.qa.debian.org/isenkram">The Isenkram
135 system
</a> I wrote two years ago to make it easier in Debian to find
136 and install packages to get your hardware dongles to work, is still
137 going strong. It is a system to look up the hardware present on or
138 connected to the current system, and map the hardware to Debian
139 packages. It can either be done using the tools in isenkram-cli or
140 using the user space daemon in the isenkram package. The latter will
141 notify you, when inserting new hardware, about what packages to
142 install to get the dongle working. It will even provide a button to
143 click on to ask packagekit to install the packages.
</p>
145 <p>Here is an command line example from my Thinkpad laptop:
</p>
166 <p>It can also list the firware package providing firmware requested
167 by the load kernel modules, which in my case is an empty list because
168 I have all the firmware my machine need:
171 % /usr/sbin/isenkram-autoinstall-firmware -l
172 info: did not find any firmware files requested by loaded kernel modules. exiting
176 <p>The last few days I had a look at several of the around
250
177 packages in Debian with udev rules. These seem like good candidates
178 to install when a given hardware dongle is inserted, and I found
179 several that should be proposed by isenkram. I have not had time to
180 check all of them, but am happy to report that now there are
97
181 packages packages mapped to hardware by Isenkram.
11 of these
182 packages provide hardware mapping using AppStream, while the rest are
183 listed in the modaliases file provided in isenkram.
</p>
185 <p>These are the packages with hardware mappings at the moment. The
186 <strong>marked packages
</strong> are also announcing their hardware
187 support using AppStream, for everyone to use:
</p>
189 <p>air-quality-sensor, alsa-firmware-loaders, argyll,
190 <strong>array-info
</strong>, avarice, avrdude, b43-fwcutter,
191 bit-babbler, bluez, bluez-firmware,
<strong>brltty
</strong>,
192 <strong>broadcom-sta-dkms
</strong>, calibre, cgminer, cheese, colord,
193 <strong>colorhug-client
</strong>, dahdi-firmware-nonfree, dahdi-linux,
194 dfu-util, dolphin-emu, ekeyd, ethtool, firmware-ipw2x00, fprintd,
195 fprintd-demo,
<strong>galileo
</strong>, gkrellm-thinkbat, gphoto2,
196 gpsbabel, gpsbabel-gui, gpsman, gpstrans, gqrx-sdr, gr-fcdproplus,
197 gr-osmosdr, gtkpod, hackrf, hdapsd, hdmi2usb-udev, hpijs-ppds, hplip,
198 ipw3945-source, ipw3945d, kde-config-tablet, kinect-audio-setup,
199 <strong>libnxt
</strong>, libpam-fprintd,
<strong>lomoco
</strong>,
200 madwimax, minidisc-utils, mkgmap, msi-keyboard, mtkbabel,
201 <strong>nbc
</strong>,
<strong>nqc
</strong>, nut-hal-drivers, ola,
202 open-vm-toolbox, open-vm-tools, openambit, pcgminer, pcmciautils,
203 pcscd, pidgin-blinklight, printer-driver-splix,
204 <strong>pymissile
</strong>, python-nxt, qlandkartegt,
205 qlandkartegt-garmin, rosegarden, rt2x00-source, sispmctl,
206 soapysdr-module-hackrf, solaar, squeak-plugins-scratch, sunxi-tools,
207 <strong>t2n
</strong>, thinkfan, thinkfinger-tools, tlp, tp-smapi-dkms,
208 tp-smapi-source, tpb, tucnak, uhd-host, usbmuxd, viking,
209 virtualbox-ose-guest-x11, w1retap, xawtv, xserver-xorg-input-vmmouse,
210 xserver-xorg-input-wacom, xserver-xorg-video-qxl,
211 xserver-xorg-video-vmware, yubikey-personalization and
214 <p>If you know of other packages, please let me know with a wishlist
215 bug report against the isenkram-cli package, and ask the package
217 <a href=
"https://wiki.debian.org/AppStream/Guidelines">add AppStream
218 metadata according to the guidelines
</a> to provide the information
219 for everyone. In time, I hope to get rid of the isenkram specific
220 hardware mapping and depend exclusively on AppStream.
</p>
222 <p>Note, the AppStream metadata for broadcom-sta-dkms is matching too
223 much hardware, and suggest that the package with with any ethernet
224 card. See
<a href=
"http://bugs.debian.org/838735">bug #
838735</a> for
225 the details. I hope the maintainer find time to address it soon. In
226 the mean time I provide an override in isenkram.
</p>
232 Tags:
<a href=
"http://people.skolelinux.org/pere/blog/tags/debian">debian
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram
</a>.
237 <div class=
"padding"></div>
241 <a href=
"http://people.skolelinux.org/pere/blog/Isenkram__Appstream_and_udev_make_life_as_a_LEGO_builder_easier.html">Isenkram, Appstream and udev make life as a LEGO builder easier
</a>
247 <p><a href=
"http://packages.qa.debian.org/isenkram">The Isenkram
248 system
</a> provide a practical and easy way to figure out which
249 packages support the hardware in a given machine. The command line
250 tool
<tt>isenkram-lookup
</tt> and the tasksel options provide a
251 convenient way to list and install packages relevant for the current
252 hardware during system installation, both user space packages and
253 firmware packages. The GUI background daemon on the other hand provide
254 a pop-up proposing to install packages when a new dongle is inserted
255 while using the computer. For example, if you plug in a smart card
256 reader, the system will ask if you want to install
<tt>pcscd
</tt> if
257 that package isn't already installed, and if you plug in a USB video
258 camera the system will ask if you want to install
<tt>cheese
</tt> if
259 cheese is currently missing. This already work just fine.
</p>
261 <p>But Isenkram depend on a database mapping from hardware IDs to
262 package names. When I started no such database existed in Debian, so
263 I made my own data set and included it with the isenkram package and
264 made isenkram fetch the latest version of this database from git using
265 http. This way the isenkram users would get updated package proposals
266 as soon as I learned more about hardware related packages.
</p>
268 <p>The hardware is identified using modalias strings. The modalias
269 design is from the Linux kernel where most hardware descriptors are
270 made available as a strings that can be matched using filename style
271 globbing. It handle USB, PCI, DMI and a lot of other hardware related
274 <p>The downside to the Isenkram specific database is that there is no
275 information about relevant distribution / Debian version, making
276 isenkram propose obsolete packages too. But along came AppStream, a
277 cross distribution mechanism to store and collect metadata about
278 software packages. When I heard about the proposal, I contacted the
279 people involved and suggested to add a hardware matching rule using
280 modalias strings in the specification, to be able to use AppStream for
281 mapping hardware to packages. This idea was accepted and AppStream is
282 now a great way for a package to announce the hardware it support in a
283 distribution neutral way. I wrote
284 <a href=
"http://people.skolelinux.org/pere/blog/Using_appstream_with_isenkram_to_install_hardware_related_packages_in_Debian.html">a
285 recipe on how to add such meta-information
</a> in a blog post last
286 December. If you have a hardware related package in Debian, please
287 announce the relevant hardware IDs using AppStream.
</p>
289 <p>In Debian, almost all packages that can talk to a LEGO Mindestorms
290 RCX or NXT unit, announce this support using AppStream. The effect is
291 that when you insert such LEGO robot controller into your Debian
292 machine, Isenkram will propose to install the packages needed to get
293 it working. The intention is that this should allow the local user to
294 start programming his robot controller right away without having to
295 guess what packages to use or which permissions to fix.
</p>
297 <p>But when I sat down with my son the other day to program our NXT
298 unit using his Debian Stretch computer, I discovered something
299 annoying. The local console user (ie my son) did not get access to
300 the USB device for programming the unit. This used to work, but no
301 longer in Jessie and Stretch. After some investigation and asking
302 around on #debian-devel, I discovered that this was because udev had
303 changed the mechanism used to grant access to local devices. The
304 ConsoleKit mechanism from
<tt>/lib/udev/rules.d/
70-udev-acl.rules
</tt>
305 no longer applied, because LDAP users no longer was added to the
306 plugdev group during login. Michael Biebl told me that this method
307 was obsolete and the new method used ACLs instead. This was good
308 news, as the plugdev mechanism is a mess when using a remote user
309 directory like LDAP. Using ACLs would make sure a user lost device
310 access when she logged out, even if the user left behind a background
311 process which would retain the plugdev membership with the ConsoleKit
312 setup. Armed with this knowledge I moved on to fix the access problem
313 for the LEGO Mindstorms related packages.
</p>
315 <p>The new system uses a udev tag, 'uaccess'. It can either be
316 applied directly for a device, or is applied in
317 /lib/udev/rules.d/
70-uaccess.rules for classes of devices. As the
318 LEGO Mindstorms udev rules did not have a class, I decided to add the
319 tag directly in the udev rules files included in the packages. Here
320 is one example. For the nqc C compiler for the RCX, the
321 <tt>/lib/udev/rules.d/
60-nqc.rules
</tt> file now look like this:
324 SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="
0694", ATTR{idProduct}=="
0001", \
325 SYMLINK+="rcx-%k", TAG+="uaccess"
328 <p>The key part is the 'TAG+="uaccess"' at the end. I suspect all
329 packages using plugdev in their /lib/udev/rules.d/ files should be
330 changed to use this tag (either directly or indirectly via
331 <tt>70-uaccess.rules
</tt>). Perhaps a lintian check should be created
334 <p>I've been unable to find good documentation on the uaccess feature.
335 It is unclear to me if the uaccess tag is an internal implementation
336 detail like the udev-acl tag used by
337 <tt>/lib/udev/rules.d/
70-udev-acl.rules
</tt>. If it is, I guess the
338 indirect method is the preferred way. Michael
339 <a href=
"https://github.com/systemd/systemd/issues/4288">asked for more
340 documentation from the systemd project
</a> and I hope it will make
341 this clearer. For now I use the generic classes when they exist and
342 is already handled by
<tt>70-uaccess.rules
</tt>, and add the tag
343 directly if no such class exist.
</p>
345 <p>To learn more about the isenkram system, please check out
346 <a href=
"http://people.skolelinux.org/pere/blog/tags/isenkram/">my
347 blog posts tagged isenkram
</a>.
</p>
349 <p>To help out making life for LEGO constructors in Debian easier,
350 please join us on our IRC channel
351 <a href=
"irc://irc.debian.org/%23debian-lego">#debian-lego
</a> and join
352 the
<a href=
"https://alioth.debian.org/projects/debian-lego/">Debian
353 LEGO team
</a> in the Alioth project we created yesterday. A mailing
354 list is not yet created, but we are working on it. :)
</p>
356 <p>As usual, if you use Bitcoin and want to show your support of my
357 activities, please send Bitcoin donations to my address
358 <b><a href=
"bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&label=PetterReinholdtsenBlog">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a></b>.
</p>
364 Tags:
<a href=
"http://people.skolelinux.org/pere/blog/tags/debian">debian
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram
</a>.
369 <div class=
"padding"></div>
373 <a href=
"http://people.skolelinux.org/pere/blog/Isenkram_with_PackageKit_support___new_version_0_23_available_in_Debian_unstable.html">Isenkram with PackageKit support - new version
0.23 available in Debian unstable
</a>
379 <p><a href=
"https://tracker.debian.org/pkg/isenkram">The isenkram
380 system
</a> is a user-focused solution in Debian for handling hardware
381 related packages. The idea is to have a database of mappings between
382 hardware and packages, and pop up a dialog suggesting for the user to
383 install the packages to use a given hardware dongle. Some use cases
384 are when you insert a Yubikey, it proposes to install the software
385 needed to control it; when you insert a braille reader list it
386 proposes to install the packages needed to send text to the reader;
387 and when you insert a ColorHug screen calibrator it suggests to
388 install the driver for it. The system work well, and even have a few
389 command line tools to install firmware packages and packages for the
390 hardware already in the machine (as opposed to hotpluggable hardware).
</p>
392 <p>The system was initially written using aptdaemon, because I found
393 good documentation and example code on how to use it. But aptdaemon
394 is going away and is generally being replaced by
395 <a href=
"http://www.freedesktop.org/software/PackageKit/">PackageKit
</a>,
396 so Isenkram needed a rewrite. And today, thanks to the great patch
397 from my college Sunil Mohan Adapa in the FreedomBox project, the
398 rewrite finally took place. I've just uploaded a new version of
399 Isenkram into Debian Unstable with the patch included, and the default
400 for the background daemon is now to use PackageKit. To check it out,
401 install the
<tt>isenkram
</tt> package and insert some hardware dongle
402 and see if it is recognised.
</p>
404 <p>If you want to know what kind of packages isenkram would propose for
405 the machine it is running on, you can check out the isenkram-lookup
406 program. This is what it look like on a Thinkpad X230:
</p>
424 </pre></blockquote></p>
426 <p>The hardware mappings come from several places. The preferred way
427 is for packages to announce their hardware support using
428 <a href=
"https://www.freedesktop.org/software/appstream/docs/">the
429 cross distribution appstream system
</a>.
431 <a href=
"http://people.skolelinux.org/pere/blog/tags/isenkram/">previous
432 blog posts about isenkram
</a> to learn how to do that.
</p>
438 Tags:
<a href=
"http://people.skolelinux.org/pere/blog/tags/debian">debian
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram
</a>.
443 <div class=
"padding"></div>
447 <a href=
"http://people.skolelinux.org/pere/blog/Using_appstream_with_isenkram_to_install_hardware_related_packages_in_Debian.html">Using appstream with isenkram to install hardware related packages in Debian
</a>
453 <p>Around three years ago, I created
454 <a href=
"http://packages.qa.debian.org/isenkram">the isenkram
455 system
</a> to get a more practical solution in Debian for handing
456 hardware related packages. A GUI system in the isenkram package will
457 present a pop-up dialog when some hardware dongle supported by
458 relevant packages in Debian is inserted into the machine. The same
459 lookup mechanism to detect packages is available as command line
460 tools in the isenkram-cli package. In addition to mapping hardware,
461 it will also map kernel firmware files to packages and make it easy to
462 install needed firmware packages automatically. The key for this
463 system to work is a good way to map hardware to packages, in other
464 words, allow packages to announce what hardware they will work
467 <p>I started by providing data files in the isenkram source, and
468 adding code to download the latest version of these data files at run
469 time, to ensure every user had the most up to date mapping available.
470 I also added support for storing the mapping in the Packages file in
471 the apt repositories, but did not push this approach because while I
472 was trying to figure out how to best store hardware/package mappings,
473 <a href=
"http://www.freedesktop.org/software/appstream/docs/">the
474 appstream system
</a> was announced. I got in touch and suggested to
475 add the hardware mapping into that data set to be able to use
476 appstream as a data source, and this was accepted at least for the
477 Debian version of appstream.
</p>
479 <p>A few days ago using appstream in Debian for this became possible,
480 and today I uploaded a new version
0.20 of isenkram adding support for
481 appstream as a data source for mapping hardware to packages. The only
482 package so far using appstream to announce its hardware support is my
483 pymissile package. I got help from Matthias Klumpp with figuring out
484 how do add the required
485 <a href=
"https://appstream.debian.org/html/sid/main/metainfo/pymissile.html">metadata
486 in pymissile
</a>. I added a file debian/pymissile.metainfo.xml with
490 <?xml
version="
1.0"
encoding="UTF-
8"?
>
492 <id
>pymissile
</id
>
493 <metadata_license
>MIT
</metadata_license
>
494 <name
>pymissile
</name
>
495 <summary
>Control original Striker USB Missile Launcher
</summary
>
498 Pymissile provides a curses interface to control an original
499 Marks and Spencer / Striker USB Missile Launcher, as well as a
500 motion control script to allow a webcamera to control the
505 <modalias
>usb:v1130p0202d*
</modalias
>
510 <p>The key for isenkram is the component/provides/modalias value,
511 which is a glob style match rule for hardware specific strings
512 (modalias strings) provided by the Linux kernel. In this case, it
513 will map to all USB devices with vendor code
1130 and product code
516 <p>Note, it is important that the license of all the metadata files
517 are compatible to have permissions to aggregate them into archive wide
518 appstream files. Matthias suggested to use MIT or BSD licenses for
519 these files. A challenge is figuring out a good id for the data, as
520 it is supposed to be globally unique and shared across distributions
521 (in other words, best to coordinate with upstream what to use). But
522 it can be changed later or, so we went with the package name as
523 upstream for this project is dormant.
</p>
525 <p>To get the metadata file installed in the correct location for the
526 mirror update scripts to pick it up and include its content the
527 appstream data source, the file must be installed in the binary
528 package under /usr/share/appdata/. I did this by adding the following
529 line to debian/pymissile.install:
</p>
532 debian/pymissile.metainfo.xml usr/share/appdata
535 <p>With that in place, the command line tool isenkram-lookup will list
536 all packages useful on the current computer automatically, and the GUI
537 pop-up handler will propose to install the package not already
538 installed if a hardware dongle is inserted into the machine in
541 <p>Details of the modalias field in appstream is available from the
542 <a href=
"https://wiki.debian.org/DEP-11">DEP-
11</a> proposal.
</p>
544 <p>To locate the modalias values of all hardware present in a machine,
545 try running this command on the command line:
</p>
548 cat $(find /sys/devices/|grep modalias)
551 <p>To learn more about the isenkram system, please check out
552 <a href=
"http://people.skolelinux.org/pere/blog/tags/isenkram/">my
553 blog posts tagged isenkram
</a>.
</p>
559 Tags:
<a href=
"http://people.skolelinux.org/pere/blog/tags/debian">debian
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram
</a>.
564 <div class=
"padding"></div>
568 <a href=
"http://people.skolelinux.org/pere/blog/Debian_Jessie__PXE_and_automatic_firmware_installation.html">Debian Jessie, PXE and automatic firmware installation
</a>
574 <p>When PXE installing laptops with Debian, I often run into the
575 problem that the WiFi card require some firmware to work properly.
576 And it has been a pain to fix this using preseeding in Debian.
577 Normally something more is needed. But thanks to
578 <a href=
"https://packages.qa.debian.org/i/isenkram.html">my isenkram
579 package
</a> and its recent tasksel extension, it has now become easy
580 to do this using simple preseeding.
</p>
582 <p>The isenkram-cli package provide tasksel tasks which will install
583 firmware for the hardware found in the machine (actually, requested by
584 the kernel modules for the hardware). (It can also install user space
585 programs supporting the hardware detected, but that is not the focus
588 <p>To get this working in the default installation, two preeseding
589 values are needed. First, the isenkram-cli package must be installed
590 into the target chroot (aka the hard drive) before tasksel is executed
591 in the pkgsel step of the debian-installer system. This is done by
592 preseeding the base-installer/includes debconf value to include the
593 isenkram-cli package. The package name is next passed to debootstrap
594 for installation. With the isenkram-cli package in place, tasksel
595 will automatically use the isenkram tasks to detect hardware specific
596 packages for the machine being installed and install them, because
597 isenkram-cli contain tasksel tasks.
</p>
599 <p>Second, one need to enable the non-free APT repository, because
600 most firmware unfortunately is non-free. This is done by preseeding
601 the apt-mirror-setup step. This is unfortunate, but for a lot of
602 hardware it is the only option in Debian.
</p>
604 <p>The end result is two lines needed in your preseeding file to get
605 firmware installed automatically by the installer:
</p>
608 base-installer base-installer/includes string isenkram-cli
609 apt-mirror-setup apt-setup/non-free boolean true
610 </pre></blockquote></p>
612 <p>The current version of isenkram-cli in testing/jessie will install
613 both firmware and user space packages when using this method. It also
614 do not work well, so use version
0.15 or later. Installing both
615 firmware and user space packages might give you a bit more than you
616 want, so I decided to split the tasksel task in two, one for firmware
617 and one for user space programs. The firmware task is enabled by
618 default, while the one for user space programs is not. This split is
619 implemented in the package currently in unstable.
</p>
621 <p>If you decide to give this a go, please let me know (via email) how
622 this recipe work for you. :)
</p>
624 <p>So, I bet you are wondering, how can this work. First and
625 foremost, it work because tasksel is modular, and driven by whatever
626 files it find in /usr/lib/tasksel/ and /usr/share/tasksel/. So the
627 isenkram-cli package place two files for tasksel to find. First there
628 is the task description file (/usr/share/tasksel/descs/isenkram.desc):
</p>
631 Task: isenkram-packages
633 Description: Hardware specific packages (autodetected by isenkram)
634 Based on the detected hardware various hardware specific packages are
636 Test-new-install: show show
638 Packages: for-current-hardware
640 Task: isenkram-firmware
642 Description: Hardware specific firmware packages (autodetected by isenkram)
643 Based on the detected hardware various hardware specific firmware
644 packages are proposed.
645 Test-new-install: mark show
647 Packages: for-current-hardware-firmware
648 </pre></blockquote></p>
650 <p>The key parts are Test-new-install which indicate how the task
651 should be handled and the Packages line referencing to a script in
652 /usr/lib/tasksel/packages/. The scripts use other scripts to get a
653 list of packages to install. The for-current-hardware-firmware script
654 look like this to list relevant firmware for the machine:
661 isenkram-autoinstall-firmware -l
662 </pre></blockquote></p>
664 <p>With those two pieces in place, the firmware is installed by
665 tasksel during the normal d-i run. :)
</p>
667 <p>If you want to test what tasksel will install when isenkram-cli is
668 installed, run
<tt>DEBIAN_PRIORITY=critical tasksel --test
669 --new-install
</tt> to get the list of packages that tasksel would
672 <p><a href=
"https://wiki.debian.org/DebianEdu/">Debian Edu
</a> will be
673 pilots in testing this feature, as isenkram is used there now to
674 install firmware, replacing the earlier scripts.
</p>
680 Tags:
<a href=
"http://people.skolelinux.org/pere/blog/tags/debian">debian
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin
</a>.
685 <div class=
"padding"></div>
689 <a href=
"http://people.skolelinux.org/pere/blog/Install_hardware_dependent_packages_using_tasksel__Isenkram_0_7_.html">Install hardware dependent packages using tasksel (Isenkram
0.7)
</a>
695 <p>It would be nice if it was easier in Debian to get all the hardware
696 related packages relevant for the computer installed automatically.
697 So I implemented one, using
698 <a href=
"http://packages.qa.debian.org/isenkram">my Isenkram
699 package
</a>. To use it, install the tasksel and isenkram packages and
700 run tasksel as user root. You should be presented with a new option,
701 "Hardware specific packages (autodetected by isenkram)". When you
702 select it, tasksel will install the packages isenkram claim is fit for
703 the current hardware, hot pluggable or not.
<p>
705 <p>The implementation is in two files, one is the tasksel menu entry
706 description, and the other is the script used to extract the list of
707 packages to install. The first part is in
708 <tt>/usr/share/tasksel/descs/isenkram.desc
</tt> and look like
714 Description: Hardware specific packages (autodetected by isenkram)
715 Based on the detected hardware various hardware specific packages are
717 Test-new-install: mark show
719 Packages: for-current-hardware
720 </pre></blockquote></p>
722 <p>The second part is in
723 <tt>/usr/lib/tasksel/packages/for-current-hardware
</tt> and look like
731 isenkram-autoinstall-firmware -l
733 </pre></blockquote></p>
735 <p>All in all, a very short and simple implementation making it
736 trivial to install the hardware dependent package we all may want to
737 have installed on our machines. I've not been able to find a way to
738 get tasksel to tell you exactly which packages it plan to install
739 before doing the installation. So if you are curious or careful,
740 check the output from the isenkram-* command line tools first.
</p>
742 <p>The information about which packages are handling which hardware is
743 fetched either from the isenkram package itself in
744 /usr/share/isenkram/, from git.debian.org or from the APT package
745 database (using the Modaliases header). The APT package database
746 parsing have caused a nasty resource leak in the isenkram daemon (bugs
747 <a href=
"http://bugs.debian.org/719837">#
719837</a> and
748 <a href=
"http://bugs.debian.org/730704">#
730704</a>). The cause is in
749 the python-apt code (bug
750 <a href=
"http://bugs.debian.org/745487">#
745487</a>), but using a
751 workaround I was able to get rid of the file descriptor leak and
752 reduce the memory leak from ~
30 MiB per hardware detection down to
753 around
2 MiB per hardware detection. It should make the desktop
754 daemon a lot more useful. The fix is in version
0.7 uploaded to
757 <p>I believe the current way of mapping hardware to packages in
758 Isenkram is is a good draft, but in the future I expect isenkram to
759 use the AppStream data source for this. A proposal for getting proper
760 AppStream support into Debian is floating around as
761 <a href=
"https://wiki.debian.org/DEP-11">DEP-
11</a>, and
762 <a href=
"https://wiki.debian.org/SummerOfCode2014/Projects#SummerOfCode2014.2FProjects.2FAppStreamDEP11Implementation.AppStream.2FDEP-11_for_the_Debian_Archive">GSoC
763 project
</a> will take place this summer to improve the situation. I
764 look forward to seeing the result, and welcome patches for isenkram to
765 start using the information when it is ready.
</p>
767 <p>If you want your package to map to some specific hardware, either
768 add a "Xb-Modaliases" header to your control file like I did in
769 <a href=
"http://packages.qa.debian.org/pymissile">the pymissile
770 package
</a> or submit a bug report with the details to the isenkram
772 <a href=
"http://people.skolelinux.org/pere/blog/tags/isenkram/">all my
773 blog posts tagged isenkram
</a> for details on the notation. I expect
774 the information will be migrated to AppStream eventually, but for the
775 moment I got no better place to store it.
</p>
781 Tags:
<a href=
"http://people.skolelinux.org/pere/blog/tags/debian">debian
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram
</a>.
786 <div class=
"padding"></div>
790 <a href=
"http://people.skolelinux.org/pere/blog/Automatically_locate_and_install_required_firmware_packages_on_Debian__Isenkram_0_4_.html">Automatically locate and install required firmware packages on Debian (Isenkram
0.4)
</a>
796 <p>It annoys me when the computer fail to do automatically what it is
797 perfectly capable of, and I have to do it manually to get things
798 working. One such task is to find out what firmware packages are
799 needed to get the hardware on my computer working. Most often this
800 affect the wifi card, but some times it even affect the RAID
801 controller or the ethernet card. Today I pushed version
0.4 of the
802 <a href=
"http://packages.qa.debian.org/isenkram">Isenkram package
</a>
803 including a new script isenkram-autoinstall-firmware handling the
804 process of asking all the loaded kernel modules what firmware files
805 they want, find debian packages providing these files and install the
806 debian packages. Here is a test run on my laptop:
</p>
809 # isenkram-autoinstall-firmware
810 info: kernel drivers requested extra firmware: ipw2200-bss.fw ipw2200-ibss.fw ipw2200-sniffer.fw
811 info: fetching http://http.debian.net/debian/dists/squeeze/Contents-i386.gz
812 info: locating packages with the requested firmware files
813 info: Updating APT sources after adding non-free APT source
814 info: trying to install firmware-ipw2x00
817 Preconfiguring packages ...
818 Selecting previously deselected package firmware-ipw2x00.
819 (Reading database ...
259727 files and directories currently installed.)
820 Unpacking firmware-ipw2x00 (from .../firmware-ipw2x00_0.28+squeeze1_all.deb) ...
821 Setting up firmware-ipw2x00 (
0.28+squeeze1) ...
825 <p>When all the requested firmware is present, a simple message is
829 # isenkram-autoinstall-firmware
830 info: did not find any firmware files requested by loaded kernel modules. exiting
834 <p>It could use some polish, but it is already working well and saving
835 me some time when setting up new machines. :)
</p>
837 <p>So, how does it work? It look at the set of currently loaded
838 kernel modules, and look up each one of them using modinfo, to find
839 the firmware files listed in the module meta-information. Next, it
840 download the Contents file from a nearby APT mirror, and search for
841 the firmware files in this file to locate the package with the
842 requested firmware file. If the package is in the non-free section, a
843 non-free APT source is added and the package is installed using
844 <tt>apt-get install
</tt>. The end result is a slightly better working
847 <p>I hope someone find time to implement a more polished version of
848 this script as part of the hw-detect debian-installer module, to
849 finally fix
<a href=
"http://bugs.debian.org/655507">BTS report
850 #
655507</a>. There really is no need to insert USB sticks with
851 firmware during a PXE install when the packages already are available
852 from the nearby Debian mirror.
</p>
858 Tags:
<a href=
"http://people.skolelinux.org/pere/blog/tags/debian">debian
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram
</a>.
863 <div class=
"padding"></div>
867 <a href=
"http://people.skolelinux.org/pere/blog/Isenkram_0_2_finally_in_the_Debian_archive.html">Isenkram
0.2 finally in the Debian archive
</a>
873 <p>Today the
<a href=
"http://packages.qa.debian.org/isenkram">Isenkram
874 package
</a> finally made it into the archive, after lingering in NEW
875 for many months. I uploaded it to the Debian experimental suite
876 2013-
01-
27, and today it was accepted into the archive.
</p>
878 <p>Isenkram is a system for suggesting to users what packages to
879 install to work with a pluggable hardware device. The suggestion pop
880 up when the device is plugged in. For example if a Lego Mindstorm NXT
881 is inserted, it will suggest to install the program needed to program
882 the NXT controller. Give it a go, and report bugs and suggestions to
889 Tags:
<a href=
"http://people.skolelinux.org/pere/blog/tags/debian">debian
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram
</a>.
894 <div class=
"padding"></div>
898 <a href=
"http://people.skolelinux.org/pere/blog/Welcome_to_the_world__Isenkram_.html">Welcome to the world, Isenkram!
</a>
905 <a href=
"http://people.skolelinux.org/pere/blog/First_prototype_ready_making_hardware_easier_to_use_in_Debian.html">asked
906 for testers
</a> for my prototype for making Debian better at handling
907 pluggable hardware devices, which I
908 <a href=
"http://people.skolelinux.org/pere/blog/Lets_make_hardware_dongles_easier_to_use_in_Debian.html">set
909 out to create
</a> earlier this month. Several valuable testers showed
910 up, and caused me to really want to to open up the development to more
911 people. But before I did this, I want to come up with a sensible name
912 for this project. Today I finally decided on a new name, and I have
913 renamed the project from hw-support-handler to this new name. In the
914 process, I moved the source to git and made it available as a
915 <a href=
"http://anonscm.debian.org/gitweb/?p=collab-maint/isenkram.git">collab-maint
</a>
916 repository in Debian. The new name? It is
<strong>Isenkram
</strong>.
917 To fetch and build the latest version of the source, use
</p>
920 git clone http://anonscm.debian.org/git/collab-maint/isenkram.git
921 cd isenkram && git-buildpackage -us -uc
924 <p>I have not yet adjusted all files to use the new name yet. If you
925 want to hack on the source or improve the package, please go ahead.
926 But please talk to me first on IRC or via email before you do major
927 changes, to make sure we do not step on each others toes. :)
</p>
929 <p>If you wonder what 'isenkram' is, it is a Norwegian word for iron
930 stuff, typically meaning tools, nails, screws, etc. Typical hardware
931 stuff, in other words. I've been told it is the Norwegian variant of
932 the German word eisenkram, for those that are familiar with that
935 <p><strong>Update
2013-
01-
26</strong>: Added -us -us to build
936 instructions, to avoid confusing people with an error from the signing
939 <p><strong>Update
2013-
01-
27</strong>: Switch to HTTP URL for the git
940 clone argument to avoid the need for authentication.
</p>
946 Tags:
<a href=
"http://people.skolelinux.org/pere/blog/tags/debian">debian
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram
</a>.
951 <div class=
"padding"></div>
955 <a href=
"http://people.skolelinux.org/pere/blog/First_prototype_ready_making_hardware_easier_to_use_in_Debian.html">First prototype ready making hardware easier to use in Debian
</a>
961 <p>Early this month I set out to try to
962 <a href=
"http://people.skolelinux.org/pere/blog/Lets_make_hardware_dongles_easier_to_use_in_Debian.html">improve
963 the Debian support for pluggable hardware devices
</a>. Now my
964 prototype is working, and it is ready for a larger audience. To test
966 <a href=
"http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/">source
967 from the Debian Edu subversion repository
</a>, build and install the
968 package. You might have to log out and in again activate the
969 autostart script.
</p>
971 <p>The design is simple:
</p>
975 <li>Add desktop entry in /usr/share/autostart/ causing a program
976 hw-support-handlerd to start when the user log in.
</li>
978 <li>This program listen for kernel events about new hardware (directly
979 from the kernel like udev does), not using HAL dbus events as I
982 <li>When new hardware is inserted, look up the hardware modalias in
983 the APT database, a database
984 <a href=
"http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/modaliases?view=markup">available
985 via HTTP
</a> and a database available as part of the package.
</li>
987 <li>If a package is mapped to the hardware in question, the package
988 isn't installed yet and this is the first time the hardware was
989 plugged in, show a desktop notification suggesting to install the
990 package or packages.
</li>
992 <li>If the user click on the 'install package now' button, ask
993 aptdaemon via the PackageKit API to install the requrired package.
</li>
995 <li>aptdaemon ask for root password or sudo password, and install the
996 package while showing progress information in a window.
</li>
1000 <p>I still need to come up with a better name for the system. Here
1001 are some screen shots showing the prototype in action. First the
1002 notification, then the password request, and finally the request to
1003 approve all the dependencies. Sorry for the Norwegian Bokmål GUI.
</p>
1005 <p><img src=
"http://people.skolelinux.org/pere/blog/images/2013-01-21-hw-support-1-notification.png">
1006 <br><img src=
"http://people.skolelinux.org/pere/blog/images/2013-01-21-hw-support-2-password.png">
1007 <br><img src=
"http://people.skolelinux.org/pere/blog/images/2013-01-21-hw-support-3-dependencies.png">
1008 <br><img src=
"http://people.skolelinux.org/pere/blog/images/2013-01-21-hw-support-4-installing.png">
1009 <br><img src=
"http://people.skolelinux.org/pere/blog/images/2013-01-21-hw-support-5-installing-details.png" width=
"70%"></p>
1011 <p>The prototype still need to be improved with longer timeouts, but
1012 is already useful. The database of hardware to package mappings also
1013 need more work. It is currently compatible with the Ubuntu way of
1014 storing such information in the package control file, but could be
1015 changed to use other formats instead or in addition to the current
1016 method. I've dropped the use of discover for this mapping, as the
1017 modalias approach is more flexible and easier to use on Linux as long
1018 as the Linux kernel expose its modalias strings directly.
</p>
1020 <p><strong>Update
2013-
01-
21 16:
50</strong>: Due to popular demand,
1021 here is the command required to check out and build the source: Use
1023 svn://svn.debian.org/debian-edu/trunk/src/hw-support-handler/; cd
1024 hw-support-handler; debuild
</tt>'. If you lack debuild, install the
1025 devscripts package.
</p>
1027 <p><strong>Update
2013-
01-
23 12:
00</strong>: The project is now
1028 renamed to Isenkram and the source moved from the Debian Edu
1029 subversion repository to a Debian collab-maint git repository. See
1030 <a href=
"http://people.skolelinux.org/pere/blog/Welcome_to_the_world__Isenkram_.html">build
1031 instructions
</a> for details.
</p>
1037 Tags:
<a href=
"http://people.skolelinux.org/pere/blog/tags/debian">debian
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram
</a>.
1042 <div class=
"padding"></div>
1046 <a href=
"http://people.skolelinux.org/pere/blog/Using_modalias_info_to_find_packages_handling_my_hardware.html">Using modalias info to find packages handling my hardware
</a>
1052 <p>Yesterday, I wrote about the
1053 <a href=
"http://people.skolelinux.org/pere/blog/Modalias_strings___a_practical_way_to_map__stuff__to_hardware.html">modalias
1054 values provided by the Linux kernel
</a> following my hope for
1055 <a href=
"http://people.skolelinux.org/pere/blog/Lets_make_hardware_dongles_easier_to_use_in_Debian.html">better
1056 dongle support in Debian
</a>. Using this knowledge, I have tested how
1057 modalias values attached to package names can be used to map packages
1058 to hardware. This allow the system to look up and suggest relevant
1059 packages when I plug in some new hardware into my machine, and replace
1060 discover and discover-data as the database used to map hardware to
1063 <p>I create a modaliases file with entries like the following,
1064 containing package name, kernel module name (if relevant, otherwise
1065 the package name) and globs matching the relevant hardware
1069 Package: package-name
1070 <br>Modaliases: module(modaliasglob, modaliasglob, modaliasglob)
</p>
1073 <p>It is fairly trivial to write code to find the relevant packages
1074 for a given modalias value using this file.
</p>
1076 <p>An entry like this would suggest the video and picture application
1077 cheese for many USB web cameras (interface bus class
0E01):
</p>
1081 <br>Modaliases: cheese(usb:v*p*d*dc*dsc*dp*ic0Eisc01ip*)
</p>
1084 <p>An entry like this would suggest the pcmciautils package when a
1085 CardBus bridge (bus class
0607) PCI device is present:
</p>
1088 Package: pcmciautils
1089 <br>Modaliases: pcmciautils(pci:v*d*sv*sd*bc06sc07i*)
1092 <p>An entry like this would suggest the package colorhug-client when
1093 plugging in a ColorHug with USB IDs
04D8:F8DA:
</p>
1096 Package: colorhug-client
1097 <br>Modaliases: colorhug-client(usb:v04D8pF8DAd*)
</p>
1100 <p>I believe the format is compatible with the format of the Packages
1101 file in the Debian archive. Ubuntu already uses their Packages file
1102 to store their mappings from packages to hardware.
</p>
1104 <p>By adding a XB-Modaliases: header in debian/control, any .deb can
1105 announce the hardware it support in a way my prototype understand.
1106 This allow those publishing packages in an APT source outside the
1107 Debian archive as well as those backporting packages to make sure the
1108 hardware mapping are included in the package meta information. I've
1109 tested such header in the pymissile package, and its modalias mapping
1110 is working as it should with my prototype. It even made it to Ubuntu
1113 <p>To test if it was possible to look up supported hardware using only
1114 the shell tools available in the Debian installer, I wrote a shell
1115 implementation of the lookup code. The idea is to create files for
1116 each modalias and let the shell do the matching. Please check out and
1118 <a href=
"http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/hw-support-lookup?view=co">hw-support-lookup
</a>
1119 shell script. It run without any extra dependencies and fetch the
1120 hardware mappings from the Debian archive and the subversion
1121 repository where I currently work on my prototype.
</p>
1123 <p>When I use it on a machine with a yubikey inserted, it suggest to
1124 install yubikey-personalization:
</p>
1127 % ./hw-support-lookup
1128 <br>yubikey-personalization
1132 <p>When I run it on my Thinkpad X40 with a PCMCIA/CardBus slot, it
1133 propose to install the pcmciautils package:
</p>
1136 % ./hw-support-lookup
1141 <p>If you know of any hardware-package mapping that should be added to
1142 <a href=
"http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/modaliases?view=co">my
1143 database
</a>, please tell me about it.
</p>
1145 <p>It could be possible to generate several of the mappings between
1146 packages and hardware. One source would be to look at packages with
1147 kernel modules, ie packages with *.ko files in /lib/modules/, and
1148 extract their modalias information. Another would be to look at
1149 packages with udev rules, ie packages with files in
1150 /lib/udev/rules.d/, and extract their vendor/model information to
1151 generate a modalias matching rule. I have not tested any of these to
1154 <p>If you want to help implementing a system to let us propose what
1155 packages to install when new hardware is plugged into a Debian
1156 machine, please send me an email or talk to me on
1157 <a href=
"irc://irc.debian.org/%23debian-devel">#debian-devel
</a>.
</p>
1163 Tags:
<a href=
"http://people.skolelinux.org/pere/blog/tags/debian">debian
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram
</a>.
1168 <div class=
"padding"></div>
1172 <a href=
"http://people.skolelinux.org/pere/blog/Modalias_strings___a_practical_way_to_map__stuff__to_hardware.html">Modalias strings - a practical way to map "stuff" to hardware
</a>
1178 <p>While looking into how to look up Debian packages based on hardware
1179 information, to find the packages that support a given piece of
1180 hardware, I refreshed my memory regarding modalias values, and decided
1181 to document the details. Here are my findings so far, also available
1183 <a href=
"http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/">the
1184 Debian Edu subversion repository
</a>:
1186 <p><strong>Modalias decoded
</strong></p>
1188 <p>This document try to explain what the different types of modalias
1189 values stands for. It is in part based on information from
1190 <URL:
<a href=
"https://wiki.archlinux.org/index.php/Modalias">https://wiki.archlinux.org/index.php/Modalias
</a> >,
1191 <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> >,
1192 <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> > and
1193 <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> >.
1195 <p>The modalias entries for a given Linux machine can be found using
1196 this shell script:
</p>
1199 find /sys -name modalias -print0 | xargs -
0 cat | sort -u
1202 <p>The supported modalias globs for a given kernel module can be found
1206 % /sbin/modinfo psmouse | grep alias:
1207 alias: serio:ty05pr*id*ex*
1208 alias: serio:ty01pr*id*ex*
1212 <p><strong>PCI subtype
</strong></p>
1214 <p>A typical PCI entry can look like this. This is an Intel Host
1215 Bridge memory controller:
</p>
1218 pci:v00008086d00002770sv00001028sd000001ADbc06sc00i00
1221 <p>This represent these values:
</p>
1226 sv
00001028 (subvendor)
1227 sd
000001AD (subdevice)
1229 sc
00 (bus subclass)
1233 <p>The vendor/device values are the same values outputted from 'lspci
1234 -n' as
8086:
2770. The bus class/subclass is also shown by lspci as
1235 0600. The
0600 class is a host bridge. Other useful bus values are
1236 0300 (VGA compatible card) and
0200 (Ethernet controller).
</p>
1238 <p>Not sure how to figure out the interface value, nor what it
1241 <p><strong>USB subtype
</strong></p>
1243 <p>Some typical USB entries can look like this. This is an internal
1244 USB hub in a laptop:
</p>
1247 usb:v1D6Bp0001d0206dc09dsc00dp00ic09isc00ip00
1250 <p>Here is the values included in this alias:
</p>
1253 v
1D6B (device vendor)
1254 p
0001 (device product)
1256 dc
09 (device class)
1257 dsc
00 (device subclass)
1258 dp
00 (device protocol)
1259 ic
09 (interface class)
1260 isc
00 (interface subclass)
1261 ip
00 (interface protocol)
1264 <p>The
0900 device class/subclass means hub. Some times the relevant
1265 class is in the interface class section. For a simple USB web camera,
1266 these alias entries show up:
</p>
1269 usb:v0AC8p3420d5000dcEFdsc02dp01ic01isc01ip00
1270 <br>usb:v0AC8p3420d5000dcEFdsc02dp01ic01isc02ip00
1271 <br>usb:v0AC8p3420d5000dcEFdsc02dp01ic0Eisc01ip00
1272 <br>usb:v0AC8p3420d5000dcEFdsc02dp01ic0Eisc02ip00
1275 <p>Interface class
0E01 is video control,
0E02 is video streaming (aka
1276 camera),
0101 is audio control device and
0102 is audio streaming (aka
1277 microphone). Thus this is a camera with microphone included.
</p>
1279 <p><strong>ACPI subtype
</strong></p>
1281 <p>The ACPI type is used for several non-PCI/USB stuff. This is an IR
1282 receiver in a Thinkpad X40:
</p>
1285 acpi:IBM0071:PNP0511:
1288 <p>The values between the colons are IDs.
</p>
1290 <p><strong>DMI subtype
</strong></p>
1292 <p>The DMI table contain lots of information about the computer case
1293 and model. This is an entry for a IBM Thinkpad X40, fetched from
1294 /sys/devices/virtual/dmi/id/modalias:
</p>
1297 dmi:bvnIBM:bvr1UETB6WW(
1.66):bd06/
15/
2005:svnIBM:pn2371H4G:pvrThinkPadX40:rvnIBM:rn2371H4G:rvrNotAvailable:cvnIBM:ct10:cvrNotAvailable:
1300 <p>The values present are
</p>
1303 bvn IBM (BIOS vendor)
1304 bvr
1UETB
6WW(
1.66) (BIOS version)
1305 bd
06/
15/
2005 (BIOS date)
1306 svn IBM (system vendor)
1307 pn
2371H4G (product name)
1308 pvr ThinkPadX40 (product version)
1309 rvn IBM (board vendor)
1310 rn
2371H4G (board name)
1311 rvr NotAvailable (board version)
1312 cvn IBM (chassis vendor)
1313 ct
10 (chassis type)
1314 cvr NotAvailable (chassis version)
1317 <p>The chassis type
10 is Notebook. Other interesting values can be
1318 found in the dmidecode source:
</p>
1322 4 Low Profile Desktop
1335 17 Main Server Chassis
1336 18 Expansion Chassis
1338 20 Bus Expansion Chassis
1339 21 Peripheral Chassis
1341 23 Rack Mount Chassis
1350 <p>The chassis type values are not always accurately set in the DMI
1351 table. For example my home server is a tower, but the DMI modalias
1352 claim it is a desktop.
</p>
1354 <p><strong>SerIO subtype
</strong></p>
1356 <p>This type is used for PS/
2 mouse plugs. One example is from my
1360 serio:ty01pr00id00ex00
1363 <p>The values present are
</p>
1372 <p>This type is supported by the psmouse driver. I am not sure what
1373 the valid values are.
</p>
1375 <p><strong>Other subtypes
</strong></p>
1377 <p>There are heaps of other modalias subtypes according to
1378 file2alias.c. There is the rest of the list from that source: amba,
1379 ap, bcma, ccw, css, eisa, hid, i2c, ieee1394, input, ipack, isapnp,
1380 mdio, of, parisc, pcmcia, platform, scsi, sdio, spi, ssb, vio, virtio,
1381 vmbus, x86cpu and zorro. I did not spend time documenting all of
1382 these, as they do not seem relevant for my intended use with mapping
1383 hardware to packages when new stuff is inserted during run time.
</p>
1385 <p><strong>Looking up kernel modules using modalias values
</strong></p>
1387 <p>To check which kernel modules provide support for a given modalias,
1388 one can use the following shell script:
</p>
1391 for id in $(find /sys -name modalias -print0 | xargs -
0 cat | sort -u); do \
1393 /sbin/modprobe --show-depends "$id"|sed 's/^/ /' ; \
1397 <p>The output can look like this (only the first few entries as the
1398 list is very long on my test machine):
</p>
1402 insmod /lib/modules/
2.6.32-
5-
686/kernel/drivers/acpi/ac.ko
1404 FATAL: Module acpi:device: not found.
1406 insmod /lib/modules/
2.6.32-
5-
686/kernel/drivers/char/nvram.ko
1407 insmod /lib/modules/
2.6.32-
5-
686/kernel/drivers/leds/led-class.ko
1408 insmod /lib/modules/
2.6.32-
5-
686/kernel/net/rfkill/rfkill.ko
1409 insmod /lib/modules/
2.6.32-
5-
686/kernel/drivers/platform/x86/thinkpad_acpi.ko
1410 acpi:IBM0071:PNP0511:
1411 insmod /lib/modules/
2.6.32-
5-
686/kernel/lib/crc-ccitt.ko
1412 insmod /lib/modules/
2.6.32-
5-
686/kernel/net/irda/irda.ko
1413 insmod /lib/modules/
2.6.32-
5-
686/kernel/drivers/net/irda/nsc-ircc.ko
1417 <p>If you want to help implementing a system to let us propose what
1418 packages to install when new hardware is plugged into a Debian
1419 machine, please send me an email or talk to me on
1420 <a href=
"irc://irc.debian.org/%23debian-devel">#debian-devel
</a>.
</p>
1422 <p><strong>Update
2013-
01-
15:
</strong> Rewrite "cat $(find ...)" to
1423 "find ... -print0 | xargs -
0 cat" to make sure it handle directories
1424 in /sys/ with space in them.
</p>
1430 Tags:
<a href=
"http://people.skolelinux.org/pere/blog/tags/debian">debian
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram
</a>.
1435 <div class=
"padding"></div>
1439 <a href=
"http://people.skolelinux.org/pere/blog/Moved_the_pymissile_Debian_packaging_to_collab_maint.html">Moved the pymissile Debian packaging to collab-maint
</a>
1445 <p>As part of my investigation on how to improve the support in Debian
1446 for hardware dongles, I dug up my old Mark and Spencer USB Rocket
1447 Launcher and updated the Debian package
1448 <a href=
"http://packages.qa.debian.org/pymissile">pymissile
</a> to make
1449 sure udev will fix the device permissions when it is plugged in. I
1450 also added a "Modaliases" header to test it in the Debian archive and
1451 hopefully make the package be proposed by jockey in Ubuntu when a user
1452 plug in his rocket launcher. In the process I moved the source to a
1453 git repository under collab-maint, to make it easier for any DD to
1454 contribute.
<a href=
"http://code.google.com/p/pymissile/">Upstream
</a>
1455 is not very active, but the software still work for me even after five
1456 years of relative silence. The new git repository is not listed in
1457 the uploaded package yet, because I want to test the other changes a
1458 bit more before I upload the new version. If you want to check out
1459 the new version with a .desktop file included, visit the
1460 <a href=
"http://anonscm.debian.org/gitweb/?p=collab-maint/pymissile.git">gitweb
1461 view
</a> or use "
<tt>git clone
1462 git://anonscm.debian.org/collab-maint/pymissile.git
</tt>".</p>
1468 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian
">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english
">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram
">isenkram</a>, <a href="http://people.skolelinux.org/pere/blog/tags/robot
">robot</a>.
1473 <div class="padding
"></div>
1477 <a href="http://people.skolelinux.org/pere/blog/Lets_make_hardware_dongles_easier_to_use_in_Debian.html
">Lets make hardware dongles easier to use in Debian</a>
1483 <p>One thing that annoys me with Debian and Linux distributions in
1484 general, is that there is a great package management system with the
1485 ability to automatically install software packages by downloading them
1486 from the distribution mirrors, but no way to get it to automatically
1487 install the packages I need to use the hardware I plug into my
1488 machine. Even if the package to use it is easily available from the
1489 Linux distribution. When I plug in a LEGO Mindstorms NXT, it could
1490 suggest to automatically install the python-nxt, nbc and t2n packages
1491 I need to talk to it. When I plug in a Yubikey, it could propose the
1492 yubikey-personalization package. The information required to do this
1493 is available, but no-one have pulled all the pieces together.</p>
1495 <p>Some years ago, I proposed to
1496 <a href="http://lists.debian.org/debian-devel/
2010/
05/msg01206.html
">use
1497 the discover subsystem to implement this</a>. The idea is fairly
1502 <li>Add a desktop entry in /usr/share/autostart/ pointing to a program
1503 starting when a user log in.</li>
1505 <li>Set this program up to listen for kernel events emitted when new
1506 hardware is inserted into the computer.</li>
1508 <li>When new hardware is inserted, look up the hardware ID in a
1509 database mapping to packages, and take note of any non-installed
1512 <li>Show a message to the user proposing to install the discovered
1513 package, and make it easy to install it.</li>
1517 <p>I am not sure what the best way to implement this is, but my
1518 initial idea was to use dbus events to discover new hardware, the
1519 discover database to find packages and
1520 <a href="http://www.packagekit.org/
">PackageKit</a> to install
1523 <p>Yesterday, I found time to try to implement this idea, and the
1524 draft package is now checked into
1525 <a href="http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/
">the
1526 Debian Edu subversion repository</a>. In the process, I updated the
1527 <a href="http://packages.qa.debian.org/d/discover-data.html
">discover-data</a>
1528 package to map the USB ids of LEGO Mindstorms and Yubikey devices to
1529 the relevant packages in Debian, and uploaded a new version
1530 2.2013.01.09 to unstable. I also discovered that the current
1531 <a href="http://packages.qa.debian.org/d/discover.html
">discover</a>
1532 package in Debian no longer discovered any USB devices, because
1533 /proc/bus/usb/devices is no longer present. I ported it to use
1534 libusb as a fall back option to get it working. The fixed package
1535 version 2.1.2-6 is now in experimental (didn't upload it to unstable
1536 because of the freeze).</p>
1538 <p>With this prototype in place, I can insert my Yubikey, and get this
1539 desktop notification to show up (only once, the first time it is
1542 <p align="center
"><img src="http://people.skolelinux.org/pere/blog/images/
2013-
01-
09-hw-autoinstall.png
"></p>
1544 <p>For this prototype to be really useful, some way to automatically
1545 install the proposed packages by pressing the "Please install
1546 program(s)" button should to be implemented.
</p>
1548 <p>If this idea seem useful to you, and you want to help make it
1549 happen, please help me update the discover-data database with mappings
1550 from hardware to Debian packages. Check if 'discover-pkginstall -l'
1551 list the package you would like to have installed when a given
1552 hardware device is inserted into your computer, and report bugs using
1553 reportbug if it isn't. Or, if you know of a better way to provide
1554 such mapping, please let me know.
</p>
1556 <p>This prototype need more work, and there are several questions that
1557 should be considered before it is ready for production use. Is dbus
1558 the correct way to detect new hardware? At the moment I look for HAL
1559 dbus events on the system bus, because that is the events I could see
1560 on my Debian Squeeze KDE desktop. Are there better events to use?
1561 How should the user be notified? Is the desktop notification
1562 mechanism the best option, or should the background daemon raise a
1563 popup instead? How should packages be installed? When should they
1564 not be installed?
</p>
1566 <p>If you want to help getting such feature implemented in Debian,
1567 please send me an email. :)
</p>
1573 Tags:
<a href=
"http://people.skolelinux.org/pere/blog/tags/debian">debian
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram
</a>.
1578 <div class=
"padding"></div>
1580 <p style=
"text-align: right;"><a href=
"isenkram.rss"><img src=
"http://people.skolelinux.org/pere/blog/xml.gif" alt=
"RSS Feed" width=
"36" height=
"14" /></a></p>
1591 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2017/01/">January (
4)
</a></li>
1593 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2017/02/">February (
3)
</a></li>
1595 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2017/03/">March (
5)
</a></li>
1597 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2017/04/">April (
2)
</a></li>
1604 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2016/01/">January (
3)
</a></li>
1606 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2016/02/">February (
2)
</a></li>
1608 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2016/03/">March (
3)
</a></li>
1610 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2016/04/">April (
8)
</a></li>
1612 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2016/05/">May (
8)
</a></li>
1614 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2016/06/">June (
2)
</a></li>
1616 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2016/07/">July (
2)
</a></li>
1618 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2016/08/">August (
5)
</a></li>
1620 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2016/09/">September (
2)
</a></li>
1622 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2016/10/">October (
3)
</a></li>
1624 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2016/11/">November (
8)
</a></li>
1626 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2016/12/">December (
5)
</a></li>
1633 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2015/01/">January (
7)
</a></li>
1635 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2015/02/">February (
6)
</a></li>
1637 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2015/03/">March (
1)
</a></li>
1639 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2015/04/">April (
4)
</a></li>
1641 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2015/05/">May (
3)
</a></li>
1643 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2015/06/">June (
4)
</a></li>
1645 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2015/07/">July (
6)
</a></li>
1647 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2015/08/">August (
2)
</a></li>
1649 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2015/09/">September (
2)
</a></li>
1651 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2015/10/">October (
9)
</a></li>
1653 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2015/11/">November (
6)
</a></li>
1655 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2015/12/">December (
3)
</a></li>
1662 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2014/01/">January (
2)
</a></li>
1664 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2014/02/">February (
3)
</a></li>
1666 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2014/03/">March (
8)
</a></li>
1668 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2014/04/">April (
7)
</a></li>
1670 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2014/05/">May (
1)
</a></li>
1672 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2014/06/">June (
2)
</a></li>
1674 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2014/07/">July (
2)
</a></li>
1676 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2014/08/">August (
2)
</a></li>
1678 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2014/09/">September (
5)
</a></li>
1680 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2014/10/">October (
6)
</a></li>
1682 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2014/11/">November (
3)
</a></li>
1684 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2014/12/">December (
5)
</a></li>
1691 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/01/">January (
11)
</a></li>
1693 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/02/">February (
9)
</a></li>
1695 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/03/">March (
9)
</a></li>
1697 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/04/">April (
6)
</a></li>
1699 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/05/">May (
9)
</a></li>
1701 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/06/">June (
10)
</a></li>
1703 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/07/">July (
7)
</a></li>
1705 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/08/">August (
3)
</a></li>
1707 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/09/">September (
5)
</a></li>
1709 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/10/">October (
7)
</a></li>
1711 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/11/">November (
9)
</a></li>
1713 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/12/">December (
3)
</a></li>
1720 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/01/">January (
7)
</a></li>
1722 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/02/">February (
10)
</a></li>
1724 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/03/">March (
17)
</a></li>
1726 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/04/">April (
12)
</a></li>
1728 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/05/">May (
12)
</a></li>
1730 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/06/">June (
20)
</a></li>
1732 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/07/">July (
17)
</a></li>
1734 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/08/">August (
6)
</a></li>
1736 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/09/">September (
9)
</a></li>
1738 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/10/">October (
17)
</a></li>
1740 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/11/">November (
10)
</a></li>
1742 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/12/">December (
7)
</a></li>
1749 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/01/">January (
16)
</a></li>
1751 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/02/">February (
6)
</a></li>
1753 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/03/">March (
6)
</a></li>
1755 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/04/">April (
7)
</a></li>
1757 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/05/">May (
3)
</a></li>
1759 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/06/">June (
2)
</a></li>
1761 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/07/">July (
7)
</a></li>
1763 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/08/">August (
6)
</a></li>
1765 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/09/">September (
4)
</a></li>
1767 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/10/">October (
2)
</a></li>
1769 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/11/">November (
3)
</a></li>
1771 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/12/">December (
1)
</a></li>
1778 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/01/">January (
2)
</a></li>
1780 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/02/">February (
1)
</a></li>
1782 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/03/">March (
3)
</a></li>
1784 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/04/">April (
3)
</a></li>
1786 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/05/">May (
9)
</a></li>
1788 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/06/">June (
14)
</a></li>
1790 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/07/">July (
12)
</a></li>
1792 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/08/">August (
13)
</a></li>
1794 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/09/">September (
7)
</a></li>
1796 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/10/">October (
9)
</a></li>
1798 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/11/">November (
13)
</a></li>
1800 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/12/">December (
12)
</a></li>
1807 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/01/">January (
8)
</a></li>
1809 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/02/">February (
8)
</a></li>
1811 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/03/">March (
12)
</a></li>
1813 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/04/">April (
10)
</a></li>
1815 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/05/">May (
9)
</a></li>
1817 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/06/">June (
3)
</a></li>
1819 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/07/">July (
4)
</a></li>
1821 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/08/">August (
3)
</a></li>
1823 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/09/">September (
1)
</a></li>
1825 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/10/">October (
2)
</a></li>
1827 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/11/">November (
3)
</a></li>
1829 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/12/">December (
3)
</a></li>
1836 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2008/11/">November (
5)
</a></li>
1838 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2008/12/">December (
7)
</a></li>
1849 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer (
13)
</a></li>
1851 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/amiga">amiga (
1)
</a></li>
1853 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/aros">aros (
1)
</a></li>
1855 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/bankid">bankid (
4)
</a></li>
1857 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin (
9)
</a></li>
1859 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (
16)
</a></li>
1861 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/bsa">bsa (
2)
</a></li>
1863 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/chrpath">chrpath (
2)
</a></li>
1865 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/debian">debian (
148)
</a></li>
1867 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (
158)
</a></li>
1869 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/debian-handbook">debian-handbook (
3)
</a></li>
1871 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/digistan">digistan (
10)
</a></li>
1873 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/dld">dld (
16)
</a></li>
1875 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/docbook">docbook (
23)
</a></li>
1877 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/drivstoffpriser">drivstoffpriser (
4)
</a></li>
1879 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/english">english (
346)
</a></li>
1881 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (
23)
</a></li>
1883 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/fildeling">fildeling (
12)
</a></li>
1885 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/freeculture">freeculture (
29)
</a></li>
1887 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/freedombox">freedombox (
9)
</a></li>
1889 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/frikanalen">frikanalen (
18)
</a></li>
1891 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/h264">h264 (
20)
</a></li>
1893 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/intervju">intervju (
42)
</a></li>
1895 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram (
15)
</a></li>
1897 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/kart">kart (
20)
</a></li>
1899 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/ldap">ldap (
9)
</a></li>
1901 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/lenker">lenker (
8)
</a></li>
1903 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/lsdvd">lsdvd (
2)
</a></li>
1905 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/ltsp">ltsp (
1)
</a></li>
1907 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/mesh network">mesh network (
8)
</a></li>
1909 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia (
39)
</a></li>
1911 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/nice free software">nice free software (
9)
</a></li>
1913 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/norsk">norsk (
289)
</a></li>
1915 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/nuug">nuug (
188)
</a></li>
1917 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/offentlig innsyn">offentlig innsyn (
31)
</a></li>
1919 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/open311">open311 (
2)
</a></li>
1921 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (
64)
</a></li>
1923 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/personvern">personvern (
99)
</a></li>
1925 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/raid">raid (
1)
</a></li>
1927 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/reactos">reactos (
1)
</a></li>
1929 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/reprap">reprap (
11)
</a></li>
1931 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/rfid">rfid (
3)
</a></li>
1933 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/robot">robot (
10)
</a></li>
1935 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/rss">rss (
1)
</a></li>
1937 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/ruter">ruter (
5)
</a></li>
1939 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/scraperwiki">scraperwiki (
2)
</a></li>
1941 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet (
52)
</a></li>
1943 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary (
4)
</a></li>
1945 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/skepsis">skepsis (
5)
</a></li>
1947 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/standard">standard (
52)
</a></li>
1949 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll (
5)
</a></li>
1951 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/stortinget">stortinget (
11)
</a></li>
1953 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance (
48)
</a></li>
1955 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin (
3)
</a></li>
1957 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/usenix">usenix (
2)
</a></li>
1959 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/valg">valg (
8)
</a></li>
1961 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/video">video (
59)
</a></li>
1963 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/vitenskap">vitenskap (
4)
</a></li>
1965 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/web">web (
40)
</a></li>
1971 <p style=
"text-align: right">
1972 Created by
<a href=
"http://steve.org.uk/Software/chronicle">Chronicle v4.6
</a>