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: Install hardware dependent packages using tasksel (Isenkram
0.7)
</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" />
15 <a href=
"http://people.skolelinux.org/pere/blog/">Petter Reinholdtsen
</a>
23 <div class=
"title">Install hardware dependent packages using tasksel (Isenkram
0.7)
</div>
24 <div class=
"date">23rd April
2014</div>
25 <div class=
"body"><p>It would be nice if it was easier in Debian to get all the hardware
26 related packages relevant for the computer installed automatically.
27 So I implemented one, using
28 <a href=
"http://packages.qa.debian.org/isenkram">my Isenkram
29 package
</a>. To use it, install the tasksel and isenkram packages and
30 run tasksel as user root. You should be presented with a new option,
31 "Hardware specific packages (autodetected by isenkram)". When you
32 select it, tasksel will install the packages isenkram claim is fit for
33 the current hardware, hot pluggable or not.
<p>
35 <p>The implementation is in two files, one is the tasksel menu entry
36 description, and the other is the script used to extract the list of
37 packages to install. The first part is in
38 <tt>/usr/share/tasksel/descs/isenkram.desc
</tt> and look like
44 Description: Hardware specific packages (autodetected by isenkram)
45 Based on the detected hardware various hardware specific packages are
47 Test-new-install: mark show
49 Packages: for-current-hardware
50 </pre></blockquote></p>
52 <p>The second part is in
53 <tt>/usr/lib/tasksel/packages/for-current-hardware
</tt> and look like
61 isenkram-autoinstall-firmware -l
63 </pre></blockquote></p>
65 <p>All in all, a very short and simple implementation making it
66 trivial to install the hardware dependent package we all may want to
67 have installed on our machines. I've not been able to find a way to
68 get tasksel to tell you exactly which packages it plan to install
69 before doing the installation. So if you are curious or careful,
70 check the output from the isenkram-* command line tools first.
</p>
72 <p>The information about which packages are handling which hardware is
73 fetched either from the isenkram package itself in
74 /usr/share/isenkram/, from git.debian.org or from the APT package
75 database (using the Modaliases header). The APT package database
76 parsing have caused a nasty resource leak in the isenkram daemon (bugs
77 <a href=
"http://bugs.debian.org/719837">#
719837</a> and
78 <a href=
"http://bugs.debian.org/730704">#
730704</a>). The cause is in
79 the python-apt code (bug
80 <a href=
"http://bugs.debian.org/745487">#
745487</a>), but using a
81 workaround I was able to get rid of the file descriptor leak and
82 reduce the memory leak from ~
30 MiB per hardware detection down to
83 around
2 MiB per hardware detection. It should make the desktop
84 daemon a lot more useful. The fix is in version
0.7 uploaded to
87 <p>I believe the current way of mapping hardware to packages in
88 Isenkram is is a good draft, but in the future I expect isenkram to
89 use the AppStream data source for this. A proposal for getting proper
90 AppStream support into Debian is floating around as
91 <a href=
"https://wiki.debian.org/DEP-11">DEP-
11</a>, and
92 <a href=
"https://wiki.debian.org/SummerOfCode2014/Projects#SummerOfCode2014.2FProjects.2FAppStreamDEP11Implementation.AppStream.2FDEP-11_for_the_Debian_Archive">GSoC
93 project
</a> will take place this summer to improve the situation. I
94 look forward to seeing the result, and welcome patches for isenkram to
95 start using the information when it is ready.
</p>
97 <p>If you want your package to map to some specific hardware, either
98 add a "Xb-Modaliases" header to your control file like I did in
99 <a href=
"http://packages.qa.debian.org/pymissile">the pymissile
100 package
</a> or submit a bug report with the details to the isenkram
102 <a href=
"http://people.skolelinux.org/pere/blog/tags/isenkram/">all my
103 blog posts tagged isenkram
</a> for details on the notation. I expect
104 the information will be migrated to AppStream eventually, but for the
105 moment I got no better place to store it.
</p>
108 <div class=
"tags">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>.
</div>
126 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2017/01/">January (
4)
</a></li>
128 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2017/02/">February (
3)
</a></li>
130 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2017/03/">March (
5)
</a></li>
132 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2017/04/">April (
2)
</a></li>
134 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2017/06/">June (
5)
</a></li>
136 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2017/07/">July (
1)
</a></li>
138 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2017/08/">August (
1)
</a></li>
140 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2017/09/">September (
3)
</a></li>
142 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2017/10/">October (
1)
</a></li>
149 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2016/01/">January (
3)
</a></li>
151 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2016/02/">February (
2)
</a></li>
153 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2016/03/">March (
3)
</a></li>
155 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2016/04/">April (
8)
</a></li>
157 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2016/05/">May (
8)
</a></li>
159 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2016/06/">June (
2)
</a></li>
161 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2016/07/">July (
2)
</a></li>
163 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2016/08/">August (
5)
</a></li>
165 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2016/09/">September (
2)
</a></li>
167 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2016/10/">October (
3)
</a></li>
169 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2016/11/">November (
8)
</a></li>
171 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2016/12/">December (
5)
</a></li>
178 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2015/01/">January (
7)
</a></li>
180 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2015/02/">February (
6)
</a></li>
182 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2015/03/">March (
1)
</a></li>
184 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2015/04/">April (
4)
</a></li>
186 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2015/05/">May (
3)
</a></li>
188 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2015/06/">June (
4)
</a></li>
190 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2015/07/">July (
6)
</a></li>
192 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2015/08/">August (
2)
</a></li>
194 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2015/09/">September (
2)
</a></li>
196 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2015/10/">October (
9)
</a></li>
198 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2015/11/">November (
6)
</a></li>
200 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2015/12/">December (
3)
</a></li>
207 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2014/01/">January (
2)
</a></li>
209 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2014/02/">February (
3)
</a></li>
211 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2014/03/">March (
8)
</a></li>
213 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2014/04/">April (
7)
</a></li>
215 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2014/05/">May (
1)
</a></li>
217 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2014/06/">June (
2)
</a></li>
219 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2014/07/">July (
2)
</a></li>
221 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2014/08/">August (
2)
</a></li>
223 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2014/09/">September (
5)
</a></li>
225 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2014/10/">October (
6)
</a></li>
227 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2014/11/">November (
3)
</a></li>
229 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2014/12/">December (
5)
</a></li>
236 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/01/">January (
11)
</a></li>
238 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/02/">February (
9)
</a></li>
240 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/03/">March (
9)
</a></li>
242 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/04/">April (
6)
</a></li>
244 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/05/">May (
9)
</a></li>
246 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/06/">June (
10)
</a></li>
248 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/07/">July (
7)
</a></li>
250 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/08/">August (
3)
</a></li>
252 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/09/">September (
5)
</a></li>
254 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/10/">October (
7)
</a></li>
256 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/11/">November (
9)
</a></li>
258 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/12/">December (
3)
</a></li>
265 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/01/">January (
7)
</a></li>
267 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/02/">February (
10)
</a></li>
269 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/03/">March (
17)
</a></li>
271 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/04/">April (
12)
</a></li>
273 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/05/">May (
12)
</a></li>
275 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/06/">June (
20)
</a></li>
277 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/07/">July (
17)
</a></li>
279 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/08/">August (
6)
</a></li>
281 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/09/">September (
9)
</a></li>
283 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/10/">October (
17)
</a></li>
285 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/11/">November (
10)
</a></li>
287 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/12/">December (
7)
</a></li>
294 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/01/">January (
16)
</a></li>
296 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/02/">February (
6)
</a></li>
298 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/03/">March (
6)
</a></li>
300 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/04/">April (
7)
</a></li>
302 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/05/">May (
3)
</a></li>
304 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/06/">June (
2)
</a></li>
306 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/07/">July (
7)
</a></li>
308 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/08/">August (
6)
</a></li>
310 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/09/">September (
4)
</a></li>
312 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/10/">October (
2)
</a></li>
314 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/11/">November (
3)
</a></li>
316 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/12/">December (
1)
</a></li>
323 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/01/">January (
2)
</a></li>
325 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/02/">February (
1)
</a></li>
327 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/03/">March (
3)
</a></li>
329 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/04/">April (
3)
</a></li>
331 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/05/">May (
9)
</a></li>
333 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/06/">June (
14)
</a></li>
335 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/07/">July (
12)
</a></li>
337 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/08/">August (
13)
</a></li>
339 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/09/">September (
7)
</a></li>
341 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/10/">October (
9)
</a></li>
343 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/11/">November (
13)
</a></li>
345 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/12/">December (
12)
</a></li>
352 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/01/">January (
8)
</a></li>
354 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/02/">February (
8)
</a></li>
356 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/03/">March (
12)
</a></li>
358 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/04/">April (
10)
</a></li>
360 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/05/">May (
9)
</a></li>
362 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/06/">June (
3)
</a></li>
364 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/07/">July (
4)
</a></li>
366 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/08/">August (
3)
</a></li>
368 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/09/">September (
1)
</a></li>
370 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/10/">October (
2)
</a></li>
372 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/11/">November (
3)
</a></li>
374 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/12/">December (
3)
</a></li>
381 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2008/11/">November (
5)
</a></li>
383 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2008/12/">December (
7)
</a></li>
394 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer (
13)
</a></li>
396 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/amiga">amiga (
1)
</a></li>
398 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/aros">aros (
1)
</a></li>
400 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/bankid">bankid (
4)
</a></li>
402 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin (
9)
</a></li>
404 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (
16)
</a></li>
406 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/bsa">bsa (
2)
</a></li>
408 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/chrpath">chrpath (
2)
</a></li>
410 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/debian">debian (
153)
</a></li>
412 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (
158)
</a></li>
414 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/debian-handbook">debian-handbook (
4)
</a></li>
416 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/digistan">digistan (
10)
</a></li>
418 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/dld">dld (
17)
</a></li>
420 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/docbook">docbook (
24)
</a></li>
422 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/drivstoffpriser">drivstoffpriser (
4)
</a></li>
424 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/english">english (
353)
</a></li>
426 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (
23)
</a></li>
428 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/fildeling">fildeling (
12)
</a></li>
430 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/freeculture">freeculture (
30)
</a></li>
432 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/freedombox">freedombox (
9)
</a></li>
434 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/frikanalen">frikanalen (
18)
</a></li>
436 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/h264">h264 (
20)
</a></li>
438 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/intervju">intervju (
42)
</a></li>
440 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram (
15)
</a></li>
442 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/kart">kart (
20)
</a></li>
444 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/ldap">ldap (
9)
</a></li>
446 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/lenker">lenker (
8)
</a></li>
448 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/lsdvd">lsdvd (
2)
</a></li>
450 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/ltsp">ltsp (
1)
</a></li>
452 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/mesh network">mesh network (
8)
</a></li>
454 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia (
39)
</a></li>
456 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/nice free software">nice free software (
9)
</a></li>
458 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/norsk">norsk (
293)
</a></li>
460 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/nuug">nuug (
189)
</a></li>
462 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/offentlig innsyn">offentlig innsyn (
33)
</a></li>
464 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/open311">open311 (
2)
</a></li>
466 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (
64)
</a></li>
468 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/personvern">personvern (
104)
</a></li>
470 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/raid">raid (
1)
</a></li>
472 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/reactos">reactos (
1)
</a></li>
474 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/reprap">reprap (
11)
</a></li>
476 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/rfid">rfid (
3)
</a></li>
478 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/robot">robot (
10)
</a></li>
480 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/rss">rss (
1)
</a></li>
482 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/ruter">ruter (
5)
</a></li>
484 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/scraperwiki">scraperwiki (
2)
</a></li>
486 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet (
53)
</a></li>
488 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary (
4)
</a></li>
490 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/skepsis">skepsis (
5)
</a></li>
492 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/standard">standard (
55)
</a></li>
494 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll (
6)
</a></li>
496 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/stortinget">stortinget (
12)
</a></li>
498 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance (
52)
</a></li>
500 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin (
3)
</a></li>
502 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/usenix">usenix (
2)
</a></li>
504 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/valg">valg (
9)
</a></li>
506 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/video">video (
59)
</a></li>
508 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/vitenskap">vitenskap (
4)
</a></li>
510 <li><a href=
"http://people.skolelinux.org/pere/blog/tags/web">web (
40)
</a></li>
516 <p style=
"text-align: right">
517 Created by
<a href=
"http://steve.org.uk/Software/chronicle">Chronicle v4.6
</a>