]> pere.pagekite.me Git - homepage.git/blob - blog/tags/debian/debian.rss
bc3c0ffdce862121248c416f2c07990651aba781
[homepage.git] / blog / tags / debian / debian.rss
1 <?xml version="1.0" encoding="utf-8"?>
2 <rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/'>
3 <channel>
4 <title>Petter Reinholdtsen - Entries tagged debian</title>
5 <description>Entries tagged debian</description>
6 <link>http://www.hungry.com/~pere/blog/</link>
7
8
9 <item>
10 <title>What is the most supported MIME type in Debian in 2025?</title>
11 <link>http://www.hungry.com/~pere/blog/What_is_the_most_supported_MIME_type_in_Debian_in_2025_.html</link>
12 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/What_is_the_most_supported_MIME_type_in_Debian_in_2025_.html</guid>
13 <pubDate>Sat, 18 Jan 2025 10:30:00 +0100</pubDate>
14 <description>&lt;p&gt;&lt;a href=&quot;http://www.hungry.com/~pere/blog/What_is_the_most_supported_MIME_type_in_Debian_in_2018_.html&quot;&gt;Seven&lt;/a&gt;
15 and
16 &lt;a href=&quot;http://www.hungry.com/~pere/blog/What_is_the_most_supported_MIME_type_in_Debian_.html&quot;&gt;twelve&lt;/a&gt;
17 years ago, I measured what the most supported MIME type in Debian
18 was&lt;/a&gt;, first by analysing the desktop files in all packages in the
19 archive, then by analysing the DEP-11 AppStream data set. I guess it
20 is time to repeat the measurement, only for unstable as last time:&lt;/p&gt;
21
22 &lt;p&gt;&lt;strong&gt;Debian Unstable:&lt;/strong&gt;&lt;/p&gt;
23
24 &lt;pre&gt;
25 count MIME type
26 ----- -----------------------
27 63 image/png
28 63 image/jpeg
29 57 image/tiff
30 54 image/gif
31 51 image/bmp
32 50 audio/mpeg
33 48 text/plain
34 42 audio/x-mp3
35 40 application/ogg
36 39 audio/x-wav
37 39 audio/x-flac
38 36 audio/x-vorbis+ogg
39 35 audio/x-mpeg
40 34 audio/x-mpegurl
41 34 audio/ogg
42 33 application/x-ogg
43 32 audio/mp4
44 31 audio/x-scpls
45 31 application/pdf
46 29 audio/x-ms-wma
47 &lt;/pre&gt;
48
49 &lt;p&gt;The list was created like this using a sid chroot:&lt;/p&gt;
50
51 &lt;pre&gt;
52 cat /var/lib/apt/lists/*sid*_dep11_Components-amd64.yml.gz | \
53 zcat | awk &#39;/^ - \S+\/\S+$/ {print $2 }&#39; | sort | \
54 uniq -c | sort -nr | head -20
55 &lt;/pre&gt;
56
57 &lt;p&gt;It is nice to see that the same number of packages now support PNG
58 and JPEG. Last time JPEG had more support than PNG. Most of the MIME
59 types are known to me, but the &#39;audio/x-scpls&#39; one I have no idea what
60 represent, except it being an audio format. To find the packages
61 claiming support for this format, the appstreamcli command from the
62 appstream package can be used:
63
64 &lt;pre&gt;
65 % appstreamcli what-provides mediatype audio/x-scpls | grep Package: | sort -u
66 Package: alsaplayer-common
67 Package: amarok
68 Package: audacious
69 Package: brasero
70 Package: celluloid
71 Package: clapper
72 Package: clementine
73 Package: cynthiune.app
74 Package: elisa
75 Package: gtranscribe
76 Package: kaffeine
77 Package: kmplayer
78 Package: kylin-burner
79 Package: lollypop
80 Package: mediaconch-gui
81 Package: mediainfo-gui
82 Package: mplayer-gui
83 Package: mpv
84 Package: mystiq
85 Package: parlatype
86 Package: parole
87 Package: pragha
88 Package: qmmp
89 Package: rhythmbox
90 Package: sayonara
91 Package: shotcut
92 Package: smplayer
93 Package: soundconverter
94 Package: strawberry
95 Package: syncplay
96 Package: vlc
97 %
98 &lt;/pre&gt;
99
100 &lt;p&gt;Look like several video and auto tools understand the format.
101 Similarly one can check out the number of packages supporting the STL
102 format commonly used for 3D printing:&lt;/p&gt;
103
104 &lt;pre&gt;
105 % appstreamcli what-provides mediatype model/stl | grep Package: | sort -u
106 Package: cura
107 Package: freecad
108 Package: open3d-viewer
109 %
110 &lt;/pre&gt;
111
112 &lt;p&gt;How strange the
113 &lt;a href=&quot;https://tracker.debian.org/pkg/slic3r&quot;&gt;slic3r&lt;/a&gt; and
114 &lt;a href=&quot;https://tracker.debian.org/pkg/slic3r-prusa&quot;&gt;prusa-slicer&lt;/a&gt;
115 packages do not support STL. Perhaps just missing package metadata?
116 Luckily the amount of package metadata in Debian is getting better,
117 and hopefully this way of locating relevant packages for any file
118 format will be the preferred one soon.
119
120 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
121 activities, please send Bitcoin donations to my address
122 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
123 </description>
124 </item>
125
126 <item>
127 <title>The 2025 LinuxCNC Norwegian developer gathering</title>
128 <link>http://www.hungry.com/~pere/blog/The_2025_LinuxCNC_Norwegian_developer_gathering.html</link>
129 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/The_2025_LinuxCNC_Norwegian_developer_gathering.html</guid>
130 <pubDate>Sat, 11 Jan 2025 14:30:00 +0100</pubDate>
131 <description>&lt;p&gt;&lt;a href=&quot;https://linuxcnc.org/&quot;&gt;The LinuxCNC project&lt;/a&gt; is
132 trotting along. And I believe this great software system for
133 numerical control of machines such as milling machines, lathes, plasma
134 cutters, routers, cutting machines, robots and hexapods, would do even
135 better with more in-person developer gatherings, so we plan to
136 organise such gathering this summer too.&lt;/p&gt;
137
138 &lt;p&gt;This year we would like to invite to a small LinuxCNC and free
139 software fabrication workshop/gathering in Norway this summer for the
140 weekend starting July 4th 2025. New this year is the slightly larger
141 scope, and we invite people also outside the LinuxCNC community to
142 join. As earlier, we suggest to organize it as an
143 &lt;a href=&quot;https://en.wikipedia.org/wiki/Unconference&quot;&gt;unconference&lt;/a&gt;,
144 where the participants create the program upon arrival.&lt;/p&gt;
145
146 &lt;p&gt;The location is a metal workshop 15 minutes drive away from to the
147 Gardermoen airport (OSL), where there is a lot of space and a hotel only
148 5 minutes away by car. We plan to fire up the barbeque in the evenings.&lt;/p&gt;
149
150 &lt;p&gt;Please let us know if you would like to join. We track the list of
151 participants on &lt;a href=&quot;https://pad.efn.no/p/linuxcnc-2025-norway&quot;&gt;a
152 simple pad&lt;/a&gt;, please add yourself there if you are interested in joining.&lt;/p&gt;
153
154 &lt;p&gt;&lt;a href=&quot;https://www.nuugfoundation.no/&quot;&gt;The NUUG Foundation&lt;/a&gt; has on
155 our request offered to handle any money involved with this gathering,
156 in other words holding any sponsor funds and paying any bills.
157 NUUG Foundation is a spinnoff from the NUUG member organisation here
158 in Norway with long ties to the free software and open standards
159 communities.&lt;/p&gt;
160
161 &lt;p&gt;As usual we hope to find sponsors to pay for food, lodging and travel.&lt;/p&gt;
162
163 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
164 activities, please send Bitcoin donations to my address
165 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
166 </description>
167 </item>
168
169 <item>
170 <title>New lsdvd release 0.18 after ten years</title>
171 <link>http://www.hungry.com/~pere/blog/New_lsdvd_release_0_18_after_ten_years.html</link>
172 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/New_lsdvd_release_0_18_after_ten_years.html</guid>
173 <pubDate>Sat, 21 Dec 2024 10:50:00 +0100</pubDate>
174 <description>&lt;p&gt;The rumors of the death of
175 &lt;a href=&quot;https://sourceforge.net/projects/lsdvd/&quot;&gt;the lsdvd project&lt;/a&gt;
176 is slightly exaggerated. And the last few months, we have been
177 working on fixing and improving it, culminating in a new release last
178 night. This is the list of changes in the new 0.18 release, as
179 &lt;a href=&quot;https://sourceforge.net/p/lsdvd/mailman/message/59108028/&quot;&gt;announced
180 on the project mailing list&lt;/a&gt;:&lt;/p&gt;
181
182 &lt;ul&gt;
183
184 &lt;li&gt;Simplified autoconf setup, dropped --enable-debug option.&lt;/li&gt;
185 &lt;li&gt;Improved video resolution reporting (&lt;a href=&quot;https://sourceforge.net/p/lsdvd/patches/8/&quot;&gt;Fixes #8&lt;/a&gt;).&lt;/li&gt;
186 &lt;li&gt;Applied patches fetched from BSDs (&lt;a href=&quot;https://sourceforge.net/p/lsdvd/patches/7/&quot;&gt;Fixes #7&lt;/a&gt;).&lt;/li&gt;
187 &lt;li&gt;Corrected Perl output (&lt;a href=&quot;https://sourceforge.net/p/lsdvd/patches/1/&quot;&gt;Fixes #1&lt;/a&gt;).&lt;/li&gt;
188 &lt;li&gt;Adjusted Pan and Scan entries to produce valid XML.&lt;/li&gt;
189 &lt;li&gt;Changed --help output from stderr to stdout.&lt;/li&gt;
190 &lt;li&gt;Corrected aspect ratio and audio format formatting.&lt;/li&gt;
191 &lt;li&gt;Avoid segfault when hitting a NULL pointer in the IFO structure.&lt;/li&gt;
192 &lt;li&gt;Change build rules to supress compiler flags, to make it easier to
193 spot warnings.&lt;/li&gt;
194 &lt;li&gt;Set default DVD device based on OS (Linux, *BSD, Darwin)&lt;/li&gt;
195 &lt;li&gt;Added libdvdread DVDDiscID to output.&lt;/li&gt;
196 &lt;li&gt;Corrected typo in longest track value in XML format.&lt;/li&gt;
197 &lt;li&gt;Switched XML output to use libxml to avoid string encoding issues.&lt;/li&gt;
198 &lt;li&gt;Added simple build time test suite.&lt;/li&gt;
199 &lt;li&gt;Cleaned up language code handling and adding missing mapping for
200 language codes &#39;nb&#39; and &#39;nn&#39;.&lt;/li&gt;
201 &lt;li&gt;Added JSON output support using -Oj.&lt;/li&gt;
202 &lt;/ul&gt;
203
204 &lt;p&gt;The most exciting news to me is easy access to the DVDDiscID, which
205 make it a lot easier to identify DVD duplicates across a large
206 collection of DVDs. During testing it has proved to be very effective
207 ad identifying when DVDs in a DVD box (say all Star Wars movies) is
208 identical to DVDs sold individually (like the same Star Wars movies
209 packaged individually).&lt;/p&gt;
210
211 &lt;p&gt;Because none of the current developers got access to do tarball
212 releases on Sourceforge any more, the release is only available as
213 &lt;a href=&quot;https://sourceforge.net/p/lsdvd/git/ci/0.18/tree/&quot;&gt;a git
214 tag&lt;/a&gt; in the repository. Lets hope it do not take ten years for the
215 next release. The project are discussing to move away from
216 Sourceforge, but it has not yet concluded.&lt;/p&gt;
217
218 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
219 activities, please send Bitcoin donations to my address
220 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
221 </description>
222 </item>
223
224 <item>
225 <title>More than 200 orphaned Debian packages moved to git, 216 to go</title>
226 <link>http://www.hungry.com/~pere/blog/More_than_200_orphaned_Debian_packages_moved_to_git__216_to_go.html</link>
227 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/More_than_200_orphaned_Debian_packages_moved_to_git__216_to_go.html</guid>
228 <pubDate>Thu, 11 Jul 2024 12:30:00 +0200</pubDate>
229 <description>&lt;p&gt;&lt;a href=&quot;http://www.hungry.com/~pere/blog/Time_to_move_orphaned_Debian_packages_to_git.html&quot;&gt;In
230 April&lt;/a&gt;, I started migrating orphaned Debian packages without any
231 version control system listed in debian/control to git. This morning,
232 my Debian QA page finally reached 200 QA packages migrated. In
233 reality there are a few more, as the packages uploaded by someone else
234 after my initial upload have disappeared from my QA uploads list. As
235 I am running out of steam and will most likely focus on other parts of
236 Debian moving forward, I hope someone else will find time to continue
237 the migration to bring the number of orphaned packages without any
238 version control system down to zero. Here is the updated recipe if
239 someone want to help out.&lt;/p&gt;
240
241 &lt;p&gt;To locate packages to work on, the following one-liner can be used:&lt;/p&gt;
242
243 &lt;blockquote&gt;&lt;pre&gt;
244 PGPASSWORD=&quot;udd-mirror&quot; psql --port=5432 --host=udd-mirror.debian.net \
245 --username=udd-mirror udd -c &quot;select source from sources \
246 where release = &#39;sid&#39; and (vcs_url ilike &#39;%anonscm.debian.org%&#39; \
247 OR vcs_browser ilike &#39;%anonscm.debian.org%&#39; or vcs_url IS NULL \
248 OR vcs_browser IS NULL) AND maintainer ilike &#39;%packages@qa.debian.org%&#39; \
249 order by random() limit 10;&quot;
250 &lt;/pre&gt;&lt;/blockquote&gt;
251
252 &lt;p&gt;Pick a random package from the list and run the latest edition of
253 the script
254 &lt;tt&gt;&lt;a href=&quot;http://www.hungry.com/~pere/blog/images/2024-07-11-debian-snap-to-salsa.sh&quot;&gt;debian-snap-to-salsa&lt;/a&gt;&lt;/tt&gt;
255 with the package name as the argument to prepare a git repository with
256 the existing packaging. This will download old Debian packages from
257 &lt;tt&gt;snapshot.debian.org&lt;/tt&gt;. Note that very recent uploads will not
258 be included, so check out the package on &lt;tt&gt;tracker.debian.org&lt;/tt&gt;.
259 Next, run &lt;tt&gt;gbp buildpackage --git-ignore-new&lt;/tt&gt; to verify that
260 the package build as it should, and then visit
261 &lt;a href=&quot;https://salsa.debian.org/debian/&quot;&gt;https://salsa.debian.org/debian/&lt;/a&gt;
262 and make sure there is not already a git repository for the package
263 there. I also did &lt;tt&gt;git log -p debian/control&lt;/tt&gt; and look for vcs
264 entries to check if the package used to have a git repository on
265 Alioth, and see if it can be a useful starting point moving forward.
266 If all this check out, I created a new gitlab project below the Debian
267 group on salsa, push the package source there and upload a new version.
268 I tend to also ensure build hardening is enabled, if it prove to be
269 easy, and check if I can easily fix any lintian issues or bug reports.
270 If the process took more than 20 minutes, I dropped it and moved on to
271 another package.&lt;/p&gt;
272
273 &lt;p&gt;If I found patches in debian/patches/ that were not yet passed
274 upstream, I would send an email to make sure upstream know about them.
275 This has proved to be a valuable step, and caused several new releases
276 for software that initially appeared abandoned. :)&lt;/p&gt;
277
278 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
279 activities, please send Bitcoin donations to my address
280 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
281 </description>
282 </item>
283
284 <item>
285 <title>Some notes from the 2024 LinuxCNC Norwegian developer gathering</title>
286 <link>http://www.hungry.com/~pere/blog/Some_notes_from_the_2024_LinuxCNC_Norwegian_developer_gathering.html</link>
287 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Some_notes_from_the_2024_LinuxCNC_Norwegian_developer_gathering.html</guid>
288 <pubDate>Wed, 10 Jul 2024 14:45:00 +0200</pubDate>
289 <description>&lt;p&gt;The Norwegian &lt;a href=&quot;https://linuxcnc.org/&quot;&gt;The LinuxCNC&lt;/a&gt;
290 developer gathering 2024 is over. It was a great and productive
291 weekend, and I am sad that it is over.&lt;/p&gt;
292
293 &lt;p&gt;Regular readers probably still remember what LinuxCNC is, but her
294 is a quick summary for those that forgot? LinuxCNC is a free software
295 system for numerical control of machines such as milling machines,
296 lathes, plasma cutters, routers, cutting machines, robots and
297 hexapods. It eats G-code and produce motor movement and other changes
298 to the physical world, while reading sensor input.&lt;/p&gt;
299
300 &lt;p&gt;I am not quite sure about the total head count, as not all people
301 were present at the gathering the entire weekend, but I believe it was
302 close to 10 people showing their faces at the gathering. The &quot;hard
303 core&quot; of the group, who stayed the entire weekend, were two from
304 Norway, two from Germany and one from England. I am happy with the
305 outcome from the gathering. We managed to wrap up a new stable
306 LinuxCNC release 2.9.3 and even tested it on real hardware within
307 minutes of the release. The release notes for 2.9.3 are still being
308 written, but should show up on on the project site in the next few
309 days. We managed to go through around twenty pull requests and merge
310 then into either the stable release (2.9) or the development branch
311 (master). There are still around thirty pull requests left to
312 process, so we are not out of work yet. We even managed to
313 fix/improve a slightly worn lathe, and experiment with running a
314 mechanical clock using G-code.&lt;/p&gt;
315
316 &lt;p&gt;The evening barbeque worked well both on Saturday and Sunday. It
317 is quite fun to light up a charcoal grill using compressed air. Sadly
318 the weather was not the best, so we stayed indoors most of the
319 time.&lt;/p&gt;
320
321 &lt;p&gt;This gathering was made possible partly with sponsoring from both
322 &lt;a href=&quot;https://www.redpill-linpro.com/&quot;&gt;Redpill Linpro&lt;/a&gt;,
323 &lt;a href=&quot;https://debian.org/&quot;&gt;Debian&lt;/a&gt; and
324 &lt;a href=&quot;https://nuugfoundation.no/&quot;&gt;NUUG Foundation&lt;/a&gt;, and we are
325 most grateful for the support. I would also like to thank the local
326 school for lending us some furniture, and of course the rest of the
327 members of the organizers team, Asle and Bosse, for their countless
328 contributions. The gathering was such success that we want to do it
329 again next year.&lt;/p&gt;
330
331 &lt;p&gt;We plan to organize the next Norwegian LinuxCNC developer gathering
332 at the end of June next year, the weekend Friday 27th to Sunday 29th
333 of June 2025. I recommend you reserve the dates on your calendar
334 today. Other related communities are also welcome to join in, for
335 example those working on systems like FreeCAD and opencamlib, as I am
336 sure we have much in common and sharing experiences would be very
337 useful to all involved. We are of course looking for sponsors for
338 this gathering already. The total budget for this gathering was
339 around NOK 25.000 (around EUR 2.300), so our needs are quite modest.
340 Perhaps a machine or tools company would like to help out the free
341 software manufacturing community by sponsoring food, lodging and
342 transport for such gathering?&lt;/p&gt;
343 </description>
344 </item>
345
346 <item>
347 <title>The 2024 LinuxCNC Norwegian developer gathering</title>
348 <link>http://www.hungry.com/~pere/blog/The_2024_LinuxCNC_Norwegian_developer_gathering.html</link>
349 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/The_2024_LinuxCNC_Norwegian_developer_gathering.html</guid>
350 <pubDate>Fri, 31 May 2024 07:45:00 +0200</pubDate>
351 <description>&lt;p&gt;&lt;a href=&quot;https://linuxcnc.org/&quot;&gt;The LinuxCNC project&lt;/a&gt; is still
352 going strong. And I believe this great software system for numerical control of
353 machines such as milling machines, lathes, plasma cutters, routers,
354 cutting machines, robots and hexapods, would do even better with more
355 in-person developer gatherings, so we plan to organise such gathering
356 this summer too.&lt;/p&gt;
357
358 &lt;p&gt;The Norwegian LinuxCNC developer gathering take place the weekend
359 Friday July 5th to 7th this year, and is open for everyone interested
360 in contributing to LinuxCNC and free software manufacturing. Up to
361 date information about the gathering can be found in
362 &lt;a href=&quot;https://sourceforge.net/p/emc/mailman/emc-developers/thread/123eaae0-f3b9-4170-a251-b7d608f1e974%40bofh.no/&quot;&gt;the
363 developer mailing list thread&lt;/a&gt; where the gathering was announced.
364 Thanks to the good people at
365
366 &lt;a href=&quot;https://www.debian.org/&quot;&gt;Debian&lt;/a&gt; as well as leftover money
367 from last years gathering from
368 &lt;a href=&quot;https://www.redpill-linpro.com/&quot;&gt;Redpill-Linpro&lt;/a&gt; and
369 &lt;a href=&quot;https://www.nuugfoundation.no/no/&quot;&gt;NUUG Foundation&lt;/a&gt;, we
370 have enough sponsor funds to pay for food, and probably also shelter
371 for the people traveling from afar to join us. If you would like to
372 join the gathering, get in touch and add your details on
373 &lt;a href=&quot;https://pad.efn.no/p/linuxcnc-2024-norway&quot;&gt;the pad&lt;/a&gt;.&lt;/p&gt;
374
375 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
376 activities, please send Bitcoin donations to my address
377 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
378 </description>
379 </item>
380
381 <item>
382 <title>45 orphaned Debian packages moved to git, 391 to go</title>
383 <link>http://www.hungry.com/~pere/blog/45_orphaned_Debian_packages_moved_to_git__391_to_go.html</link>
384 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/45_orphaned_Debian_packages_moved_to_git__391_to_go.html</guid>
385 <pubDate>Thu, 25 Apr 2024 22:00:00 +0200</pubDate>
386 <description>&lt;p&gt;Nine days ago, I started migrating orphaned Debian packages with no
387 version control system listed in debian/control of the source to git.
388 At the time there were 438 such packages. Now there are 391,
389 according to the UDD. In reality it is slightly less, as there is a
390 delay between uploads and UDD updates. In the nine days since, I have
391 thus been able to work my way through ten percent of the packages. I
392 am starting to run out of steam, and hope someone else will also help
393 brushing some dust of these packages. Here is a recipe how to do it.
394
395 I start by picking a random package by querying the UDD for a list of
396 10 random packages from the set of remaining packages:
397
398 &lt;blockquote&gt;&lt;pre&gt;
399 PGPASSWORD=&quot;udd-mirror&quot; psql --port=5432 --host=udd-mirror.debian.net \
400 --username=udd-mirror udd -c &quot;select source from sources \
401 where release = &#39;sid&#39; and (vcs_url ilike &#39;%anonscm.debian.org%&#39; \
402 OR vcs_browser ilike &#39;%anonscm.debian.org%&#39; or vcs_url IS NULL \
403 OR vcs_browser IS NULL) AND maintainer ilike &#39;%packages@qa.debian.org%&#39; \
404 order by random() limit 10;&quot;
405 &lt;/pre&gt;&lt;/blockquote&gt;
406
407 &lt;p&gt;Next, I visit http://salsa.debian.org/debian and search for the
408 package name, to ensure no git repository already exist. If it does,
409 I clone it and try to get it to an uploadable state, and add the Vcs-*
410 entries in d/control to make the repository more widely known. These
411 packages are a minority, so I will not cover that use case here.&lt;/p&gt;
412
413 &lt;p&gt;For packages without an existing git repository, I run the
414 following script &lt;tt&gt;debian-snap-to-salsa&lt;/tt&gt; to prepare a git
415 repository with the existing packaging.&lt;/p&gt;
416
417 &lt;blockquote&gt;&lt;pre&gt;
418 #!/bin/sh
419 #
420 # See also https://bugs.debian.org/804722#31
421
422 set -e
423
424 # Move to this Standards-Version.
425 SV_LATEST=4.7.0
426
427 PKG=&quot;$1&quot;
428
429 if [ -z &quot;$PKG&quot; ]; then
430 echo &quot;usage: $0 &lt;pkgname&gt;&quot;
431 exit 1
432 fi
433
434 if [ -e &quot;${PKG}-salsa&quot; ]; then
435 echo &quot;error: ${PKG}-salsa already exist, aborting.&quot;
436 exit 1
437 fi
438
439 if [ -z &quot;ALLOWFAILURE&quot; ] ; then
440 ALLOWFAILURE=false
441 fi
442
443 # Fetch every snapshotted source package. Manually loop until all
444 # transfers succeed, as &#39;gbp import-dscs --debsnap&#39; do not fail on
445 # download failures.
446 until debsnap --force -v $PKG || $ALLOWFAILURE ; do sleep 1; done
447 mkdir ${PKG}-salsa; cd ${PKG}-salsa
448 git init
449
450 # Specify branches to override any debian/gbp.conf file present in the
451 # source package.
452 gbp import-dscs --debian-branch=master --upstream-branch=upstream \
453 --pristine-tar ../source-$PKG/*.dsc
454
455 # Add Vcs pointing to Salsa Debian project (must be manually created
456 # and pushed to).
457 if ! grep -q ^Vcs- debian/control ; then
458 awk &quot;BEGIN { s=1 } /^\$/ { if (s==1) { print \&quot;Vcs-Browser: https://salsa.debian.org/debian/$PKG\&quot;; print \&quot;Vcs-Git: https://salsa.debian.org/debian/$PKG.git\&quot; }; s=0 } { print }&quot; &lt; debian/control &gt; debian/control.new &amp;&amp; mv debian/control.new debian/control
459 git commit -m &quot;Updated vcs in d/control to Salsa.&quot; debian/control
460 fi
461
462 # Tell gbp to enforce the use of pristine-tar.
463 inifile +inifile debian/gbp.conf +create +section DEFAULT +key pristine-tar +value True
464 git add debian/gbp.conf
465 git commit -m &quot;Added d/gbp.conf to enforce the use of pristine-tar.&quot; debian/gbp.conf
466
467 # Update to latest Standards-Version.
468 SV=&quot;$(grep ^Standards-Version: debian/control|awk &#39;{print $2}&#39;)&quot;
469 if [ $SV_LATEST != $SV ]; then
470 sed -i &quot;s/\(Standards-Version: \)\(.*\)/\1$SV_LATEST/&quot; debian/control
471 git commit -m &quot;Updated Standards-Version from $SV to $SV_LATEST.&quot; debian/control
472 fi
473
474 if grep -q pkg-config debian/control; then
475 sed -i s/pkg-config/pkgconf/ debian/control
476 git commit -m &quot;Replaced obsolete pkg-config build dependency with pkgconf.&quot; debian/control
477 fi
478
479 if grep -q libncurses5-dev debian/control; then
480 sed -i s/libncurses5-dev/libncurses-dev/ debian/control
481 git commit -m &quot;Replaced obsolete libncurses5-dev build dependency with libncurses-dev.&quot; debian/control
482 fi
483 &lt;/pre&gt;&lt;/blockquote&gt;
484
485 Some times the debsnap script fail to download some of the versions.
486 In those cases I investigate, and if I decide the failing versions
487 will not be missed, I call it using ALLOWFAILURE=true to ignore the
488 problem and create the git repository anyway.&lt;/p&gt;
489
490 &lt;p&gt;With the git repository in place, I do a test build (gbp
491 buildpackage) to ensure the build is actually working. If it does not
492 I pick a different package, or if the build failure is trivial to fix,
493 I fix it before continuing. At this stage I revisit
494 http://salsa.debian.org/debian and create the project under this group
495 for the package. I then follow the instructions to publish the local
496 git repository. Here is from a recent example:&lt;/p&gt;
497
498 &lt;blockquote&gt;&lt;pre&gt;
499 git remote add origin git@salsa.debian.org:debian/perl-byacc.git
500 git push --set-upstream origin master upstream pristine-tar
501 git push --tags
502 &lt;/pre&gt;&lt;/blockquote&gt;
503
504 &lt;p&gt;With a working build, I have a look at the build rules if I want to
505 remove some more dust. I normally try to move to debhelper compat
506 level 13, which involves removing debian/compat and modifying
507 debian/control to build depend on debhelper-compat (=13). I also test
508 with &#39;Rules-Requires-Root: no&#39; in debian/control and verify in
509 debian/rules that hardening is enabled, and include all of these if
510 the package still build. If it fail to build with level 13, I try
511 with 12, 11, 10 and so on until I find a level where it build, as I do
512 not want to spend a lot of time fixing build issues.&lt;/p&gt;
513
514 &lt;p&gt;Some times, when I feel inspired, I make sure debian/copyright is
515 converted to the machine readable format, often by starting with
516 &#39;debhelper -cc&#39; and then cleaning up the autogenerated content until
517 it matches realities. If I feel like it, I might also clean up
518 non-dh-based debian/rules files to use the short style dh build
519 rules.&lt;/p&gt;
520
521 &lt;p&gt;Once I have removed all the dust I care to process for the package,
522 I run &#39;gbp dch&#39; to generate a debian/changelog entry based on the
523 commits done so far, run &#39;dch -r&#39; to switch from &#39;UNRELEASED&#39; to
524 &#39;unstable&#39; and get an editor to make sure the &#39;QA upload&#39; marker is in
525 place and that all long commit descriptions are wrapped into sensible
526 lengths, run &#39;debcommit --release -a&#39; to commit and tag the new
527 debian/changelog entry, run &#39;debuild -S&#39; to build a source only
528 package, and &#39;dput ../perl-byacc_2.0-10_source.changes&#39; to do the
529 upload. During the entire process, and many times per step, I run
530 &#39;debuild&#39; to verify the changes done still work. I also some times
531 verify the set of built files using &#39;find debian&#39; to see if I can spot
532 any problems (like no file in usr/bin any more or empty package). I
533 also try to fix all lintian issues reported at the end of each
534 &#39;debuild&#39; run.&lt;/p&gt;
535
536 &lt;p&gt;If I find Debian specific patches, I try to ensure their metadata
537 is fairly up to date and some times I even try to reach out to
538 upstream, to make the upstream project aware of the patches. Most of
539 my emails bounce, so the success rate is low. For projects with no
540 Homepage entry in debian/control I try to track down one, and for
541 packages with no debian/watch file I try to create one. But at least
542 for some of the packages I have been unable to find a functioning
543 upstream, and must skip both of these.&lt;/p&gt;
544
545 &lt;p&gt;If I could handle ten percent in nine days, twenty people could
546 complete the rest in less then five days. I use approximately twenty
547 minutes per package, when I have twenty minutes spare time to spend.
548 Perhaps you got twenty minutes to spare too?&lt;/p&gt;
549
550 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
551 activities, please send Bitcoin donations to my address
552 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
553
554 &lt;p&gt;&lt;strong&gt;Update 2024-05-04:&lt;/strong&gt; There is
555 &lt;a href=&quot;http://www.hungry.com/~pere/blog/images/2024-05-04-debian-snap-to-salsa.sh&quot;&gt;an
556 updated edition of my migration script&lt;/a&gt;, last updated
557 2024-05-04.&lt;/p&gt;
558 </description>
559 </item>
560
561 <item>
562 <title>Time to move orphaned Debian packages to git</title>
563 <link>http://www.hungry.com/~pere/blog/Time_to_move_orphaned_Debian_packages_to_git.html</link>
564 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Time_to_move_orphaned_Debian_packages_to_git.html</guid>
565 <pubDate>Sun, 14 Apr 2024 09:30:00 +0200</pubDate>
566 <description>&lt;p&gt;There are several packages in Debian without a associated git
567 repository with the packaging history. This is unfortunate and it
568 would be nice if more of these would do so. Quote a lot of these are
569 without a maintainer, ie listed as maintained by the
570 &#39;&lt;a href=&quot;https://qa.debian.org/developer.php?email=packages%40qa.debian.org&quot;&gt;Debian
571 QA Group&lt;/a&gt;&#39; place holder. In fact, 438 packages have this property
572 according to UDD (&lt;tt&gt;SELECT source FROM sources WHERE release = &#39;sid&#39;
573 AND (vcs_url ilike &#39;%anonscm.debian.org%&#39; OR vcs_browser ilike
574 &#39;%anonscm.debian.org%&#39; or vcs_url IS NULL OR vcs_browser IS NULL) AND
575 maintainer ilike &#39;%packages@qa.debian.org%&#39;;&lt;/tt&gt;). Such packages can
576 be updated without much coordination by any Debian developer, as they
577 are considered orphaned.&lt;/p&gt;
578
579 &lt;p&gt;To try to improve the situation and reduce the number of packages
580 without associated git repository, I started a few days ago to search
581 out candiates and provide them with a git repository under the
582 &#39;debian&#39; collaborative Salsa project. I started with the packages
583 pointing to obsolete Alioth git repositories, and am now working my
584 way across the ones completely without git references. In addition to
585 updating the Vcs-* debian/control fields, I try to update
586 Standards-Version, debhelper compat level, simplify d/rules, switch to
587 Rules-Requires-Root: no and fix lintian issues reported. I only
588 implement those that are trivial to fix, to avoid spending too much
589 time on each orphaned package. So far my experience is that it take
590 aproximately 20 minutes to convert a package without any git
591 references, and a lot more for packages with existing git repositories
592 incompatible with git-buildpackages.&lt;/p&gt;
593
594 &lt;p&gt;So far I have converted 10 packages, and I will keep going until I
595 run out of steam. As should be clear from the numbers, there is
596 enough packages remaining for more people to do the same without
597 stepping on each others toes. I find it useful to start by searching
598 for a git repo already on salsa, as I find that some times a git repo
599 has already been created, but no new version is uploaded to Debian
600 yet. In those cases I start with the existing git repository. I
601 convert to the git-buildpackage+pristine-tar workflow, and ensure a
602 debian/gbp.conf file with &quot;pristine-tar=True&quot; is added early, to avoid
603 uploading a orig.tar.gz with the wrong checksum by mistake. Did that
604 three times in the begin before I remembered my mistake.&lt;/p&gt;
605
606 &lt;p&gt;So, if you are a Debian Developer and got some spare time, perhaps
607 considering migrating some orphaned packages to git?&lt;/p&gt;
608
609 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
610 activities, please send Bitcoin donations to my address
611 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
612 </description>
613 </item>
614
615 <item>
616 <title>New and improved sqlcipher in Debian for accessing Signal database</title>
617 <link>http://www.hungry.com/~pere/blog/New_and_improved_sqlcipher_in_Debian_for_accessing_Signal_database.html</link>
618 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/New_and_improved_sqlcipher_in_Debian_for_accessing_Signal_database.html</guid>
619 <pubDate>Sun, 12 Nov 2023 12:00:00 +0100</pubDate>
620 <description>&lt;p&gt;For a while now I wanted to have direct access to the
621 &lt;a href=&quot;https://signal.org/&quot;&gt;Signal&lt;/a&gt; database of messages and
622 channels of my Desktop edition of Signal. I prefer the enforced end
623 to end encryption of Signal these days for my communication with
624 friends and family, to increase the level of safety and privacy as
625 well as raising the cost of the mass surveillance government and
626 non-government entities practice these days. In August I came across
627 a nice
628 &lt;a href=&quot;https://www.yoranbrondsema.com/post/the-guide-to-extracting-statistics-from-your-signal-conversations/&quot;&gt;recipe
629 on how to use sqlcipher to extract statistics from the Signal
630 database&lt;/a&gt; explaining how to do this. Unfortunately this did not
631 work with the version of sqlcipher in Debian. The
632 &lt;a href=&quot;http://tracker.debian.org/sqlcipher/&quot;&gt;sqlcipher&lt;/a&gt;
633 package is a &quot;fork&quot; of the sqlite package with added support for
634 encrypted databases. Sadly the current Debian maintainer
635 &lt;a href=&quot;https://bugs.debian.org/961598&quot;&gt;announced more than three
636 years ago that he did not have time to maintain sqlcipher&lt;/a&gt;, so it
637 seemed unlikely to be upgraded by the maintainer. I was reluctant to
638 take on the job myself, as I have very limited experience maintaining
639 shared libraries in Debian. After waiting and hoping for a few
640 months, I gave up the last week, and set out to update the package. In
641 the process I orphaned it to make it more obvious for the next person
642 looking at it that the package need proper maintenance.&lt;/p&gt;
643
644 &lt;p&gt;The version in Debian was around five years old, and quite a lot of
645 changes had taken place upstream into the Debian maintenance git
646 repository. After spending a few days importing the new upstream
647 versions, realising that upstream did not care much for SONAME
648 versioning as I saw library symbols being both added and removed with
649 minor version number changes to the project, I concluded that I had to
650 do a SONAME bump of the library package to avoid surprising the
651 reverse dependencies. I even added a simple
652 autopkgtest script to ensure the package work as intended. Dug deep
653 into the hole of learning shared library maintenance, I set out a few
654 days ago to upload the new version to Debian experimental to see what
655 the quality assurance framework in Debian had to say about the result.
656 The feedback told me the pacakge was not too shabby, and yesterday I
657 uploaded the latest version to Debian unstable. It should enter
658 testing today or tomorrow, perhaps delayed by
659 &lt;a href=&quot;https://bugs.debian.org/1055812&quot;&gt;a small library
660 transition&lt;/a&gt;.&lt;/p&gt;
661
662 &lt;p&gt;Armed with a new version of sqlcipher, I can now have a look at the
663 SQL database in ~/.config/Signal/sql/db.sqlite. First, one need to
664 fetch the encryption key from the Signal configuration using this
665 simple JSON extraction command:&lt;/p&gt;
666
667 &lt;pre&gt;/usr/bin/jq -r &#39;.&quot;key&quot;&#39; ~/.config/Signal/config.json&lt;/pre&gt;
668
669 &lt;p&gt;Assuming the result from that command is &#39;secretkey&#39;, which is a
670 hexadecimal number representing the key used to encrypt the database.
671 Next, one can now connect to the database and inject the encryption
672 key for access via SQL to fetch information from the database. Here
673 is an example dumping the database structure:&lt;/p&gt;
674
675 &lt;pre&gt;
676 % sqlcipher ~/.config/Signal/sql/db.sqlite
677 sqlite&gt; PRAGMA key = &quot;x&#39;secretkey&#39;&quot;;
678 sqlite&gt; .schema
679 CREATE TABLE sqlite_stat1(tbl,idx,stat);
680 CREATE TABLE conversations(
681 id STRING PRIMARY KEY ASC,
682 json TEXT,
683
684 active_at INTEGER,
685 type STRING,
686 members TEXT,
687 name TEXT,
688 profileName TEXT
689 , profileFamilyName TEXT, profileFullName TEXT, e164 TEXT, serviceId TEXT, groupId TEXT, profileLastFetchedAt INTEGER);
690 CREATE TABLE identityKeys(
691 id STRING PRIMARY KEY ASC,
692 json TEXT
693 );
694 CREATE TABLE items(
695 id STRING PRIMARY KEY ASC,
696 json TEXT
697 );
698 CREATE TABLE sessions(
699 id TEXT PRIMARY KEY,
700 conversationId TEXT,
701 json TEXT
702 , ourServiceId STRING, serviceId STRING);
703 CREATE TABLE attachment_downloads(
704 id STRING primary key,
705 timestamp INTEGER,
706 pending INTEGER,
707 json TEXT
708 );
709 CREATE TABLE sticker_packs(
710 id TEXT PRIMARY KEY,
711 key TEXT NOT NULL,
712
713 author STRING,
714 coverStickerId INTEGER,
715 createdAt INTEGER,
716 downloadAttempts INTEGER,
717 installedAt INTEGER,
718 lastUsed INTEGER,
719 status STRING,
720 stickerCount INTEGER,
721 title STRING
722 , attemptedStatus STRING, position INTEGER DEFAULT 0 NOT NULL, storageID STRING, storageVersion INTEGER, storageUnknownFields BLOB, storageNeedsSync
723 INTEGER DEFAULT 0 NOT NULL);
724 CREATE TABLE stickers(
725 id INTEGER NOT NULL,
726 packId TEXT NOT NULL,
727
728 emoji STRING,
729 height INTEGER,
730 isCoverOnly INTEGER,
731 lastUsed INTEGER,
732 path STRING,
733 width INTEGER,
734
735 PRIMARY KEY (id, packId),
736 CONSTRAINT stickers_fk
737 FOREIGN KEY (packId)
738 REFERENCES sticker_packs(id)
739 ON DELETE CASCADE
740 );
741 CREATE TABLE sticker_references(
742 messageId STRING,
743 packId TEXT,
744 CONSTRAINT sticker_references_fk
745 FOREIGN KEY(packId)
746 REFERENCES sticker_packs(id)
747 ON DELETE CASCADE
748 );
749 CREATE TABLE emojis(
750 shortName TEXT PRIMARY KEY,
751 lastUsage INTEGER
752 );
753 CREATE TABLE messages(
754 rowid INTEGER PRIMARY KEY ASC,
755 id STRING UNIQUE,
756 json TEXT,
757 readStatus INTEGER,
758 expires_at INTEGER,
759 sent_at INTEGER,
760 schemaVersion INTEGER,
761 conversationId STRING,
762 received_at INTEGER,
763 source STRING,
764 hasAttachments INTEGER,
765 hasFileAttachments INTEGER,
766 hasVisualMediaAttachments INTEGER,
767 expireTimer INTEGER,
768 expirationStartTimestamp INTEGER,
769 type STRING,
770 body TEXT,
771 messageTimer INTEGER,
772 messageTimerStart INTEGER,
773 messageTimerExpiresAt INTEGER,
774 isErased INTEGER,
775 isViewOnce INTEGER,
776 sourceServiceId TEXT, serverGuid STRING NULL, sourceDevice INTEGER, storyId STRING, isStory INTEGER
777 GENERATED ALWAYS AS (type IS &#39;story&#39;), isChangeCreatedByUs INTEGER NOT NULL DEFAULT 0, isTimerChangeFromSync INTEGER
778 GENERATED ALWAYS AS (
779 json_extract(json, &#39;$.expirationTimerUpdate.fromSync&#39;) IS 1
780 ), seenStatus NUMBER default 0, storyDistributionListId STRING, expiresAt INT
781 GENERATED ALWAYS
782 AS (ifnull(
783 expirationStartTimestamp + (expireTimer * 1000),
784 9007199254740991
785 )), shouldAffectActivity INTEGER
786 GENERATED ALWAYS AS (
787 type IS NULL
788 OR
789 type NOT IN (
790 &#39;change-number-notification&#39;,
791 &#39;contact-removed-notification&#39;,
792 &#39;conversation-merge&#39;,
793 &#39;group-v1-migration&#39;,
794 &#39;keychange&#39;,
795 &#39;message-history-unsynced&#39;,
796 &#39;profile-change&#39;,
797 &#39;story&#39;,
798 &#39;universal-timer-notification&#39;,
799 &#39;verified-change&#39;
800 )
801 ), shouldAffectPreview INTEGER
802 GENERATED ALWAYS AS (
803 type IS NULL
804 OR
805 type NOT IN (
806 &#39;change-number-notification&#39;,
807 &#39;contact-removed-notification&#39;,
808 &#39;conversation-merge&#39;,
809 &#39;group-v1-migration&#39;,
810 &#39;keychange&#39;,
811 &#39;message-history-unsynced&#39;,
812 &#39;profile-change&#39;,
813 &#39;story&#39;,
814 &#39;universal-timer-notification&#39;,
815 &#39;verified-change&#39;
816 )
817 ), isUserInitiatedMessage INTEGER
818 GENERATED ALWAYS AS (
819 type IS NULL
820 OR
821 type NOT IN (
822 &#39;change-number-notification&#39;,
823 &#39;contact-removed-notification&#39;,
824 &#39;conversation-merge&#39;,
825 &#39;group-v1-migration&#39;,
826 &#39;group-v2-change&#39;,
827 &#39;keychange&#39;,
828 &#39;message-history-unsynced&#39;,
829 &#39;profile-change&#39;,
830 &#39;story&#39;,
831 &#39;universal-timer-notification&#39;,
832 &#39;verified-change&#39;
833 )
834 ), mentionsMe INTEGER NOT NULL DEFAULT 0, isGroupLeaveEvent INTEGER
835 GENERATED ALWAYS AS (
836 type IS &#39;group-v2-change&#39; AND
837 json_array_length(json_extract(json, &#39;$.groupV2Change.details&#39;)) IS 1 AND
838 json_extract(json, &#39;$.groupV2Change.details[0].type&#39;) IS &#39;member-remove&#39; AND
839 json_extract(json, &#39;$.groupV2Change.from&#39;) IS NOT NULL AND
840 json_extract(json, &#39;$.groupV2Change.from&#39;) IS json_extract(json, &#39;$.groupV2Change.details[0].aci&#39;)
841 ), isGroupLeaveEventFromOther INTEGER
842 GENERATED ALWAYS AS (
843 isGroupLeaveEvent IS 1
844 AND
845 isChangeCreatedByUs IS 0
846 ), callId TEXT
847 GENERATED ALWAYS AS (
848 json_extract(json, &#39;$.callId&#39;)
849 ));
850 CREATE TABLE sqlite_stat4(tbl,idx,neq,nlt,ndlt,sample);
851 CREATE TABLE jobs(
852 id TEXT PRIMARY KEY,
853 queueType TEXT STRING NOT NULL,
854 timestamp INTEGER NOT NULL,
855 data STRING TEXT
856 );
857 CREATE TABLE reactions(
858 conversationId STRING,
859 emoji STRING,
860 fromId STRING,
861 messageReceivedAt INTEGER,
862 targetAuthorAci STRING,
863 targetTimestamp INTEGER,
864 unread INTEGER
865 , messageId STRING);
866 CREATE TABLE senderKeys(
867 id TEXT PRIMARY KEY NOT NULL,
868 senderId TEXT NOT NULL,
869 distributionId TEXT NOT NULL,
870 data BLOB NOT NULL,
871 lastUpdatedDate NUMBER NOT NULL
872 );
873 CREATE TABLE unprocessed(
874 id STRING PRIMARY KEY ASC,
875 timestamp INTEGER,
876 version INTEGER,
877 attempts INTEGER,
878 envelope TEXT,
879 decrypted TEXT,
880 source TEXT,
881 serverTimestamp INTEGER,
882 sourceServiceId STRING
883 , serverGuid STRING NULL, sourceDevice INTEGER, receivedAtCounter INTEGER, urgent INTEGER, story INTEGER);
884 CREATE TABLE sendLogPayloads(
885 id INTEGER PRIMARY KEY ASC,
886
887 timestamp INTEGER NOT NULL,
888 contentHint INTEGER NOT NULL,
889 proto BLOB NOT NULL
890 , urgent INTEGER, hasPniSignatureMessage INTEGER DEFAULT 0 NOT NULL);
891 CREATE TABLE sendLogRecipients(
892 payloadId INTEGER NOT NULL,
893
894 recipientServiceId STRING NOT NULL,
895 deviceId INTEGER NOT NULL,
896
897 PRIMARY KEY (payloadId, recipientServiceId, deviceId),
898
899 CONSTRAINT sendLogRecipientsForeignKey
900 FOREIGN KEY (payloadId)
901 REFERENCES sendLogPayloads(id)
902 ON DELETE CASCADE
903 );
904 CREATE TABLE sendLogMessageIds(
905 payloadId INTEGER NOT NULL,
906
907 messageId STRING NOT NULL,
908
909 PRIMARY KEY (payloadId, messageId),
910
911 CONSTRAINT sendLogMessageIdsForeignKey
912 FOREIGN KEY (payloadId)
913 REFERENCES sendLogPayloads(id)
914 ON DELETE CASCADE
915 );
916 CREATE TABLE preKeys(
917 id STRING PRIMARY KEY ASC,
918 json TEXT
919 , ourServiceId NUMBER
920 GENERATED ALWAYS AS (json_extract(json, &#39;$.ourServiceId&#39;)));
921 CREATE TABLE signedPreKeys(
922 id STRING PRIMARY KEY ASC,
923 json TEXT
924 , ourServiceId NUMBER
925 GENERATED ALWAYS AS (json_extract(json, &#39;$.ourServiceId&#39;)));
926 CREATE TABLE badges(
927 id TEXT PRIMARY KEY,
928 category TEXT NOT NULL,
929 name TEXT NOT NULL,
930 descriptionTemplate TEXT NOT NULL
931 );
932 CREATE TABLE badgeImageFiles(
933 badgeId TEXT REFERENCES badges(id)
934 ON DELETE CASCADE
935 ON UPDATE CASCADE,
936 &#39;order&#39; INTEGER NOT NULL,
937 url TEXT NOT NULL,
938 localPath TEXT,
939 theme TEXT NOT NULL
940 );
941 CREATE TABLE storyReads (
942 authorId STRING NOT NULL,
943 conversationId STRING NOT NULL,
944 storyId STRING NOT NULL,
945 storyReadDate NUMBER NOT NULL,
946
947 PRIMARY KEY (authorId, storyId)
948 );
949 CREATE TABLE storyDistributions(
950 id STRING PRIMARY KEY NOT NULL,
951 name TEXT,
952
953 senderKeyInfoJson STRING
954 , deletedAtTimestamp INTEGER, allowsReplies INTEGER, isBlockList INTEGER, storageID STRING, storageVersion INTEGER, storageUnknownFields BLOB, storageNeedsSync INTEGER);
955 CREATE TABLE storyDistributionMembers(
956 listId STRING NOT NULL REFERENCES storyDistributions(id)
957 ON DELETE CASCADE
958 ON UPDATE CASCADE,
959 serviceId STRING NOT NULL,
960
961 PRIMARY KEY (listId, serviceId)
962 );
963 CREATE TABLE uninstalled_sticker_packs (
964 id STRING NOT NULL PRIMARY KEY,
965 uninstalledAt NUMBER NOT NULL,
966 storageID STRING,
967 storageVersion NUMBER,
968 storageUnknownFields BLOB,
969 storageNeedsSync INTEGER NOT NULL
970 );
971 CREATE TABLE groupCallRingCancellations(
972 ringId INTEGER PRIMARY KEY,
973 createdAt INTEGER NOT NULL
974 );
975 CREATE TABLE IF NOT EXISTS &#39;messages_fts_data&#39;(id INTEGER PRIMARY KEY, block BLOB);
976 CREATE TABLE IF NOT EXISTS &#39;messages_fts_idx&#39;(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
977 CREATE TABLE IF NOT EXISTS &#39;messages_fts_content&#39;(id INTEGER PRIMARY KEY, c0);
978 CREATE TABLE IF NOT EXISTS &#39;messages_fts_docsize&#39;(id INTEGER PRIMARY KEY, sz BLOB);
979 CREATE TABLE IF NOT EXISTS &#39;messages_fts_config&#39;(k PRIMARY KEY, v) WITHOUT ROWID;
980 CREATE TABLE edited_messages(
981 messageId STRING REFERENCES messages(id)
982 ON DELETE CASCADE,
983 sentAt INTEGER,
984 readStatus INTEGER
985 , conversationId STRING);
986 CREATE TABLE mentions (
987 messageId REFERENCES messages(id) ON DELETE CASCADE,
988 mentionAci STRING,
989 start INTEGER,
990 length INTEGER
991 );
992 CREATE TABLE kyberPreKeys(
993 id STRING PRIMARY KEY NOT NULL,
994 json TEXT NOT NULL, ourServiceId NUMBER
995 GENERATED ALWAYS AS (json_extract(json, &#39;$.ourServiceId&#39;)));
996 CREATE TABLE callsHistory (
997 callId TEXT PRIMARY KEY,
998 peerId TEXT NOT NULL, -- conversation id (legacy) | uuid | groupId | roomId
999 ringerId TEXT DEFAULT NULL, -- ringer uuid
1000 mode TEXT NOT NULL, -- enum &quot;Direct&quot; | &quot;Group&quot;
1001 type TEXT NOT NULL, -- enum &quot;Audio&quot; | &quot;Video&quot; | &quot;Group&quot;
1002 direction TEXT NOT NULL, -- enum &quot;Incoming&quot; | &quot;Outgoing
1003 -- Direct: enum &quot;Pending&quot; | &quot;Missed&quot; | &quot;Accepted&quot; | &quot;Deleted&quot;
1004 -- Group: enum &quot;GenericGroupCall&quot; | &quot;OutgoingRing&quot; | &quot;Ringing&quot; | &quot;Joined&quot; | &quot;Missed&quot; | &quot;Declined&quot; | &quot;Accepted&quot; | &quot;Deleted&quot;
1005 status TEXT NOT NULL,
1006 timestamp INTEGER NOT NULL,
1007 UNIQUE (callId, peerId) ON CONFLICT FAIL
1008 );
1009 [ dropped all indexes to save space in this blog post ]
1010 CREATE TRIGGER messages_on_view_once_update AFTER UPDATE ON messages
1011 WHEN
1012 new.body IS NOT NULL AND new.isViewOnce = 1
1013 BEGIN
1014 DELETE FROM messages_fts WHERE rowid = old.rowid;
1015 END;
1016 CREATE TRIGGER messages_on_insert AFTER INSERT ON messages
1017 WHEN new.isViewOnce IS NOT 1 AND new.storyId IS NULL
1018 BEGIN
1019 INSERT INTO messages_fts
1020 (rowid, body)
1021 VALUES
1022 (new.rowid, new.body);
1023 END;
1024 CREATE TRIGGER messages_on_delete AFTER DELETE ON messages BEGIN
1025 DELETE FROM messages_fts WHERE rowid = old.rowid;
1026 DELETE FROM sendLogPayloads WHERE id IN (
1027 SELECT payloadId FROM sendLogMessageIds
1028 WHERE messageId = old.id
1029 );
1030 DELETE FROM reactions WHERE rowid IN (
1031 SELECT rowid FROM reactions
1032 WHERE messageId = old.id
1033 );
1034 DELETE FROM storyReads WHERE storyId = old.storyId;
1035 END;
1036 CREATE VIRTUAL TABLE messages_fts USING fts5(
1037 body,
1038 tokenize = &#39;signal_tokenizer&#39;
1039 );
1040 CREATE TRIGGER messages_on_update AFTER UPDATE ON messages
1041 WHEN
1042 (new.body IS NULL OR old.body IS NOT new.body) AND
1043 new.isViewOnce IS NOT 1 AND new.storyId IS NULL
1044 BEGIN
1045 DELETE FROM messages_fts WHERE rowid = old.rowid;
1046 INSERT INTO messages_fts
1047 (rowid, body)
1048 VALUES
1049 (new.rowid, new.body);
1050 END;
1051 CREATE TRIGGER messages_on_insert_insert_mentions AFTER INSERT ON messages
1052 BEGIN
1053 INSERT INTO mentions (messageId, mentionAci, start, length)
1054
1055 SELECT messages.id, bodyRanges.value -&gt;&gt; &#39;mentionAci&#39; as mentionAci,
1056 bodyRanges.value -&gt;&gt; &#39;start&#39; as start,
1057 bodyRanges.value -&gt;&gt; &#39;length&#39; as length
1058 FROM messages, json_each(messages.json -&gt;&gt; &#39;bodyRanges&#39;) as bodyRanges
1059 WHERE bodyRanges.value -&gt;&gt; &#39;mentionAci&#39; IS NOT NULL
1060
1061 AND messages.id = new.id;
1062 END;
1063 CREATE TRIGGER messages_on_update_update_mentions AFTER UPDATE ON messages
1064 BEGIN
1065 DELETE FROM mentions WHERE messageId = new.id;
1066 INSERT INTO mentions (messageId, mentionAci, start, length)
1067
1068 SELECT messages.id, bodyRanges.value -&gt;&gt; &#39;mentionAci&#39; as mentionAci,
1069 bodyRanges.value -&gt;&gt; &#39;start&#39; as start,
1070 bodyRanges.value -&gt;&gt; &#39;length&#39; as length
1071 FROM messages, json_each(messages.json -&gt;&gt; &#39;bodyRanges&#39;) as bodyRanges
1072 WHERE bodyRanges.value -&gt;&gt; &#39;mentionAci&#39; IS NOT NULL
1073
1074 AND messages.id = new.id;
1075 END;
1076 sqlite&gt;
1077 &lt;/pre&gt;
1078
1079 &lt;p&gt;Finally I have the tool needed to inspect and process Signal
1080 messages that I need, without using the vendor provided client. Now
1081 on to transforming it to a more useful format.&lt;/p&gt;
1082
1083 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
1084 activities, please send Bitcoin donations to my address
1085 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
1086 </description>
1087 </item>
1088
1089 <item>
1090 <title>New chrpath release 0.17</title>
1091 <link>http://www.hungry.com/~pere/blog/New_chrpath_release_0_17.html</link>
1092 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/New_chrpath_release_0_17.html</guid>
1093 <pubDate>Fri, 10 Nov 2023 07:30:00 +0100</pubDate>
1094 <description>&lt;p&gt;The chrpath package provide a simple command line tool to remove or
1095 modify the rpath or runpath of compiled ELF program. It is almost 10
1096 years since I updated the code base, but I stumbled over the tool
1097 today, and decided it was time to move the code base from Subversion
1098 to git and find a new home for it, as the previous one (Debian Alioth)
1099 has been shut down. I decided to go with
1100 &lt;a href=&quot;https://codeberg.org/&quot;&gt;Codeberg&lt;/a&gt; this time, as it is my git
1101 service of choice these days, did a quick and dirty migration to git
1102 and updated the code with a few patches I found in the Debian bug
1103 tracker. These are the release notes:&lt;/p&gt;
1104
1105 &lt;p&gt;New in 0.17 released 2023-11-10:&lt;/p&gt;
1106
1107 &lt;ul&gt;
1108 &lt;li&gt;Moved project to Codeberg, as Alioth is shut down.&lt;/li&gt;
1109 &lt;li&gt;Add Solaris support (use &amp;lt;sys/byteorder.h&gt; instead of &amp;lt;byteswap.h&gt;).
1110 Patch from Rainer Orth.&lt;/li&gt;
1111 &lt;li&gt;Added missing newline from printf() line. Patch from Frank Dana.&lt;/li&gt;
1112 &lt;li&gt;Corrected handling of multiple ELF sections. Patch from Frank Dana.&lt;/li&gt;
1113 &lt;li&gt;Updated build rules for .deb. Partly based on patch from djcj.&lt;/li&gt;
1114 &lt;/ul&gt;
1115
1116 &lt;p&gt;The latest edition is tagged and available from
1117 &lt;a href=&quot;https://codeberg.org/pere/chrpath&quot;&gt;https://codeberg.org/pere/chrpath&lt;/a&gt;.
1118
1119 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
1120 activities, please send Bitcoin donations to my address
1121 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
1122 </description>
1123 </item>
1124
1125 <item>
1126 <title>Test framework for DocBook processors / formatters</title>
1127 <link>http://www.hungry.com/~pere/blog/Test_framework_for_DocBook_processors___formatters.html</link>
1128 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Test_framework_for_DocBook_processors___formatters.html</guid>
1129 <pubDate>Sun, 5 Nov 2023 13:00:00 +0100</pubDate>
1130 <description>&lt;p&gt;All the books I have published so far has been using
1131 &lt;a href=&quot;https://docbook.org/&quot;&gt;DocBook&lt;/a&gt; somewhere in the process.
1132 For the first book, the source format was DocBook, while for every
1133 later book it was an intermediate format used as the stepping stone to
1134 be able to present the same manuscript in several formats, on paper,
1135 as ebook in ePub format, as a HTML page and as a PDF file either for
1136 paper production or for Internet consumption. This is made possible
1137 with a wide variety of free software tools with DocBook support in
1138 Debian. The source format of later books have been docx via rst,
1139 Markdown, Filemaker and Asciidoc, and for all of these I was able to
1140 generate a suitable DocBook file for further processing using
1141 &lt;a href=&quot;https://tracker.debian.org/pkg/pandoc&quot;&gt;pandoc&lt;/a&gt;,
1142 &lt;a href=&quot;https://tracker.debian.org/pkg/asciidoc&quot;&gt;a2x&lt;/a&gt; and
1143 &lt;a href=&quot;https://tracker.debian.org/pkg/asciidoctor&quot;&gt;asciidoctor&lt;/a&gt;,
1144 as well as rendering using
1145 &lt;a href=&quot;https://tracker.debian.org/pkg/xmlto&quot;&gt;xmlto&lt;/a&gt;,
1146 &lt;a href=&quot;https://tracker.debian.org/pkg/dbtoepub&quot;&gt;dbtoepub&lt;/a&gt;,
1147 &lt;a href=&quot;https://tracker.debian.org/pkg/dblatex&quot;&gt;dblatex&lt;/a&gt;,
1148 &lt;a href=&quot;https://tracker.debian.org/pkg/docbook-xsl&quot;&gt;docbook-xsl&lt;/a&gt; and
1149 &lt;a href=&quot;https://tracker.debian.org/pkg/fop&quot;&gt;fop&lt;/a&gt;.&lt;/p&gt;
1150
1151 &lt;p&gt;Most of the &lt;a href=&quot;http://www.hungry.com/~pere/publisher/&quot;&gt;books I
1152 have published&lt;/a&gt; are translated books, with English as the source
1153 language. The use of
1154 &lt;a href=&quot;https://tracker.debian.org/pkg/po4a&quot;&gt;po4a&lt;/a&gt; to
1155 handle translations using the gettext PO format has been a blessing,
1156 but publishing translated books had triggered the need to ensure the
1157 DocBook tools handle relevant languages correctly. For every new
1158 language I have published, I had to submit patches dblatex, dbtoepub
1159 and docbook-xsl fixing incorrect language and country specific issues
1160 in the framework themselves. Typically this has been missing keywords
1161 like &#39;figure&#39; or sort ordering of index entries. After a while it
1162 became tiresome to only discover issues like this by accident, and I
1163 decided to write a DocBook &quot;test framework&quot; exercising various
1164 features of DocBook and allowing me to see all features exercised for
1165 a given language. It consist of a set of DocBook files, a version 4
1166 book, a version 5 book, a v4 book set, a v4 selection of problematic
1167 tables, one v4 testing sidefloat and finally one v4 testing a book of
1168 articles. The DocBook files are accompanied with a set of build rules
1169 for building PDF using dblatex and docbook-xsl/fop, HTML using xmlto
1170 or docbook-xsl and epub using dbtoepub. The result is a set of files
1171 visualizing footnotes, indexes, table of content list, figures,
1172 formulas and other DocBook features, allowing for a quick review on
1173 the completeness of the given locale settings. To build with a
1174 different language setting, all one need to do is edit the lang= value
1175 in the .xml file to pick a different ISO 639 code value and run
1176 &#39;make&#39;.&lt;/p&gt;
1177
1178 &lt;p&gt;The &lt;a href=&quot;https://codeberg.org/pere/docbook-example/&quot;&gt;test framework
1179 source code&lt;/a&gt; is available from Codeberg, and a generated set of
1180 presentations of the various examples is available as Codeberg static
1181 web pages at
1182 &lt;a href=&quot;https://pere.codeberg.page/docbook-example/&quot;&gt;https://pere.codeberg.page/docbook-example/&lt;/a&gt;.
1183 Using this test framework I have been able to discover and report
1184 several bugs and missing features in various tools, and got a lot of
1185 them fixed. For example I got Northern Sami keywords added to both
1186 docbook-xsl and dblatex, fixed several typos in Norwegian bokmål and
1187 Norwegian Nynorsk, support for non-ascii title IDs added to pandoc,
1188 Norwegian index sorting support fixed in xindy and initial Norwegian
1189 Bokmål support added to dblatex. Some issues still remains, though.
1190 Default index sorting rules are still broken in several tools, so the
1191 Norwegian letters æ, ø and å are more often than not sorted properly
1192 in the book index.&lt;/p&gt;
1193
1194 &lt;p&gt;The test framework recently received some more polish, as part of
1195 publishing my latest book. This book contained a lot of fairly
1196 complex tables, which exposed bugs in some of the tools. This made me
1197 add a new test file with various tables, as well as spend some time to
1198 brush up the build rules. My goal is for the test framework to
1199 exercise all DocBook features to make it easier to see which features
1200 work with different processors, and hopefully get them all to support
1201 the full set of DocBook features. Feel free to send patches to extend
1202 the test set, and test it with your favorite DocBook processor.
1203 Please visit these two URLs to learn more:&lt;/p&gt;
1204
1205 &lt;ul&gt;
1206 &lt;li&gt;&lt;a href=&quot;https://codeberg.org/pere/docbook-example/&quot;&gt;https://codeberg.org/pere/docbook-example/&lt;/a&gt;&lt;/li&gt;
1207 &lt;li&gt;&lt;a href=&quot;https://pere.codeberg.page/docbook-example/&quot;&gt;https://pere.codeberg.page/docbook-example/&lt;/a&gt;&lt;/li&gt;
1208 &lt;/ul&gt;
1209
1210 &lt;p&gt;If you want to learn more on Docbook and translations, I recommend
1211 having a look at the &lt;a href=&quot;https://docbook.org/&quot;&gt;the DocBook
1212 web site&lt;/a&gt;,
1213 &lt;a href=&quot;https://doccookbook.sourceforge.net/html/en/&quot;&gt;the DoCookBook
1214 site&lt;a/&gt; and my earlier blog post on
1215 &lt;a href=&quot;http://www.hungry.com/~pere/blog/From_English_wiki_to_translated_PDF_and_epub_via_Docbook.html&quot;&gt;how
1216 the Skolelinux project process and translate documentation&lt;/a&gt;, a talk I gave earlier this year on
1217 &lt;a href=&quot;https://www.nuug.no/aktiviteter/20230314-oversetting-og-publisering-av-b%c3%b8ker-med-fri-programvare/&quot;&gt;how
1218 to translate and publish books using free software&lt;/a&gt; (Norwegian
1219 only).&lt;/p&gt;
1220
1221 &lt;!--
1222
1223 https://github.com/docbook/xslt10-stylesheets/issues/205 (docbook-xsl: sme support)
1224 https://bugs.debian.org/968437 (xindy: index sorting rules for nb/nn)
1225 https://bugs.debian.org/856123 (pandoc: markdown to docbook with non-english titles)
1226 https://bugs.debian.org/864813 (dblatex: missing nb words)
1227 https://bugs.debian.org/756386 (dblatex: index sorting rules for nb/nn)
1228 https://bugs.debian.org/796871 (dbtoepub: index sorting rules for nb/nn)
1229 https://bugs.debian.org/792616 (dblatex: PDF metadata)
1230 https://bugs.debian.org/686908 (docbook-xsl: index sorting rules for nb/nn)
1231 https://sourceforge.net/tracker/?func=detail&amp;atid=373747&amp;aid=3556630&amp;group_id=21935 (docbook-xsl: nb/nn support)
1232 https://bugs.debian.org/684391 (dblatex: initial nb support)
1233
1234 --&gt;
1235
1236 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
1237 activities, please send Bitcoin donations to my address
1238 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
1239 </description>
1240 </item>
1241
1242 <item>
1243 <title>What did I learn from OpenSnitch this summer?</title>
1244 <link>http://www.hungry.com/~pere/blog/What_did_I_learn_from_OpenSnitch_this_summer_.html</link>
1245 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/What_did_I_learn_from_OpenSnitch_this_summer_.html</guid>
1246 <pubDate>Sun, 11 Jun 2023 08:30:00 +0200</pubDate>
1247 <description>&lt;p&gt;With yesterdays
1248 &lt;a href=&quot;https://www.debian.org/News/2023/20230610&quot;&gt;release of Debian
1249 12 Bookworm&lt;/a&gt;, I am happy to know the
1250 &lt;a href=&quot;https://tracker.debian.org/pkg/opensnitch&quot;&gt;the interactive
1251 application firewall OpenSnitch&lt;/a&gt; is available for a wider audience.
1252 I have been running it for a few weeks now, and have been surprised
1253 about some of the programs connecting to the Internet. Some programs
1254 are obviously calling out from my machine, like the NTP network based
1255 clock adjusting system and Tor to reach other Tor clients, but others
1256 were more dubious. For example, the KDE Window manager try to look up
1257 the host name in DNS, for no apparent reason, but if this lookup is
1258 blocked the KDE desktop get periodically stuck when I use it. Another
1259 surprise was how much Firefox call home directly to mozilla.com,
1260 mozilla.net and googleapis.com, to mention a few, when I visit other
1261 web pages. This direct connection happen even if I told Firefox to
1262 always use a proxy, and the proxy setting is ignored for this traffic.
1263 Other surprising connections come from audacity and dirmngr (I do not
1264 use Gnome). It took some trial and error to get a good default set of
1265 permissions. Without it, I would get popups asking for permissions at
1266 any time, also the most inconvenient ones where I am in the middle of
1267 a time sensitive gaming session.&lt;/p&gt;
1268
1269 &lt;p&gt;I suspect some application developers should rethink when then need
1270 to use network connections or DNS lookups, and recommend testing
1271 OpenSnitch (only &lt;tt&gt;apt install opensnitch&lt;/tt&gt; away in Debian
1272 Bookworm) to locate and report any surprising Internet connections on
1273 your desktop machine.&lt;/p&gt;
1274
1275 &lt;p&gt;At the moment the upstream developer and Debian package maintainer
1276 is working on making the system more reliable in Debian, by enabling
1277 the eBPF kernel module to track processes and connections instead of
1278 depending in content in /proc/. This should enter unstable fairly
1279 soon.&lt;/p&gt;
1280
1281 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
1282 activities, please send Bitcoin donations to my address
1283 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
1284
1285 &lt;p&gt;&lt;strong&gt;Update 2023-06-12&lt;/strong&gt;: I got a tip about
1286 &lt;a href=&quot;https://wiki.debian.org/PrivacyIssues&quot;&gt;a list of privacy
1287 issues in Free Software&lt;/a&gt; and the
1288 &lt;a href=&quot;irc://irc.debian.org/%23debian-privacy&quot;&gt;#debian-privacy IRC
1289 channel&lt;/a&gt; discussing these topics.&lt;/p&gt;
1290
1291 </description>
1292 </item>
1293
1294 <item>
1295 <title>wmbusmeters, parse data from your utility meter - nice free software</title>
1296 <link>http://www.hungry.com/~pere/blog/wmbusmeters__parse_data_from_your_utility_meter___nice_free_software.html</link>
1297 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/wmbusmeters__parse_data_from_your_utility_meter___nice_free_software.html</guid>
1298 <pubDate>Fri, 19 May 2023 21:50:00 +0200</pubDate>
1299 <description>&lt;p&gt;There is a European standard for reading utility meters like water,
1300 gas, electricity or heat distribution meters. The
1301 &lt;a href=&quot;https://en.wikipedia.org/wiki/Meter-Bus&quot;&gt;Meter-Bus standard
1302 (EN 13757-2, EN 13757-3 and EN 137574)&lt;/a&gt; provide a cross vendor way
1303 to talk to and collect meter data. I ran into this standard when I
1304 wanted to monitor some heat distribution meters, and managed to find
1305 free software that could do the job. The meters in question broadcast
1306 encrypted messages with meter information via radio, and the hardest
1307 part was to track down the encryption keys from the vendor. With this
1308 in place I could set up a MQTT gateway to submit the meter data for
1309 graphing.&lt;/p&gt;
1310
1311 &lt;p&gt;The free software systems in question,
1312 &lt;a href=&quot;https://tracker.debian.org/pkg/rtl-wmbus&quot;&gt;rtl-wmbus&lt;/a&gt; to
1313 read the messages from a software defined radio, and
1314 &lt;a href=&quot;https://tracker.debian.org/pkg/wmbusmeters&quot;&gt;wmbusmeters&lt;/a&gt; to
1315 decrypt and decode the content of the messages, is working very well
1316 and allowe me to get frequent updates from my meters. I got in touch
1317 with upstream last year to see if there was any interest in publishing
1318 the packages via Debian. I was very happy to learn that Fredrik
1319 Öhrström volunteered to maintain the packages, and I have since
1320 assisted him in getting Debian package build rules in place as well as
1321 sponsoring the packages into the Debian archive. Sadly we completed
1322 it too late for them to become part of the next stable Debian release
1323 (Bookworm). The wmbusmeters package just cleared the NEW queue. It
1324 will need some work to fix a built problem, but I expect Fredrik will
1325 find a solution soon.&lt;/p&gt;
1326
1327 &lt;p&gt;If you got a infrastructure meter supporting the Meter Bus
1328 standard, I strongly recommend having a look at these nice
1329 packages.&lt;/p&gt;
1330
1331 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
1332 activities, please send Bitcoin donations to my address
1333 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
1334 </description>
1335 </item>
1336
1337 <item>
1338 <title>The 2023 LinuxCNC Norwegian developer gathering</title>
1339 <link>http://www.hungry.com/~pere/blog/The_2023_LinuxCNC_Norwegian_developer_gathering.html</link>
1340 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/The_2023_LinuxCNC_Norwegian_developer_gathering.html</guid>
1341 <pubDate>Sun, 14 May 2023 20:30:00 +0200</pubDate>
1342 <description>&lt;p&gt;The LinuxCNC project is making headway these days. A lot of
1343 patches and issues have seen activity on
1344 &lt;a href=&quot;https://github.com/LinuxCNC/linuxcnc/&quot;&gt;the project github
1345 pages&lt;/a&gt; recently. A few weeks ago there was a developer gathering
1346 over at the &lt;a href=&quot;https://tormach.com/&quot;&gt;Tormach&lt;/a&gt; headquarter in
1347 Wisconsin, and now we are planning a new gathering in Norway. If you
1348 wonder what LinuxCNC is, lets quote Wikipedia:&lt;/p&gt;
1349
1350 &lt;blockquote&gt;
1351 &quot;LinuxCNC is a software system for numerical control of
1352 machines such as milling machines, lathes, plasma cutters, routers,
1353 cutting machines, robots and hexapods. It can control up to 9 axes or
1354 joints of a CNC machine using G-code (RS-274NGC) as input. It has
1355 several GUIs suited to specific kinds of usage (touch screen,
1356 interactive development).&quot;
1357 &lt;/blockquote&gt;
1358
1359 &lt;p&gt;The Norwegian developer gathering take place the weekend June 16th
1360 to 18th this year, and is open for everyone interested in contributing
1361 to LinuxCNC. Up to date information about the gathering can be found
1362 in
1363 &lt;a href=&quot;https://sourceforge.net/p/emc/mailman/emc-developers/thread/sa64jp06nob.fsf%40hjemme.reinholdtsen.name/#msg37837251&quot;&gt;the
1364 developer mailing list thread&lt;/a&gt; where the gathering was announced.
1365 Thanks to the good people at
1366 &lt;a href=&quot;https://www.debian.org/&quot;&gt;Debian&lt;/a&gt;,
1367 &lt;a href=&quot;https://www.redpill-linpro.com/&quot;&gt;Redpill-Linpro&lt;/a&gt; and
1368 &lt;a href=&quot;https://www.nuugfoundation.no/no/&quot;&gt;NUUG Foundation&lt;/a&gt;, we
1369 have enough sponsor funds to pay for food, and shelter for the people
1370 traveling from afar to join us. If you would like to join the
1371 gathering, get in touch.&lt;/p&gt;
1372
1373 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
1374 activities, please send Bitcoin donations to my address
1375 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
1376 </description>
1377 </item>
1378
1379 <item>
1380 <title>OpenSnitch in Debian ready for prime time</title>
1381 <link>http://www.hungry.com/~pere/blog/OpenSnitch_in_Debian_ready_for_prime_time.html</link>
1382 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/OpenSnitch_in_Debian_ready_for_prime_time.html</guid>
1383 <pubDate>Sat, 13 May 2023 12:10:00 +0200</pubDate>
1384 <description>&lt;p&gt;A bit delayed,
1385 &lt;a href=&quot;https://tracker.debian.org/pkg/opensnitch&quot;&gt;the interactive
1386 application firewall OpenSnitch&lt;/a&gt; package in Debian now got the
1387 latest fixes ready for Debian Bookworm. Because it depend on a
1388 package missing on some architectures, the autopkgtest check of the
1389 testing migration script did not understand that the tests were
1390 actually working, so the migration was delayed. A bug in the package
1391 dependencies is also fixed, so those installing the firewall package
1392 (opensnitch) now also get the GUI admin tool (python3-opensnitch-ui)
1393 installed by default. I am very grateful to Gustavo Iñiguez Goya for
1394 his work on getting the package ready for Debian Bookworm.&lt;/p&gt;
1395
1396 &lt;p&gt;Armed with this package I have discovered some surprising
1397 connections from programs I believed were able to work completly
1398 offline, and it has already proven its worth, at least to me. If you
1399 too want to get more familiar with the kind of programs using
1400 Internett connections on your machine, I recommend testing &lt;tt&gt;apt
1401 install opensnitch&lt;/tt&gt; in Bookworm and see what you think.&lt;/p&gt;
1402
1403 &lt;p&gt;The package is still not able to build its eBPF module within
1404 Debian. Not sure how much work it would be to get it working, but
1405 suspect some kernel related packages need to be extended with more
1406 header files to get it working.&lt;/p&gt;
1407
1408 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
1409 activities, please send Bitcoin donations to my address
1410 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
1411 </description>
1412 </item>
1413
1414 <item>
1415 <title>Speech to text, she APTly whispered, how hard can it be?</title>
1416 <link>http://www.hungry.com/~pere/blog/Speech_to_text__she_APTly_whispered__how_hard_can_it_be_.html</link>
1417 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Speech_to_text__she_APTly_whispered__how_hard_can_it_be_.html</guid>
1418 <pubDate>Sun, 23 Apr 2023 09:40:00 +0200</pubDate>
1419 <description>&lt;p&gt;While visiting a convention during Easter, it occurred to me that
1420 it would be great if I could have a digital Dictaphone with
1421 transcribing capabilities, providing me with texts to cut-n-paste into
1422 stuff I need to write. The background is that long drives often bring
1423 up the urge to write on texts I am working on, which of course is out
1424 of the question while driving. With the release of
1425 &lt;a href=&quot;https://github.com/openai/whisper/&quot;&gt;OpenAI Whisper&lt;/a&gt;, this
1426 seem to be within reach with Free Software, so I decided to give it a
1427 go. OpenAI Whisper is a Linux based neural network system to read in
1428 audio files and provide text representation of the speech in that
1429 audio recording. It handle multiple languages and according to its
1430 creators even can translate into a different language than the spoken
1431 one. I have not tested the latter feature. It can either use the CPU
1432 or a GPU with CUDA support. As far as I can tell, CUDA in practice
1433 limit that feature to NVidia graphics cards. I have few of those, as
1434 they do not work great with free software drivers, and have not tested
1435 the GPU option. While looking into the matter, I did discover some
1436 work to provide CUDA support on non-NVidia GPUs, and some work with
1437 the library used by Whisper to port it to other GPUs, but have not
1438 spent much time looking into GPU support yet. I&#39;ve so far used an old
1439 X220 laptop as my test machine, and only transcribed using its
1440 CPU.&lt;/p&gt;
1441
1442 &lt;p&gt;As it from a privacy standpoint is unthinkable to use computers
1443 under control of someone else (aka a &quot;cloud&quot; service) to transcribe
1444 ones thoughts and personal notes, I want to run the transcribing
1445 system locally on my own computers. The only sensible approach to me
1446 is to make the effort I put into this available for any Linux user and
1447 to upload the needed packages into Debian. Looking at Debian Bookworm, I
1448 discovered that only three packages were missing,
1449 &lt;a href=&quot;https://bugs.debian.org/1034307&quot;&gt;tiktoken&lt;/a&gt;,
1450 &lt;a href=&quot;https://bugs.debian.org/1034144&quot;&gt;triton&lt;/a&gt;, and
1451 &lt;a href=&quot;https://bugs.debian.org/1034091&quot;&gt;openai-whisper&lt;/a&gt;. For a while
1452 I also believed
1453 &lt;a href=&quot;https://bugs.debian.org/1034286&quot;&gt;ffmpeg-python&lt;/a&gt; was
1454 needed, but as its
1455 &lt;a href=&quot;https://github.com/kkroening/ffmpeg-python/issues/760&quot;&gt;upstream
1456 seem to have vanished&lt;/a&gt; I found it safer
1457 &lt;a href=&quot;https://github.com/openai/whisper/pull/1242&quot;&gt;to rewrite
1458 whisper&lt;/a&gt; to stop depending on in than to introduce ffmpeg-python
1459 into Debian. I decided to place these packages under the umbrella of
1460 &lt;a href=&quot;https://salsa.debian.org/deeplearning-team&quot;&gt;the Debian Deep
1461 Learning Team&lt;/a&gt;, which seem like the best team to look after such
1462 packages. Discussing the topic within the group also made me aware
1463 that the triton package was already a future dependency of newer
1464 versions of the torch package being planned, and would be needed after
1465 Bookworm is released.&lt;/p&gt;
1466
1467 &lt;p&gt;All required code packages have been now waiting in
1468 &lt;a href=&quot;https://ftp-master.debian.org/new.html&quot;&gt;the Debian NEW
1469 queue&lt;/a&gt; since Wednesday, heading for Debian Experimental until
1470 Bookworm is released. An unsolved issue is how to handle the neural
1471 network models used by Whisper. The default behaviour of Whisper is
1472 to require Internet connectivity and download the model requested to
1473 &lt;tt&gt;~/.cache/whisper/&lt;/tt&gt; on first invocation. This obviously would
1474 fail &lt;a href=&quot;https://people.debian.org/~bap/dfsg-faq.html&quot;&gt;the
1475 deserted island test of free software&lt;/a&gt; as the Debian packages would
1476 be unusable for someone stranded with only the Debian archive and solar
1477 powered computer on a deserted island.&lt;/p&gt;
1478
1479 &lt;p&gt;Because of this, I would love to include the models in the Debian
1480 mirror system. This is problematic, as the models are very large
1481 files, which would put a heavy strain on the Debian mirror
1482 infrastructure around the globe. The strain would be even higher if
1483 the models change often, which luckily as far as I can tell they do
1484 not. The small model, which according to its creator is most useful
1485 for English and in my experience is not doing a great job there
1486 either, is 462 MiB (deb is 414 MiB). The medium model, which to me
1487 seem to handle English speech fairly well is 1.5 GiB (deb is 1.3 GiB)
1488 and the large model is 2.9 GiB (deb is 2.6 GiB). I would assume
1489 everyone with enough resources would prefer to use the large model for
1490 highest quality. I believe the models themselves would have to go
1491 into the non-free part of the Debian archive, as they are not really
1492 including any useful source code for updating the models. The
1493 &quot;source&quot;, aka the model training set, according to the creators
1494 consist of &quot;680,000 hours of multilingual and multitask supervised
1495 data collected from the web&quot;, which to me reads material with both
1496 unknown copyright terms, unavailable to the general public. In other
1497 words, the source is not available according to the Debian Free
1498 Software Guidelines and the model should be considered non-free.&lt;/p&gt;
1499
1500 &lt;p&gt;I asked the Debian FTP masters for advice regarding uploading a
1501 model package on their IRC channel, and based on the feedback there it
1502 is still unclear to me if such package would be accepted into the
1503 archive. In any case I wrote build rules for a
1504 &lt;a href=&quot;https://salsa.debian.org/deeplearning-team/openai-whisper-model&quot;&gt;OpenAI
1505 Whisper model package&lt;/a&gt; and
1506 &lt;a href=&quot;https://github.com/openai/whisper/pull/1257&quot;&gt;modified the
1507 Whisper code base&lt;/a&gt; to prefer shared files under &lt;tt&gt;/usr/&lt;/tt&gt; and
1508 &lt;tt&gt;/var/&lt;/tt&gt; over user specific files in &lt;tt&gt;~/.cache/whisper/&lt;/tt&gt;
1509 to be able to use these model packages, to prepare for such
1510 possibility. One solution might be to include only one of the models
1511 (small or medium, I guess) in the Debian archive, and ask people to
1512 download the others from the Internet. Not quite sure what to do
1513 here, and advice is most welcome (use the debian-ai mailing list).&lt;/p&gt;
1514
1515 &lt;p&gt;To make it easier to test the new packages while I wait for them to
1516 clear the NEW queue, I created an APT source targeting bookworm. I
1517 selected Bookworm instead of Bullseye, even though I know the latter
1518 would reach more users, is that some of the required dependencies are
1519 missing from Bullseye and I during this phase of testing did not want
1520 to backport a lot of packages just to get up and running.&lt;/p&gt;
1521
1522 &lt;p&gt;Here is a recipe to run as user root if you want to test OpenAI
1523 Whisper using Debian packages on your Debian Bookworm installation,
1524 first adding the APT repository GPG key to the list of trusted keys,
1525 then setting up the APT repository and finally installing the packages
1526 and one of the models:&lt;/p&gt;
1527
1528 &lt;p&gt;&lt;pre&gt;
1529 curl https://geekbay.nuug.no/~pere/openai-whisper/D78F5C4796F353D211B119E28200D9B589641240.asc \
1530 -o /etc/apt/trusted.gpg.d/pere-whisper.asc
1531 mkdir -p /etc/apt/sources.list.d
1532 cat &gt; /etc/apt/sources.list.d/pere-whisper.list &amp;lt;&amp;lt;EOF
1533 deb https://geekbay.nuug.no/~pere/openai-whisper/ bookworm main
1534 deb-src https://geekbay.nuug.no/~pere/openai-whisper/ bookworm main
1535 EOF
1536 apt update
1537 apt install openai-whisper
1538 &lt;/pre&gt;&lt;/p&gt;
1539
1540 &lt;p&gt;The package work for me, but have not yet been tested on any other
1541 computer than my own. With it, I have been able to (badly) transcribe
1542 a 2 minute 40 second Norwegian audio clip to test using the small
1543 model. This took 11 minutes and around 2.2 GiB of RAM. Transcribing
1544 the same file with the medium model gave a accurate text in 77 minutes
1545 using around 5.2 GiB of RAM. My test machine had too little memory to
1546 test the large model, which I believe require 11 GiB of RAM. In
1547 short, this now work for me using Debian packages, and I hope it will
1548 for you and everyone else once the packages enter Debian.&lt;/p&gt;
1549
1550 &lt;p&gt;Now I can start on the audio recording part of this project.&lt;/p&gt;
1551
1552 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
1553 activities, please send Bitcoin donations to my address
1554 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
1555 </description>
1556 </item>
1557
1558 <item>
1559 <title>rtlsdr-scanner, software defined radio frequency scanner for Linux - nice free software</title>
1560 <link>http://www.hungry.com/~pere/blog/rtlsdr_scanner__software_defined_radio_frequency_scanner_for_Linux____nice_free_software.html</link>
1561 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/rtlsdr_scanner__software_defined_radio_frequency_scanner_for_Linux____nice_free_software.html</guid>
1562 <pubDate>Fri, 7 Apr 2023 23:10:00 +0200</pubDate>
1563 <description>&lt;p&gt;Today I finally found time to track down a useful radio frequency
1564 scanner for my software defined radio. Just for fun I tried to locate
1565 the radios used in the areas, and a good start would be to scan all
1566 the frequencies to see what is in use. I&#39;ve tried to find a useful
1567 program earlier, but ran out of time before I managed to find a useful
1568 tool. This time I was more successful, and after a few false leads I
1569 found a description of
1570 &lt;a href=&quot;https://www.kali.org/tools/rtlsdr-scanner/&quot;&gt;rtlsdr-scanner
1571 over at the Kali site&lt;/a&gt;, and was able to track down
1572 &lt;a href=&quot;https://gitlab.com/kalilinux/packages/rtlsdr-scanner.git&quot;&gt;the
1573 Kali package git repository&lt;/a&gt; to build a deb package for the
1574 scanner. Sadly the package is missing from the Debian project itself,
1575 at least in Debian Bullseye. Two runtime dependencies,
1576 &lt;a href=&quot;https://gitlab.com/kalilinux/packages/python-visvis.git&quot;&gt;python-visvis&lt;/a&gt;
1577 and
1578 &lt;a href=&quot;https://gitlab.com/kalilinux/packages/python-rtlsdr.git&quot;&gt;python-rtlsdr&lt;/a&gt;
1579 had to be built and installed separately. Luckily &#39;&lt;tt&gt;gbp
1580 buildpackage&lt;/tt&gt;&#39; handled them just fine and no further packages had
1581 to be manually built. The end result worked out of the box after
1582 installation.&lt;/p&gt;
1583
1584 &lt;p&gt;My initial scans for FM channels worked just fine, so I knew the
1585 scanner was functioning. But when I tried to scan every frequency
1586 from 100 to 1000 MHz, the program stopped unexpectedly near the
1587 completion. After some debugging I discovered USB software radio I
1588 used rejected frequencies above 948 MHz, triggering a unreported
1589 exception breaking the scan. Changing the scan to end at 957 worked
1590 better. I similarly found the lower limit to be around 15, and ended
1591 up with the following full scan:&lt;/p&gt;
1592
1593 &lt;p&gt;&lt;a href=&quot;http://www.hungry.com/~pere/blog/images/2023-04-07-radio-freq-scanning.png&quot;&gt;&lt;img src=&quot;http://www.hungry.com/~pere/blog/images/2023-04-07-radio-freq-scanning.png&quot; width=&quot;100%&quot;&gt;&lt;/a&gt;&lt;/p&gt;
1594
1595 &lt;p&gt;Saving the scan did not work, but exporting it as a CSV file worked
1596 just fine. I ended up with around 477k CVS lines with dB level for
1597 the given frequency.&lt;/p&gt;
1598
1599 &lt;p&gt;The save failure seem to be a missing UTF-8 encoding issue in the
1600 python code. Will see if I can find time to send a patch
1601 &lt;a href=&quot;https://github.com/CdeMills/RTLSDR-Scanner/&quot;&gt;upstream&lt;/a&gt;
1602 later to fix this exception:&lt;/p&gt;
1603
1604 &lt;pre&gt;
1605 Traceback (most recent call last):
1606 File &quot;/usr/lib/python3/dist-packages/rtlsdr_scanner/main_window.py&quot;, line 485, in __on_save
1607 save_plot(fullName, self.scanInfo, self.spectrum, self.locations)
1608 File &quot;/usr/lib/python3/dist-packages/rtlsdr_scanner/file.py&quot;, line 408, in save_plot
1609 handle.write(json.dumps(data, indent=4))
1610 TypeError: a bytes-like object is required, not &#39;str&#39;
1611 Traceback (most recent call last):
1612 File &quot;/usr/lib/python3/dist-packages/rtlsdr_scanner/main_window.py&quot;, line 485, in __on_save
1613 save_plot(fullName, self.scanInfo, self.spectrum, self.locations)
1614 File &quot;/usr/lib/python3/dist-packages/rtlsdr_scanner/file.py&quot;, line 408, in save_plot
1615 handle.write(json.dumps(data, indent=4))
1616 TypeError: a bytes-like object is required, not &#39;str&#39;
1617 &lt;/pre&gt;
1618
1619 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
1620 activities, please send Bitcoin donations to my address
1621 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
1622 </description>
1623 </item>
1624
1625 <item>
1626 <title>OpenSnitch available in Debian Sid and Bookworm</title>
1627 <link>http://www.hungry.com/~pere/blog/OpenSnitch_available_in_Debian_Sid_and_Bookworm.html</link>
1628 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/OpenSnitch_available_in_Debian_Sid_and_Bookworm.html</guid>
1629 <pubDate>Sat, 25 Feb 2023 20:30:00 +0100</pubDate>
1630 <description>&lt;p&gt;Thanks to the efforts of the OpenSnitch lead developer Gustavo
1631 Iñiguez Goya allowing me to sponsor the upload,
1632 &lt;a href=&quot;https://tracker.debian.org/pkg/opensnitch&quot;&gt;the interactive
1633 application firewall OpenSnitch&lt;/a&gt; is now available in Debian
1634 Testing, soon to become the next stable release of Debian.&lt;/p&gt;
1635
1636 &lt;p&gt;This is a package which set up a network firewall on one or more
1637 machines, which is controlled by a graphical user interface that will
1638 ask the user if a program should be allowed to connect to the local
1639 network or the Internet. If some background daemon is trying to dial
1640 home, it can be blocked from doing so with a simple mouse click, or by
1641 default simply by not doing anything when the GUI question dialog pop
1642 up. A list of all programs discovered using the network is provided
1643 in the GUI, giving the user an overview of how the machine(s) programs
1644 use the network.&lt;/p&gt;
1645
1646 &lt;p&gt;OpenSnitch was uploaded for NEW processing about a month ago, and I
1647 had little hope of it getting accepted and shaping up in time for the
1648 package freeze, but the Debian ftpmasters proved to be amazingly quick
1649 at checking out the package and it was accepted into the archive about
1650 week after the first upload. It is now team maintained under the Go
1651 language team umbrella. A few fixes to the default setup is only in
1652 Sid, and should migrate to Testing/Bookworm in a week.&lt;/p&gt;
1653
1654 &lt;p&gt;During testing I ran into an
1655 &lt;a href=&quot;https://github.com/evilsocket/opensnitch/issues/813&quot;&gt;issue
1656 with Minecraft server broadcasts disappearing&lt;/a&gt;, which was quickly
1657 resolved by the developer with a patch and a proposed configuration
1658 change. I&#39;ve been told this was caused by the Debian packages default
1659 use if /proc/ information to track down kernel status, instead of the
1660 newer eBPF module that can be used. The reason is simply that
1661 upstream and I have failed to find a way to build the eBPF modules for
1662 OpenSnitch without a complete configured Linux kernel source tree,
1663 which as far as we can tell is unavailable as a build dependency in
1664 Debian. We tried unsuccessfully so far to use the kernel-headers
1665 package. It would be great if someone could provide some clues how to
1666 build eBPF modules on build daemons in Debian, possibly without the full
1667 kernel source.&lt;/p&gt;
1668
1669 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
1670 activities, please send Bitcoin donations to my address
1671 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
1672 </description>
1673 </item>
1674
1675 <item>
1676 <title>Is the desktop recommending your program for opening its files?</title>
1677 <link>http://www.hungry.com/~pere/blog/Is_the_desktop_recommending_your_program_for_opening_its_files_.html</link>
1678 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Is_the_desktop_recommending_your_program_for_opening_its_files_.html</guid>
1679 <pubDate>Sun, 29 Jan 2023 11:00:00 +0100</pubDate>
1680 <description>&lt;p&gt;Linux desktop systems
1681 &lt;a href=&quot;https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html&quot;&gt;have
1682 standardized&lt;/a&gt; how programs present themselves to the desktop
1683 system. If a package include a .desktop file in
1684 /usr/share/applications/, Gnome, KDE, LXDE, Xfce and the other desktop
1685 environments will pick up the file and use its content to generate the
1686 menu of available programs in the system. A lesser known fact is that
1687 a package can also explain to the desktop system how to recognize the
1688 files created by the program in question, and use it to open these
1689 files on request, for example via a GUI file browser.&lt;/p&gt;
1690
1691 &lt;p&gt;A while back I ran into a package that did not tell the desktop
1692 system how to recognize its files and was not used to open its files
1693 in the file browser and fixed it. In the process I wrote a simple
1694 debian/tests/ script to ensure the setup keep working. It might be
1695 useful for other packages too, to ensure any future version of the
1696 package keep handling its own files.&lt;/p&gt;
1697
1698 &lt;p&gt;For this to work the file format need a useful MIME type that can
1699 be used to identify the format. If the file format do not yet have a
1700 MIME type, it should define one and preferably also
1701 &lt;a href=&quot;https://www.iana.org/assignments/media-types/media-types.xhtml&quot;&gt;register
1702 it with IANA&lt;/a&gt; to ensure the MIME type string is reserved.&lt;/p&gt;
1703
1704 &lt;p&gt;The script uses the &lt;tt&gt;xdg-mime&lt;/tt&gt; program from xdg-utils to
1705 query the database of standardized package information and ensure it
1706 return sensible values. It also need the location of an example file
1707 for xdg-mime to guess the format of.&lt;/p&gt;
1708
1709 &lt;pre&gt;
1710 #!/bin/sh
1711 #
1712 # Author: Petter Reinholdtsen
1713 # License: GPL v2 or later at your choice.
1714 #
1715 # Validate the MIME setup, making sure motor types have
1716 # application/vnd.openmotor+yaml associated with them and is connected
1717 # to the openmotor desktop file.
1718
1719 retval=0
1720
1721 mimetype=&quot;application/vnd.openmotor+yaml&quot;
1722 testfile=&quot;test/data/real/o3100/motor.ric&quot;
1723 mydesktopfile=&quot;openmotor.desktop&quot;
1724
1725 filemime=&quot;$(xdg-mime query filetype &quot;$testfile&quot;)&quot;
1726
1727 if [ &quot;$mimetype&quot; != &quot;$filemime&quot; ] ; then
1728 retval=1
1729 echo &quot;error: xdg-mime claim motor file MIME type is $filemine, not $mimetype&quot;
1730 else
1731 echo &quot;success: xdg-mime report correct mime type $mimetype for motor file&quot;
1732 fi
1733
1734 desktop=$(xdg-mime query default &quot;$mimetype&quot;)
1735
1736 if [ &quot;$mydesktopfile&quot; != &quot;$desktop&quot; ]; then
1737 retval=1
1738 echo &quot;error: xdg-mime claim motor file should be handled by $desktop, not $mydesktopfile&quot;
1739 else
1740 echo &quot;success: xdg-mime agree motor file should be handled by $mydesktopfile&quot;
1741 fi
1742
1743 exit $retval
1744 &lt;/pre&gt;
1745
1746 &lt;p&gt;It is a simple way to ensure your users are not very surprised when
1747 they try to open one of your file formats in their file browser.&lt;/p&gt;
1748
1749 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
1750 activities, please send Bitcoin donations to my address
1751 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
1752 </description>
1753 </item>
1754
1755 <item>
1756 <title>Opensnitch, the application level interactive firewall, heading into the Debian archive</title>
1757 <link>http://www.hungry.com/~pere/blog/Opensnitch__the_application_level_interactive_firewall__heading_into_the_Debian_archive.html</link>
1758 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Opensnitch__the_application_level_interactive_firewall__heading_into_the_Debian_archive.html</guid>
1759 <pubDate>Sun, 22 Jan 2023 23:55:00 +0100</pubDate>
1760 <description>&lt;p&gt;While reading a
1761 &lt;a href=&quot;https://sneak.berlin/20230115/macos-scans-your-local-files-now/&quot;&gt;blog
1762 post claiming MacOS X recently started scanning local files and
1763 reporting information about them to Apple&lt;/a&gt;, even on a machine where
1764 all such callback features had been disabled, I came across a
1765 description of the Little Snitch application for MacOS X. It seemed
1766 like a very nice tool to have in the tool box, and I decided to see if
1767 something similar was available for Linux.&lt;/p&gt;
1768
1769 &lt;p&gt;It did not take long to find
1770 &lt;a href=&quot;https://github.com/evilsocket/opensnitch&quot;&gt;the OpenSnitch
1771 package&lt;/a&gt;, which has been in development since 2017, and now is in
1772 version 1.5.0. It has had a
1773 &lt;a href=&quot;https://bugs.debian.org/909567&quot;&gt;request for Debian
1774 packaging&lt;/a&gt; since 2018, but no-one completed the job so far. Just
1775 for fun, I decided to see if I could help, and I was very happy to
1776 discover that
1777 &lt;a href=&quot;https://github.com/evilsocket/opensnitch/issues/304&quot;&gt;upstream
1778 want a Debian package too&lt;/a&gt;.&lt;/p&gt;
1779
1780 &lt;p&gt;After struggling a bit with getting the program to run, figuring
1781 out building Go programs (and a little failed detour to look at eBPF
1782 builds too - help needed), I am very happy to report that I am
1783 sponsoring upstream to maintain the package in Debian, and it has
1784 since this morning been waiting in NEW for the ftpmasters to have a
1785 look. Perhaps it can get into the archive in time for the Bookworm
1786 release?&lt;/p&gt;
1787
1788 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
1789 activities, please send Bitcoin donations to my address
1790 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
1791 </description>
1792 </item>
1793
1794 <item>
1795 <title>LinuxCNC MQTT publisher component</title>
1796 <link>http://www.hungry.com/~pere/blog/LinuxCNC_MQTT_publisher_component.html</link>
1797 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/LinuxCNC_MQTT_publisher_component.html</guid>
1798 <pubDate>Sun, 8 Jan 2023 19:30:00 +0100</pubDate>
1799 <description>&lt;p&gt;I watched &lt;a href=&quot;https://yewtu.be/watch?v=jmKUV3aNLjk&quot;&gt;a 2015
1800 video from Andreas Schiffler&lt;/a&gt; the other day, where he set up
1801 &lt;a href=&quot;https://linuxcnc.org/&quot;&gt;LinuxCNC&lt;/a&gt; to send status
1802 information to the MQTT broker IBM Bluemix. As I also use MQTT for
1803 graphing, it occured to me that a generic MQTT LinuxCNC component
1804 would be useful and I set out to implement it. Today I got the first
1805 draft limping along and submitted as
1806 &lt;a href=&quot;https://github.com/LinuxCNC/linuxcnc/pull/2253&quot;&gt;a patch to the
1807 LinuxCNC project&lt;/a&gt;.&lt;/p&gt;
1808
1809 &lt;p&gt;The simple part was setting up the MQTT publishing code in Python.
1810 I already have set up other parts submitting data to my Mosquito MQTT
1811 broker, so I could reuse that code. Writing a LinuxCNC component in
1812 Python as new to me, but using existing examples in the code
1813 repository and the extensive documentation, this was fairly straight
1814 forward. The hardest part was creating a automated test for the
1815 component to ensure it was working. Testing it in a simulated
1816 LinuxCNC machine proved very useful, as I discovered features I needed
1817 that I had not thought of yet, and adjusted the code quite a bit to
1818 make it easier to test without a operational MQTT broker
1819 available.&lt;/p&gt;
1820
1821 &lt;p&gt;The draft is ready and working, but I am unsure which LinuxCNC HAL
1822 pins I should collect and publish by default (in other words, the
1823 default set of information pieces published), and how to get the
1824 machine name from the LinuxCNC INI file. The latter is a minor
1825 detail, but I expect it would be useful in a setup with several
1826 machines available. I am hoping for feedback from the experienced
1827 LinuxCNC developers and users, to make the component even better
1828 before it can go into the mainland LinuxCNC code base.&lt;/p&gt;
1829
1830 &lt;p&gt;Since I started on the MQTT component, I came across
1831 &lt;a href=&quot;https://yewtu.be/watch?v=Bqa2grG0XtA&quot;&gt;another video from Kent
1832 VanderVelden&lt;/a&gt; where he combine LinuxCNC with a set of screen glasses
1833 controlled by a Raspberry Pi, and it occured to me that it would
1834 be useful for such use cases if LinuxCNC also provided a REST API for
1835 querying its status. I hope to start on such component once the MQTT
1836 component is working well.&lt;/p&gt;
1837
1838 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
1839 activities, please send Bitcoin donations to my address
1840 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
1841 </description>
1842 </item>
1843
1844 <item>
1845 <title>ONVIF IP camera management tool finally in Debian</title>
1846 <link>http://www.hungry.com/~pere/blog/ONVIF_IP_camera_management_tool_finally_in_Debian.html</link>
1847 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/ONVIF_IP_camera_management_tool_finally_in_Debian.html</guid>
1848 <pubDate>Sat, 24 Dec 2022 08:00:00 +0100</pubDate>
1849 <description>&lt;p&gt;Merry Christmas to you all. Here is a small gift to all those with
1850 IP cameras following the &lt;a href=&quot;https://www.onvif.org/&quot;&gt;ONVIF
1851 specification&lt;/a&gt;. There is finally a nice command line and GUI tool
1852 in Debian to manage ONVIF IP cameras. After working with upstream for
1853 a few months and sponsoring the upload, I am very happy to report that
1854 the &lt;a href=&quot;https://tracker.debian.org/libonvif&quot;&gt;libonvif package&lt;/a&gt;
1855 entered Debian Sid last night.&lt;/p&gt;
1856
1857 &lt;p&gt;The package provide a C library to communicate with such cameras, a
1858 command line tool to locate and update settings of (like password) the
1859 cameras and a GUI tool to configure and control the units as well as
1860 preview the video from the camera. Libonvif is available on Both
1861 Linux and Windows and the GUI tool uses the Qt library. The main
1862 competitors are non-free software, while libonvif is GNU GPL licensed.
1863 I am very glad Debian users in the future can control their cameras
1864 using a free software system provided by Debian. But the ONVIF world
1865 is full of slightly broken firmware, where the cameras pretend to
1866 follow the ONVIF specification but fail to set some configuration
1867 values or refuse to provide video to more than one recipient at the
1868 time, and the onvif project is quite young and might take a while
1869 before it completely work with your camera. Upstream seem eager to
1870 improve the library, so handling any broken camera might be just &lt;a
1871 href=&quot;https://github.com/sr99622/libonvif/&quot;&gt;a bug report away&lt;/a&gt;.&lt;/p&gt;
1872
1873 &lt;p&gt;The package just cleared NEW, and need a new source only upload
1874 before it can enter testing. This will happen in the next few
1875 days.&lt;/p&gt;
1876
1877 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
1878 activities, please send Bitcoin donations to my address
1879 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
1880 </description>
1881 </item>
1882
1883 <item>
1884 <title>Managing and using ONVIF IP cameras with Linux</title>
1885 <link>http://www.hungry.com/~pere/blog/Managing_and_using_ONVIF_IP_cameras_with_Linux.html</link>
1886 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Managing_and_using_ONVIF_IP_cameras_with_Linux.html</guid>
1887 <pubDate>Wed, 19 Oct 2022 12:30:00 +0200</pubDate>
1888 <description>&lt;p&gt;Recently I have been looking at how to control and collect data
1889 from a handful IP cameras using Linux. I both wanted to change their
1890 settings and to make their imagery available via a free software
1891 service under my control. Here is a summary of the tools I found.&lt;/p&gt;
1892
1893 &lt;p&gt;First I had to identify the cameras and their protocols. As far as
1894 I could tell, they were using some SOAP looking protocol and their
1895 internal web server seem to only work with Microsoft Internet Explorer
1896 with some proprietary binary plugin, which in these days of course is
1897 a security disaster and also made it impossible for me to use the
1898 camera web interface. Luckily I discovered that the SOAP looking
1899 protocol is actually following &lt;a href=&quot;https://www.onvif.org/&quot;&gt;the
1900 ONVIF specification&lt;/a&gt;, which seem to be supported by a lot of IP
1901 cameras these days.&lt;/p&gt;
1902
1903 &lt;p&gt;Once the protocol was identified, I was able to find what appear to
1904 be the most popular way to configure ONVIF cameras, the free software
1905 Windows tool named
1906 &lt;a href=&quot;https://sourceforge.net/projects/onvifdm/&quot;&gt;ONVIF Device
1907 Manager&lt;/a&gt;. Lacking any other options at the time, I tried
1908 unsuccessfully to get it running using Wine, but was missing a dotnet
1909 40 library and I found no way around it to run it on Linux.&lt;/p&gt;
1910
1911 &lt;p&gt;The next tool I found to configure the cameras were a non-free Linux Qt
1912 client &lt;a href=&quot;https://www.lingodigit.com/onvif_nvcdemo.html&quot;&gt;ONVIF
1913 Device Tool&lt;/a&gt;. I did not like its terms of use, so did not spend
1914 much time on it.&lt;/p&gt;
1915
1916 &lt;p&gt;To collect the video and make it available in a web interface, I
1917 found the Zoneminder tool in Debian. A recent version was able to
1918 automatically detect and configure ONVIF devices, so I could use it to
1919 set up motion detection in and collection of the camera output. I had
1920 initial problems getting the ONVIF autodetection to work, as both
1921 Firefox and Chromium &lt;a href=&quot;https://bugs.debian.org/1001188&quot;&gt;refused
1922 the inter-tab communication&lt;/a&gt; being used by the Zoneminder web
1923 pages, but managed to get konqueror to work. Apparently the &quot;Enhanced
1924 Tracking Protection&quot; in Firefox cause the problem. I ended up
1925 upgrading to the Bookworm edition of Zoneminder in the process to try
1926 to fix the issue, and believe the problem might be solved now.&lt;/p&gt;
1927
1928 &lt;p&gt;In the process I came across the nice Linux GUI tool
1929 &lt;a href=&quot;https://gitlab.com/caspermeijn/onvifviewer/&quot;&gt;ONVIF Viewer&lt;/a&gt;
1930 allowing me to preview the camera output and validate the login
1931 passwords required. Sadly its author has grown tired of maintaining
1932 the software, so it might not see any future updates. Which is sad,
1933 as the viewer is sightly unstable and the picture tend to lock up.
1934 Note, this lockup might be due to limitations in the cameras and not
1935 the viewer implementation. I suspect the camera is only able to
1936 provide pictures to one client at the time, and the Zoneminder feed
1937 might interfere with the GUI viewer. I have
1938 &lt;a href=&quot;https://bugs.debian.org/1000820&quot;&gt;asked for the tool to be
1939 included in Debian&lt;/a&gt;.&lt;/p&gt;
1940
1941 &lt;p&gt;Finally, I found what appear to be very nice Linux free software
1942 replacement for the Windows tool, named
1943 &lt;a href=&quot;https://github.com/sr99622/libonvif/&quot;&gt;libonvif&lt;/a&gt;. It
1944 provide a C library to talk to ONVIF devices as well as a command line
1945 and GUI tool using the library. Using the GUI tool I was able to change
1946 the admin passwords and update other settings of the cameras. I have
1947 &lt;a href=&quot;https://bugs.debian.org/1021980&quot;&gt;asked for the package to be
1948 included in Debian&lt;/a&gt;.&lt;/p&gt;
1949
1950 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
1951 activities, please send Bitcoin donations to my address
1952 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
1953
1954 &lt;p&gt;&lt;strong&gt;Update 2022-10-20&lt;/strong&gt;: Since my initial publication of
1955 this text, I got several suggestions for more free software Linux
1956 tools. There is &lt;a href=&quot;https://github.com/quatanium/python-onvif&quot;&gt;a
1957 ONVIF python library&lt;/a&gt; (already
1958 &lt;a href=&quot;https://bugs.debian.org/824240&quot;&gt;requested into Debian&lt;/a&gt;) and
1959 &lt;a href=&quot;https://github.com/FalkTannhaeuser/python-onvif-zeep&quot;&gt;a python 3
1960 fork&lt;/a&gt; using a different SOAP dependency. There is also
1961 &lt;a href=&quot;https://www.home-assistant.io/integrations/onvif/&quot;&gt;support for
1962 ONVIF in Home Assistant&lt;/a&gt;, and there is an alternative to Zoneminder
1963 called &lt;a href=&quot;https://www.shinobi.video/&quot;&gt;Shinobi&lt;/a&gt;. The latter
1964 two are not included in Debian either. I have not tested any of these
1965 so far.&lt;/p&gt;
1966 </description>
1967 </item>
1968
1969 <item>
1970 <title>Time to translate the Bullseye edition of the Debian Administrator&#39;s Handbook</title>
1971 <link>http://www.hungry.com/~pere/blog/Time_to_translate_the_Bullseye_edition_of_the_Debian_Administrator_s_Handbook.html</link>
1972 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Time_to_translate_the_Bullseye_edition_of_the_Debian_Administrator_s_Handbook.html</guid>
1973 <pubDate>Mon, 12 Sep 2022 15:45:00 +0200</pubDate>
1974 <description>&lt;p align=&quot;center&quot;&gt;&lt;img align=&quot;center&quot; src=&quot;http://www.hungry.com/~pere/blog/images/2020-10-20-debian-handbook-nb-testprint.jpeg&quot; width=&quot;60%&quot;/&gt;&lt;/p&gt;
1975
1976 &lt;p&gt;(The picture is of the previous edition.)&lt;/p&gt;
1977
1978 &lt;p&gt;Almost two years after the previous Norwegian Bokmål translation of
1979 the &quot;&lt;a href=&quot;https://debian-handbook.info/&quot;&gt;The Debian Administrator&#39;s
1980 Handbook&lt;/a&gt;&quot; was published, a new edition is finally being prepared. The
1981 english text is updated, and it is time to start working on the
1982 translations. Around 37 percent of the strings have been updated, one
1983 way or another, and the translations starting from a complete Debian Buster
1984 edition now need to bring their translation up from 63% to 100%. The
1985 complete book is licensed using a Creative Commons license, and has
1986 been published in several languages over the years. The translations
1987 are done by volunteers to bring Linux in their native tongue. The
1988 last time I checked, it complete text was available in English,
1989 Norwegian Bokmål, German, Indonesian, Brazil Portuguese and Spanish.
1990 In addition, work has been started for Arabic (Morocco), Catalan,
1991 Chinese (Simplified), Chinese (Traditional), Croatian, Czech, Danish,
1992 Dutch, French, Greek, Italian, Japanese, Korean, Persian, Polish,
1993 Romanian, Russian, Swedish, Turkish and Vietnamese.&lt;/p&gt;
1994
1995 &lt;p&gt;The translation is conducted on
1996 &lt;a href=&quot;https://hosted.weblate.org/projects/debian-handbook/&quot;&gt;the
1997 hosted weblate project page&lt;/a&gt;. Prospective translators are
1998 recommeded to subscribe to
1999 &lt;a href=&quot;http://lists.alioth.debian.org/mailman/listinfo/debian-handbook-translators&quot;&gt;the
2000 translators mailing list&lt;/a&gt; and should also check out
2001 &lt;a href=&quot;https://debian-handbook.info/contribute/&quot;&gt;the instructions for
2002 contributors&lt;/a&gt;.&lt;/p&gt;
2003
2004 &lt;p&gt;I am one of the Norwegian Bokmål translators of this book, and we
2005 have just started. Your contribution is most welcome.&lt;/p&gt;
2006
2007 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
2008 activities, please send Bitcoin donations to my address
2009 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
2010 </description>
2011 </item>
2012
2013 <item>
2014 <title>Automatic LinuxCNC servo PID tuning?</title>
2015 <link>http://www.hungry.com/~pere/blog/Automatic_LinuxCNC_servo_PID_tuning_.html</link>
2016 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Automatic_LinuxCNC_servo_PID_tuning_.html</guid>
2017 <pubDate>Sat, 16 Jul 2022 22:30:00 +0200</pubDate>
2018 <description>&lt;p&gt;While working on a CNC with servo motors controlled by the
2019 &lt;a href=&quot;https://en.wikipedia.org/wiki/LinuxCNC&quot;&gt;LinuxCNC&lt;/a&gt;
2020 &lt;a href=&quot;https://en.wikipedia.org/wiki/PID_controller&quot;&gt;PID
2021 controller&lt;/a&gt;, I recently had to learn how to tune the collection of values
2022 that control such mathematical machinery that a PID controller is. It
2023 proved to be a lot harder than I hoped, and I still have not succeeded
2024 in getting the Z PID controller to successfully defy gravity, nor X
2025 and Y to move accurately and reliably. But while climbing up this
2026 rather steep learning curve, I discovered that some motor control
2027 systems are able to tune their PID controllers. I got the impression
2028 from the documentation that LinuxCNC were not. This proved to be not
2029 true.&lt;/p&gt;
2030
2031 &lt;p&gt;The LinuxCNC
2032 &lt;a href=&quot;http://linuxcnc.org/docs/html/man/man9/pid.9.html&quot;&gt;pid
2033 component&lt;/a&gt; is the recommended PID controller to use. It uses eight
2034 constants &lt;tt&gt;Pgain&lt;/tt&gt;, &lt;tt&gt;Igain&lt;/tt&gt;, &lt;tt&gt;Dgain&lt;/tt&gt;,
2035 &lt;tt&gt;bias&lt;/tt&gt;, &lt;tt&gt;FF0&lt;/tt&gt;, &lt;tt&gt;FF1&lt;/tt&gt;, &lt;tt&gt;FF2&lt;/tt&gt; and
2036 &lt;tt&gt;FF3&lt;/tt&gt; to calculate the output value based on current and wanted
2037 state, and all of these need to have a sensible value for the
2038 controller to behave properly. Note, there are even more values
2039 involved, theser are just the most important ones. In my case I need
2040 the X, Y and Z axes to follow the requested path with little error.
2041 This has proved quite a challenge for someone who have never tuned a
2042 PID controller before, but there is at least some help to be found.
2043
2044 &lt;p&gt;I discovered that included in LinuxCNC was this old PID component
2045 at_pid claiming to have auto tuning capabilities. Sadly it had been
2046 neglected since 2011, and could not be used as a plug in replacement
2047 for the default pid component. One would have to rewriting the
2048 LinuxCNC HAL setup to test at_pid. This was rather sad, when I wanted
2049 to quickly test auto tuning to see if it did a better job than me at
2050 figuring out good P, I and D values to use.&lt;/p&gt;
2051
2052 &lt;p&gt;I decided to have a look if the situation could be improved. This
2053 involved trying to understand the code and history of the pid and
2054 at_pid components. Apparently they had a common ancestor, as code
2055 structure, comments and variable names were quite close to each other.
2056 Sadly this was not reflected in the git history, making it hard to
2057 figure out what really happened. My guess is that the author of
2058 &lt;a href=&quot;https://github.com/LinuxCNC/linuxcnc/blob/master/src/hal/components/at_pid.c&quot;&gt;at_pid.c&lt;/a&gt;
2059 took a version of
2060 &lt;a href=&quot;https://github.com/LinuxCNC/linuxcnc/blob/master/src/hal/components/pid.c&quot;&gt;pid.c&lt;/a&gt;,
2061 rewrote it to follow the structure he wished pid.c to have, then added
2062 support for auto tuning and finally got it included into the LinuxCNC
2063 repository. The restructuring and lack of early history made it
2064 harder to figure out which part of the code were relevant to the auto
2065 tuning, and which part of the code needed to be updated to work the
2066 same way as the current pid.c implementation. I started by trying to
2067 isolate relevant changes in pid.c, and applying them to at_pid.c. My
2068 aim was to make sure the at_pid component could replace the pid
2069 component with a simple change in the HAL setup loadrt line, without
2070 having to &quot;rewire&quot; the rest of the HAL configuration. After a few
2071 hours following this approach, I had learned quite a lot about the
2072 code structure of both components, while concluding I was heading down
2073 the wrong rabbit hole, and should get back to the surface and find a
2074 different path.&lt;/p&gt;
2075
2076 &lt;p&gt;For the second attempt, I decided to throw away all the PID control
2077 related part of the original at_pid.c, and instead isolate and lift
2078 the auto tuning part of the code and inject it into a copy of pid.c.
2079 This ensured compatibility with the current pid component, while
2080 adding auto tuning as a run time option. To make it easier to identify
2081 the relevant parts in the future, I wrapped all the auto tuning code
2082 with &#39;#ifdef AUTO_TUNER&#39;. The end result behave just like the current
2083 pid component by default, as that part of the code is identical. The
2084 &lt;a href=&quot;https://github.com/LinuxCNC/linuxcnc/pull/1820&quot;&gt;end result
2085 entered the LinuxCNC master branch&lt;/a&gt; a few days ago.&lt;/p&gt;
2086
2087 &lt;p&gt;To enable auto tuning, one need to set a few HAL pins in the PID
2088 component. The most important ones are &lt;tt&gt;tune-effort&lt;/tt&gt;,
2089 &lt;tt&gt;tune-mode&lt;/tt&gt; and &lt;tt&gt;tune-start&lt;/tt&gt;. But lets take a step
2090 back, and see what the auto tuning code will do. I do not know the
2091 mathematical foundation of the at_pid algorithm, but from observation
2092 I can tell that the algorithm will, when enabled, produce a square
2093 wave pattern centered around the &lt;tt&gt;bias&lt;/tt&gt; value on the output pin
2094 of the PID controller. This can be seen using the HAL Scope provided
2095 by LinuxCNC. In my case, this is translated into voltage (+-10V) sent
2096 to the motor controller, which in turn is translated into motor speed.
2097 So at_pid will ask the motor to move the axis back and forth. The
2098 number of cycles in the pattern is controlled by the
2099 &lt;tt&gt;tune-cycles&lt;/tt&gt; pin, and the extremes of the wave pattern is
2100 controlled by the &lt;tt&gt;tune-effort&lt;/tt&gt; pin. Of course, trying to
2101 change the direction of a physical object instantly (as in going
2102 directly from a positive voltage to the equivalent negative voltage)
2103 do not change velocity instantly, and it take some time for the object
2104 to slow down and move in the opposite direction. This result in a
2105 more smooth movement wave form, as the axis in question were vibrating
2106 back and forth. When the axis reached the target speed in the
2107 opposing direction, the auto tuner change direction again. After
2108 several of these changes, the average time delay between the &#39;peaks&#39;
2109 and &#39;valleys&#39; of this movement graph is then used to calculate
2110 proposed values for Pgain, Igain and Dgain, and insert them into the
2111 HAL model to use by the pid controller. The auto tuned settings are
2112 not great, but htye work a lot better than the values I had been able
2113 to cook up on my own, at least for the horizontal X and Y axis. But I
2114 had to use very small &lt;tt&gt;tune-effort&lt;tt&gt; values, as my motor
2115 controllers error out if the voltage change too quickly. I&#39;ve been
2116 less lucky with the Z axis, which is moving a heavy object up and
2117 down, and seem to confuse the algorithm. The Z axis movement became a
2118 lot better when I introduced a &lt;tt&gt;bias&lt;/tt&gt; value to counter the
2119 gravitational drag, but I will have to work a lot more on the Z axis
2120 PID values.&lt;/p&gt;
2121
2122 &lt;p&gt;Armed with this knowledge, it is time to look at how to do the
2123 tuning. Lets say the HAL configuration in question load the PID
2124 component for X, Y and Z like this:&lt;/p&gt;
2125
2126 &lt;blockquote&gt;&lt;pre&gt;
2127 loadrt pid names=pid.x,pid.y,pid.z
2128 &lt;/pre&gt;&lt;/blockquote&gt;
2129
2130 &lt;p&gt;Armed with the new and improved at_pid component, the new line will
2131 look like this:&lt;/p&gt;
2132
2133 &lt;blockquote&gt;&lt;pre&gt;
2134 loadrt at_pid names=pid.x,pid.y,pid.z
2135 &lt;/pre&gt;&lt;/blockquote&gt;
2136
2137 &lt;p&gt;The rest of the HAL setup can stay the same. This work because the
2138 components are referenced by name. If the component had used count=3
2139 instead, all use of pid.# had to be changed to at_pid.#.&lt;/p&gt;
2140
2141 &lt;p&gt;To start tuning the X axis, move the axis to the middle of its
2142 range, to make sure it do not hit anything when it start moving back
2143 and forth. Next, set the &lt;tt&gt;tune-effort&lt;/tt&gt; to a low number in the
2144 output range. I used 0.1 as my initial value. Next, assign 1 to the
2145 &lt;tt&gt;tune-mode&lt;/tt&gt; value. Note, this will disable the pid controlling
2146 part and feed 0 to the output pin, which in my case initially caused a
2147 lot of drift. In my case it proved to be a good idea with X and Y to
2148 tune the motor driver to make sure 0 voltage stopped the motor
2149 rotation. On the other hand, for the Z axis this proved to be a bad
2150 idea, so it will depend on your setup. It might help to set the
2151 &lt;tt&gt;bias&lt;/tt&gt; value to a output value that reduce or eliminate the
2152 axis drift. Finally, after setting &lt;tt&gt;tune-mode&lt;/tt&gt;, set
2153 &lt;tt&gt;tune-start&lt;/tt&gt; to 1 to activate the auto tuning. If all go well,
2154 your axis will vibrate for a few seconds and when it is done, new
2155 values for Pgain, Igain and Dgain will be active. To test them,
2156 change &lt;tt&gt;tune-mode&lt;/tt&gt; back to 0. Note that this might cause the
2157 machine to suddenly jerk as it bring the axis back to its commanded
2158 position, which it might have drifted away from during tuning. To
2159 summarize with some halcmd lines:&lt;/p&gt;
2160
2161 &lt;blockquote&gt;&lt;pre&gt;
2162 setp pid.x.tune-effort 0.1
2163 setp pid.x.tune-mode 1
2164 setp pid.x.tune-start 1
2165 # wait for the tuning to complete
2166 setp pid.x.tune-mode 0
2167 &lt;/pre&gt;&lt;/blockquote&gt;
2168
2169 &lt;p&gt;After doing this task quite a few times while trying to figure out
2170 how to properly tune the PID controllers on the machine in, I decided
2171 to figure out if this process could be automated, and wrote a script
2172 to do the entire tuning process from power on. The end result will
2173 ensure the machine is powered on and ready to run, home all axis if it
2174 is not already done, check that the extra tuning pins are available,
2175 move the axis to its mid point, run the auto tuning and re-enable the
2176 pid controller when it is done. It can be run several times. Check
2177 out the
2178 &lt;a href=&quot;https://github.com/SebKuzminsky/MazakVQC1540/blob/bon-dev/scripts/run-auto-pid-tuner&quot;&gt;run-auto-pid-tuner&lt;/a&gt;
2179 script on github if you want to learn how it is done.&lt;/p&gt;
2180
2181 &lt;p&gt;My hope is that this little adventure can inspire someone who know
2182 more about motor PID controller tuning can implement even better
2183 algorithms for automatic PID tuning in LinuxCNC, making life easier
2184 for both me and all the others that want to use LinuxCNC but lack the
2185 in depth knowledge needed to tune PID controllers well.&lt;/p&gt;
2186
2187 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
2188 activities, please send Bitcoin donations to my address
2189 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
2190 </description>
2191 </item>
2192
2193 <item>
2194 <title>LinuxCNC translators life just got a bit easier</title>
2195 <link>http://www.hungry.com/~pere/blog/LinuxCNC_translators_life_just_got_a_bit_easier.html</link>
2196 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/LinuxCNC_translators_life_just_got_a_bit_easier.html</guid>
2197 <pubDate>Fri, 3 Jun 2022 21:10:00 +0200</pubDate>
2198 <description>&lt;p&gt;Back in oktober last year, when I started looking at the
2199 &lt;a href=&quot;https://en.wikipedia.org/wiki/LinuxCNC&quot;&gt;LinuxCNC&lt;/a&gt; system, I
2200 proposed to change the documentation build system make life easier for
2201 translators. The original system consisted of independently written
2202 documentation files for each language, with no automated way to track
2203 changes done in other translations and no help for the translators to
2204 know how much was left to translated. By using
2205 &lt;a href=&quot;https://po4a.org/&quot;&gt;the po4a system&lt;/a&gt; to generate POT and PO
2206 files from the English documentation, this can be improved. A small
2207 team of LinuxCNC contributors got together and today our labour
2208 finally payed off. Since a few hours ago, it is now possible to
2209 translate &lt;a href=&quot;https://hosted.weblate.org/projects/linuxcnc/&quot;&gt;the
2210 LinuxCNC documentation on Weblate&lt;/a&gt;, alongside the program itself.&lt;/p&gt;
2211
2212 &lt;p&gt;The effort to migrate the documentation to use po4a has been both
2213 slow and frustrating. I am very happy we finally made it.&lt;/p&gt;
2214
2215 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
2216 activities, please send Bitcoin donations to my address
2217 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
2218 </description>
2219 </item>
2220
2221 <item>
2222 <title>geteltorito make CD firmware upgrades a breeze</title>
2223 <link>http://www.hungry.com/~pere/blog/geteltorito_make_CD_firmware_upgrades_a_breeze.html</link>
2224 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/geteltorito_make_CD_firmware_upgrades_a_breeze.html</guid>
2225 <pubDate>Wed, 20 Apr 2022 11:50:00 +0200</pubDate>
2226 <description>&lt;p&gt;Recently I wanted to upgrade the firmware of my thinkpad, and
2227 located the firmware download page from Lenovo (which annoyingly do
2228 not allow access via Tor, forcing me to hand them more personal
2229 information that I would like). The
2230 &lt;a href=&quot;https://support.lenovo.com/no/en/search?query=thinkpad firmware bios upgrade iso&amp;SearchType=Customer search&amp;searchLocation=Masthead&quot;&gt;download
2231 from Lenovo&lt;/a&gt; is a bootable ISO image, which is a bit of a problem
2232 when all I got available is a USB memory stick. I tried booting the
2233 ISO as a USB stick, but this did not work. But genisoimage came to
2234 the rescue.&lt;/p&gt;
2235
2236 &lt;P&gt;The geteltorito program in
2237 &lt;a href=&quot;http://tracker.debian.org/cdrkit&quot;&gt;the genisoimage binary
2238 package&lt;/a&gt; is able to convert the bootable ISO image to a bootable
2239 USB stick using a simple command line recipe, which I then can write
2240 to the most recently inserted USB stick:&lt;/p&gt;
2241
2242 &lt;blockquote&gt;&lt;pre&gt;
2243 geteltorito -o usbstick.img lenovo-firmware.iso
2244 sudo dd bs=10M if=usbstick.img of=$(ls -tr /dev/sd?|tail -1)
2245 &lt;/pre&gt;&lt;/blockquote&gt;
2246
2247 &lt;p&gt;This USB stick booted the firmware upgrader just fine, and in a few
2248 minutes my machine had the latest and greatest BIOS firmware in place.&lt;/p&gt;
2249 </description>
2250 </item>
2251
2252 <item>
2253 <title>Run your industrial metal working machine using Debian?</title>
2254 <link>http://www.hungry.com/~pere/blog/Run_your_industrial_metal_working_machine_using_Debian_.html</link>
2255 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Run_your_industrial_metal_working_machine_using_Debian_.html</guid>
2256 <pubDate>Wed, 2 Mar 2022 18:40:00 +0100</pubDate>
2257 <description>&lt;p&gt;After many months of hard work by the good people involved in
2258 &lt;a href=&quot;https://en.wikipedia.org/wiki/LinuxCNC&quot;&gt;LinuxCNC&lt;/a&gt;, the
2259 system was accepted Sunday
2260 &lt;a href=&quot;https://tracker.debian.org/pkg/linuxcnc&quot;&gt;into Debian&lt;/a&gt;.
2261 Once it was available from Debian, I was surprised to discover from
2262 &lt;a href=&quot;https://qa.debian.org/popcon.php?package=linuxcnc&quot;&gt;its
2263 popularity-contest numbers&lt;/a&gt; that people have been reporting its use
2264 since 2012. &lt;a href=&quot;http://linuxcnc.org/&quot;&gt;Its project site&lt;/a&gt; might
2265 be a good place to check out, but sadly is not working when visiting
2266 via Tor.&lt;/p&gt;
2267
2268 &lt;p&gt;But what is LinuxCNC, you are probably wondering? Perhaps a
2269 Wikipedia quote is in place?&lt;/p&gt;
2270
2271 &lt;blockquote&gt;
2272 &quot;LinuxCNC is a software system for numerical control of
2273 machines such as milling machines, lathes, plasma cutters, routers,
2274 cutting machines, robots and hexapods. It can control up to 9 axes or
2275 joints of a CNC machine using G-code (RS-274NGC) as input. It has
2276 several GUIs suited to specific kinds of usage (touch screen,
2277 interactive development).&quot;
2278 &lt;/blockquote&gt;
2279
2280 &lt;p&gt;It can even control 3D printers. And even though the Wikipedia
2281 page indicate that it can only work with hard real time kernel
2282 features, it can also work with the user space soft real time features
2283 provided by the Debian kernel.
2284 &lt;a href=&quot;https://github.com/linuxcnc/linuxcnc&quot;&gt;The source code&lt;/a&gt; is
2285 available from Github. The last few months I&#39;ve been involved in the
2286 translation setup for the program and documentation. Translators are
2287 most welcome to
2288 &lt;a href=&quot;https://hosted.weblate.org/engage/linuxcnc/&quot;&gt;join the
2289 effort&lt;/a&gt; using Weblate.&lt;/p&gt;
2290
2291 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
2292 activities, please send Bitcoin donations to my address
2293 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
2294 </description>
2295 </item>
2296
2297 <item>
2298 <title>Debian still an excellent choice for Lego builders</title>
2299 <link>http://www.hungry.com/~pere/blog/Debian_still_an_excellent_choice_for_Lego_builders.html</link>
2300 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Debian_still_an_excellent_choice_for_Lego_builders.html</guid>
2301 <pubDate>Sun, 24 Oct 2021 07:10:00 +0200</pubDate>
2302 <description>&lt;p&gt;The Debian Lego team saw a lot of activity the last few weeks. All
2303 the packages under the team umbrella has been updated to fix
2304 packaging, lintian issues and BTS reports. In addition, a new and
2305 inspiring team member appeared on both the
2306 &lt;a href=&quot;https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/debian-lego-team&quot;&gt;debian-lego-team
2307 Team mailing list&lt;/a&gt; and
2308 &lt;a href=&quot;irc://irc.debian.org/%23debian-lego&quot;&gt;IRC channel
2309 #debian-lego&lt;/a&gt;. If you are interested in Lego CAD design and LEGO
2310 Mindstorms programming, check out the
2311 &lt;a href=&quot;http://wiki.debian.org/LegoDesigners&quot;&gt;team wiki page&lt;/a&gt; to
2312 see what Debian can offer the Lego enthusiast.&lt;/p&gt;
2313
2314 &lt;p&gt;Patches has been sent upstream, causing new upstream releases, one
2315 even the first one in more than ten years, and old upstreams was
2316 released with new ones. There are still a lot of work left, and the
2317 team welcome more members to help us make sure Debian is the Linux
2318 distribution of choice for Lego builders. If you want to contribute,
2319 join us in the IRC channel and become part of
2320 &lt;a href=&quot;https://salsa.debian.org/debian-lego-team/&quot;&gt;the team on
2321 Salsa&lt;/a&gt;.&lt;/p&gt;
2322
2323 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
2324 activities, please send Bitcoin donations to my address
2325 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
2326 </description>
2327 </item>
2328
2329 <item>
2330 <title>Six complete translations of The Debian Administrator&#39;s Handbook for Buster</title>
2331 <link>http://www.hungry.com/~pere/blog/Six_complete_translations_of_The_Debian_Administrator_s_Handbook_for_Buster.html</link>
2332 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Six_complete_translations_of_The_Debian_Administrator_s_Handbook_for_Buster.html</guid>
2333 <pubDate>Mon, 5 Jul 2021 19:20:00 +0200</pubDate>
2334 <description>&lt;p&gt;I am happy observe that the &lt;a href=&quot;https://debian-handbook.info/&quot;&gt;The
2335 Debian Administrator&#39;s Handbook&lt;/a&gt; is available in six languages now.
2336 I am not sure which one of these are completely proof read, but the
2337 complete book is available in these languages:
2338
2339 &lt;ul&gt;
2340
2341 &lt;li&gt;English&lt;/li&gt;
2342 &lt;li&gt;Norwegian Bokmål&lt;/li&gt;
2343 &lt;li&gt;German&lt;/li&gt;
2344 &lt;li&gt;Indonesian&lt;/li&gt;
2345 &lt;li&gt;Brazil Portuguese&lt;/li&gt;
2346 &lt;li&gt;Spanish&lt;/li&gt;
2347
2348 &lt;/ul&gt;
2349
2350 &lt;p&gt;This is the list of languages more than 70% complete, in other
2351 words with not too much left to do:&lt;/p&gt;
2352
2353 &lt;ul&gt;
2354
2355 &lt;li&gt;Chinese (Simplified) - 90%&lt;/li&gt;
2356 &lt;li&gt;French - 79%&lt;/li&gt;
2357 &lt;li&gt;Italian - 79%&lt;/li&gt;
2358 &lt;li&gt;Japanese - 77%&lt;/li&gt;
2359 &lt;li&gt;Arabic (Morocco) - 75%&lt;/li&gt;
2360 &lt;li&gt;Persian - 71%&lt;/li&gt;
2361
2362 &lt;/ul&gt;
2363
2364 &lt;p&gt;I wonder how long it will take to bring these to 100%.&lt;/p&gt;
2365
2366 &lt;p&gt;Then there is the list of languages about halfway done:&lt;/p&gt;
2367
2368 &lt;ul&gt;
2369
2370 &lt;li&gt;Russian - 63%&lt;/li&gt;
2371 &lt;li&gt;Swedish - 53%&lt;/li&gt;
2372 &lt;li&gt;Chinese (Traditional) - 46%&lt;/li&gt;
2373 &lt;li&gt;Catalan - 45%&lt;/li&gt;
2374
2375 &lt;/ul&gt;
2376
2377 &lt;p&gt;Several are on to a good start:&lt;/p&gt;
2378
2379 &lt;ul&gt;
2380
2381 &lt;li&gt;Dutch - 26%&lt;/li&gt;
2382 &lt;li&gt;Vietnamese - 25%&lt;/li&gt;
2383 &lt;li&gt;Polish - 23%&lt;/li&gt;
2384 &lt;li&gt;Czech - 22%&lt;/li&gt;
2385 &lt;li&gt;Turkish - 18%&lt;/li&gt;
2386
2387 &lt;/ul&gt;
2388
2389 &lt;p&gt;Finally, there are the ones just getting started:&lt;/p&gt;
2390
2391 &lt;ul&gt;
2392
2393 &lt;li&gt;Korean - 4%&lt;/li&gt;
2394 &lt;li&gt;Croatian - 2%&lt;/li&gt;
2395 &lt;li&gt;Greek - 2%&lt;/li&gt;
2396 &lt;li&gt;Danish - 1%&lt;/li&gt;
2397 &lt;li&gt;Romanian - 1%&lt;/li&gt;
2398
2399 &lt;/ul&gt;
2400
2401 &lt;p&gt;If you want to help provide a Debian instruction book in your own
2402 language, visit
2403 &lt;a href=&quot;https://hosted.weblate.org/projects/debian-handbook/#languages&quot;&gt;Weblate&lt;/a&gt;
2404 to contribute to the translations.&lt;/p&gt;
2405
2406 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
2407 activities, please send Bitcoin donations to my address
2408 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
2409 </description>
2410 </item>
2411
2412 <item>
2413 <title>Latest Jami back in Debian Testing, and scriptable using dbus</title>
2414 <link>http://www.hungry.com/~pere/blog/Latest_Jami_back_in_Debian_Testing__and_scriptable_using_dbus.html</link>
2415 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Latest_Jami_back_in_Debian_Testing__and_scriptable_using_dbus.html</guid>
2416 <pubDate>Tue, 12 Jan 2021 17:00:00 +0100</pubDate>
2417 <description>&lt;p&gt;After a lot of hard work by its maintainer Alexandre Viau and
2418 others, the decentralized communication platform
2419 &lt;a href=&quot;https://en.wikipedia.org/wiki/Jami_(software)&quot;&gt;Jami&lt;/a&gt;
2420 (earlier known as Ring), managed to get
2421 &lt;a href=&quot;https://tracker.debian.org/pkg/ring&quot;&gt;its latest version&lt;/a&gt;
2422 into Debian Testing. Several of its dependencies has caused build and
2423 propagation problems, which all seem to be solved now.&lt;/p&gt;
2424
2425 &lt;p&gt;In addition to the fact that Jami is decentralized, similar to how
2426 bittorrent is decentralized, I first of all like how it is not
2427 connected to external IDs like phone numbers. This allow me to set up
2428 computers to send me notifications using Jami without having to find
2429 get a phone number for each computer. Automatic notification via Jami
2430 is also made trivial thanks to the provided client side API (as a DBus
2431 service). Here is my bourne shell script demonstrating how to let any
2432 system send a message to any Jami address. It will create a new
2433 identity before sending the message, if no Jami identity exist
2434 already:&lt;/p&gt;
2435
2436 &lt;p&gt;&lt;pre&gt;
2437 #!/bin/sh
2438 #
2439 # Usage: $0 &lt;jami-address&gt; &lt;message&gt;
2440 #
2441 # Send &lt;message&gt; to &lt;jami-address&gt;, create local jami account if
2442 # missing.
2443 #
2444 # License: GPL v2 or later at your choice
2445 # Author: Petter Reinholdtsen
2446
2447
2448 if [ -z &quot;$HOME&quot; ] ; then
2449 echo &quot;error: missing \$HOME, required for dbus to work&quot;
2450 exit 1
2451 fi
2452
2453 # First, get dbus running if not already running
2454 DBUSLAUNCH=/usr/bin/dbus-launch
2455 PIDFILE=/run/asterisk/dbus-session.pid
2456 if [ -e $PIDFILE ] ; then
2457 . $PIDFILE
2458 if ! kill -0 $DBUS_SESSION_BUS_PID 2&gt;/dev/null ; then
2459 unset DBUS_SESSION_BUS_ADDRESS
2460 fi
2461 fi
2462 if [ -z &quot;$DBUS_SESSION_BUS_ADDRESS&quot; ] &amp;&amp; [ -x &quot;$DBUSLAUNCH&quot; ]; then
2463 DBUS_SESSION_BUS_ADDRESS=&quot;unix:path=$HOME/.dbus&quot;
2464 dbus-daemon --session --address=&quot;$DBUS_SESSION_BUS_ADDRESS&quot; --nofork --nopidfile --syslog-only &lt; /dev/null &gt; /dev/null 2&gt;&amp;1 3&gt;&amp;1 &amp;
2465 DBUS_SESSION_BUS_PID=$!
2466 (
2467 echo DBUS_SESSION_BUS_PID=$DBUS_SESSION_BUS_PID
2468 echo DBUS_SESSION_BUS_ADDRESS=\&quot;&quot;$DBUS_SESSION_BUS_ADDRESS&quot;\&quot;
2469 echo export DBUS_SESSION_BUS_ADDRESS
2470 ) &gt; $PIDFILE
2471 . $PIDFILE
2472 fi &amp;
2473
2474 dringop() {
2475 part=&quot;$1&quot;; shift
2476 op=&quot;$1&quot;; shift
2477 dbus-send --session \
2478 --dest=&quot;cx.ring.Ring&quot; /cx/ring/Ring/$part cx.ring.Ring.$part.$op $*
2479 }
2480
2481 dringopreply() {
2482 part=&quot;$1&quot;; shift
2483 op=&quot;$1&quot;; shift
2484 dbus-send --session --print-reply \
2485 --dest=&quot;cx.ring.Ring&quot; /cx/ring/Ring/$part cx.ring.Ring.$part.$op $*
2486 }
2487
2488 firstaccount() {
2489 dringopreply ConfigurationManager getAccountList | \
2490 grep string | awk -F&#39;&quot;&#39; &#39;{print $2}&#39; | head -n 1
2491 }
2492
2493 account=$(firstaccount)
2494
2495 if [ -z &quot;$account&quot; ] ; then
2496 echo &quot;Missing local account, trying to create it&quot;
2497 dringop ConfigurationManager addAccount \
2498 dict:string:string:&quot;Account.type&quot;,&quot;RING&quot;,&quot;Account.videoEnabled&quot;,&quot;false&quot;
2499 account=$(firstaccount)
2500 if [ -z &quot;$account&quot; ] ; then
2501 echo &quot;unable to create local account&quot;
2502 exit 1
2503 fi
2504 fi
2505
2506 # Not using dringopreply to ensure $2 can contain spaces
2507 dbus-send --print-reply --session \
2508 --dest=cx.ring.Ring \
2509 /cx/ring/Ring/ConfigurationManager \
2510 cx.ring.Ring.ConfigurationManager.sendTextMessage \
2511 string:&quot;$account&quot; string:&quot;$1&quot; \
2512 dict:string:string:&quot;text/plain&quot;,&quot;$2&quot;
2513 &lt;/pre&gt;&lt;/p&gt;
2514
2515 &lt;p&gt;If you want to check it out yourself, visit the
2516 &lt;a href=&quot;https://jami.net/&quot;&gt;the Jami system project page&lt;/a&gt; to learn
2517 more, and install the latest Jami client from Debian Unstable or
2518 Testing.&lt;/p&gt;
2519
2520 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
2521 activities, please send Bitcoin donations to my address
2522 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
2523 </description>
2524 </item>
2525
2526 <item>
2527 <title>Buster based Bokmål edition of Debian Administrator&#39;s Handbook</title>
2528 <link>http://www.hungry.com/~pere/blog/Buster_based_Bokm_l_edition_of_Debian_Administrator_s_Handbook.html</link>
2529 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Buster_based_Bokm_l_edition_of_Debian_Administrator_s_Handbook.html</guid>
2530 <pubDate>Tue, 20 Oct 2020 18:35:00 +0200</pubDate>
2531 <description>&lt;p align=&quot;center&quot;&gt;&lt;img align=&quot;center&quot; src=&quot;http://www.hungry.com/~pere/blog/images/2020-10-20-debian-handbook-nb-testprint.jpeg&quot; width=&quot;60%&quot;/&gt;&lt;/p&gt;
2532
2533 &lt;p&gt;I am happy to report that we finally made it! Norwegian Bokmål
2534 became the first translation published on paper of the new Buster
2535 based edition of &quot;&lt;a href=&quot;https://debian-handbook.info/&quot;&gt;The Debian
2536 Administrator&#39;s Handbook&lt;/a&gt;&quot;. The print proof reading copy arrived
2537 some days ago, and it looked good, so now the book is approved for
2538 general distribution. This updated paperback edition &lt;a
2539 href=&quot;https://debian-handbook.info/get/#norwegian&quot;&gt;is available from
2540 lulu.com&lt;/a&gt;. The book is also available for download in electronic
2541 form as PDF, EPUB and Mobipocket, and can also be
2542 &lt;a href=&quot;https://debian-handbook.info/browse/nb-NO/stable/&quot;&gt;read online&lt;/a&gt;.&lt;/p&gt;
2543
2544 &lt;p&gt;I am very happy to wrap up this Creative Common licensed project,
2545 which concludes several months of work by several volunteers. The
2546 number of Linux related books published in Norwegian are few, and I
2547 really hope this one will gain many readers, as it is packed with deep
2548 knowledge on Linux and the Debian ecosystem. The book will be
2549 available for various Internet book stores like Amazon and Barnes &amp;
2550 Noble soon, but I recommend buying
2551 &quot;&lt;a href=&quot;https://www.lulu.com/en/us/shop/roland-mas-and-rapha%C3%ABl-hertzog/h%C3%A5ndbok-for-debian-administratoren/paperback/product-9j7qwq.html&quot;&gt;Håndbok
2552 for Debian-administratoren&lt;/a&gt;&quot; directly from the source at Lulu.
2553
2554 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
2555 activities, please send Bitcoin donations to my address
2556 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
2557 </description>
2558 </item>
2559
2560 <item>
2561 <title>Buster update of Norwegian Bokmål edition of Debian Administrator&#39;s Handbook almost done</title>
2562 <link>http://www.hungry.com/~pere/blog/Buster_update_of_Norwegian_Bokm_l_edition_of_Debian_Administrator_s_Handbook_almost_done.html</link>
2563 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Buster_update_of_Norwegian_Bokm_l_edition_of_Debian_Administrator_s_Handbook_almost_done.html</guid>
2564 <pubDate>Fri, 11 Sep 2020 09:45:00 +0200</pubDate>
2565 <description>&lt;p&gt;Thanks to the good work of several volunteers, the updated edition
2566 of the Norwegian translation for
2567 &quot;&lt;a href=&quot;https://debian-handbook.info/&quot;&gt;The Debian Administrator&#39;s
2568 Handbook&lt;/a&gt;&quot; is now almost completed. After many months of proof
2569 reading, I consider the proof reading complete enough for us to move
2570 to the next step, and have asked for the print version to be prepared
2571 and sent of to the print on demand service lulu.com. While it is
2572 still not to late if you find any incorrect translations on
2573 &lt;a href=&quot;https://hosted.weblate.org/languages/nb_NO/debian-handbook/&quot;&gt;the
2574 hosted Weblate service&lt;/a&gt;, but it will be soon. :) You can check out
2575 &lt;a href=&quot; https://debian-handbook.info/browse/nb-NO/stable/&quot;&gt;the Buster
2576 edition on the web&lt;/a&gt; until the print edition is ready.&lt;/p&gt;
2577
2578 &lt;p&gt;The book will be for sale on lulu.com and various web book stores,
2579 with links available from the web site for the book linked to above.
2580 I hope a lot of readers find it useful.&lt;/p&gt;
2581
2582 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
2583 activities, please send Bitcoin donations to my address
2584 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
2585 </description>
2586 </item>
2587
2588 <item>
2589 <title>Working on updated Norwegian Bokmål edition of Debian Administrator&#39;s Handbook</title>
2590 <link>http://www.hungry.com/~pere/blog/Working_on_updated_Norwegian_Bokm_l_edition_of_Debian_Administrator_s_Handbook.html</link>
2591 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Working_on_updated_Norwegian_Bokm_l_edition_of_Debian_Administrator_s_Handbook.html</guid>
2592 <pubDate>Sat, 4 Jul 2020 23:55:00 +0200</pubDate>
2593 <description>&lt;p&gt;Three years ago, the first Norwegian Bokmål edition of
2594 &quot;&lt;a href=&quot;https://debian-handbook.info/&quot;&gt;The Debian Administrator&#39;s
2595 Handbook&lt;/a&gt;&quot; was published. This was based on Debian Jessie. Now a
2596 new and updated version based on Buster is getting ready. Work on the
2597 updated Norwegian Bokmål edition has been going on for a few months
2598 now, and yesterday, we reached the first mile stone, with 100% of the
2599 texts being translated. A lot of proof reading remains, of course,
2600 but a major step towards a new edition has been taken.&lt;/p&gt;
2601
2602 &lt;p&gt;The book is translated by volunteers, and we would love to get some
2603 help with the proof reading. The translation uses
2604 &lt;a href=&quot;https://hosted.weblate.org/languages/nb_NO/debian-handbook/&quot;&gt;the
2605 hosted Weblate service&lt;/a&gt;, and we welcome everyone to have a look and
2606 submit improvements and suggestions. There is also a proof readers
2607 PDF available on request, get in touch if you want to help out that
2608 way.&lt;/p&gt;
2609
2610 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
2611 activities, please send Bitcoin donations to my address
2612 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
2613 </description>
2614 </item>
2615
2616 <item>
2617 <title>Secure Socket API - a simple and powerful approach for TLS support in software</title>
2618 <link>http://www.hungry.com/~pere/blog/Secure_Socket_API___a_simple_and_powerful_approach_for_TLS_support_in_software.html</link>
2619 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Secure_Socket_API___a_simple_and_powerful_approach_for_TLS_support_in_software.html</guid>
2620 <pubDate>Sat, 6 Jun 2020 12:40:00 +0200</pubDate>
2621 <description>&lt;p&gt;As a member of the &lt;a href=&quot;https://www.nuug.no/&quot;&gt;Norwegian Unix
2622 User Group&lt;/a&gt;, I have the pleasure of receiving the
2623 &lt;a href=&quot;https://www.usenix.org/&quot;&gt;USENIX&lt;/a&gt; magazine
2624 &lt;a href=&quot;https://www.usenix.org/publications/login/&quot;&gt;;login:&lt;/a&gt;
2625 several times a year. I rarely have time to read all the articles,
2626 but try to at least skim through them all as there is a lot of nice
2627 knowledge passed on there. I even carry the latest issue with me most
2628 of the time to try to get through all the articles when I have a few
2629 spare minutes.&lt;/p&gt;
2630
2631 &lt;p&gt;The other day I came across a nice article titled
2632 &quot;&lt;a href=&quot;https://www.usenix.org/publications/login/winter2018/oneill&quot;&gt;The
2633 Secure Socket API: TLS as an Operating System Service&lt;/a&gt;&quot; with a
2634 marvellous idea I hope can make it all the way into the POSIX standard.
2635 The idea is as simple as it is powerful. By introducing a new
2636 socket() option IPPROTO_TLS to use TLS, and a system wide service to
2637 handle setting up TLS connections, one both make it trivial to add TLS
2638 support to any program currently using the POSIX socket API, and gain
2639 system wide control over certificates, TLS versions and encryption
2640 systems used. Instead of doing this:&lt;/p&gt;
2641
2642 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
2643 int socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
2644 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
2645
2646 &lt;p&gt;the program code would be doing this:&lt;p&gt;
2647
2648 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
2649 int socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TLS);
2650 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
2651
2652 &lt;p&gt;According to the ;login: article, converting a C program to use TLS
2653 would normally modify only 5-10 lines in the code, which is amazing
2654 when compared to using for example the OpenSSL API.&lt;/p&gt;
2655
2656 &lt;p&gt;The project has set up the
2657 &lt;a href=&quot;https://securesocketapi.org/&quot;&gt;https://securesocketapi.org/&lt;/a&gt;
2658 web site to spread the idea, and the code for a kernel module and the
2659 associated system daemon is available from two github repositories:
2660 &lt;a href=&quot;https://github.com/markoneill/ssa&quot;&gt;ssa&lt;/a&gt; and
2661 &lt;a href=&quot;https://github.com/markoneill/ssa-daemon&quot;&gt;ssa-daemon&lt;/a&gt;.
2662 Unfortunately there is no explicit license information with the code,
2663 so its copyright status is unclear. A
2664 &lt;a href=&quot;https://github.com/markoneill/ssa/issues/2&quot;&gt;request to solve
2665 this&lt;/a&gt; about it has been unsolved since 2018-08-17.&lt;/p&gt;
2666
2667 &lt;p&gt;I love the idea of extending socket() to gain TLS support, and
2668 understand why it is an advantage to implement this as a kernel module
2669 and system wide service daemon, but can not help to think that it
2670 would be a lot easier to get projects to move to this way of setting
2671 up TLS if it was done with a user space approach where programs
2672 wanting to use this API approach could just link with a wrapper
2673 library.&lt;/p&gt;
2674
2675 &lt;p&gt;I recommend you check out this simple and powerful approach to more
2676 secure network connections. :)&lt;/p&gt;
2677
2678 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
2679 activities, please send Bitcoin donations to my address
2680 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
2681 </description>
2682 </item>
2683
2684 <item>
2685 <title>Jami as a Zoom client, a trick for password protected rooms...</title>
2686 <link>http://www.hungry.com/~pere/blog/Jami_as_a_Zoom_client__a_trick_for_password_protected_rooms___.html</link>
2687 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Jami_as_a_Zoom_client__a_trick_for_password_protected_rooms___.html</guid>
2688 <pubDate>Fri, 8 May 2020 13:30:00 +0200</pubDate>
2689 <description>&lt;p&gt;Half a year ago,
2690 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Jami_Ring__finally_functioning_peer_to_peer_communication_client.html&quot;&gt;I
2691 wrote&lt;/a&gt; about &lt;a href=&quot;https://jami.net/&quot;&gt;the Jami communication
2692 client&lt;/a&gt;, capable of peer-to-peer encrypted communication. It
2693 handle both messages, audio and video. It uses distributed hash
2694 tables instead of central infrastructure to connect its users to each
2695 other, which in my book is a plus. I mentioned briefly that it could
2696 also work as a SIP client, which came in handy when the higher
2697 educational sector in Norway started to promote Zoom as its video
2698 conferencing solution. I am reluctant to use the official Zoom client
2699 software, due to their &lt;a href=&quot;https://zoom.us/terms&quot;&gt;copyright
2700 license clauses&lt;/a&gt; prohibiting users to reverse engineer (for example
2701 to check the security) and benchmark it, and thus prefer to connect to
2702 Zoom meetings with free software clients.&lt;/p&gt;
2703
2704 &lt;p&gt;Jami worked OK as a SIP client to Zoom as long as there was no
2705 password set on the room. The Jami daemon leak memory like crazy
2706 (approximately 1 GiB a minute) when I am connected to the video
2707 conference, so I had to restart the client every 7-10 minutes, which
2708 is not great. I tried to get other SIP Linux clients to work
2709 without success, so I decided I would have to live with this wart
2710 until someone managed to fix the leak in the dring code base. But
2711 another problem showed up once the rooms were password protected. I
2712 could not get my dial tone signaling through from Jami to Zoom, and
2713 dial tone signaling is used to enter the password when connecting to
2714 Zoom. I tried a lot of different permutations with my Jami and
2715 Asterisk setup to try to figure out why the signaling did not get
2716 through, only to finally discover that the fundamental problem seem to
2717 be that Zoom is simply not able to receive dial tone signaling when
2718 connecting via SIP. There seem to be nothing wrong with the Jami and
2719 Asterisk end, it is simply broken in the Zoom end. I got help from a
2720 very skilled VoIP engineer figuring out this last part. And being a
2721 very skilled engineer, he was also able to locate a solution for me.
2722 Or to be exact, a workaround that solve my initial problem of
2723 connecting to password protected Zoom rooms using Jami.&lt;/p&gt;
2724
2725 &lt;p&gt;So, how do you do this, I am sure you are wondering by now. The
2726 trick is already
2727 &lt;a href=&quot;https://support.zoom.us/hc/en-us/articles/202405539-H-323-SIP-Room-Connector-Dial-Strings#sip&quot;&gt;documented
2728 from Zoom&lt;/a&gt;, and it is to modify the SIP address to include the room
2729 password. What is most surprising about this is that the
2730 automatically generated email from Zoom with instructions on how to
2731 connect via SIP do not mention this. The SIP address to use normally
2732 consist of the room ID (a number), an @ character and the IP address
2733 of the Zoom SIP gateway. But Zoom understand a lot more than just the
2734 room ID in front of the at sign. The format is &quot;&lt;tt&gt;[Meeting
2735 ID].[Password].[Layout].[Host Key]&lt;/tt&gt;&quot;, and you can here see how you
2736 can both enter password, control the layout (full screen, active
2737 presence and gallery) and specify the host key to start the meeting.
2738 The full SIP address entered into Jami to provide the password will
2739 then look like this (all using made up numbers):&lt;/p&gt;
2740
2741 &lt;p&gt;&lt;blockquote&gt;
2742 &lt;tt&gt;sip:657837644.522827@192.168.169.170&lt;/tt&gt;
2743 &lt;/blockquote&gt;&lt;/p&gt;
2744
2745 &lt;p&gt;Now if only jami would reduce its memory usage, I could even
2746 recommend this setup to others. :)&lt;/p&gt;
2747
2748 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
2749 activities, please send Bitcoin donations to my address
2750 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
2751 </description>
2752 </item>
2753
2754 <item>
2755 <title>GnuCOBOL, a free platform to learn and use COBOL - nice free software</title>
2756 <link>http://www.hungry.com/~pere/blog/GnuCOBOL__a_free_platform_to_learn_and_use_COBOL___nice_free_software.html</link>
2757 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/GnuCOBOL__a_free_platform_to_learn_and_use_COBOL___nice_free_software.html</guid>
2758 <pubDate>Wed, 29 Apr 2020 13:10:00 +0200</pubDate>
2759 <description>&lt;p&gt;The curiosity got the better of me when
2760 &lt;a href=&quot;https://developers.slashdot.org/story/20/04/06/1424246/new-jersey-desperately-needs-cobol-programmers&quot;&gt;Slashdot
2761 reported&lt;/a&gt; that New Jersey was desperately looking for
2762 &lt;a href=&quot;https://en.wikipedia.org/wiki/COBOL&quot;&gt;COBOL&lt;/a&gt; programmers,
2763 and a few days later it was reported that
2764 &lt;a href=&quot;https://onezero.medium.com/ibm-rallies-cobol-engineers-to-save-overloaded-unemployment-systems-eeadf13eddce&quot;&gt;IBM
2765 tried to locate COBOL programmers&lt;/a&gt;.&lt;/p&gt;
2766
2767 &lt;p&gt;I thus decided to have a look at free software alternatives to
2768 learn COBOL, and had the pleasure to find
2769 &lt;a href=&quot;https://sourceforge.net/projects/open-cobol/&quot;&gt;GnuCOBOL&lt;/a&gt; was
2770 already &lt;a href=&quot;https://tracker.debian.org/pkg/gnucobol&quot;&gt;in
2771 Debian&lt;/a&gt;. It used to be called Open Cobol, and is a &quot;compiler&quot;
2772 transforming COBOL code to C or C++ before giving it to GCC or Visual
2773 Studio to build binaries.&lt;/p&gt;
2774
2775 &lt;p&gt;I managed to get in touch with upstream, and was impressed with the
2776 quick response, and also was happy to see a new Debian maintainer
2777 taking over when the original one recently asked to be replaced. A
2778 new Debian upload was done as recently as yesterday.&lt;/p&gt;
2779
2780 &lt;p&gt;Using the Debian package, I was able to follow a simple COBOL
2781 introduction and make and run simple COBOL programs. It was fun to
2782 learn a new programming language. If you want to test for yourself,
2783 &lt;a href=&quot;https://en.wikipedia.org/wiki/GnuCOBOL&quot;&gt;the GnuCOBOL Wikipedia
2784 page&lt;/a&gt; have a few simple examples to get you startet.&lt;/p&gt;
2785
2786 &lt;p&gt;As I do not have much experience with COBOL, I do not know how
2787 standard compliant it is, but it claim to pass most tests from COBOL
2788 test suite, which sound good to me. It is nice to know it is possible
2789 to learn COBOL using software without any usage restrictions, and I am
2790 very happy such nice free software project as this is available. If
2791 you as me is curious about COBOL, check it out.&lt;/p&gt;
2792
2793 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
2794 activities, please send Bitcoin donations to my address
2795 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
2796 </description>
2797 </item>
2798
2799 <item>
2800 <title>Jami/Ring, finally functioning peer to peer communication client</title>
2801 <link>http://www.hungry.com/~pere/blog/Jami_Ring__finally_functioning_peer_to_peer_communication_client.html</link>
2802 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Jami_Ring__finally_functioning_peer_to_peer_communication_client.html</guid>
2803 <pubDate>Wed, 19 Jun 2019 08:50:00 +0200</pubDate>
2804 <description>&lt;p&gt;Some years ago, in 2016, I
2805 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Experience_and_updated_recipe_for_using_the_Signal_app_without_a_mobile_phone.html&quot;&gt;wrote
2806 for the first time about&lt;/a&gt; the Ring peer to peer messaging system.
2807 It would provide messaging without any central server coordinating the
2808 system and without requiring all users to register a phone number or
2809 own a mobile phone. Back then, I could not get it to work, and put it
2810 aside until it had seen more development. A few days ago I decided to
2811 give it another try, and am happy to report that this time I am able
2812 to not only send and receive messages, but also place audio and video
2813 calls. But only if UDP is not blocked into your network.&lt;/p&gt;
2814
2815 &lt;p&gt;The Ring system changed name earlier this year to
2816 &lt;a href=&quot;https://en.wikipedia.org/wiki/Jami_(software)&quot;&gt;Jami&lt;/a&gt;. I
2817 tried doing web search for &#39;ring&#39; when I discovered it for the first
2818 time, and can only applaud this change as it is impossible to find
2819 something called Ring among the noise of other uses of that word. Now
2820 you can search for &#39;jami&#39; and this client and
2821 &lt;a href=&quot;https://jami.net/&quot;&gt;the Jami system&lt;/a&gt; is the first hit at
2822 least on duckduckgo.&lt;/p&gt;
2823
2824 &lt;p&gt;Jami will by default encrypt messages as well as audio and video
2825 calls, and try to send them directly between the communicating parties
2826 if possible. If this proves impossible (for example if both ends are
2827 behind NAT), it will use a central SIP TURN server maintained by the
2828 Jami project. Jami can also be a normal SIP client. If the SIP
2829 server is unencrypted, the audio and video calls will also be
2830 unencrypted. This is as far as I know the only case where Jami will
2831 do anything without encryption.&lt;/p&gt;
2832
2833 &lt;p&gt;Jami is available for several platforms: Linux, Windows, MacOSX,
2834 Android, iOS, and Android TV. It is included in Debian already. Jami
2835 also work for those using F-Droid without any Google connections,
2836 while Signal do not.
2837 &lt;a href=&quot;https://git.jami.net/savoirfairelinux/ring-project/wikis/technical/Protocol&quot;&gt;The
2838 protocol&lt;/a&gt; is described in the Ring project wiki. The system uses a
2839 distributed hash table (DHT) system (similar to BitTorrent) running
2840 over UDP. On one of the networks I use, I discovered Jami failed to
2841 work. I tracked this down to the fact that incoming UDP packages
2842 going to ports 1-49999 were blocked, and the DHT would pick a random
2843 port and end up in the low range most of the time. After talking to
2844 the developers, I solved this by enabling the dhtproxy in the
2845 settings, thus using TCP to talk to a central DHT proxy instead of
2846
2847 peering directly with others. I&#39;ve been told the developers are
2848 working on allowing DHT to use TCP to avoid this problem. I also ran
2849 into a problem when trying to talk to the version of Ring included in
2850 Debian Stable (Stretch). Apparently the protocol changed between
2851 beta2 and the current version, making these clients incompatible.
2852 Hopefully the protocol will not be made incompatible in the
2853 future.&lt;/p&gt;
2854
2855 &lt;p&gt;It is worth noting that while looking at Jami and its features, I
2856 came across another communication platform I have not tested yet. The
2857 &lt;a href=&quot;https://en.wikipedia.org/wiki/Tox_(protocol)&quot;&gt;Tox protocol&lt;/a&gt;
2858 and &lt;a href=&quot;https://tox.chat/&quot;&gt;family of Tox clients&lt;/a&gt;. It might
2859 become the topic of a future blog post.&lt;/p&gt;
2860
2861 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
2862 activities, please send Bitcoin donations to my address
2863 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
2864 </description>
2865 </item>
2866
2867 <item>
2868 <title>Strategispillet Unknown Horizons nå tilgjengelig på bokmål</title>
2869 <link>http://www.hungry.com/~pere/blog/Strategispillet_Unknown_Horizons_n__tilgjengelig_p__bokm_l.html</link>
2870 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Strategispillet_Unknown_Horizons_n__tilgjengelig_p__bokm_l.html</guid>
2871 <pubDate>Wed, 23 Jan 2019 07:50:00 +0100</pubDate>
2872 <description>&lt;p&gt;I høst ble jeg inspirert til å bidra til oversettelsen av
2873 &lt;a href=&quot;http://unknown-horizons.org/&quot;&gt;strategispillet Unknown
2874 Horizons&lt;/a&gt;, og oversatte de nesten 200 strengene i prosjektet til
2875 bokmål. Deretter har jeg gått å ventet på at det kom en ny utgave som
2876 inneholdt disse oversettelsene. Nå er endelig ventetiden over. Den
2877 nye versjonen kom på nyåret, og ble
2878 &lt;a href=&quot;https://tracker.debian.org/pkg/unknown-horizons&quot;&gt;lastet opp i
2879 Debian&lt;/a&gt; for noen få dager siden. I går kveld fikk jeg testet det ut, og
2880 må innrømme at oversettelsene fungerer fint. Fant noen få tekster som
2881 måtte justeres, men ikke noe alvorlig. Har oppdatert
2882 &lt;a href=&quot;https://hosted.weblate.org/projects/uh/&quot;&gt;oversettelsen på
2883 Weblate&lt;/a&gt;, slik at neste utgave vil være enda bedre. :)&lt;/p&gt;
2884
2885 &lt;p&gt;Spillet er et ressursstyringsspill ala Civilization, og er morsomt
2886 å spille for oss som liker slikt. :)&lt;/p&gt;
2887
2888 &lt;p&gt;Som vanlig, hvis du bruker Bitcoin og ønsker å vise din støtte til
2889 det jeg driver med, setter jeg pris på om du sender Bitcoin-donasjoner
2890 til min adresse
2891 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.
2892 Merk, betaling med bitcoin er ikke anonymt. :)&lt;/p&gt;
2893 </description>
2894 </item>
2895
2896 <item>
2897 <title>Debian now got everything you need to program Micro:bit</title>
2898 <link>http://www.hungry.com/~pere/blog/Debian_now_got_everything_you_need_to_program_Micro_bit.html</link>
2899 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Debian_now_got_everything_you_need_to_program_Micro_bit.html</guid>
2900 <pubDate>Tue, 22 Jan 2019 17:20:00 +0100</pubDate>
2901 <description>&lt;p&gt;I am amazed and very pleased to discover that since a few days ago,
2902 everything you need to program the &lt;a href=&quot;https://microbit.org/&quot;&gt;BBC
2903 micro:bit&lt;/a&gt; is available from the Debian archive. All this is
2904 thanks to the hard work of Nick Morrott and the Debian python
2905 packaging team. The micro:bit project recommend the mu-editor to
2906 program the microcomputer, as this editor will take care of all the
2907 machinery required to injekt/flash micropython alongside the program
2908 into the micro:bit, as long as the pieces are available.&lt;/p&gt;
2909
2910 &lt;p&gt;There are three main pieces involved. The first to enter Debian
2911 was
2912 &lt;a href=&quot;https://tracker.debian.org/pkg/python-uflash&quot;&gt;python-uflash&lt;/a&gt;,
2913 which was accepted into the archive 2019-01-12. The next one was
2914 &lt;a href=&quot;https://tracker.debian.org/pkg/mu-editor&quot;&gt;mu-editor&lt;/a&gt;, which
2915 showed up 2019-01-13. The final and hardest part to to into the
2916 archive was
2917 &lt;a href=&quot;https://tracker.debian.org/pkg/firmware-microbit-micropython&quot;&gt;firmware-microbit-micropython&lt;/a&gt;,
2918 which needed to get its build system and dependencies into Debian
2919 before it was accepted 2019-01-20. The last one is already in Debian
2920 Unstable and should enter Debian Testing / Buster in three days. This
2921 all allow any user of the micro:bit to get going by simply running
2922 &#39;apt install mu-editor&#39; when using Testing or Unstable, and once
2923 Buster is released as stable, all the users of Debian stable will be
2924 catered for.&lt;/p&gt;
2925
2926 &lt;p&gt;As a minor final touch, I added rules to
2927 &lt;a href=&quot;https://tracker.debian.org/pkg/isenkram&quot;&gt;the isenkram
2928 package&lt;/a&gt; for recognizing micro:bit and recommend the mu-editor
2929 package. This make sure any user of the isenkram desktop daemon will
2930 get a popup suggesting to install mu-editor then the USB cable from
2931 the micro:bit is inserted for the first time.&lt;/p&gt;
2932
2933 &lt;p&gt;This should make it easier to have fun.&lt;/p&gt;
2934
2935 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
2936 activities, please send Bitcoin donations to my address
2937 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
2938 </description>
2939 </item>
2940
2941 <item>
2942 <title>Learn to program with Minetest on Debian</title>
2943 <link>http://www.hungry.com/~pere/blog/Learn_to_program_with_Minetest_on_Debian.html</link>
2944 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Learn_to_program_with_Minetest_on_Debian.html</guid>
2945 <pubDate>Sat, 15 Dec 2018 15:30:00 +0100</pubDate>
2946 <description>&lt;p&gt;A fun way to learn how to program
2947 &lt;a href=&quot;https://www.python.org/&quot;&gt;Python&lt;/a&gt; is to follow the
2948 instructions in the book
2949 &quot;&lt;a href=&quot;https://nostarch.com/programwithminecraft&quot;&gt;Learn to program
2950 with Minecraft&lt;/a&gt;&quot;, which introduces programming in Python to people
2951 who like to play with Minecraft. The book uses a Python library to
2952 talk to a TCP/IP socket with an API accepting build instructions and
2953 providing information about the current players in a Minecraft world.
2954 The TCP/IP API was first created for the Minecraft implementation for
2955 Raspberry Pi, and has since been ported to some server versions of
2956 Minecraft. The book contain recipes for those using Windows, MacOSX
2957 and Raspian. But a little known fact is that you can follow the same
2958 recipes using the free software construction game
2959 &lt;a href=&quot;https://minetest.net/&quot;&gt;Minetest&lt;/a&gt;.&lt;/p&gt;
2960
2961 &lt;p&gt;There is &lt;a href=&quot;https://github.com/sprintingkiwi/pycraft_mod&quot;&gt;a
2962 Minetest module implementing the same API&lt;/a&gt;, making it possible to
2963 use the Python programs coded to talk to Minecraft with Minetest too.
2964 I
2965 &lt;a href=&quot;https://ftp-master.debian.org/new/minetest-mod-pycraft_0.20%2Bgit20180331.0376a0a%2Bdfsg-1.html&quot;&gt;uploaded
2966 this module&lt;/a&gt; to Debian two weeks ago, and as soon as it clears the
2967 FTP masters NEW queue, learning to program Python with Minetest on
2968 Debian will be a simple &#39;apt install&#39; away. The Debian package is
2969 maintained as part of the Debian Games team, and
2970 &lt;a href=&quot;https://salsa.debian.org/games-team/unfinished/minetest-mod-pycraft&quot;&gt;the
2971 packaging rules&lt;/a&gt; are currently located under &#39;unfinished&#39; on
2972 Salsa.&lt;/p&gt;
2973
2974 &lt;p&gt;You will most likely need to install several of the Minetest
2975 modules in Debian for the examples included with the library to work
2976 well, as there are several blocks used by the example scripts that are
2977 provided via modules in Minetest. Without the required blocks, a
2978 simple stone block is used instead. My initial testing with a analog
2979 clock did not get gold arms as instructed in the python library, but
2980 instead used stone arms.&lt;/p&gt;
2981
2982 &lt;p&gt;I tried to find a way to add the API to the desktop version of
2983 Minecraft, but were unable to find any working recipes. The
2984 &lt;a href=&quot;https://www.epiphanydigest.com/tag/minecraft-python-api/&quot;&gt;recipes&lt;/a&gt;
2985 I &lt;a href=&quot;https://github.com/kbsriram/mcpiapi&quot;&gt;found&lt;/a&gt; are only
2986 working with a standalone Minecraft server setup. Are there any
2987 options to use with the normal desktop version?&lt;/p&gt;
2988
2989 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
2990 activities, please send Bitcoin donations to my address
2991 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
2992 </description>
2993 </item>
2994
2995 <item>
2996 <title>Time for an official MIME type for patches?</title>
2997 <link>http://www.hungry.com/~pere/blog/Time_for_an_official_MIME_type_for_patches_.html</link>
2998 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Time_for_an_official_MIME_type_for_patches_.html</guid>
2999 <pubDate>Thu, 1 Nov 2018 08:15:00 +0100</pubDate>
3000 <description>&lt;p&gt;As part of my involvement in
3001 &lt;a href=&quot;https://gitlab.com/OsloMet-ABI/nikita-noark5-core&quot;&gt;the Nikita
3002 archive API project&lt;/a&gt;, I&#39;ve been importing a fairly large lump of
3003 emails into a test instance of the archive to see how well this would
3004 go. I picked a subset of &lt;a href=&quot;https://notmuchmail.org/&quot;&gt;my
3005 notmuch email database&lt;/a&gt;, all public emails sent to me via
3006 @lists.debian.org, giving me a set of around 216 000 emails to import.
3007 In the process, I had a look at the various attachments included in
3008 these emails, to figure out what to do with attachments, and noticed
3009 that one of the most common attachment formats do not have
3010 &lt;a href=&quot;https://www.iana.org/assignments/media-types/media-types.xhtml&quot;&gt;an
3011 official MIME type&lt;/a&gt; registered with IANA/IETF. The output from
3012 diff, ie the input for patch, is on the top 10 list of formats
3013 included in these emails. At the moment people seem to use either
3014 text/x-patch or text/x-diff, but neither is officially registered. It
3015 would be better if one official MIME type were registered and used
3016 everywhere.&lt;/p&gt;
3017
3018 &lt;p&gt;To try to get one official MIME type for these files, I&#39;ve brought
3019 up the topic on
3020 &lt;a href=&quot;https://www.ietf.org/mailman/listinfo/media-types&quot;&gt;the
3021 media-types mailing list&lt;/a&gt;. If you are interested in discussion
3022 which MIME type to use as the official for patch files, or involved in
3023 making software using a MIME type for patches, perhaps you would like
3024 to join the discussion?&lt;/p&gt;
3025
3026 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
3027 activities, please send Bitcoin donations to my address
3028 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
3029 </description>
3030 </item>
3031
3032 <item>
3033 <title>Automatic Google Drive sync using grive in Debian</title>
3034 <link>http://www.hungry.com/~pere/blog/Automatic_Google_Drive_sync_using_grive_in_Debian.html</link>
3035 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Automatic_Google_Drive_sync_using_grive_in_Debian.html</guid>
3036 <pubDate>Thu, 4 Oct 2018 15:20:00 +0200</pubDate>
3037 <description>&lt;p&gt;A few days, I rescued a Windows victim over to Debian. To try to
3038 rescue the remains, I helped set up automatic sync with Google Drive.
3039 I did not find any sensible Debian package handling this
3040 automatically, so I rebuild the grive2 source from
3041 &lt;a href=&quot;http://www.webupd8.org/&quot;&gt;the Ubuntu UPD8 PPA&lt;/a&gt; to do the
3042 task and added a autostart desktop entry and a small shell script to
3043 run in the background while the user is logged in to do the sync.
3044 Here is a sketch of the setup for future reference.&lt;/p&gt;
3045
3046 &lt;p&gt;I first created &lt;tt&gt;~/googledrive&lt;/tt&gt;, entered the directory and
3047 ran &#39;&lt;tt&gt;grive -a&lt;/tt&gt;&#39; to authenticate the machine/user. Next, I
3048 created a autostart hook in &lt;tt&gt;~/.config/autostart/grive.desktop&lt;/tt&gt;
3049 to start the sync when the user log in:&lt;/p&gt;
3050
3051 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
3052 [Desktop Entry]
3053 Name=Google drive autosync
3054 Type=Application
3055 Exec=/home/user/bin/grive-sync
3056 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
3057
3058 &lt;p&gt;Finally, I wrote the &lt;tt&gt;~/bin/grive-sync&lt;/tt&gt; script to sync
3059 ~/googledrive/ with the files in Google Drive.&lt;/p&gt;
3060
3061 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
3062 #!/bin/sh
3063 set -e
3064 cd ~/
3065 cleanup() {
3066 if [ &quot;$syncpid&quot; ] ; then
3067 kill $syncpid
3068 fi
3069 }
3070 trap cleanup EXIT INT QUIT
3071 /usr/lib/grive/grive-sync.sh listen googledrive 2&gt;&amp;1 | sed &quot;s%^%$0:%&quot; &amp;
3072 syncpdi=$!
3073 while true; do
3074 if ! xhost &gt;/dev/null 2&gt;&amp;1 ; then
3075 echo &quot;no DISPLAY, exiting as the user probably logged out&quot;
3076 exit 1
3077 fi
3078 if [ ! -e /run/user/1000/grive-sync.sh_googledrive ] ; then
3079 /usr/lib/grive/grive-sync.sh sync googledrive
3080 fi
3081 sleep 300
3082 done 2&gt;&amp;1 | sed &quot;s%^%$0:%&quot;
3083 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
3084
3085 &lt;p&gt;Feel free to use the setup if you want. It can be assumed to be
3086 GNU GPL v2 licensed (or any later version, at your leisure), but I
3087 doubt this code is possible to claim copyright on.&lt;/p&gt;
3088
3089 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
3090 activities, please send Bitcoin donations to my address
3091 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
3092 </description>
3093 </item>
3094
3095 <item>
3096 <title>Using the Kodi API to play Youtube videos</title>
3097 <link>http://www.hungry.com/~pere/blog/Using_the_Kodi_API_to_play_Youtube_videos.html</link>
3098 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Using_the_Kodi_API_to_play_Youtube_videos.html</guid>
3099 <pubDate>Sun, 2 Sep 2018 23:40:00 +0200</pubDate>
3100 <description>&lt;p&gt;I continue to explore my Kodi installation, and today I wanted to
3101 tell it to play a youtube URL I received in a chat, without having to
3102 insert search terms using the on-screen keyboard. After searching the
3103 web for API access to the Youtube plugin and testing a bit, I managed
3104 to find a recipe that worked. If you got a kodi instance with its API
3105 available from http://kodihost/jsonrpc, you can try the following to
3106 have check out a nice cover band.&lt;/p&gt;
3107
3108 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;curl --silent --header &#39;Content-Type: application/json&#39; \
3109 --data-binary &#39;{ &quot;id&quot;: 1, &quot;jsonrpc&quot;: &quot;2.0&quot;, &quot;method&quot;: &quot;Player.Open&quot;,
3110 &quot;params&quot;: {&quot;item&quot;: { &quot;file&quot;:
3111 &quot;plugin://plugin.video.youtube/play/?video_id=LuRGVM9O0qg&quot; } } }&#39; \
3112 http://projector.local/jsonrpc&lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
3113
3114 &lt;p&gt;I&#39;ve extended kodi-stream program to take a video source as its
3115 first argument. It can now handle direct video links, youtube links
3116 and &#39;desktop&#39; to stream my desktop to Kodi. It is almost like a
3117 Chromecast. :)&lt;/p&gt;
3118
3119 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
3120 activities, please send Bitcoin donations to my address
3121 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
3122 </description>
3123 </item>
3124
3125 <item>
3126 <title>Sharing images with friends and family using RSS and EXIF/XMP metadata</title>
3127 <link>http://www.hungry.com/~pere/blog/Sharing_images_with_friends_and_family_using_RSS_and_EXIF_XMP_metadata.html</link>
3128 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Sharing_images_with_friends_and_family_using_RSS_and_EXIF_XMP_metadata.html</guid>
3129 <pubDate>Tue, 31 Jul 2018 23:30:00 +0200</pubDate>
3130 <description>&lt;p&gt;For a while now, I have looked for a sensible way to share images
3131 with my family using a self hosted solution, as it is unacceptable to
3132 place images from my personal life under the control of strangers
3133 working for data hoarders like Google or Dropbox. The last few days I
3134 have drafted an approach that might work out, and I would like to
3135 share it with you. I would like to publish images on a server under
3136 my control, and point some Internet connected display units using some
3137 free and open standard to the images I published. As my primary
3138 language is not limited to ASCII, I need to store metadata using
3139 UTF-8. Many years ago, I hoped to find a digital photo frame capable
3140 of reading a RSS feed with image references (aka using the
3141 &amp;lt;enclosure&amp;gt; RSS tag), but was unable to find a current supplier
3142 of such frames. In the end I gave up that approach.&lt;/p&gt;
3143
3144 &lt;p&gt;Some months ago, I discovered that
3145 &lt;a href=&quot;https://www.jwz.org/xscreensaver/&quot;&gt;XScreensaver&lt;/a&gt; is able to
3146 read images from a RSS feed, and used it to set up a screen saver on
3147 my home info screen, showing images from the Daily images feed from
3148 NASA. This proved to work well. More recently I discovered that
3149 &lt;a href=&quot;https://kodi.tv&quot;&gt;Kodi&lt;/a&gt; (both using
3150 &lt;a href=&quot;https://www.openelec.tv/&quot;&gt;OpenELEC&lt;/a&gt; and
3151 &lt;a href=&quot;https://libreelec.tv&quot;&gt;LibreELEC&lt;/a&gt;) provide the
3152 &lt;a href=&quot;https://github.com/grinsted/script.screensaver.feedreader&quot;&gt;Feedreader&lt;/a&gt;
3153 screen saver capable of reading a RSS feed with images and news. For
3154 fun, I used it this summer to test Kodi on my parents TV by hooking up
3155 a Raspberry PI unit with LibreELEC, and wanted to provide them with a
3156 screen saver showing selected pictures from my selection.&lt;/p&gt;
3157
3158 &lt;p&gt;Armed with motivation and a test photo frame, I set out to generate
3159 a RSS feed for the Kodi instance. I adjusted my &lt;a
3160 href=&quot;https://freedombox.org/&quot;&gt;Freedombox&lt;/a&gt; instance, created
3161 /var/www/html/privatepictures/, wrote a small Perl script to extract
3162 title and description metadata from the photo files and generate the
3163 RSS file. I ended up using Perl instead of python, as the
3164 libimage-exiftool-perl Debian package seemed to handle the EXIF/XMP
3165 tags I ended up using, while python3-exif did not. The relevant EXIF
3166 tags only support ASCII, so I had to find better alternatives. XMP
3167 seem to have the support I need.&lt;/p&gt;
3168
3169 &lt;p&gt;I am a bit unsure which EXIF/XMP tags to use, as I would like to
3170 use tags that can be easily added/updated using normal free software
3171 photo managing software. I ended up using the tags set using this
3172 exiftool command, as these tags can also be set using digiKam:&lt;/p&gt;
3173
3174 &lt;blockquote&gt;&lt;pre&gt;
3175 exiftool -headline=&#39;The RSS image title&#39; \
3176 -description=&#39;The RSS image description.&#39; \
3177 -subject+=for-family photo.jpeg
3178 &lt;/pre&gt;&lt;/blockquote&gt;
3179
3180 &lt;p&gt;I initially tried the &quot;-title&quot; and &quot;keyword&quot; tags, but they were
3181 invisible in digiKam, so I changed to &quot;-headline&quot; and &quot;-subject&quot;. I
3182 use the keyword/subject &#39;for-family&#39; to flag that the photo should be
3183 shared with my family. Images with this keyword set are located and
3184 copied into my Freedombox for the RSS generating script to find.&lt;/p&gt;
3185
3186 &lt;p&gt;Are there better ways to do this? Get in touch if you have better
3187 suggestions.&lt;/p&gt;
3188
3189 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
3190 activities, please send Bitcoin donations to my address
3191 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
3192 </description>
3193 </item>
3194
3195 <item>
3196 <title>Simple streaming the Linux desktop to Kodi using GStreamer and RTP</title>
3197 <link>http://www.hungry.com/~pere/blog/Simple_streaming_the_Linux_desktop_to_Kodi_using_GStreamer_and_RTP.html</link>
3198 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Simple_streaming_the_Linux_desktop_to_Kodi_using_GStreamer_and_RTP.html</guid>
3199 <pubDate>Thu, 12 Jul 2018 17:55:00 +0200</pubDate>
3200 <description>&lt;p&gt;Last night, I wrote
3201 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Streaming_the_Linux_desktop_to_Kodi_using_VLC_and_RTSP.html&quot;&gt;a
3202 recipe to stream a Linux desktop using VLC to a instance of Kodi&lt;/a&gt;.
3203 During the day I received valuable feedback, and thanks to the
3204 suggestions I have been able to rewrite the recipe into a much simpler
3205 approach requiring no setup at all. It is a single script that take
3206 care of it all.&lt;/p&gt;
3207
3208 &lt;p&gt;This new script uses GStreamer instead of VLC to capture the
3209 desktop and stream it to Kodi. This fixed the video quality issue I
3210 saw initially. It further removes the need to add a m3u file on the
3211 Kodi machine, as it instead connects to
3212 &lt;a href=&quot;https://kodi.wiki/view/JSON-RPC_API/v8&quot;&gt;the JSON-RPC API in
3213 Kodi&lt;/a&gt; and simply ask Kodi to play from the stream created using
3214 GStreamer. Streaming the desktop to Kodi now become trivial. Copy
3215 the script below, run it with the DNS name or IP address of the kodi
3216 server to stream to as the only argument, and watch your screen show
3217 up on the Kodi screen. Note, it depend on multicast on the local
3218 network, so if you need to stream outside the local network, the
3219 script must be modified. Also note, I have no idea if audio work, as
3220 I only care about the picture part.&lt;/p&gt;
3221
3222 &lt;blockquote&gt;&lt;pre&gt;
3223 #!/bin/sh
3224 #
3225 # Stream the Linux desktop view to Kodi. See
3226 # http://www.hungry.com/~pere/blog/Streaming_the_Linux_desktop_to_Kodi_using_VLC_and_RTSP.html
3227 # for backgorund information.
3228
3229 # Make sure the stream is stopped in Kodi and the gstreamer process is
3230 # killed if something go wrong (for example if curl is unable to find the
3231 # kodi server). Do the same when interrupting this script.
3232 kodicmd() {
3233 host=&quot;$1&quot;
3234 cmd=&quot;$2&quot;
3235 params=&quot;$3&quot;
3236 curl --silent --header &#39;Content-Type: application/json&#39; \
3237 --data-binary &quot;{ \&quot;id\&quot;: 1, \&quot;jsonrpc\&quot;: \&quot;2.0\&quot;, \&quot;method\&quot;: \&quot;$cmd\&quot;, \&quot;params\&quot;: $params }&quot; \
3238 &quot;http://$host/jsonrpc&quot;
3239 }
3240 cleanup() {
3241 if [ -n &quot;$kodihost&quot; ] ; then
3242 # Stop the playing when we end
3243 playerid=$(kodicmd &quot;$kodihost&quot; Player.GetActivePlayers &quot;{}&quot; |
3244 jq .result[].playerid)
3245 kodicmd &quot;$kodihost&quot; Player.Stop &quot;{ \&quot;playerid\&quot; : $playerid }&quot; &gt; /dev/null
3246 fi
3247 if [ &quot;$gstpid&quot; ] &amp;&amp; kill -0 &quot;$gstpid&quot; &gt;/dev/null 2&gt;&amp;1; then
3248 kill &quot;$gstpid&quot;
3249 fi
3250 }
3251 trap cleanup EXIT INT
3252
3253 if [ -n &quot;$1&quot; ]; then
3254 kodihost=$1
3255 shift
3256 else
3257 kodihost=kodi.local
3258 fi
3259
3260 mcast=239.255.0.1
3261 mcastport=1234
3262 mcastttl=1
3263
3264 pasrc=$(pactl list | grep -A2 &#39;Source #&#39; | grep &#39;Name: .*\.monitor$&#39; | \
3265 cut -d&quot; &quot; -f2|head -1)
3266 gst-launch-1.0 ximagesrc use-damage=0 ! video/x-raw,framerate=30/1 ! \
3267 videoconvert ! queue2 ! \
3268 x264enc bitrate=8000 speed-preset=superfast tune=zerolatency qp-min=30 \
3269 key-int-max=15 bframes=2 ! video/x-h264,profile=high ! queue2 ! \
3270 mpegtsmux alignment=7 name=mux ! rndbuffersize max=1316 min=1316 ! \
3271 udpsink host=$mcast port=$mcastport ttl-mc=$mcastttl auto-multicast=1 sync=0 \
3272 pulsesrc device=$pasrc ! audioconvert ! queue2 ! avenc_aac ! queue2 ! mux. \
3273 &gt; /dev/null 2&gt;&amp;1 &amp;
3274 gstpid=$!
3275
3276 # Give stream a second to get going
3277 sleep 1
3278
3279 # Ask kodi to start streaming using its JSON-RPC API
3280 kodicmd &quot;$kodihost&quot; Player.Open \
3281 &quot;{\&quot;item\&quot;: { \&quot;file\&quot;: \&quot;udp://@$mcast:$mcastport\&quot; } }&quot; &gt; /dev/null
3282
3283 # wait for gst to end
3284 wait &quot;$gstpid&quot;
3285 &lt;/pre&gt;&lt;/blockquote&gt;
3286
3287 &lt;p&gt;I hope you find the approach useful. I know I do.&lt;/p&gt;
3288
3289 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
3290 activities, please send Bitcoin donations to my address
3291 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
3292 </description>
3293 </item>
3294
3295 <item>
3296 <title>Streaming the Linux desktop to Kodi using VLC and RTSP</title>
3297 <link>http://www.hungry.com/~pere/blog/Streaming_the_Linux_desktop_to_Kodi_using_VLC_and_RTSP.html</link>
3298 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Streaming_the_Linux_desktop_to_Kodi_using_VLC_and_RTSP.html</guid>
3299 <pubDate>Thu, 12 Jul 2018 02:00:00 +0200</pubDate>
3300 <description>&lt;p&gt;PS: See
3301 &lt;ahref=&quot;http://www.hungry.com/~pere/blog/Simple_streaming_the_Linux_desktop_to_Kodi_using_GStreamer_and_RTP.html&quot;&gt;the
3302 followup post&lt;/a&gt; for a even better approach.&lt;/p&gt;
3303
3304 &lt;p&gt;A while back, I was asked by a friend how to stream the desktop to
3305 my projector connected to Kodi. I sadly had to admit that I had no
3306 idea, as it was a task I never had tried. Since then, I have been
3307 looking for a way to do so, preferable without much extra software to
3308 install on either side. Today I found a way that seem to kind of
3309 work. Not great, but it is a start.&lt;/p&gt;
3310
3311 &lt;p&gt;I had a look at several approaches, for example
3312 &lt;a href=&quot;https://github.com/mfoetsch/dlna_live_streaming&quot;&gt;using uPnP
3313 DLNA as described in 2011&lt;/a&gt;, but it required a uPnP server, fuse and
3314 local storage enough to store the stream locally. This is not going
3315 to work well for me, lacking enough free space, and it would
3316 impossible for my friend to get working.&lt;/p&gt;
3317
3318 &lt;p&gt;Next, it occurred to me that perhaps I could use VLC to create a
3319 video stream that Kodi could play. Preferably using
3320 broadcast/multicast, to avoid having to change any setup on the Kodi
3321 side when starting such stream. Unfortunately, the only recipe I
3322 could find using multicast used the rtp protocol, and this protocol
3323 seem to not be supported by Kodi.&lt;/p&gt;
3324
3325 &lt;p&gt;On the other hand, the rtsp protocol is working! Unfortunately I
3326 have to specify the IP address of the streaming machine in both the
3327 sending command and the file on the Kodi server. But it is showing my
3328 desktop, and thus allow us to have a shared look on the big screen at
3329 the programs I work on.&lt;/p&gt;
3330
3331 &lt;p&gt;I did not spend much time investigating codeces. I combined the
3332 rtp and rtsp recipes from
3333 &lt;a href=&quot;https://wiki.videolan.org/Documentation:Streaming_HowTo/Command_Line_Examples/&quot;&gt;the
3334 VLC Streaming HowTo/Command Line Examples&lt;/a&gt;, and was able to get
3335 this working on the desktop/streaming end.&lt;/p&gt;
3336
3337 &lt;blockquote&gt;&lt;pre&gt;
3338 vlc screen:// --sout \
3339 &#39;#transcode{vcodec=mp4v,acodec=mpga,vb=800,ab=128}:rtp{dst=projector.local,port=1234,sdp=rtsp://192.168.11.4:8080/test.sdp}&#39;
3340 &lt;/pre&gt;&lt;/blockquote&gt;
3341
3342 &lt;p&gt;I ssh-ed into my Kodi box and created a file like this with the
3343 same IP address:&lt;/p&gt;
3344
3345 &lt;blockquote&gt;&lt;pre&gt;
3346 echo rtsp://192.168.11.4:8080/test.sdp \
3347 &gt; /storage/videos/screenstream.m3u
3348 &lt;/pre&gt;&lt;/blockquote&gt;
3349
3350 &lt;p&gt;Note the 192.168.11.4 IP address is my desktops IP address. As far
3351 as I can tell the IP must be hardcoded for this to work. In other
3352 words, if someone elses machine is going to do the steaming, you have
3353 to update screenstream.m3u on the Kodi machine and adjust the vlc
3354 recipe. To get started, locate the file in Kodi and select the m3u
3355 file while the VLC stream is running. The desktop then show up in my
3356 big screen. :)&lt;/p&gt;
3357
3358 &lt;p&gt;When using the same technique to stream a video file with audio,
3359 the audio quality is really bad. No idea if the problem is package
3360 loss or bad parameters for the transcode. I do not know VLC nor Kodi
3361 enough to tell.&lt;/p&gt;
3362
3363 &lt;p&gt;&lt;strong&gt;Update 2018-07-12&lt;/strong&gt;: Johannes Schauer send me a few
3364 succestions and reminded me about an important step. The &quot;screen:&quot;
3365 input source is only available once the vlc-plugin-access-extra
3366 package is installed on Debian. Without it, you will see this error
3367 message: &quot;VLC is unable to open the MRL &#39;screen://&#39;. Check the log
3368 for details.&quot; He further found that it is possible to drop some parts
3369 of the VLC command line to reduce the amount of hardcoded information.
3370 It is also useful to consider using cvlc to avoid having the VLC
3371 window in the desktop view. In sum, this give us this command line on
3372 the source end
3373
3374 &lt;blockquote&gt;&lt;pre&gt;
3375 cvlc screen:// --sout \
3376 &#39;#transcode{vcodec=mp4v,acodec=mpga,vb=800,ab=128}:rtp{sdp=rtsp://:8080/}&#39;
3377 &lt;/pre&gt;&lt;/blockquote&gt;
3378
3379 &lt;p&gt;and this on the Kodi end&lt;p&gt;
3380
3381 &lt;blockquote&gt;&lt;pre&gt;
3382 echo rtsp://192.168.11.4:8080/ \
3383 &gt; /storage/videos/screenstream.m3u
3384 &lt;/pre&gt;&lt;/blockquote&gt;
3385
3386 &lt;p&gt;Still bad image quality, though. But I did discover that streaming
3387 a DVD using dvdsimple:///dev/dvd as the source had excellent video and
3388 audio quality, so I guess the issue is in the input or transcoding
3389 parts, not the rtsp part. I&#39;ve tried to change the vb and ab
3390 parameters to use more bandwidth, but it did not make a
3391 difference.&lt;/p&gt;
3392
3393 &lt;p&gt;I further received a suggestion from Einar Haraldseid to try using
3394 gstreamer instead of VLC, and this proved to work great! He also
3395 provided me with the trick to get Kodi to use a multicast stream as
3396 its source. By using this monstrous oneliner, I can stream my desktop
3397 with good video quality in reasonable framerate to the 239.255.0.1
3398 multicast address on port 1234:
3399
3400 &lt;blockquote&gt;&lt;pre&gt;
3401 gst-launch-1.0 ximagesrc use-damage=0 ! video/x-raw,framerate=30/1 ! \
3402 videoconvert ! queue2 ! \
3403 x264enc bitrate=8000 speed-preset=superfast tune=zerolatency qp-min=30 \
3404 key-int-max=15 bframes=2 ! video/x-h264,profile=high ! queue2 ! \
3405 mpegtsmux alignment=7 name=mux ! rndbuffersize max=1316 min=1316 ! \
3406 udpsink host=239.255.0.1 port=1234 ttl-mc=1 auto-multicast=1 sync=0 \
3407 pulsesrc device=$(pactl list | grep -A2 &#39;Source #&#39; | \
3408 grep &#39;Name: .*\.monitor$&#39; | cut -d&quot; &quot; -f2|head -1) ! \
3409 audioconvert ! queue2 ! avenc_aac ! queue2 ! mux.
3410 &lt;/pre&gt;&lt;/blockquote&gt;
3411
3412 &lt;p&gt;and this on the Kodi end&lt;p&gt;
3413
3414 &lt;blockquote&gt;&lt;pre&gt;
3415 echo udp://@239.255.0.1:1234 \
3416 &gt; /storage/videos/screenstream.m3u
3417 &lt;/pre&gt;&lt;/blockquote&gt;
3418
3419 &lt;p&gt;Note the trick to pick a valid pulseaudio source. It might not
3420 pick the one you need. This approach will of course lead to trouble
3421 if more than one source uses the same multicast port and address.
3422 Note the ttl-mc=1 setting, which limit the multicast packages to the
3423 local network. If the value is increased, your screen will be
3424 broadcasted further, one network &quot;hop&quot; for each increase (read up on
3425 multicast to learn more. :)!&lt;/p&gt;
3426
3427 &lt;p&gt;Having cracked how to get Kodi to receive multicast streams, I
3428 could use this VLC command to stream to the same multicast address.
3429 The image quality is way better than the rtsp approach, but gstreamer
3430 seem to be doing a better job.&lt;/p&gt;
3431
3432 &lt;blockquote&gt;&lt;pre&gt;
3433 cvlc screen:// --sout &#39;#transcode{vcodec=mp4v,acodec=mpga,vb=800,ab=128}:rtp{mux=ts,dst=239.255.0.1,port=1234,sdp=sap}&#39;
3434 &lt;/pre&gt;&lt;/blockquote&gt;
3435
3436 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
3437 activities, please send Bitcoin donations to my address
3438 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
3439 </description>
3440 </item>
3441
3442 <item>
3443 <title>What is the most supported MIME type in Debian in 2018?</title>
3444 <link>http://www.hungry.com/~pere/blog/What_is_the_most_supported_MIME_type_in_Debian_in_2018_.html</link>
3445 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/What_is_the_most_supported_MIME_type_in_Debian_in_2018_.html</guid>
3446 <pubDate>Mon, 9 Jul 2018 08:05:00 +0200</pubDate>
3447 <description>&lt;p&gt;Five years ago,
3448 &lt;a href=&quot;http://www.hungry.com/~pere/blog/What_is_the_most_supported_MIME_type_in_Debian_.html&quot;&gt;I
3449 measured what the most supported MIME type in Debian was&lt;/a&gt;, by
3450 analysing the desktop files in all packages in the archive. Since
3451 then, the DEP-11 AppStream system has been put into production, making
3452 the task a lot easier. This made me want to repeat the measurement,
3453 to see how much things changed. Here are the new numbers, for
3454 unstable only this time:
3455
3456 &lt;p&gt;&lt;strong&gt;Debian Unstable:&lt;/strong&gt;&lt;/p&gt;
3457
3458 &lt;pre&gt;
3459 count MIME type
3460 ----- -----------------------
3461 56 image/jpeg
3462 55 image/png
3463 49 image/tiff
3464 48 image/gif
3465 39 image/bmp
3466 38 text/plain
3467 37 audio/mpeg
3468 34 application/ogg
3469 33 audio/x-flac
3470 32 audio/x-mp3
3471 30 audio/x-wav
3472 30 audio/x-vorbis+ogg
3473 29 image/x-portable-pixmap
3474 27 inode/directory
3475 27 image/x-portable-bitmap
3476 27 audio/x-mpeg
3477 26 application/x-ogg
3478 25 audio/x-mpegurl
3479 25 audio/ogg
3480 24 text/html
3481 &lt;/pre&gt;
3482
3483 &lt;p&gt;The list was created like this using a sid chroot: &quot;cat
3484 /var/lib/apt/lists/*sid*_dep11_Components-amd64.yml.gz| zcat | awk &#39;/^
3485 - \S+\/\S+$/ {print $2 }&#39; | sort | uniq -c | sort -nr | head -20&quot;&lt;/p&gt;
3486
3487 &lt;p&gt;It is interesting to see how image formats have passed text/plain
3488 as the most announced supported MIME type. These days, thanks to the
3489 AppStream system, if you run into a file format you do not know, and
3490 want to figure out which packages support the format, you can find the
3491 MIME type of the file using &quot;file --mime &amp;lt;filename&amp;gt;&quot;, and then
3492 look up all packages announcing support for this format in their
3493 AppStream metadata (XML or .desktop file) using &quot;appstreamcli
3494 what-provides mimetype &amp;lt;mime-type&amp;gt;. For example if you, like
3495 me, want to know which packages support inode/directory, you can get a
3496 list like this:&lt;/p&gt;
3497
3498 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
3499 % appstreamcli what-provides mimetype inode/directory | grep Package: | sort
3500 Package: anjuta
3501 Package: audacious
3502 Package: baobab
3503 Package: cervisia
3504 Package: chirp
3505 Package: dolphin
3506 Package: doublecmd-common
3507 Package: easytag
3508 Package: enlightenment
3509 Package: ephoto
3510 Package: filelight
3511 Package: gwenview
3512 Package: k4dirstat
3513 Package: kaffeine
3514 Package: kdesvn
3515 Package: kid3
3516 Package: kid3-qt
3517 Package: nautilus
3518 Package: nemo
3519 Package: pcmanfm
3520 Package: pcmanfm-qt
3521 Package: qweborf
3522 Package: ranger
3523 Package: sirikali
3524 Package: spacefm
3525 Package: spacefm
3526 Package: vifm
3527 %
3528 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
3529
3530 &lt;p&gt;Using the same method, I can quickly discover that the Sketchup file
3531 format is not yet supported by any package in Debian:&lt;/p&gt;
3532
3533 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
3534 % appstreamcli what-provides mimetype application/vnd.sketchup.skp
3535 Could not find component providing &#39;mimetype::application/vnd.sketchup.skp&#39;.
3536 %
3537 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
3538
3539 &lt;p&gt;Yesterday I used it to figure out which packages support the STL 3D
3540 format:&lt;/p&gt;
3541
3542 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
3543 % appstreamcli what-provides mimetype application/sla|grep Package
3544 Package: cura
3545 Package: meshlab
3546 Package: printrun
3547 %
3548 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
3549
3550 &lt;p&gt;PS: A new version of Cura was uploaded to Debian yesterday.&lt;/p&gt;
3551
3552 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
3553 activities, please send Bitcoin donations to my address
3554 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
3555 </description>
3556 </item>
3557
3558 <item>
3559 <title>Debian APT upgrade without enough free space on the disk...</title>
3560 <link>http://www.hungry.com/~pere/blog/Debian_APT_upgrade_without_enough_free_space_on_the_disk___.html</link>
3561 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Debian_APT_upgrade_without_enough_free_space_on_the_disk___.html</guid>
3562 <pubDate>Sun, 8 Jul 2018 12:10:00 +0200</pubDate>
3563 <description>&lt;p&gt;Quite regularly, I let my Debian Sid/Unstable chroot stay untouch
3564 for a while, and when I need to update it there is not enough free
3565 space on the disk for apt to do a normal &#39;apt upgrade&#39;. I normally
3566 would resolve the issue by doing &#39;apt install &amp;lt;somepackages&amp;gt;&#39; to
3567 upgrade only some of the packages in one batch, until the amount of
3568 packages to download fall below the amount of free space available.
3569 Today, I had about 500 packages to upgrade, and after a while I got
3570 tired of trying to install chunks of packages manually. I concluded
3571 that I did not have the spare hours required to complete the task, and
3572 decided to see if I could automate it. I came up with this small
3573 script which I call &#39;apt-in-chunks&#39;:&lt;/p&gt;
3574
3575 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
3576 #!/bin/sh
3577 #
3578 # Upgrade packages when the disk is too full to upgrade every
3579 # upgradable package in one lump. Fetching packages to upgrade using
3580 # apt, and then installing using dpkg, to avoid changing the package
3581 # flag for manual/automatic.
3582
3583 set -e
3584
3585 ignore() {
3586 if [ &quot;$1&quot; ]; then
3587 grep -v &quot;$1&quot;
3588 else
3589 cat
3590 fi
3591 }
3592
3593 for p in $(apt list --upgradable | ignore &quot;$@&quot; |cut -d/ -f1 | grep -v &#39;^Listing...&#39;); do
3594 echo &quot;Upgrading $p&quot;
3595 apt clean
3596 apt install --download-only -y $p
3597 for f in /var/cache/apt/archives/*.deb; do
3598 if [ -e &quot;$f&quot; ]; then
3599 dpkg -i /var/cache/apt/archives/*.deb
3600 break
3601 fi
3602 done
3603 done
3604 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
3605
3606 &lt;p&gt;The script will extract the list of packages to upgrade, try to
3607 download the packages needed to upgrade one package, install the
3608 downloaded packages using dpkg. The idea is to upgrade packages
3609 without changing the APT mark for the package (ie the one recording of
3610 the package was manually requested or pulled in as a dependency). To
3611 use it, simply run it as root from the command line. If it fail, try
3612 &#39;apt install -f&#39; to clean up the mess and run the script again. This
3613 might happen if the new packages conflict with one of the old
3614 packages. dpkg is unable to remove, while apt can do this.&lt;/p&gt;
3615
3616 &lt;p&gt;It take one option, a package to ignore in the list of packages to
3617 upgrade. The option to ignore a package is there to be able to skip
3618 the packages that are simply too large to unpack. Today this was
3619 &#39;ghc&#39;, but I have run into other large packages causing similar
3620 problems earlier (like TeX).&lt;/p&gt;
3621
3622 &lt;p&gt;Update 2018-07-08: Thanks to Paul Wise, I am aware of two
3623 alternative ways to handle this. The &quot;unattended-upgrades
3624 --minimal-upgrade-steps&quot; option will try to calculate upgrade sets for
3625 each package to upgrade, and then upgrade them in order, smallest set
3626 first. It might be a better option than my above mentioned script.
3627 Also, &quot;aptutude upgrade&quot; can upgrade single packages, thus avoiding
3628 the need for using &quot;dpkg -i&quot; in the script above.&lt;/p&gt;
3629
3630 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
3631 activities, please send Bitcoin donations to my address
3632 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
3633 </description>
3634 </item>
3635
3636 <item>
3637 <title>Version 3.1 of Cura, the 3D print slicer, is now in Debian</title>
3638 <link>http://www.hungry.com/~pere/blog/Version_3_1_of_Cura__the_3D_print_slicer__is_now_in_Debian.html</link>
3639 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Version_3_1_of_Cura__the_3D_print_slicer__is_now_in_Debian.html</guid>
3640 <pubDate>Tue, 13 Feb 2018 06:20:00 +0100</pubDate>
3641 <description>&lt;p&gt;A new version of the
3642 &lt;a href=&quot;https://tracker.debian.org/pkg/cura&quot;&gt;3D printer slicer
3643 software Cura&lt;/a&gt;, version 3.1.0, is now available in Debian Testing
3644 (aka Buster) and Debian Unstable (aka Sid). I hope you find it
3645 useful. It was uploaded the last few days, and the last update will
3646 enter testing tomorrow. See the
3647 &lt;a href=&quot;https://ultimaker.com/en/products/cura-software/release-notes&quot;&gt;release
3648 notes&lt;/a&gt; for the list of bug fixes and new features. Version 3.2
3649 was announced 6 days ago. We will try to get it into Debian as
3650 well.&lt;/p&gt;
3651
3652 &lt;p&gt;More information related to 3D printing is available on the
3653 &lt;a href=&quot;https://wiki.debian.org/3DPrinting&quot;&gt;3D printing&lt;/a&gt; and
3654 &lt;a href=&quot;https://wiki.debian.org/3D-printer&quot;&gt;3D printer&lt;/a&gt; wiki pages
3655 in Debian.&lt;/p&gt;
3656
3657 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
3658 activities, please send Bitcoin donations to my address
3659 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
3660 </description>
3661 </item>
3662
3663 <item>
3664 <title>Cura, the nice 3D print slicer, is now in Debian Unstable</title>
3665 <link>http://www.hungry.com/~pere/blog/Cura__the_nice_3D_print_slicer__is_now_in_Debian_Unstable.html</link>
3666 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Cura__the_nice_3D_print_slicer__is_now_in_Debian_Unstable.html</guid>
3667 <pubDate>Sun, 17 Dec 2017 07:00:00 +0100</pubDate>
3668 <description>&lt;p&gt;After several months of working and waiting, I am happy to report
3669 that the nice and user friendly 3D printer slicer software Cura just
3670 entered Debian Unstable. It consist of five packages,
3671 &lt;a href=&quot;https://tracker.debian.org/pkg/cura&quot;&gt;cura&lt;/a&gt;,
3672 &lt;a href=&quot;https://tracker.debian.org/pkg/cura-engine&quot;&gt;cura-engine&lt;/a&gt;,
3673 &lt;a href=&quot;https://tracker.debian.org/pkg/libarcus&quot;&gt;libarcus&lt;/a&gt;,
3674 &lt;a href=&quot;https://tracker.debian.org/pkg/fdm-materials&quot;&gt;fdm-materials&lt;/a&gt;,
3675 &lt;a href=&quot;https://tracker.debian.org/pkg/libsavitar&quot;&gt;libsavitar&lt;/a&gt; and
3676 &lt;a href=&quot;https://tracker.debian.org/pkg/uranium&quot;&gt;uranium&lt;/a&gt;. The last
3677 two, uranium and cura, entered Unstable yesterday. This should make
3678 it easier for Debian users to print on at least the Ultimaker class of
3679 3D printers. My nearest 3D printer is an Ultimaker 2+, so it will
3680 make life easier for at least me. :)&lt;/p&gt;
3681
3682 &lt;p&gt;The work to make this happen was done by Gregor Riepl, and I was
3683 happy to assist him in sponsoring the packages. With the introduction
3684 of Cura, Debian is up to three 3D printer slicers at your service,
3685 Cura, Slic3r and Slic3r Prusa. If you own or have access to a 3D
3686 printer, give it a go. :)&lt;/p&gt;
3687
3688 &lt;p&gt;The 3D printer software is maintained by the 3D printer Debian
3689 team, flocking together on the
3690 &lt;a href=&quot;http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/3dprinter-general&quot;&gt;3dprinter-general&lt;/a&gt;
3691 mailing list and the
3692 &lt;a href=&quot;irc://irc.debian.org/#debian-3dprinting&quot;&gt;#debian-3dprinting&lt;/a&gt;
3693 IRC channel.&lt;/p&gt;
3694
3695 &lt;p&gt;The next step for Cura in Debian is to update the cura package to
3696 version 3.0.3 and then update the entire set of packages to version
3697 3.1.0 which showed up the last few days.&lt;/p&gt;
3698 </description>
3699 </item>
3700
3701 <item>
3702 <title>Generating 3D prints in Debian using Cura and Slic3r(-prusa)</title>
3703 <link>http://www.hungry.com/~pere/blog/Generating_3D_prints_in_Debian_using_Cura_and_Slic3r__prusa_.html</link>
3704 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Generating_3D_prints_in_Debian_using_Cura_and_Slic3r__prusa_.html</guid>
3705 <pubDate>Mon, 9 Oct 2017 10:50:00 +0200</pubDate>
3706 <description>&lt;p&gt;At my nearby maker space,
3707 &lt;a href=&quot;http://sonen.ifi.uio.no/&quot;&gt;Sonen&lt;/a&gt;, I heard the story that it
3708 was easier to generate gcode files for theyr 3D printers (Ultimake 2+)
3709 on Windows and MacOS X than Linux, because the software involved had
3710 to be manually compiled and set up on Linux while premade packages
3711 worked out of the box on Windows and MacOS X. I found this annoying,
3712 as the software involved,
3713 &lt;a href=&quot;https://github.com/Ultimaker/Cura&quot;&gt;Cura&lt;/a&gt;, is free software
3714 and should be trivial to get up and running on Linux if someone took
3715 the time to package it for the relevant distributions. I even found
3716 &lt;a href=&quot;https://bugs.debian.org/706656&quot;&gt;a request for adding into
3717 Debian&lt;/a&gt; from 2013, which had seem some activity over the years but
3718 never resulted in the software showing up in Debian. So a few days
3719 ago I offered my help to try to improve the situation.&lt;/p&gt;
3720
3721 &lt;p&gt;Now I am very happy to see that all the packages required by a
3722 working Cura in Debian are uploaded into Debian and waiting in the NEW
3723 queue for the ftpmasters to have a look. You can track the progress
3724 on
3725 &lt;a href=&quot;https://qa.debian.org/developer.php?email=3dprinter-general%40lists.alioth.debian.org&quot;&gt;the
3726 status page for the 3D printer team&lt;/a&gt;.&lt;/p&gt;
3727
3728 &lt;p&gt;The uploaded packages are a bit behind upstream, and was uploaded
3729 now to get slots in &lt;a href=&quot;https://ftp-master.debian.org/new.html&quot;&gt;the NEW
3730 queue&lt;/a&gt; while we work up updating the packages to the latest
3731 upstream version.&lt;/p&gt;
3732
3733 &lt;p&gt;On a related note, two competitors for Cura, which I found harder
3734 to use and was unable to configure correctly for Ultimaker 2+ in the
3735 short time I spent on it, are already in Debian. If you are looking
3736 for 3D printer &quot;slicers&quot; and want something already available in
3737 Debian, check out
3738 &lt;a href=&quot;https://tracker.debian.org/pkg/slic3r&quot;&gt;slic3r&lt;/a&gt; and
3739 &lt;a href=&quot;https://tracker.debian.org/pkg/slic3r-prusa&quot;&gt;slic3r-prusa&lt;/a&gt;.
3740 The latter is a fork of the former.&lt;/p&gt;
3741
3742 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
3743 activities, please send Bitcoin donations to my address
3744 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
3745 </description>
3746 </item>
3747
3748 <item>
3749 <title>Visualizing GSM radio chatter using gr-gsm and Hopglass</title>
3750 <link>http://www.hungry.com/~pere/blog/Visualizing_GSM_radio_chatter_using_gr_gsm_and_Hopglass.html</link>
3751 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Visualizing_GSM_radio_chatter_using_gr_gsm_and_Hopglass.html</guid>
3752 <pubDate>Fri, 29 Sep 2017 10:30:00 +0200</pubDate>
3753 <description>&lt;p&gt;Every mobile phone announce its existence over radio to the nearby
3754 mobile cell towers. And this radio chatter is available for anyone
3755 with a radio receiver capable of receiving them. Details about the
3756 mobile phones with very good accuracy is of course collected by the
3757 phone companies, but this is not the topic of this blog post. The
3758 mobile phone radio chatter make it possible to figure out when a cell
3759 phone is nearby, as it include the SIM card ID (IMSI). By paying
3760 attention over time, one can see when a phone arrive and when it leave
3761 an area. I believe it would be nice to make this information more
3762 available to the general public, to make more people aware of how
3763 their phones are announcing their whereabouts to anyone that care to
3764 listen.&lt;/p&gt;
3765
3766 &lt;p&gt;I am very happy to report that we managed to get something
3767 visualizing this information up and running for
3768 &lt;a href=&quot;http://norwaymakers.org/osf17&quot;&gt;Oslo Skaperfestival 2017&lt;/a&gt;
3769 (Oslo Makers Festival) taking place today and tomorrow at Deichmanske
3770 library. The solution is based on the
3771 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Easier_recipe_to_observe_the_cell_phones_around_you.html&quot;&gt;simple
3772 recipe for listening to GSM chatter&lt;/a&gt; I posted a few days ago, and
3773 will show up at the stand of &lt;a href=&quot;http://sonen.ifi.uio.no/&quot;&gt;Åpen
3774 Sone from the Computer Science department of the University of
3775 Oslo&lt;/a&gt;. The presentation will show the nearby mobile phones (aka
3776 IMSIs) as dots in a web browser graph, with lines to the dot
3777 representing mobile base station it is talking to. It was working in
3778 the lab yesterday, and was moved into place this morning.&lt;/p&gt;
3779
3780 &lt;p&gt;We set up a fairly powerful desktop machine using Debian
3781 Buster/Testing with several (five, I believe) RTL2838 DVB-T receivers
3782 connected and visualize the visible cell phone towers using an
3783 &lt;a href=&quot;https://github.com/marlow925/hopglass&quot;&gt;English version of
3784 Hopglass&lt;/a&gt;. A fairly powerfull machine is needed as the
3785 grgsm_livemon_headless processes from
3786 &lt;a href=&quot;https://tracker.debian.org/pkg/gr-gsm&quot;&gt;gr-gsm&lt;/a&gt; converting
3787 the radio signal to data packages is quite CPU intensive.&lt;/p&gt;
3788
3789 &lt;p&gt;The frequencies to listen to, are identified using a slightly
3790 patched scan-and-livemon (to set the --args values for each receiver),
3791 and the Hopglass data is generated using the
3792 &lt;a href=&quot;https://github.com/petterreinholdtsen/IMSI-catcher/tree/meshviewer-output&quot;&gt;patches
3793 in my meshviewer-output branch&lt;/a&gt;. For some reason we could not get
3794 more than four SDRs working. There is also a geographical map trying
3795 to show the location of the base stations, but I believe their
3796 coordinates are hardcoded to some random location in Germany, I
3797 believe. The code should be replaced with code to look up location in
3798 a text file, a sqlite database or one of the online databases
3799 mentioned in
3800 &lt;a href=&quot;https://github.com/Oros42/IMSI-catcher/issues/14&quot;&gt;the github
3801 issue for the topic&lt;/a&gt;.
3802
3803 &lt;p&gt;If this sound interesting, visit the stand at the festival!&lt;/p&gt;
3804 </description>
3805 </item>
3806
3807 <item>
3808 <title>Easier recipe to observe the cell phones around you</title>
3809 <link>http://www.hungry.com/~pere/blog/Easier_recipe_to_observe_the_cell_phones_around_you.html</link>
3810 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Easier_recipe_to_observe_the_cell_phones_around_you.html</guid>
3811 <pubDate>Sun, 24 Sep 2017 08:30:00 +0200</pubDate>
3812 <description>&lt;p&gt;A little more than a month ago I wrote
3813 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Simpler_recipe_on_how_to_make_a_simple__7_IMSI_Catcher_using_Debian.html&quot;&gt;how
3814 to observe the SIM card ID (aka IMSI number) of mobile phones talking
3815 to nearby mobile phone base stations using Debian GNU/Linux and a
3816 cheap USB software defined radio&lt;/a&gt;, and thus being able to pinpoint
3817 the location of people and equipment (like cars and trains) with an
3818 accuracy of a few kilometer. Since then we have worked to make the
3819 procedure even simpler, and it is now possible to do this without any
3820 manual frequency tuning and without building your own packages.&lt;/p&gt;
3821
3822 &lt;p&gt;The &lt;a href=&quot;https://tracker.debian.org/pkg/gr-gsm&quot;&gt;gr-gsm&lt;/a&gt;
3823 package is now included in Debian testing and unstable, and the
3824 IMSI-catcher code no longer require root access to fetch and decode
3825 the GSM data collected using gr-gsm.&lt;/p&gt;
3826
3827 &lt;p&gt;Here is an updated recipe, using packages built by Debian and a git
3828 clone of two python scripts:&lt;/p&gt;
3829
3830 &lt;ol&gt;
3831
3832 &lt;li&gt;Start with a Debian machine running the Buster version (aka
3833 testing).&lt;/li&gt;
3834
3835 &lt;li&gt;Run &#39;&lt;tt&gt;apt install gr-gsm python-numpy python-scipy
3836 python-scapy&lt;/tt&gt;&#39; as root to install required packages.&lt;/li&gt;
3837
3838 &lt;li&gt;Fetch the code decoding GSM packages using &#39;&lt;tt&gt;git clone
3839 github.com/Oros42/IMSI-catcher.git&lt;/tt&gt;&#39;.&lt;/li&gt;
3840
3841 &lt;li&gt;Insert USB software defined radio supported by GNU Radio.&lt;/li&gt;
3842
3843 &lt;li&gt;Enter the IMSI-catcher directory and run &#39;&lt;tt&gt;python
3844 scan-and-livemon&lt;/tt&gt;&#39; to locate the frequency of nearby base
3845 stations and start listening for GSM packages on one of them.&lt;/li&gt;
3846
3847 &lt;li&gt;Enter the IMSI-catcher directory and run &#39;&lt;tt&gt;python
3848 simple_IMSI-catcher.py&lt;/tt&gt;&#39; to display the collected information.&lt;/li&gt;
3849
3850 &lt;/ol&gt;
3851
3852 &lt;p&gt;Note, due to a bug somewhere the scan-and-livemon program (actually
3853 &lt;a href=&quot;https://github.com/ptrkrysik/gr-gsm/issues/336&quot;&gt;its underlying
3854 program grgsm_scanner&lt;/a&gt;) do not work with the HackRF radio. It does
3855 work with RTL 8232 and other similar USB radio receivers you can get
3856 very cheaply
3857 (&lt;a href=&quot;https://www.ebay.com/sch/items/?_nkw=rtl+2832&quot;&gt;for example
3858 from ebay&lt;/a&gt;), so for now the solution is to scan using the RTL radio
3859 and only use HackRF for fetching GSM data.&lt;/p&gt;
3860
3861 &lt;p&gt;As far as I can tell, a cell phone only show up on one of the
3862 frequencies at the time, so if you are going to track and count every
3863 cell phone around you, you need to listen to all the frequencies used.
3864 To listen to several frequencies, use the --numrecv argument to
3865 scan-and-livemon to use several receivers. Further, I am not sure if
3866 phones using 3G or 4G will show as talking GSM to base stations, so
3867 this approach might not see all phones around you. I typically see
3868 0-400 IMSI numbers an hour when looking around where I live.&lt;/p&gt;
3869
3870 &lt;p&gt;I&#39;ve tried to run the scanner on a
3871 &lt;a href=&quot;https://wiki.debian.org/RaspberryPi&quot;&gt;Raspberry Pi 2 and 3
3872 running Debian Buster&lt;/a&gt;, but the grgsm_livemon_headless process seem
3873 to be too CPU intensive to keep up. When GNU Radio print &#39;O&#39; to
3874 stdout, I am told there it is caused by a buffer overflow between the
3875 radio and GNU Radio, caused by the program being unable to read the
3876 GSM data fast enough. If you see a stream of &#39;O&#39;s from the terminal
3877 where you started scan-and-livemon, you need a give the process more
3878 CPU power. Perhaps someone are able to optimize the code to a point
3879 where it become possible to set up RPi3 based GSM sniffers? I tried
3880 using Raspbian instead of Debian, but there seem to be something wrong
3881 with GNU Radio on raspbian, causing glibc to abort().&lt;/p&gt;
3882 </description>
3883 </item>
3884
3885 <item>
3886 <title>Simpler recipe on how to make a simple $7 IMSI Catcher using Debian</title>
3887 <link>http://www.hungry.com/~pere/blog/Simpler_recipe_on_how_to_make_a_simple__7_IMSI_Catcher_using_Debian.html</link>
3888 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Simpler_recipe_on_how_to_make_a_simple__7_IMSI_Catcher_using_Debian.html</guid>
3889 <pubDate>Wed, 9 Aug 2017 23:59:00 +0200</pubDate>
3890 <description>&lt;p&gt;On friday, I came across an interesting article in the Norwegian
3891 web based ICT news magazine digi.no on
3892 &lt;a href=&quot;https://www.digi.no/artikler/sikkerhetsforsker-lagde-enkel-imsi-catcher-for-60-kroner-na-kan-mobiler-kartlegges-av-alle/398588&quot;&gt;how
3893 to collect the IMSI numbers of nearby cell phones&lt;/a&gt; using the cheap
3894 DVB-T software defined radios. The article refered to instructions
3895 and &lt;a href=&quot;https://www.youtube.com/watch?v=UjwgNd_as30&quot;&gt;a recipe by
3896 Keld Norman on Youtube on how to make a simple $7 IMSI Catcher&lt;/a&gt;, and I decided to test them out.&lt;/p&gt;
3897
3898 &lt;p&gt;The instructions said to use Ubuntu, install pip using apt (to
3899 bypass apt), use pip to install pybombs (to bypass both apt and pip),
3900 and the ask pybombs to fetch and build everything you need from
3901 scratch. I wanted to see if I could do the same on the most recent
3902 Debian packages, but this did not work because pybombs tried to build
3903 stuff that no longer build with the most recent openssl library or
3904 some other version skew problem. While trying to get this recipe
3905 working, I learned that the apt-&gt;pip-&gt;pybombs route was a long detour,
3906 and the only piece of software dependency missing in Debian was the
3907 gr-gsm package. I also found out that the lead upstream developer of
3908 gr-gsm (the name stand for GNU Radio GSM) project already had a set of
3909 Debian packages provided in an Ubuntu PPA repository. All I needed to
3910 do was to dget the Debian source package and built it.&lt;/p&gt;
3911
3912 &lt;p&gt;The IMSI collector is a python script listening for packages on the
3913 loopback network device and printing to the terminal some specific GSM
3914 packages with IMSI numbers in them. The code is fairly short and easy
3915 to understand. The reason this work is because gr-gsm include a tool
3916 to read GSM data from a software defined radio like a DVB-T USB stick
3917 and other software defined radios, decode them and inject them into a
3918 network device on your Linux machine (using the loopback device by
3919 default). This proved to work just fine, and I&#39;ve been testing the
3920 collector for a few days now.&lt;/p&gt;
3921
3922 &lt;p&gt;The updated and simpler recipe is thus to&lt;/p&gt;
3923
3924 &lt;ol&gt;
3925
3926 &lt;li&gt;start with a Debian machine running Stretch or newer,&lt;/li&gt;
3927
3928 &lt;li&gt;build and install the gr-gsm package available from
3929 &lt;a href=&quot;http://ppa.launchpad.net/ptrkrysik/gr-gsm/ubuntu/pool/main/g/gr-gsm/&quot;&gt;http://ppa.launchpad.net/ptrkrysik/gr-gsm/ubuntu/pool/main/g/gr-gsm/&lt;/a&gt;,&lt;/li&gt;
3930
3931 &lt;li&gt;clone the git repostory from &lt;a href=&quot;https://github.com/Oros42/IMSI-catcher&quot;&gt;https://github.com/Oros42/IMSI-catcher&lt;/a&gt;,&lt;/li&gt;
3932
3933 &lt;li&gt;run grgsm_livemon and adjust the frequency until the terminal
3934 where it was started is filled with a stream of text (meaning you
3935 found a GSM station).&lt;/li&gt;
3936
3937 &lt;li&gt;go into the IMSI-catcher directory and run &#39;sudo python simple_IMSI-catcher.py&#39; to extract the IMSI numbers.&lt;/li&gt;
3938
3939 &lt;/ol&gt;
3940
3941 &lt;p&gt;To make it even easier in the future to get this sniffer up and
3942 running, I decided to package
3943 &lt;a href=&quot;https://github.com/ptrkrysik/gr-gsm/&quot;&gt;the gr-gsm project&lt;/a&gt;
3944 for Debian (&lt;a href=&quot;https://bugs.debian.org/871055&quot;&gt;WNPP
3945 #871055&lt;/a&gt;), and the package was uploaded into the NEW queue today.
3946 Luckily the gnuradio maintainer has promised to help me, as I do not
3947 know much about gnuradio stuff yet.&lt;/p&gt;
3948
3949 &lt;p&gt;I doubt this &quot;IMSI cacher&quot; is anywhere near as powerfull as
3950 commercial tools like
3951 &lt;a href=&quot;https://www.thespyphone.com/portable-imsi-imei-catcher/&quot;&gt;The
3952 Spy Phone Portable IMSI / IMEI Catcher&lt;/a&gt; or the
3953 &lt;a href=&quot;https://en.wikipedia.org/wiki/Stingray_phone_tracker&quot;&gt;Harris
3954 Stingray&lt;/a&gt;, but I hope the existance of cheap alternatives can make
3955 more people realise how their whereabouts when carrying a cell phone
3956 is easily tracked. Seeing the data flow on the screen, realizing that
3957 I live close to a police station and knowing that the police is also
3958 wearing cell phones, I wonder how hard it would be for criminals to
3959 track the position of the police officers to discover when there are
3960 police near by, or for foreign military forces to track the location
3961 of the Norwegian military forces, or for anyone to track the location
3962 of government officials...&lt;/p&gt;
3963
3964 &lt;p&gt;It is worth noting that the data reported by the IMSI-catcher
3965 script mentioned above is only a fraction of the data broadcasted on
3966 the GSM network. It will only collect one frequency at the time,
3967 while a typical phone will be using several frequencies, and not all
3968 phones will be using the frequencies tracked by the grgsm_livemod
3969 program. Also, there is a lot of radio chatter being ignored by the
3970 simple_IMSI-catcher script, which would be collected by extending the
3971 parser code. I wonder if gr-gsm can be set up to listen to more than
3972 one frequency?&lt;/p&gt;
3973 </description>
3974 </item>
3975
3976 <item>
3977 <title>Norwegian Bokmål edition of Debian Administrator&#39;s Handbook is now available</title>
3978 <link>http://www.hungry.com/~pere/blog/Norwegian_Bokm_l_edition_of_Debian_Administrator_s_Handbook_is_now_available.html</link>
3979 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Norwegian_Bokm_l_edition_of_Debian_Administrator_s_Handbook_is_now_available.html</guid>
3980 <pubDate>Tue, 25 Jul 2017 21:10:00 +0200</pubDate>
3981 <description>&lt;p align=&quot;center&quot;&gt;&lt;img align=&quot;center&quot; src=&quot;http://www.hungry.com/~pere/blog/images/2017-07-25-debian-handbook-nb-testprint.png&quot;/&gt;&lt;/p&gt;
3982
3983 &lt;p&gt;I finally received a copy of the Norwegian Bokmål edition of
3984 &quot;&lt;a href=&quot;https://debian-handbook.info/&quot;&gt;The Debian Administrator&#39;s
3985 Handbook&lt;/a&gt;&quot;. This test copy arrived in the mail a few days ago, and
3986 I am very happy to hold the result in my hand. We spent around one and a half year translating it. This paperbook edition
3987 &lt;a href=&quot;https://debian-handbook.info/get/#norwegian&quot;&gt;is available
3988 from lulu.com&lt;/a&gt;. If you buy it quickly, you save 25% on the list
3989 price. The book is also available for download in electronic form as
3990 PDF, EPUB and Mobipocket, as can be
3991 &lt;a href=&quot;https://debian-handbook.info/browse/nb-NO/stable/&quot;&gt;read online
3992 as a web page&lt;/a&gt;.&lt;/p&gt;
3993
3994 &lt;p&gt;This is the second book I publish (the first was the book
3995 &quot;&lt;a href=&quot;http://free-culture.cc/&quot;&gt;Free Culture&lt;/a&gt;&quot; by Lawrence Lessig
3996 in
3997 &lt;a href=&quot;http://www.lulu.com/shop/lawrence-lessig/free-culture/paperback/product-22440520.html&quot;&gt;English&lt;/a&gt;,
3998 &lt;a href=&quot;http://www.lulu.com/shop/lawrence-lessig/culture-libre/paperback/product-22645082.html&quot;&gt;French&lt;/a&gt;
3999 and
4000 &lt;a href=&quot;http://www.lulu.com/shop/lawrence-lessig/fri-kultur/paperback/product-22441576.html&quot;&gt;Norwegian
4001 Bokmål&lt;/a&gt;), and I am very excited to finally wrap up this
4002 project. I hope
4003 &quot;&lt;a href=&quot;http://www.lulu.com/shop/rapha%C3%ABl-hertzog-and-roland-mas/h%C3%A5ndbok-for-debian-administratoren/paperback/product-23262290.html&quot;&gt;Håndbok
4004 for Debian-administratoren&lt;/a&gt;&quot; will be well received.&lt;/p&gt;
4005 </description>
4006 </item>
4007
4008 <item>
4009 <title>Når nynorskoversettelsen svikter til eksamen...</title>
4010 <link>http://www.hungry.com/~pere/blog/N_r_nynorskoversettelsen_svikter_til_eksamen___.html</link>
4011 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/N_r_nynorskoversettelsen_svikter_til_eksamen___.html</guid>
4012 <pubDate>Sat, 3 Jun 2017 08:20:00 +0200</pubDate>
4013 <description>&lt;p&gt;&lt;a href=&quot;http://www.aftenposten.no/norge/Krever-at-elever-ma-fa-annullert-eksamen-etter-rot-med-oppgavetekster-622459b.html&quot;&gt;Aftenposten
4014 melder i dag&lt;/a&gt; om feil i eksamensoppgavene for eksamen i politikk og
4015 menneskerettigheter, der teksten i bokmåls og nynorskutgaven ikke var
4016 like. Oppgaveteksten er gjengitt i artikkelen, og jeg ble nysgjerring
4017 på om den fri oversetterløsningen
4018 &lt;a href=&quot;https://www.apertium.org/&quot;&gt;Apertium&lt;/a&gt; ville gjort en bedre
4019 jobb enn Utdanningsdirektoratet. Det kan se slik ut.&lt;/p&gt;
4020
4021 &lt;p&gt;Her er bokmålsoppgaven fra eksamenen:&lt;/p&gt;
4022
4023 &lt;blockquote&gt;
4024 &lt;p&gt;Drøft utfordringene knyttet til nasjonalstatenes og andre aktørers
4025 rolle og muligheter til å håndtere internasjonale utfordringer, som
4026 for eksempel flykningekrisen.&lt;/p&gt;
4027
4028 &lt;p&gt;Vedlegge er eksempler på tekster som kan gi relevante perspektiver
4029 på temaet:&lt;/p&gt;
4030 &lt;ol&gt;
4031 &lt;li&gt;Flykningeregnskapet 2016, UNHCR og IDMC
4032 &lt;li&gt;«Grenseløst Europa for fall» A-Magasinet, 26. november 2015
4033 &lt;/ol&gt;
4034
4035 &lt;/blockquote&gt;
4036
4037 &lt;p&gt;Dette oversetter Apertium slik:&lt;/p&gt;
4038
4039 &lt;blockquote&gt;
4040 &lt;p&gt;Drøft utfordringane knytte til nasjonalstatane sine og rolla til
4041 andre aktørar og høve til å handtera internasjonale utfordringar, som
4042 til dømes *flykningekrisen.&lt;/p&gt;
4043
4044 &lt;p&gt;Vedleggja er døme på tekster som kan gje relevante perspektiv på
4045 temaet:&lt;/p&gt;
4046
4047 &lt;ol&gt;
4048 &lt;li&gt;*Flykningeregnskapet 2016, *UNHCR og *IDMC&lt;/li&gt;
4049 &lt;li&gt;«*Grenseløst Europa for fall» A-Magasinet, 26. november 2015&lt;/li&gt;
4050 &lt;/ol&gt;
4051
4052 &lt;/blockquote&gt;
4053
4054 &lt;p&gt;Ord som ikke ble forstått er markert med stjerne (*), og trenger
4055 ekstra språksjekk. Men ingen ord er forsvunnet, slik det var i
4056 oppgaven elevene fikk presentert på eksamen. Jeg mistenker dog at
4057 &quot;andre aktørers rolle og muligheter til ...&quot; burde vært oversatt til
4058 &quot;rolla til andre aktørar og deira høve til ...&quot; eller noe slikt, men
4059 det er kanskje flisespikking. Det understreker vel bare at det alltid
4060 trengs korrekturlesning etter automatisk oversettelse.&lt;/p&gt;
4061 </description>
4062 </item>
4063
4064 <item>
4065 <title>Detecting NFS hangs on Linux without hanging yourself...</title>
4066 <link>http://www.hungry.com/~pere/blog/Detecting_NFS_hangs_on_Linux_without_hanging_yourself___.html</link>
4067 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Detecting_NFS_hangs_on_Linux_without_hanging_yourself___.html</guid>
4068 <pubDate>Thu, 9 Mar 2017 15:20:00 +0100</pubDate>
4069 <description>&lt;p&gt;Over the years, administrating thousand of NFS mounting linux
4070 computers at the time, I often needed a way to detect if the machine
4071 was experiencing NFS hang. If you try to use &lt;tt&gt;df&lt;/tt&gt; or look at a
4072 file or directory affected by the hang, the process (and possibly the
4073 shell) will hang too. So you want to be able to detect this without
4074 risking the detection process getting stuck too. It has not been
4075 obvious how to do this. When the hang has lasted a while, it is
4076 possible to find messages like these in dmesg:&lt;/p&gt;
4077
4078 &lt;p&gt;&lt;blockquote&gt;
4079 nfs: server nfsserver not responding, still trying
4080 &lt;br&gt;nfs: server nfsserver OK
4081 &lt;/blockquote&gt;&lt;/p&gt;
4082
4083 &lt;p&gt;It is hard to know if the hang is still going on, and it is hard to
4084 be sure looking in dmesg is going to work. If there are lots of other
4085 messages in dmesg the lines might have rotated out of site before they
4086 are noticed.&lt;/p&gt;
4087
4088 &lt;p&gt;While reading through the nfs client implementation in linux kernel
4089 code, I came across some statistics that seem to give a way to detect
4090 it. The om_timeouts sunrpc value in the kernel will increase every
4091 time the above log entry is inserted into dmesg. And after digging a
4092 bit further, I discovered that this value show up in
4093 /proc/self/mountstats on Linux.&lt;/p&gt;
4094
4095 &lt;p&gt;The mountstats content seem to be shared between files using the
4096 same file system context, so it is enough to check one of the
4097 mountstats files to get the state of the mount point for the machine.
4098 I assume this will not show lazy umounted NFS points, nor NFS mount
4099 points in a different process context (ie with a different filesystem
4100 view), but that does not worry me.&lt;/p&gt;
4101
4102 &lt;p&gt;The content for a NFS mount point look similar to this:&lt;/p&gt;
4103
4104 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
4105 [...]
4106 device /dev/mapper/Debian-var mounted on /var with fstype ext3
4107 device nfsserver:/mnt/nfsserver/home0 mounted on /mnt/nfsserver/home0 with fstype nfs statvers=1.1
4108 opts: rw,vers=3,rsize=65536,wsize=65536,namlen=255,acregmin=3,acregmax=60,acdirmin=30,acdirmax=60,soft,nolock,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=129.240.3.145,mountvers=3,mountport=4048,mountproto=udp,local_lock=all
4109 age: 7863311
4110 caps: caps=0x3fe7,wtmult=4096,dtsize=8192,bsize=0,namlen=255
4111 sec: flavor=1,pseudoflavor=1
4112 events: 61063112 732346265 1028140 35486205 16220064 8162542 761447191 71714012 37189 3891185 45561809 110486139 4850138 420353 15449177 296502 52736725 13523379 0 52182 9016896 1231 0 0 0 0 0
4113 bytes: 166253035039 219519120027 0 0 40783504807 185466229638 11677877 45561809
4114 RPC iostats version: 1.0 p/v: 100003/3 (nfs)
4115 xprt: tcp 925 1 6810 0 0 111505412 111480497 109 2672418560317 0 248 53869103 22481820
4116 per-op statistics
4117 NULL: 0 0 0 0 0 0 0 0
4118 GETATTR: 61063106 61063108 0 9621383060 6839064400 453650 77291321 78926132
4119 SETATTR: 463469 463470 0 92005440 66739536 63787 603235 687943
4120 LOOKUP: 17021657 17021657 0 3354097764 4013442928 57216 35125459 35566511
4121 ACCESS: 14281703 14290009 5 2318400592 1713803640 1709282 4865144 7130140
4122 READLINK: 125 125 0 20472 18620 0 1112 1118
4123 READ: 4214236 4214237 0 715608524 41328653212 89884 22622768 22806693
4124 WRITE: 8479010 8494376 22 187695798568 1356087148 178264904 51506907 231671771
4125 CREATE: 171708 171708 0 38084748 46702272 873 1041833 1050398
4126 MKDIR: 3680 3680 0 773980 993920 26 23990 24245
4127 SYMLINK: 903 903 0 233428 245488 6 5865 5917
4128 MKNOD: 80 80 0 20148 21760 0 299 304
4129 REMOVE: 429921 429921 0 79796004 61908192 3313 2710416 2741636
4130 RMDIR: 3367 3367 0 645112 484848 22 5782 6002
4131 RENAME: 466201 466201 0 130026184 121212260 7075 5935207 5961288
4132 LINK: 289155 289155 0 72775556 67083960 2199 2565060 2585579
4133 READDIR: 2933237 2933237 0 516506204 13973833412 10385 3190199 3297917
4134 READDIRPLUS: 1652839 1652839 0 298640972 6895997744 84735 14307895 14448937
4135 FSSTAT: 6144 6144 0 1010516 1032192 51 9654 10022
4136 FSINFO: 2 2 0 232 328 0 1 1
4137 PATHCONF: 1 1 0 116 140 0 0 0
4138 COMMIT: 0 0 0 0 0 0 0 0
4139
4140 device binfmt_misc mounted on /proc/sys/fs/binfmt_misc with fstype binfmt_misc
4141 [...]
4142 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
4143
4144 &lt;p&gt;The key number to look at is the third number in the per-op list.
4145 It is the number of NFS timeouts experiences per file system
4146 operation. Here 22 write timeouts and 5 access timeouts. If these
4147 numbers are increasing, I believe the machine is experiencing NFS
4148 hang. Unfortunately the timeout value do not start to increase right
4149 away. The NFS operations need to time out first, and this can take a
4150 while. The exact timeout value depend on the setup. For example the
4151 defaults for TCP and UDP mount points are quite different, and the
4152 timeout value is affected by the soft, hard, timeo and retrans NFS
4153 mount options.&lt;/p&gt;
4154
4155 &lt;p&gt;The only way I have been able to get working on Debian and RedHat
4156 Enterprise Linux for getting the timeout count is to peek in /proc/.
4157 But according to
4158 &lt;ahref=&quot;http://docs.oracle.com/cd/E19253-01/816-4555/netmonitor-12/index.html&quot;&gt;Solaris
4159 10 System Administration Guide: Network Services&lt;/a&gt;, the &#39;nfsstat -c&#39;
4160 command can be used to get these timeout values. But this do not work
4161 on Linux, as far as I can tell. I
4162 &lt;ahref=&quot;http://bugs.debian.org/857043&quot;&gt;asked Debian about this&lt;/a&gt;,
4163 but have not seen any replies yet.&lt;/p&gt;
4164
4165 &lt;p&gt;Is there a better way to figure out if a Linux NFS client is
4166 experiencing NFS hangs? Is there a way to detect which processes are
4167 affected? Is there a way to get the NFS mount going quickly once the
4168 network problem causing the NFS hang has been cleared? I would very
4169 much welcome some clues, as we regularly run into NFS hangs.&lt;/p&gt;
4170 </description>
4171 </item>
4172
4173 <item>
4174 <title>Norwegian Bokmål translation of The Debian Administrator&#39;s Handbook complete, proofreading in progress</title>
4175 <link>http://www.hungry.com/~pere/blog/Norwegian_Bokm_l_translation_of_The_Debian_Administrator_s_Handbook_complete__proofreading_in_progress.html</link>
4176 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Norwegian_Bokm_l_translation_of_The_Debian_Administrator_s_Handbook_complete__proofreading_in_progress.html</guid>
4177 <pubDate>Fri, 3 Mar 2017 14:50:00 +0100</pubDate>
4178 <description>&lt;p&gt;For almost a year now, we have been working on making a Norwegian
4179 Bokmål edition of &lt;a href=&quot;https://debian-handbook.info/&quot;&gt;The Debian
4180 Administrator&#39;s Handbook&lt;/a&gt;. Now, thanks to the tireless effort of
4181 Ole-Erik, Ingrid and Andreas, the initial translation is complete, and
4182 we are working on the proof reading to ensure consistent language and
4183 use of correct computer science terms. The plan is to make the book
4184 available on paper, as well as in electronic form. For that to
4185 happen, the proof reading must be completed and all the figures need
4186 to be translated. If you want to help out, get in touch.&lt;/p&gt;
4187
4188 &lt;p&gt;&lt;a href=&quot;http://www.hungry.com/~pere/debian-handbook/debian-handbook-nb-NO.pdf&quot;&gt;A
4189
4190 fresh PDF edition&lt;/a&gt; in A4 format (the final book will have smaller
4191 pages) of the book created every morning is available for
4192 proofreading. If you find any errors, please
4193 &lt;a href=&quot;https://hosted.weblate.org/projects/debian-handbook/&quot;&gt;visit
4194 Weblate and correct the error&lt;/a&gt;. The
4195 &lt;a href=&quot;http://l.github.io/debian-handbook/stat/nb-NO/index.html&quot;&gt;state
4196 of the translation including figures&lt;/a&gt; is a useful source for those
4197 provide Norwegian bokmål screen shots and figures.&lt;/p&gt;
4198 </description>
4199 </item>
4200
4201 <item>
4202 <title>Unlimited randomness with the ChaosKey?</title>
4203 <link>http://www.hungry.com/~pere/blog/Unlimited_randomness_with_the_ChaosKey_.html</link>
4204 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Unlimited_randomness_with_the_ChaosKey_.html</guid>
4205 <pubDate>Wed, 1 Mar 2017 20:50:00 +0100</pubDate>
4206 <description>&lt;p&gt;A few days ago I ordered a small batch of
4207 &lt;a href=&quot;http://altusmetrum.org/ChaosKey/&quot;&gt;the ChaosKey&lt;/a&gt;, a small
4208 USB dongle for generating entropy created by Bdale Garbee and Keith
4209 Packard. Yesterday it arrived, and I am very happy to report that it
4210 work great! According to its designers, to get it to work out of the
4211 box, you need the Linux kernel version 4.1 or later. I tested on a
4212 Debian Stretch machine (kernel version 4.9), and there it worked just
4213 fine, increasing the available entropy very quickly. I wrote a small
4214 test oneliner to test. It first print the current entropy level,
4215 drain /dev/random, and then print the entropy level for five seconds.
4216 Here is the situation without the ChaosKey inserted:&lt;/p&gt;
4217
4218 &lt;blockquote&gt;&lt;pre&gt;
4219 % cat /proc/sys/kernel/random/entropy_avail; \
4220 dd bs=1M if=/dev/random of=/dev/null count=1; \
4221 for n in $(seq 1 5); do \
4222 cat /proc/sys/kernel/random/entropy_avail; \
4223 sleep 1; \
4224 done
4225 300
4226 0+1 oppføringer inn
4227 0+1 oppføringer ut
4228 28 byte kopiert, 0,000264565 s, 106 kB/s
4229 4
4230 8
4231 12
4232 17
4233 21
4234 %
4235 &lt;/pre&gt;&lt;/blockquote&gt;
4236
4237 &lt;p&gt;The entropy level increases by 3-4 every second. In such case any
4238 application requiring random bits (like a HTTPS enabled web server)
4239 will halt and wait for more entrpy. And here is the situation with
4240 the ChaosKey inserted:&lt;/p&gt;
4241
4242 &lt;blockquote&gt;&lt;pre&gt;
4243 % cat /proc/sys/kernel/random/entropy_avail; \
4244 dd bs=1M if=/dev/random of=/dev/null count=1; \
4245 for n in $(seq 1 5); do \
4246 cat /proc/sys/kernel/random/entropy_avail; \
4247 sleep 1; \
4248 done
4249 1079
4250 0+1 oppføringer inn
4251 0+1 oppføringer ut
4252 104 byte kopiert, 0,000487647 s, 213 kB/s
4253 433
4254 1028
4255 1031
4256 1035
4257 1038
4258 %
4259 &lt;/pre&gt;&lt;/blockquote&gt;
4260
4261 &lt;p&gt;Quite the difference. :) I bought a few more than I need, in case
4262 someone want to buy one here in Norway. :)&lt;/p&gt;
4263
4264 &lt;p&gt;Update: The dongle was presented at Debconf last year. You might
4265 find &lt;a href=&quot;https://debconf16.debconf.org/talks/94/&quot;&gt;the talk
4266 recording illuminating&lt;/a&gt;. It explains exactly what the source of
4267 randomness is, if you are unable to spot it from the schema drawing
4268 available from the ChaosKey web site linked at the start of this blog
4269 post.&lt;/p&gt;
4270 </description>
4271 </item>
4272
4273 <item>
4274 <title>Where did that package go? &amp;mdash; geolocated IP traceroute</title>
4275 <link>http://www.hungry.com/~pere/blog/Where_did_that_package_go___mdash__geolocated_IP_traceroute.html</link>
4276 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Where_did_that_package_go___mdash__geolocated_IP_traceroute.html</guid>
4277 <pubDate>Mon, 9 Jan 2017 12:20:00 +0100</pubDate>
4278 <description>&lt;p&gt;Did you ever wonder where the web trafic really flow to reach the
4279 web servers, and who own the network equipment it is flowing through?
4280 It is possible to get a glimpse of this from using traceroute, but it
4281 is hard to find all the details. Many years ago, I wrote a system to
4282 map the Norwegian Internet (trying to figure out if our plans for a
4283 network game service would get low enough latency, and who we needed
4284 to talk to about setting up game servers close to the users. Back
4285 then I used traceroute output from many locations (I asked my friends
4286 to run a script and send me their traceroute output) to create the
4287 graph and the map. The output from traceroute typically look like
4288 this:
4289
4290 &lt;p&gt;&lt;pre&gt;
4291 traceroute to www.stortinget.no (85.88.67.10), 30 hops max, 60 byte packets
4292 1 uio-gw10.uio.no (129.240.202.1) 0.447 ms 0.486 ms 0.621 ms
4293 2 uio-gw8.uio.no (129.240.24.229) 0.467 ms 0.578 ms 0.675 ms
4294 3 oslo-gw1.uninett.no (128.39.65.17) 0.385 ms 0.373 ms 0.358 ms
4295 4 te3-1-2.br1.fn3.as2116.net (193.156.90.3) 1.174 ms 1.172 ms 1.153 ms
4296 5 he16-1-1.cr1.san110.as2116.net (195.0.244.234) 2.627 ms he16-1-1.cr2.oslosda310.as2116.net (195.0.244.48) 3.172 ms he16-1-1.cr1.san110.as2116.net (195.0.244.234) 2.857 ms
4297 6 ae1.ar8.oslosda310.as2116.net (195.0.242.39) 0.662 ms 0.637 ms ae0.ar8.oslosda310.as2116.net (195.0.242.23) 0.622 ms
4298 7 89.191.10.146 (89.191.10.146) 0.931 ms 0.917 ms 0.955 ms
4299 8 * * *
4300 9 * * *
4301 [...]
4302 &lt;/pre&gt;&lt;/p&gt;
4303
4304 &lt;p&gt;This show the DNS names and IP addresses of (at least some of the)
4305 network equipment involved in getting the data traffic from me to the
4306 www.stortinget.no server, and how long it took in milliseconds for a
4307 package to reach the equipment and return to me. Three packages are
4308 sent, and some times the packages do not follow the same path. This
4309 is shown for hop 5, where three different IP addresses replied to the
4310 traceroute request.&lt;/p&gt;
4311
4312 &lt;p&gt;There are many ways to measure trace routes. Other good traceroute
4313 implementations I use are traceroute (using ICMP packages) mtr (can do
4314 both ICMP, UDP and TCP) and scapy (python library with ICMP, UDP, TCP
4315 traceroute and a lot of other capabilities). All of them are easily
4316 available in &lt;a href=&quot;https://www.debian.org/&quot;&gt;Debian&lt;/a&gt;.&lt;/p&gt;
4317
4318 &lt;p&gt;This time around, I wanted to know the geographic location of
4319 different route points, to visualize how visiting a web page spread
4320 information about the visit to a lot of servers around the globe. The
4321 background is that a web site today often will ask the browser to get
4322 from many servers the parts (for example HTML, JSON, fonts,
4323 JavaScript, CSS, video) required to display the content. This will
4324 leak information about the visit to those controlling these servers
4325 and anyone able to peek at the data traffic passing by (like your ISP,
4326 the ISPs backbone provider, FRA, GCHQ, NSA and others).&lt;/p&gt;
4327
4328 &lt;p&gt;Lets pick an example, the Norwegian parliament web site
4329 www.stortinget.no. It is read daily by all members of parliament and
4330 their staff, as well as political journalists, activits and many other
4331 citizens of Norway. A visit to the www.stortinget.no web site will
4332 ask your browser to contact 8 other servers: ajax.googleapis.com,
4333 insights.hotjar.com, script.hotjar.com, static.hotjar.com,
4334 stats.g.doubleclick.net, www.google-analytics.com,
4335 www.googletagmanager.com and www.netigate.se. I extracted this by
4336 asking &lt;a href=&quot;http://phantomjs.org/&quot;&gt;PhantomJS&lt;/a&gt; to visit the
4337 Stortinget web page and tell me all the URLs PhantomJS downloaded to
4338 render the page (in HAR format using
4339 &lt;a href=&quot;https://github.com/ariya/phantomjs/blob/master/examples/netsniff.js&quot;&gt;their
4340 netsniff example&lt;/a&gt;. I am very grateful to Gorm for showing me how
4341 to do this). My goal is to visualize network traces to all IP
4342 addresses behind these DNS names, do show where visitors personal
4343 information is spread when visiting the page.&lt;/p&gt;
4344
4345 &lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;www.stortinget.no-geoip.kml&quot;&gt;&lt;img
4346 src=&quot;http://www.hungry.com/~pere/blog/images/2017-01-09-www.stortinget.no-geoip-small.png&quot; alt=&quot;map of combined traces for URLs used by www.stortinget.no using GeoIP&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
4347
4348 &lt;p&gt;When I had a look around for options, I could not find any good
4349 free software tools to do this, and decided I needed my own traceroute
4350 wrapper outputting KML based on locations looked up using GeoIP. KML
4351 is easy to work with and easy to generate, and understood by several
4352 of the GIS tools I have available. I got good help from by NUUG
4353 colleague Anders Einar with this, and the result can be seen in
4354 &lt;a href=&quot;https://github.com/petterreinholdtsen/kmltraceroute&quot;&gt;my
4355 kmltraceroute git repository&lt;/a&gt;. Unfortunately, the quality of the
4356 free GeoIP databases I could find (and the for-pay databases my
4357 friends had access to) is not up to the task. The IP addresses of
4358 central Internet infrastructure would typically be placed near the
4359 controlling companies main office, and not where the router is really
4360 located, as you can see from &lt;a href=&quot;www.stortinget.no-geoip.kml&quot;&gt;the
4361 KML file I created&lt;/a&gt; using the GeoLite City dataset from MaxMind.
4362
4363 &lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;http://www.hungry.com/~pere/blog/images/2017-01-09-www.stortinget.no-scapy.svg&quot;&gt;&lt;img
4364 src=&quot;http://www.hungry.com/~pere/blog/images/2017-01-09-www.stortinget.no-scapy-small.png&quot; alt=&quot;scapy traceroute graph for URLs used by www.stortinget.no&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
4365
4366 &lt;p&gt;I also had a look at the visual traceroute graph created by
4367 &lt;a href=&quot;http://www.secdev.org/projects/scapy/&quot;&gt;the scrapy project&lt;/a&gt;,
4368 showing IP network ownership (aka AS owner) for the IP address in
4369 question.
4370 &lt;a href=&quot;http://www.hungry.com/~pere/blog/images/2017-01-09-www.stortinget.no-scapy.svg&quot;&gt;The
4371 graph display a lot of useful information about the traceroute in SVG
4372 format&lt;/a&gt;, and give a good indication on who control the network
4373 equipment involved, but it do not include geolocation. This graph
4374 make it possible to see the information is made available at least for
4375 UNINETT, Catchcom, Stortinget, Nordunet, Google, Amazon, Telia, Level
4376 3 Communications and NetDNA.&lt;/p&gt;
4377
4378 &lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;https://geotraceroute.com/index.php?node=4&amp;host=www.stortinget.no&quot;&gt;&lt;img
4379 src=&quot;http://www.hungry.com/~pere/blog/images/2017-01-09-www.stortinget.no-geotraceroute-small.png&quot; alt=&quot;example geotraceroute view for www.stortinget.no&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
4380
4381 &lt;p&gt;In the process, I came across the
4382 &lt;a href=&quot;https://geotraceroute.com/&quot;&gt;web service GeoTraceroute&lt;/a&gt; by
4383 Salim Gasmi. Its methology of combining guesses based on DNS names,
4384 various location databases and finally use latecy times to rule out
4385 candidate locations seemed to do a very good job of guessing correct
4386 geolocation. But it could only do one trace at the time, did not have
4387 a sensor in Norway and did not make the geolocations easily available
4388 for postprocessing. So I contacted the developer and asked if he
4389 would be willing to share the code (he refused until he had time to
4390 clean it up), but he was interested in providing the geolocations in a
4391 machine readable format, and willing to set up a sensor in Norway. So
4392 since yesterday, it is possible to run traces from Norway in this
4393 service thanks to a sensor node set up by
4394 &lt;a href=&quot;https://www.nuug.no/&quot;&gt;the NUUG assosiation&lt;/a&gt;, and get the
4395 trace in KML format for further processing.&lt;/p&gt;
4396
4397 &lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;http://www.hungry.com/~pere/blog/images/2017-01-09-www.stortinget.no-geotraceroute-kml-join.kml&quot;&gt;&lt;img
4398 src=&quot;http://www.hungry.com/~pere/blog/images/2017-01-09-www.stortinget.no-geotraceroute-kml-join.png&quot; alt=&quot;map of combined traces for URLs used by www.stortinget.no using geotraceroute&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
4399
4400 &lt;p&gt;Here we can see a lot of trafic passes Sweden on its way to
4401 Denmark, Germany, Holland and Ireland. Plenty of places where the
4402 Snowden confirmations verified the traffic is read by various actors
4403 without your best interest as their top priority.&lt;/p&gt;
4404
4405 &lt;p&gt;Combining KML files is trivial using a text editor, so I could loop
4406 over all the hosts behind the urls imported by www.stortinget.no and
4407 ask for the KML file from GeoTraceroute, and create a combined KML
4408 file with all the traces (unfortunately only one of the IP addresses
4409 behind the DNS name is traced this time. To get them all, one would
4410 have to request traces using IP number instead of DNS names from
4411 GeoTraceroute). That might be the next step in this project.&lt;/p&gt;
4412
4413 &lt;p&gt;Armed with these tools, I find it a lot easier to figure out where
4414 the IP traffic moves and who control the boxes involved in moving it.
4415 And every time the link crosses for example the Swedish border, we can
4416 be sure Swedish Signal Intelligence (FRA) is listening, as GCHQ do in
4417 Britain and NSA in USA and cables around the globe. (Hm, what should
4418 we tell them? :) Keep that in mind if you ever send anything
4419 unencrypted over the Internet.&lt;/p&gt;
4420
4421 &lt;p&gt;PS: KML files are drawn using
4422 &lt;a href=&quot;http://ivanrublev.me/kml/&quot;&gt;the KML viewer from Ivan
4423 Rublev&lt;a/&gt;, as it was less cluttered than the local Linux application
4424 Marble. There are heaps of other options too.&lt;/p&gt;
4425
4426 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
4427 activities, please send Bitcoin donations to my address
4428 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
4429 </description>
4430 </item>
4431
4432 <item>
4433 <title>Appstream just learned how to map hardware to packages too!</title>
4434 <link>http://www.hungry.com/~pere/blog/Appstream_just_learned_how_to_map_hardware_to_packages_too_.html</link>
4435 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Appstream_just_learned_how_to_map_hardware_to_packages_too_.html</guid>
4436 <pubDate>Fri, 23 Dec 2016 10:30:00 +0100</pubDate>
4437 <description>&lt;p&gt;I received a very nice Christmas present today. As my regular
4438 readers probably know, I have been working on the
4439 &lt;a href=&quot;http://packages.qa.debian.org/isenkram&quot;&gt;the Isenkram
4440 system&lt;/a&gt; for many years. The goal of the Isenkram system is to make
4441 it easier for users to figure out what to install to get a given piece
4442 of hardware to work in Debian, and a key part of this system is a way
4443 to map hardware to packages. Isenkram have its own mapping database,
4444 and also uses data provided by each package using the AppStream
4445 metadata format. And today,
4446 &lt;a href=&quot;https://tracker.debian.org/pkg/appstream&quot;&gt;AppStream&lt;/a&gt; in
4447 Debian learned to look up hardware the same way Isenkram is doing it,
4448 ie using fnmatch():&lt;/p&gt;
4449
4450 &lt;p&gt;&lt;pre&gt;
4451 % appstreamcli what-provides modalias \
4452 usb:v1130p0202d0100dc00dsc00dp00ic03isc00ip00in00
4453 Identifier: pymissile [generic]
4454 Name: pymissile
4455 Summary: Control original Striker USB Missile Launcher
4456 Package: pymissile
4457 % appstreamcli what-provides modalias usb:v0694p0002d0000
4458 Identifier: libnxt [generic]
4459 Name: libnxt
4460 Summary: utility library for talking to the LEGO Mindstorms NXT brick
4461 Package: libnxt
4462 ---
4463 Identifier: t2n [generic]
4464 Name: t2n
4465 Summary: Simple command-line tool for Lego NXT
4466 Package: t2n
4467 ---
4468 Identifier: python-nxt [generic]
4469 Name: python-nxt
4470 Summary: Python driver/interface/wrapper for the Lego Mindstorms NXT robot
4471 Package: python-nxt
4472 ---
4473 Identifier: nbc [generic]
4474 Name: nbc
4475 Summary: C compiler for LEGO Mindstorms NXT bricks
4476 Package: nbc
4477 %
4478 &lt;/pre&gt;&lt;/p&gt;
4479
4480 &lt;p&gt;A similar query can be done using the combined AppStream and
4481 Isenkram databases using the isenkram-lookup tool:&lt;/p&gt;
4482
4483 &lt;p&gt;&lt;pre&gt;
4484 % isenkram-lookup usb:v1130p0202d0100dc00dsc00dp00ic03isc00ip00in00
4485 pymissile
4486 % isenkram-lookup usb:v0694p0002d0000
4487 libnxt
4488 nbc
4489 python-nxt
4490 t2n
4491 %
4492 &lt;/pre&gt;&lt;/p&gt;
4493
4494 &lt;p&gt;You can find modalias values relevant for your machine using
4495 &lt;tt&gt;cat $(find /sys/devices/ -name modalias)&lt;/tt&gt;.
4496
4497 &lt;p&gt;If you want to make this system a success and help Debian users
4498 make the most of the hardware they have, please help
4499 &lt;a href=&quot;https://wiki.debian.org/AppStream/Guidelines&quot;&gt;add AppStream
4500 metadata for your package following the guidelines&lt;/a&gt; documented in
4501 the wiki. So far only 11 packages provide such information, among the
4502 several hundred hardware specific packages in Debian. The Isenkram
4503 database on the other hand contain 101 packages, mostly related to USB
4504 dongles. Most of the packages with hardware mapping in AppStream are
4505 LEGO Mindstorms related, because I have, as part of my involvement in
4506 &lt;a href=&quot;https://wiki.debian.org/LegoDesigners&quot;&gt;the Debian LEGO
4507 team&lt;/a&gt; given priority to making sure LEGO users get proposed the
4508 complete set of packages in Debian for that particular hardware. The
4509 team also got a nice Christmas present today. The
4510 &lt;a href=&quot;https://tracker.debian.org/pkg/nxt-firmware&quot;&gt;nxt-firmware
4511 package&lt;/a&gt; made it into Debian. With this package in place, it is
4512 now possible to use the LEGO Mindstorms NXT unit with only free
4513 software, as the nxt-firmware package contain the source and firmware
4514 binaries for the NXT brick.&lt;/p&gt;
4515
4516 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
4517 activities, please send Bitcoin donations to my address
4518 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
4519 </description>
4520 </item>
4521
4522 <item>
4523 <title>Isenkram updated with a lot more hardware-package mappings</title>
4524 <link>http://www.hungry.com/~pere/blog/Isenkram_updated_with_a_lot_more_hardware_package_mappings.html</link>
4525 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Isenkram_updated_with_a_lot_more_hardware_package_mappings.html</guid>
4526 <pubDate>Tue, 20 Dec 2016 11:55:00 +0100</pubDate>
4527 <description>&lt;p&gt;&lt;a href=&quot;http://packages.qa.debian.org/isenkram&quot;&gt;The Isenkram
4528 system&lt;/a&gt; I wrote two years ago to make it easier in Debian to find
4529 and install packages to get your hardware dongles to work, is still
4530 going strong. It is a system to look up the hardware present on or
4531 connected to the current system, and map the hardware to Debian
4532 packages. It can either be done using the tools in isenkram-cli or
4533 using the user space daemon in the isenkram package. The latter will
4534 notify you, when inserting new hardware, about what packages to
4535 install to get the dongle working. It will even provide a button to
4536 click on to ask packagekit to install the packages.&lt;/p&gt;
4537
4538 &lt;p&gt;Here is an command line example from my Thinkpad laptop:&lt;/p&gt;
4539
4540 &lt;p&gt;&lt;pre&gt;
4541 % isenkram-lookup
4542 bluez
4543 cheese
4544 ethtool
4545 fprintd
4546 fprintd-demo
4547 gkrellm-thinkbat
4548 hdapsd
4549 libpam-fprintd
4550 pidgin-blinklight
4551 thinkfan
4552 tlp
4553 tp-smapi-dkms
4554 tp-smapi-source
4555 tpb
4556 %
4557 &lt;/pre&gt;&lt;/p&gt;
4558
4559 &lt;p&gt;It can also list the firware package providing firmware requested
4560 by the load kernel modules, which in my case is an empty list because
4561 I have all the firmware my machine need:
4562
4563 &lt;p&gt;&lt;pre&gt;
4564 % /usr/sbin/isenkram-autoinstall-firmware -l
4565 info: did not find any firmware files requested by loaded kernel modules. exiting
4566 %
4567 &lt;/pre&gt;&lt;/p&gt;
4568
4569 &lt;p&gt;The last few days I had a look at several of the around 250
4570 packages in Debian with udev rules. These seem like good candidates
4571 to install when a given hardware dongle is inserted, and I found
4572 several that should be proposed by isenkram. I have not had time to
4573 check all of them, but am happy to report that now there are 97
4574 packages packages mapped to hardware by Isenkram. 11 of these
4575 packages provide hardware mapping using AppStream, while the rest are
4576 listed in the modaliases file provided in isenkram.&lt;/p&gt;
4577
4578 &lt;p&gt;These are the packages with hardware mappings at the moment. The
4579 &lt;strong&gt;marked packages&lt;/strong&gt; are also announcing their hardware
4580 support using AppStream, for everyone to use:&lt;/p&gt;
4581
4582 &lt;p&gt;air-quality-sensor, alsa-firmware-loaders, argyll,
4583 &lt;strong&gt;array-info&lt;/strong&gt;, avarice, avrdude, b43-fwcutter,
4584 bit-babbler, bluez, bluez-firmware, &lt;strong&gt;brltty&lt;/strong&gt;,
4585 &lt;strong&gt;broadcom-sta-dkms&lt;/strong&gt;, calibre, cgminer, cheese, colord,
4586 &lt;strong&gt;colorhug-client&lt;/strong&gt;, dahdi-firmware-nonfree, dahdi-linux,
4587 dfu-util, dolphin-emu, ekeyd, ethtool, firmware-ipw2x00, fprintd,
4588 fprintd-demo, &lt;strong&gt;galileo&lt;/strong&gt;, gkrellm-thinkbat, gphoto2,
4589 gpsbabel, gpsbabel-gui, gpsman, gpstrans, gqrx-sdr, gr-fcdproplus,
4590 gr-osmosdr, gtkpod, hackrf, hdapsd, hdmi2usb-udev, hpijs-ppds, hplip,
4591 ipw3945-source, ipw3945d, kde-config-tablet, kinect-audio-setup,
4592 &lt;strong&gt;libnxt&lt;/strong&gt;, libpam-fprintd, &lt;strong&gt;lomoco&lt;/strong&gt;,
4593 madwimax, minidisc-utils, mkgmap, msi-keyboard, mtkbabel,
4594 &lt;strong&gt;nbc&lt;/strong&gt;, &lt;strong&gt;nqc&lt;/strong&gt;, nut-hal-drivers, ola,
4595 open-vm-toolbox, open-vm-tools, openambit, pcgminer, pcmciautils,
4596 pcscd, pidgin-blinklight, printer-driver-splix,
4597 &lt;strong&gt;pymissile&lt;/strong&gt;, python-nxt, qlandkartegt,
4598 qlandkartegt-garmin, rosegarden, rt2x00-source, sispmctl,
4599 soapysdr-module-hackrf, solaar, squeak-plugins-scratch, sunxi-tools,
4600 &lt;strong&gt;t2n&lt;/strong&gt;, thinkfan, thinkfinger-tools, tlp, tp-smapi-dkms,
4601 tp-smapi-source, tpb, tucnak, uhd-host, usbmuxd, viking,
4602 virtualbox-ose-guest-x11, w1retap, xawtv, xserver-xorg-input-vmmouse,
4603 xserver-xorg-input-wacom, xserver-xorg-video-qxl,
4604 xserver-xorg-video-vmware, yubikey-personalization and
4605 zd1211-firmware&lt;/p&gt;
4606
4607 &lt;p&gt;If you know of other packages, please let me know with a wishlist
4608 bug report against the isenkram-cli package, and ask the package
4609 maintainer to
4610 &lt;a href=&quot;https://wiki.debian.org/AppStream/Guidelines&quot;&gt;add AppStream
4611 metadata according to the guidelines&lt;/a&gt; to provide the information
4612 for everyone. In time, I hope to get rid of the isenkram specific
4613 hardware mapping and depend exclusively on AppStream.&lt;/p&gt;
4614
4615 &lt;p&gt;Note, the AppStream metadata for broadcom-sta-dkms is matching too
4616 much hardware, and suggest that the package with with any ethernet
4617 card. See &lt;a href=&quot;http://bugs.debian.org/838735&quot;&gt;bug #838735&lt;/a&gt; for
4618 the details. I hope the maintainer find time to address it soon. In
4619 the mean time I provide an override in isenkram.&lt;/p&gt;
4620 </description>
4621 </item>
4622
4623 <item>
4624 <title>Oolite, a life in space as vagabond and mercenary - nice free software</title>
4625 <link>http://www.hungry.com/~pere/blog/Oolite__a_life_in_space_as_vagabond_and_mercenary___nice_free_software.html</link>
4626 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Oolite__a_life_in_space_as_vagabond_and_mercenary___nice_free_software.html</guid>
4627 <pubDate>Sun, 11 Dec 2016 11:40:00 +0100</pubDate>
4628 <description>&lt;p align=&quot;center&quot;&gt;&lt;img width=&quot;70%&quot; src=&quot;http://www.hungry.com/~pere/blog/images/2016-12-11-nice-oolite.png&quot;/&gt;&lt;/p&gt;
4629
4630 &lt;p&gt;In my early years, I played
4631 &lt;a href=&quot;http://wiki.alioth.net/index.php/Classic_Elite&quot;&gt;the epic game
4632 Elite&lt;/a&gt; on my PC. I spent many months trading and fighting in
4633 space, and reached the &#39;elite&#39; fighting status before I moved on. The
4634 original Elite game was available on Commodore 64 and the IBM PC
4635 edition I played had a 64 KB executable. I am still impressed today
4636 that the authors managed to squeeze both a 3D engine and details about
4637 more than 2000 planet systems across 7 galaxies into a binary so
4638 small.&lt;/p&gt;
4639
4640 &lt;p&gt;I have known about &lt;a href=&quot;http://www.oolite.org/&quot;&gt;the free
4641 software game Oolite inspired by Elite&lt;/a&gt; for a while, but did not
4642 really have time to test it properly until a few days ago. It was
4643 great to discover that my old knowledge about trading routes were
4644 still valid. But my fighting and flying abilities were gone, so I had
4645 to retrain to be able to dock on a space station. And I am still not
4646 able to make much resistance when I am attacked by pirates, so I
4647 bougth and mounted the most powerful laser in the rear to be able to
4648 put up at least some resistance while fleeing for my life. :)&lt;/p&gt;
4649
4650 &lt;p&gt;When playing Elite in the late eighties, I had to discover
4651 everything on my own, and I had long lists of prices seen on different
4652 planets to be able to decide where to trade what. This time I had the
4653 advantages of the
4654 &lt;a href=&quot;http://wiki.alioth.net/index.php/Main_Page&quot;&gt;Elite wiki&lt;/a&gt;,
4655 where information about each planet is easily available with common
4656 price ranges and suggested trading routes. This improved my ability
4657 to earn money and I have been able to earn enough to buy a lot of
4658 useful equipent in a few days. I believe I originally played for
4659 months before I could get a docking computer, while now I could get it
4660 after less then a week.&lt;/p&gt;
4661
4662 &lt;p&gt;If you like science fiction and dreamed of a life as a vagabond in
4663 space, you should try out Oolite. It is available for Linux, MacOSX
4664 and Windows, and is included in Debian and derivatives since 2011.&lt;/p&gt;
4665
4666 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
4667 activities, please send Bitcoin donations to my address
4668 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
4669 </description>
4670 </item>
4671
4672 <item>
4673 <title>Quicker Debian installations using eatmydata</title>
4674 <link>http://www.hungry.com/~pere/blog/Quicker_Debian_installations_using_eatmydata.html</link>
4675 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Quicker_Debian_installations_using_eatmydata.html</guid>
4676 <pubDate>Fri, 25 Nov 2016 14:50:00 +0100</pubDate>
4677 <description>&lt;p&gt;Two years ago, I did some experiments with eatmydata and the Debian
4678 installation system, observing how using
4679 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Speeding_up_the_Debian_installer_using_eatmydata_and_dpkg_divert.html&quot;&gt;eatmydata
4680 could speed up the installation&lt;/a&gt; quite a bit. My testing measured
4681 speedup around 20-40 percent for Debian Edu, where we install around
4682 1000 packages from within the installer. The eatmydata package
4683 provide a way to disable/delay file system flushing. This is a bit
4684 risky in the general case, as files that should be stored on disk will
4685 stay only in memory a bit longer than expected, causing problems if a
4686 machine crashes at an inconvenient time. But for an installation, if
4687 the machine crashes during installation the process is normally
4688 restarted, and avoiding disk operations as much as possible to speed
4689 up the process make perfect sense.
4690
4691 &lt;p&gt;I added code in the Debian Edu specific installation code to enable
4692 &lt;a href=&quot;https://tracker.debian.org/pkg/libeatmydata&quot;&gt;eatmydata&lt;/a&gt;,
4693 but did not have time to push it any further. But a few months ago I
4694 picked it up again and worked with the libeatmydata package maintainer
4695 Mattia Rizzolo to make it easier for everyone to get this installation
4696 speedup in Debian. Thanks to our cooperation There is now an
4697 eatmydata-udeb package in Debian testing and unstable, and simply
4698 enabling/installing it in debian-installer (d-i) is enough to get the
4699 quicker installations. It can be enabled using preseeding. The
4700 following untested kernel argument should do the trick:&lt;/p&gt;
4701
4702 &lt;blockquote&gt;&lt;pre&gt;
4703 preseed/early_command=&quot;anna-install eatmydata-udeb&quot;
4704 &lt;/pre&gt;&lt;/blockquote&gt;
4705
4706 &lt;p&gt;This should ask d-i to install the package inside the d-i
4707 environment early in the installation sequence. Having it installed
4708 in d-i in turn will make sure the relevant scripts are called just
4709 after debootstrap filled /target/ with the freshly installed Debian
4710 system to configure apt to run dpkg with eatmydata. This is enough to
4711 speed up the installation process. There is a proposal to
4712 &lt;a href=&quot;https://bugs.debian.org/841153&quot;&gt;extend the idea a bit further
4713 by using /etc/ld.so.preload instead of apt.conf&lt;/a&gt;, but I have not
4714 tested its impact.&lt;/p&gt;
4715
4716 </description>
4717 </item>
4718
4719 <item>
4720 <title>Oversette bokmål til nynorsk, enklere enn du tror takket være Apertium</title>
4721 <link>http://www.hungry.com/~pere/blog/Oversette_bokm_l_til_nynorsk__enklere_enn_du_tror_takket_v_re_Apertium.html</link>
4722 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Oversette_bokm_l_til_nynorsk__enklere_enn_du_tror_takket_v_re_Apertium.html</guid>
4723 <pubDate>Thu, 24 Nov 2016 10:50:00 +0100</pubDate>
4724 <description>&lt;p&gt;I Norge er det mange som trenger å skrive både bokmål og nynorsk.
4725 Eksamensoppgaver, offentlige brev og nyheter er eksempler på tekster
4726 der det er krav om skriftspråk. I tillegg til alle skoleoppgavene som
4727 elever over det ganske land skal levere inn hvert år. Det mange ikke
4728 vet er at selv om de kommersielle alternativene
4729 &lt;a href=&quot;https://translate.google.com/&quot;&gt;Google Translate&lt;/a&gt; og
4730 &lt;a href=&quot;https://www.bing.com/translator/&quot;&gt;Bing Translator&lt;/a&gt; ikke kan
4731 bidra med å oversette mellom bokmål og nynorsk, så finnes det et
4732 utmerket fri programvarealternativ som kan. Oversetterverktøyet
4733 Apertium har støtte for en rekke språkkombinasjoner, og takket være
4734 den utrettelige innsatsen til blant annet Kevin Brubeck Unhammer, kan
4735 en bruke webtjenesten til å fylle inn en tekst på bokmål eller
4736 nynorsk, og få den automatoversatt til det andre skriftspråket.
4737 Resultatet er ikke perfekt, men et svært godt utgangspunkt. Av og til
4738 er resultatet så bra at det kan benyttes uten endringer. Jeg vet
4739 f.eks. at store deler av Joomla ble oversatt til nynorsk ved hjelp
4740 Apertium. Høres det ut som noe du kan ha bruk for? Besøk i så fall
4741 &lt;a href=&quot;https://www.apertium.org/&quot;&gt;Apertium.org&lt;/a&gt; og fyll inn
4742 teksten din i webskjemaet der.
4743
4744 &lt;p&gt;Hvis du trenger maskinell tilgang til den bakenforliggende
4745 teknologien kan du enten installere pakken
4746 &lt;a href=&quot;https://tracker.debian.org/apertium-nno-nob&quot;&gt;apertium-nno-nob&lt;/a&gt;
4747 på en Debian-maskin eller bruke web-API-et tilgjengelig fra
4748 api.apertium.org. Se
4749 &lt;a href=&quot;http://wiki.apertium.org/wiki/Apertium-apy&quot;&gt;API-dokumentasjonen&lt;/a&gt;
4750 for detaljer om web-API-et. Her kan du se hvordan resultatet blir for
4751 denne teksten som ble skrevet på bokmål over maskinoversatt til
4752 nynorsk.&lt;/p&gt;
4753
4754 &lt;hr/&gt;
4755
4756 &lt;p&gt;I Noreg er det mange som treng å skriva både bokmål og nynorsk.
4757 Eksamensoppgåver, offentlege brev og nyhende er døme på tekster der
4758 det er krav om skriftspråk. I tillegg til alle skuleoppgåvene som
4759 elevar over det ganske land skal levera inn kvart år. Det mange ikkje
4760 veit er at sjølv om dei kommersielle alternativa
4761 &lt;a href=&quot;https://translate.google.com/&quot;&gt;Google *Translate&lt;/a&gt; og
4762 &lt;a href=&quot;https://www.bing.com/translator/&quot;&gt;Bing *Translator&lt;/a&gt; ikkje
4763 kan bidra med å omsetja mellom bokmål og nynorsk, så finst det eit
4764 utmerka fri programvarealternativ som kan. Omsetjarverktøyet
4765 *Apertium har støtte for ei rekkje språkkombinasjonar, og takka vera
4766 den utrøyttelege innsatsen til blant anna Kevin Brubeck Unhammer, kan
4767 ein bruka *webtjenesten til å fylla inn ei tekst på bokmål eller
4768 nynorsk, og få den *automatoversatt til det andre skriftspråket.
4769 Resultatet er ikkje perfekt, men eit svært godt utgangspunkt. Av og
4770 til er resultatet så bra at det kan nyttast utan endringar. Eg veit
4771 t.d. at store delar av *Joomla vart omsett til nynorsk ved hjelp
4772 *Apertium. Høyrast det ut som noko du kan ha bruk for? Besøk i så
4773 fall &lt;a href=&quot;https://www.apertium.org/&quot;&gt;*Apertium.org&lt;/a&gt; og fyll inn
4774 teksta di i *webskjemaet der.
4775
4776 &lt;p&gt;Viss du treng *maskinell tilgjenge til den *bakenforliggende
4777 teknologien kan du anten installera pakken
4778 &lt;a href=&quot;https://tracker.debian.org/apertium-nno-nob&quot;&gt;*apertium-*nno-*nob&lt;/a&gt;
4779 på ein *Debian-maskin eller bruka *web-*API-eit tilgjengeleg frå
4780 *api.*apertium.org. Sjå
4781 &lt;a href=&quot;http://wiki.apertium.org/wiki/Apertium-apy&quot;&gt;*API-dokumentasjonen&lt;/a&gt;
4782 for detaljar om *web-*API-eit. Her kan du sjå korleis resultatet vert
4783 for denne teksta som vart skreva på bokmål over *maskinoversatt til
4784 nynorsk.&lt;/p&gt;
4785 </description>
4786 </item>
4787
4788 <item>
4789 <title>Coz profiler for multi-threaded software is now in Debian</title>
4790 <link>http://www.hungry.com/~pere/blog/Coz_profiler_for_multi_threaded_software_is_now_in_Debian.html</link>
4791 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Coz_profiler_for_multi_threaded_software_is_now_in_Debian.html</guid>
4792 <pubDate>Sun, 13 Nov 2016 12:30:00 +0100</pubDate>
4793 <description>&lt;p&gt;&lt;a href=&quot;http://coz-profiler.org/&quot;&gt;The Coz profiler&lt;/a&gt;, a nice
4794 profiler able to run benchmarking experiments on the instrumented
4795 multi-threaded program, finally
4796 &lt;a href=&quot;https://tracker.debian.org/pkg/coz-profiler&quot;&gt;made it into
4797 Debian unstable yesterday&lt;/A&gt;. Lluís Vilanova and I have spent many
4798 months since
4799 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Coz_can_help_you_find_bottlenecks_in_multi_threaded_software___nice_free_software.html&quot;&gt;I
4800 blogged about the coz tool&lt;/a&gt; in August working with upstream to make
4801 it suitable for Debian. There are still issues with clang
4802 compatibility, inline assembly only working x86 and minimized
4803 JavaScript libraries.&lt;/p&gt;
4804
4805 &lt;p&gt;To test it, install &#39;coz-profiler&#39; using apt and run it like this:&lt;/p&gt;
4806
4807 &lt;p&gt;&lt;blockquote&gt;
4808 &lt;tt&gt;coz run --- /path/to/binary-with-debug-info&lt;/tt&gt;
4809 &lt;/blockquote&gt;&lt;/p&gt;
4810
4811 &lt;p&gt;This will produce a profile.coz file in the current working
4812 directory with the profiling information. This is then given to a
4813 JavaScript application provided in the package and available from
4814 &lt;a href=&quot;http://plasma-umass.github.io/coz/&quot;&gt;a project web page&lt;/a&gt;.
4815 To start the local copy, invoke it in a browser like this:&lt;/p&gt;
4816
4817 &lt;p&gt;&lt;blockquote&gt;
4818 &lt;tt&gt;sensible-browser /usr/share/coz-profiler/viewer/index.htm&lt;/tt&gt;
4819 &lt;/blockquote&gt;&lt;/p&gt;
4820
4821 &lt;p&gt;See the project home page and the
4822 &lt;a href=&quot;https://www.usenix.org/publications/login/summer2016/curtsinger&quot;&gt;USENIX
4823 ;login: article on Coz&lt;/a&gt; for more information on how it is
4824 working.&lt;/p&gt;
4825 </description>
4826 </item>
4827
4828 <item>
4829 <title>My own self balancing Lego Segway</title>
4830 <link>http://www.hungry.com/~pere/blog/My_own_self_balancing_Lego_Segway.html</link>
4831 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/My_own_self_balancing_Lego_Segway.html</guid>
4832 <pubDate>Fri, 4 Nov 2016 10:15:00 +0100</pubDate>
4833 <description>&lt;p&gt;A while back I received a Gyro sensor for the NXT
4834 &lt;a href=&quot;mindstorms.lego.com&quot;&gt;Mindstorms&lt;/a&gt; controller as a birthday
4835 present. It had been on my wishlist for a while, because I wanted to
4836 build a Segway like balancing lego robot. I had already built
4837 &lt;a href=&quot;http://www.nxtprograms.com/NXT2/segway/&quot;&gt;a simple balancing
4838 robot&lt;/a&gt; with the kids, using the light/color sensor included in the
4839 NXT kit as the balance sensor, but it was not working very well. It
4840 could balance for a while, but was very sensitive to the light
4841 condition in the room and the reflective properties of the surface and
4842 would fall over after a short while. I wanted something more robust,
4843 and had
4844 &lt;a href=&quot;https://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&amp;key=NGY1044&quot;&gt;the
4845 gyro sensor from HiTechnic&lt;/a&gt; I believed would solve it on my
4846 wishlist for some years before it suddenly showed up as a gift from my
4847 loved ones. :)&lt;/p&gt;
4848
4849 &lt;p&gt;Unfortunately I have not had time to sit down and play with it
4850 since then. But that changed some days ago, when I was searching for
4851 lego segway information and came across a recipe from HiTechnic for
4852 building
4853 &lt;a href=&quot;http://www.hitechnic.com/blog/gyro-sensor/htway/&quot;&gt;the
4854 HTWay&lt;/a&gt;, a segway like balancing robot. Build instructions and
4855 &lt;a href=&quot;https://www.hitechnic.com/upload/786-HTWayC.nxc&quot;&gt;source
4856 code&lt;/a&gt; was included, so it was just a question of putting it all
4857 together. And thanks to the great work of many Debian developers, the
4858 compiler needed to build the source for the NXT is already included in
4859 Debian, so I was read to go in less than an hour. The resulting robot
4860 do not look very impressive in its simplicity:&lt;/p&gt;
4861
4862 &lt;p align=&quot;center&quot;&gt;&lt;img width=&quot;70%&quot; src=&quot;http://www.hungry.com/~pere/blog/images/2016-11-04-lego-htway-robot.jpeg&quot;&gt;&lt;/p&gt;
4863
4864 &lt;p&gt;Because I lack the infrared sensor used to control the robot in the
4865 design from HiTechnic, I had to comment out the last task
4866 (taskControl). I simply placed /* and */ around it get the program
4867 working without that sensor present. Now it balances just fine until
4868 the battery status run low:&lt;/p&gt;
4869
4870 &lt;p align=&quot;center&quot;&gt;&lt;video width=&quot;70%&quot; controls=&quot;true&quot;&gt;
4871 &lt;source src=&quot;http://www.hungry.com/~pere/blog/images/2016-11-04-lego-htway-balancing.ogv&quot; type=&quot;video/ogg&quot;&gt;
4872 &lt;/video&gt;&lt;/p&gt;
4873
4874 &lt;p&gt;Now we would like to teach it how to follow a line and take remote
4875 control instructions using the included Bluetooth receiver in the NXT.&lt;/p&gt;
4876
4877 &lt;p&gt;If you, like me, love LEGO and want to make sure we find the tools
4878 they need to work with LEGO in Debian and all our derivative
4879 distributions like Ubuntu, check out
4880 &lt;a href=&quot;http://wiki.debian.org/LegoDesigners&quot;&gt;the LEGO designers
4881 project page&lt;/a&gt; and join the Debian LEGO team. Personally I own a
4882 RCX and NXT controller (no EV3), and would like to make sure the
4883 Debian tools needed to program the systems I own work as they
4884 should.&lt;/p&gt;
4885 </description>
4886 </item>
4887
4888 <item>
4889 <title>Experience and updated recipe for using the Signal app without a mobile phone</title>
4890 <link>http://www.hungry.com/~pere/blog/Experience_and_updated_recipe_for_using_the_Signal_app_without_a_mobile_phone.html</link>
4891 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Experience_and_updated_recipe_for_using_the_Signal_app_without_a_mobile_phone.html</guid>
4892 <pubDate>Mon, 10 Oct 2016 11:30:00 +0200</pubDate>
4893 <description>&lt;p&gt;In July
4894 &lt;a href=&quot;http://www.hungry.com/~pere/blog/How_to_use_the_Signal_app_if_you_only_have_a_land_line__ie_no_mobile_phone_.html&quot;&gt;I
4895 wrote how to get the Signal Chrome/Chromium app working&lt;/a&gt; without
4896 the ability to receive SMS messages (aka without a cell phone). It is
4897 time to share some experiences and provide an updated setup.&lt;/p&gt;
4898
4899 &lt;p&gt;The Signal app have worked fine for several months now, and I use
4900 it regularly to chat with my loved ones. I had a major snag at the
4901 end of my summer vacation, when the the app completely forgot my
4902 setup, identity and keys. The reason behind this major mess was
4903 running out of disk space. To avoid that ever happening again I have
4904 started storing everything in &lt;tt&gt;userdata/&lt;/tt&gt; in git, to be able to
4905 roll back to an earlier version if the files are wiped by mistake. I
4906 had to use it once after introducing the git backup. When rolling
4907 back to an earlier version, one need to use the &#39;reset session&#39; option
4908 in Signal to get going, and notify the people you talk with about the
4909 problem. I assume there is some sequence number tracking in the
4910 protocol to detect rollback attacks. The git repository is rather big
4911 (674 MiB so far), but I have not tried to figure out if some of the
4912 content can be added to a .gitignore file due to lack of spare
4913 time.&lt;/p&gt;
4914
4915 &lt;p&gt;I&#39;ve also hit the 90 days timeout blocking, and noticed that this
4916 make it impossible to send messages using Signal. I could still
4917 receive them, but had to patch the code with a new timestamp to send.
4918 I believe the timeout is added by the developers to force people to
4919 upgrade to the latest version of the app, even when there is no
4920 protocol changes, to reduce the version skew among the user base and
4921 thus try to keep the number of support requests down.&lt;/p&gt;
4922
4923 &lt;p&gt;Since my original recipe, the Signal source code changed slightly,
4924 making the old patch fail to apply cleanly. Below is an updated
4925 patch, including the shell wrapper I use to start Signal. The
4926 original version required a new user to locate the JavaScript console
4927 and call a function from there. I got help from a friend with more
4928 JavaScript knowledge than me to modify the code to provide a GUI
4929 button instead. This mean that to get started you just need to run
4930 the wrapper and click the &#39;Register without mobile phone&#39; to get going
4931 now. I&#39;ve also modified the timeout code to always set it to 90 days
4932 in the future, to avoid having to patch the code regularly.&lt;/p&gt;
4933
4934 &lt;p&gt;So, the updated recipe for Debian Jessie:&lt;/p&gt;
4935
4936 &lt;ol&gt;
4937
4938 &lt;li&gt;First, install required packages to get the source code and the
4939 browser you need. Signal only work with Chrome/Chromium, as far as I
4940 know, so you need to install it.
4941
4942 &lt;pre&gt;
4943 apt install git tor chromium
4944 git clone https://github.com/WhisperSystems/Signal-Desktop.git
4945 &lt;/pre&gt;&lt;/li&gt;
4946
4947 &lt;li&gt;Modify the source code using command listed in the the patch
4948 block below.&lt;/li&gt;
4949
4950 &lt;li&gt;Start Signal using the run-signal-app wrapper (for example using
4951 &lt;tt&gt;`pwd`/run-signal-app&lt;/tt&gt;).
4952
4953 &lt;li&gt;Click on the &#39;Register without mobile phone&#39;, will in a phone
4954 number you can receive calls to the next minute, receive the
4955 verification code and enter it into the form field and press
4956 &#39;Register&#39;. Note, the phone number you use will be user Signal
4957 username, ie the way others can find you on Signal.&lt;/li&gt;
4958
4959 &lt;li&gt;You can now use Signal to contact others. Note, new contacts do
4960 not show up in the contact list until you restart Signal, and there is
4961 no way to assign names to Contacts. There is also no way to create or
4962 update chat groups. I suspect this is because the web app do not have
4963 a associated contact database.&lt;/li&gt;
4964
4965 &lt;/ol&gt;
4966
4967 &lt;p&gt;I am still a bit uneasy about using Signal, because of the way its
4968 main author moxie0 reject federation and accept dependencies to major
4969 corporations like Google (part of the code is fetched from Google) and
4970 Amazon (the central coordination point is owned by Amazon). See for
4971 example
4972 &lt;a href=&quot;https://github.com/LibreSignal/LibreSignal/issues/37&quot;&gt;the
4973 LibreSignal issue tracker&lt;/a&gt; for a thread documenting the authors
4974 view on these issues. But the network effect is strong in this case,
4975 and several of the people I want to communicate with already use
4976 Signal. Perhaps we can all move to &lt;a href=&quot;https://ring.cx/&quot;&gt;Ring&lt;/a&gt;
4977 once it &lt;a href=&quot;https://bugs.debian.org/830265&quot;&gt;work on my
4978 laptop&lt;/a&gt;? It already work on Windows and Android, and is included
4979 in &lt;a href=&quot;https://tracker.debian.org/pkg/ring&quot;&gt;Debian&lt;/a&gt; and
4980 &lt;a href=&quot;https://launchpad.net/ubuntu/+source/ring&quot;&gt;Ubuntu&lt;/a&gt;, but not
4981 working on Debian Stable.&lt;/p&gt;
4982
4983 &lt;p&gt;Anyway, this is the patch I apply to the Signal code to get it
4984 working. It switch to the production servers, disable to timeout,
4985 make registration easier and add the shell wrapper:&lt;/p&gt;
4986
4987 &lt;pre&gt;
4988 cd Signal-Desktop; cat &amp;lt;&amp;lt;EOF | patch -p1
4989 diff --git a/js/background.js b/js/background.js
4990 index 24b4c1d..579345f 100644
4991 --- a/js/background.js
4992 +++ b/js/background.js
4993 @@ -33,9 +33,9 @@
4994 });
4995 });
4996
4997 - var SERVER_URL = &#39;https://textsecure-service-staging.whispersystems.org&#39;;
4998 + var SERVER_URL = &#39;https://textsecure-service-ca.whispersystems.org&#39;;
4999 var SERVER_PORTS = [80, 4433, 8443];
5000 - var ATTACHMENT_SERVER_URL = &#39;https://whispersystems-textsecure-attachments-staging.s3.amazonaws.com&#39;;
5001 + var ATTACHMENT_SERVER_URL = &#39;https://whispersystems-textsecure-attachments.s3.amazonaws.com&#39;;
5002 var messageReceiver;
5003 window.getSocketStatus = function() {
5004 if (messageReceiver) {
5005 diff --git a/js/expire.js b/js/expire.js
5006 index 639aeae..beb91c3 100644
5007 --- a/js/expire.js
5008 +++ b/js/expire.js
5009 @@ -1,6 +1,6 @@
5010 ;(function() {
5011 &#39;use strict&#39;;
5012 - var BUILD_EXPIRATION = 0;
5013 + var BUILD_EXPIRATION = Date.now() + (90 * 24 * 60 * 60 * 1000);
5014
5015 window.extension = window.extension || {};
5016
5017 diff --git a/js/views/install_view.js b/js/views/install_view.js
5018 index 7816f4f..1d6233b 100644
5019 --- a/js/views/install_view.js
5020 +++ b/js/views/install_view.js
5021 @@ -38,7 +38,8 @@
5022 return {
5023 &#39;click .step1&#39;: this.selectStep.bind(this, 1),
5024 &#39;click .step2&#39;: this.selectStep.bind(this, 2),
5025 - &#39;click .step3&#39;: this.selectStep.bind(this, 3)
5026 + &#39;click .step3&#39;: this.selectStep.bind(this, 3),
5027 + &#39;click .callreg&#39;: function() { extension.install(&#39;standalone&#39;) },
5028 };
5029 },
5030 clearQR: function() {
5031 diff --git a/options.html b/options.html
5032 index dc0f28e..8d709f6 100644
5033 --- a/options.html
5034 +++ b/options.html
5035 @@ -14,7 +14,10 @@
5036 &amp;lt;div class=&#39;nav&#39;&gt;
5037 &amp;lt;h1&gt;{{ installWelcome }}&amp;lt;/h1&gt;
5038 &amp;lt;p&gt;{{ installTagline }}&amp;lt;/p&gt;
5039 - &amp;lt;div&gt; &amp;lt;a class=&#39;button step2&#39;&gt;{{ installGetStartedButton }}&amp;lt;/a&gt; &amp;lt;/div&gt;
5040 + &amp;lt;div&gt; &amp;lt;a class=&#39;button step2&#39;&gt;{{ installGetStartedButton }}&amp;lt;/a&gt;
5041 + &amp;lt;br&gt; &amp;lt;a class=&quot;button callreg&quot;&gt;Register without mobile phone&amp;lt;/a&gt;
5042 +
5043 + &amp;lt;/div&gt;
5044 &amp;lt;span class=&#39;dot step1 selected&#39;&gt;&amp;lt;/span&gt;
5045 &amp;lt;span class=&#39;dot step2&#39;&gt;&amp;lt;/span&gt;
5046 &amp;lt;span class=&#39;dot step3&#39;&gt;&amp;lt;/span&gt;
5047 --- /dev/null 2016-10-07 09:55:13.730181472 +0200
5048 +++ b/run-signal-app 2016-10-10 08:54:09.434172391 +0200
5049 @@ -0,0 +1,12 @@
5050 +#!/bin/sh
5051 +set -e
5052 +cd $(dirname $0)
5053 +mkdir -p userdata
5054 +userdata=&quot;`pwd`/userdata&quot;
5055 +if [ -d &quot;$userdata&quot; ] &amp;&amp; [ ! -d &quot;$userdata/.git&quot; ] ; then
5056 + (cd $userdata &amp;&amp; git init)
5057 +fi
5058 +(cd $userdata &amp;&amp; git add . &amp;&amp; git commit -m &quot;Current status.&quot; || true)
5059 +exec chromium \
5060 + --proxy-server=&quot;socks://localhost:9050&quot; \
5061 + --user-data-dir=$userdata --load-and-launch-app=`pwd`
5062 EOF
5063 chmod a+rx run-signal-app
5064 &lt;/pre&gt;
5065
5066 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
5067 activities, please send Bitcoin donations to my address
5068 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
5069 </description>
5070 </item>
5071
5072 <item>
5073 <title>Isenkram, Appstream and udev make life as a LEGO builder easier</title>
5074 <link>http://www.hungry.com/~pere/blog/Isenkram__Appstream_and_udev_make_life_as_a_LEGO_builder_easier.html</link>
5075 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Isenkram__Appstream_and_udev_make_life_as_a_LEGO_builder_easier.html</guid>
5076 <pubDate>Fri, 7 Oct 2016 09:50:00 +0200</pubDate>
5077 <description>&lt;p&gt;&lt;a href=&quot;http://packages.qa.debian.org/isenkram&quot;&gt;The Isenkram
5078 system&lt;/a&gt; provide a practical and easy way to figure out which
5079 packages support the hardware in a given machine. The command line
5080 tool &lt;tt&gt;isenkram-lookup&lt;/tt&gt; and the tasksel options provide a
5081 convenient way to list and install packages relevant for the current
5082 hardware during system installation, both user space packages and
5083 firmware packages. The GUI background daemon on the other hand provide
5084 a pop-up proposing to install packages when a new dongle is inserted
5085 while using the computer. For example, if you plug in a smart card
5086 reader, the system will ask if you want to install &lt;tt&gt;pcscd&lt;/tt&gt; if
5087 that package isn&#39;t already installed, and if you plug in a USB video
5088 camera the system will ask if you want to install &lt;tt&gt;cheese&lt;/tt&gt; if
5089 cheese is currently missing. This already work just fine.&lt;/p&gt;
5090
5091 &lt;p&gt;But Isenkram depend on a database mapping from hardware IDs to
5092 package names. When I started no such database existed in Debian, so
5093 I made my own data set and included it with the isenkram package and
5094 made isenkram fetch the latest version of this database from git using
5095 http. This way the isenkram users would get updated package proposals
5096 as soon as I learned more about hardware related packages.&lt;/p&gt;
5097
5098 &lt;p&gt;The hardware is identified using modalias strings. The modalias
5099 design is from the Linux kernel where most hardware descriptors are
5100 made available as a strings that can be matched using filename style
5101 globbing. It handle USB, PCI, DMI and a lot of other hardware related
5102 identifiers.&lt;/p&gt;
5103
5104 &lt;p&gt;The downside to the Isenkram specific database is that there is no
5105 information about relevant distribution / Debian version, making
5106 isenkram propose obsolete packages too. But along came AppStream, a
5107 cross distribution mechanism to store and collect metadata about
5108 software packages. When I heard about the proposal, I contacted the
5109 people involved and suggested to add a hardware matching rule using
5110 modalias strings in the specification, to be able to use AppStream for
5111 mapping hardware to packages. This idea was accepted and AppStream is
5112 now a great way for a package to announce the hardware it support in a
5113 distribution neutral way. I wrote
5114 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Using_appstream_with_isenkram_to_install_hardware_related_packages_in_Debian.html&quot;&gt;a
5115 recipe on how to add such meta-information&lt;/a&gt; in a blog post last
5116 December. If you have a hardware related package in Debian, please
5117 announce the relevant hardware IDs using AppStream.&lt;/p&gt;
5118
5119 &lt;p&gt;In Debian, almost all packages that can talk to a LEGO Mindestorms
5120 RCX or NXT unit, announce this support using AppStream. The effect is
5121 that when you insert such LEGO robot controller into your Debian
5122 machine, Isenkram will propose to install the packages needed to get
5123 it working. The intention is that this should allow the local user to
5124 start programming his robot controller right away without having to
5125 guess what packages to use or which permissions to fix.&lt;/p&gt;
5126
5127 &lt;p&gt;But when I sat down with my son the other day to program our NXT
5128 unit using his Debian Stretch computer, I discovered something
5129 annoying. The local console user (ie my son) did not get access to
5130 the USB device for programming the unit. This used to work, but no
5131 longer in Jessie and Stretch. After some investigation and asking
5132 around on #debian-devel, I discovered that this was because udev had
5133 changed the mechanism used to grant access to local devices. The
5134 ConsoleKit mechanism from &lt;tt&gt;/lib/udev/rules.d/70-udev-acl.rules&lt;/tt&gt;
5135 no longer applied, because LDAP users no longer was added to the
5136 plugdev group during login. Michael Biebl told me that this method
5137 was obsolete and the new method used ACLs instead. This was good
5138 news, as the plugdev mechanism is a mess when using a remote user
5139 directory like LDAP. Using ACLs would make sure a user lost device
5140 access when she logged out, even if the user left behind a background
5141 process which would retain the plugdev membership with the ConsoleKit
5142 setup. Armed with this knowledge I moved on to fix the access problem
5143 for the LEGO Mindstorms related packages.&lt;/p&gt;
5144
5145 &lt;p&gt;The new system uses a udev tag, &#39;uaccess&#39;. It can either be
5146 applied directly for a device, or is applied in
5147 /lib/udev/rules.d/70-uaccess.rules for classes of devices. As the
5148 LEGO Mindstorms udev rules did not have a class, I decided to add the
5149 tag directly in the udev rules files included in the packages. Here
5150 is one example. For the nqc C compiler for the RCX, the
5151 &lt;tt&gt;/lib/udev/rules.d/60-nqc.rules&lt;/tt&gt; file now look like this:
5152
5153 &lt;p&gt;&lt;pre&gt;
5154 SUBSYSTEM==&quot;usb&quot;, ACTION==&quot;add&quot;, ATTR{idVendor}==&quot;0694&quot;, ATTR{idProduct}==&quot;0001&quot;, \
5155 SYMLINK+=&quot;rcx-%k&quot;, TAG+=&quot;uaccess&quot;
5156 &lt;/pre&gt;&lt;/p&gt;
5157
5158 &lt;p&gt;The key part is the &#39;TAG+=&quot;uaccess&quot;&#39; at the end. I suspect all
5159 packages using plugdev in their /lib/udev/rules.d/ files should be
5160 changed to use this tag (either directly or indirectly via
5161 &lt;tt&gt;70-uaccess.rules&lt;/tt&gt;). Perhaps a lintian check should be created
5162 to detect this?&lt;/p&gt;
5163
5164 &lt;p&gt;I&#39;ve been unable to find good documentation on the uaccess feature.
5165 It is unclear to me if the uaccess tag is an internal implementation
5166 detail like the udev-acl tag used by
5167 &lt;tt&gt;/lib/udev/rules.d/70-udev-acl.rules&lt;/tt&gt;. If it is, I guess the
5168 indirect method is the preferred way. Michael
5169 &lt;a href=&quot;https://github.com/systemd/systemd/issues/4288&quot;&gt;asked for more
5170 documentation from the systemd project&lt;/a&gt; and I hope it will make
5171 this clearer. For now I use the generic classes when they exist and
5172 is already handled by &lt;tt&gt;70-uaccess.rules&lt;/tt&gt;, and add the tag
5173 directly if no such class exist.&lt;/p&gt;
5174
5175 &lt;p&gt;To learn more about the isenkram system, please check out
5176 &lt;a href=&quot;http://www.hungry.com/~pere/blog/tags/isenkram/&quot;&gt;my
5177 blog posts tagged isenkram&lt;/a&gt;.&lt;/p&gt;
5178
5179 &lt;p&gt;To help out making life for LEGO constructors in Debian easier,
5180 please join us on our IRC channel
5181 &lt;a href=&quot;irc://irc.debian.org/%23debian-lego&quot;&gt;#debian-lego&lt;/a&gt; and join
5182 the &lt;a href=&quot;https://alioth.debian.org/projects/debian-lego/&quot;&gt;Debian
5183 LEGO team&lt;/a&gt; in the Alioth project we created yesterday. A mailing
5184 list is not yet created, but we are working on it. :)&lt;/p&gt;
5185
5186 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
5187 activities, please send Bitcoin donations to my address
5188 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
5189 </description>
5190 </item>
5191
5192 <item>
5193 <title>First draft Norwegian Bokmål edition of The Debian Administrator&#39;s Handbook now public</title>
5194 <link>http://www.hungry.com/~pere/blog/First_draft_Norwegian_Bokm_l_edition_of_The_Debian_Administrator_s_Handbook_now_public.html</link>
5195 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/First_draft_Norwegian_Bokm_l_edition_of_The_Debian_Administrator_s_Handbook_now_public.html</guid>
5196 <pubDate>Tue, 30 Aug 2016 10:10:00 +0200</pubDate>
5197 <description>&lt;p&gt;In April we
5198 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Lets_make_a_Norwegian_Bokm_l_edition_of_The_Debian_Administrator_s_Handbook.html&quot;&gt;started
5199 to work&lt;/a&gt; on a Norwegian Bokmål edition of the &quot;open access&quot; book on
5200 how to set up and administrate a Debian system. Today I am happy to
5201 report that the first draft is now publicly available. You can find
5202 it on &lt;a href=&quot;https://debian-handbook.info/get/&quot;&gt;get the Debian
5203 Administrator&#39;s Handbook page&lt;/a&gt; (under Other languages). The first
5204 eight chapters have a first draft translation, and we are working on
5205 proofreading the content. If you want to help out, please start
5206 contributing using
5207 &lt;a href=&quot;https://hosted.weblate.org/projects/debian-handbook/&quot;&gt;the
5208 hosted weblate project page&lt;/a&gt;, and get in touch using
5209 &lt;a href=&quot;http://lists.alioth.debian.org/mailman/listinfo/debian-handbook-translators&quot;&gt;the
5210 translators mailing list&lt;/a&gt;. Please also check out
5211 &lt;a href=&quot;https://debian-handbook.info/contribute/&quot;&gt;the instructions for
5212 contributors&lt;/a&gt;. A good way to contribute is to proofread the text
5213 and update weblate if you find errors.&lt;/p&gt;
5214
5215 &lt;p&gt;Our goal is still to make the Norwegian book available on paper as well as
5216 electronic form.&lt;/p&gt;
5217 </description>
5218 </item>
5219
5220 <item>
5221 <title>Coz can help you find bottlenecks in multi-threaded software - nice free software</title>
5222 <link>http://www.hungry.com/~pere/blog/Coz_can_help_you_find_bottlenecks_in_multi_threaded_software___nice_free_software.html</link>
5223 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Coz_can_help_you_find_bottlenecks_in_multi_threaded_software___nice_free_software.html</guid>
5224 <pubDate>Thu, 11 Aug 2016 12:00:00 +0200</pubDate>
5225 <description>&lt;p&gt;This summer, I read a great article
5226 &quot;&lt;a href=&quot;https://www.usenix.org/publications/login/summer2016/curtsinger&quot;&gt;coz:
5227 This Is the Profiler You&#39;re Looking For&lt;/a&gt;&quot; in USENIX ;login: about
5228 how to profile multi-threaded programs. It presented a system for
5229 profiling software by running experiences in the running program,
5230 testing how run time performance is affected by &quot;speeding up&quot; parts of
5231 the code to various degrees compared to a normal run. It does this by
5232 slowing down parallel threads while the &quot;faster up&quot; code is running
5233 and measure how this affect processing time. The processing time is
5234 measured using probes inserted into the code, either using progress
5235 counters (COZ_PROGRESS) or as latency meters (COZ_BEGIN/COZ_END). It
5236 can also measure unmodified code by measuring complete the program
5237 runtime and running the program several times instead.&lt;/p&gt;
5238
5239 &lt;p&gt;The project and presentation was so inspiring that I would like to
5240 get the system into Debian. I
5241 &lt;a href=&quot;https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=830708&quot;&gt;created
5242 a WNPP request for it&lt;/a&gt; and contacted upstream to try to make the
5243 system ready for Debian by sending patches. The build process need to
5244 be changed a bit to avoid running &#39;git clone&#39; to get dependencies, and
5245 to include the JavaScript web page used to visualize the collected
5246 profiling information included in the source package.
5247 But I expect that should work out fairly soon.&lt;/p&gt;
5248
5249 &lt;p&gt;The way the system work is fairly simple. To run an coz experiment
5250 on a binary with debug symbols available, start the program like this:
5251
5252 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
5253 coz run --- program-to-run
5254 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
5255
5256 &lt;p&gt;This will create a text file profile.coz with the instrumentation
5257 information. To show what part of the code affect the performance
5258 most, use a web browser and either point it to
5259 &lt;a href=&quot;http://plasma-umass.github.io/coz/&quot;&gt;http://plasma-umass.github.io/coz/&lt;/a&gt;
5260 or use the copy from git (in the gh-pages branch). Check out this web
5261 site to have a look at several example profiling runs and get an idea what the end result from the profile runs look like. To make the
5262 profiling more useful you include &amp;lt;coz.h&amp;gt; and insert the
5263 COZ_PROGRESS or COZ_BEGIN and COZ_END at appropriate places in the
5264 code, rebuild and run the profiler. This allow coz to do more
5265 targeted experiments.&lt;/p&gt;
5266
5267 &lt;p&gt;A video published by ACM
5268 &lt;a href=&quot;https://www.youtube.com/watch?v=jE0V-p1odPg&quot;&gt;presenting the
5269 Coz profiler&lt;/a&gt; is available from Youtube. There is also a paper
5270 from the 25th Symposium on Operating Systems Principles available
5271 titled
5272 &lt;a href=&quot;https://www.usenix.org/conference/atc16/technical-sessions/presentation/curtsinger&quot;&gt;Coz:
5273 finding code that counts with causal profiling&lt;/a&gt;.&lt;/p&gt;
5274
5275 &lt;p&gt;&lt;a href=&quot;https://github.com/plasma-umass/coz&quot;&gt;The source code&lt;/a&gt;
5276 for Coz is available from github. It will only build with clang
5277 because it uses a
5278 &lt;a href=&quot;https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55606&quot;&gt;C++
5279 feature missing in GCC&lt;/a&gt;, but I&#39;ve submitted
5280 &lt;a href=&quot;https://github.com/plasma-umass/coz/pull/67&quot;&gt;a patch to solve
5281 it&lt;/a&gt; and hope it will be included in the upstream source soon.&lt;/p&gt;
5282
5283 &lt;p&gt;Please get in touch if you, like me, would like to see this piece
5284 of software in Debian. I would very much like some help with the
5285 packaging effort, as I lack the in depth knowledge on how to package
5286 C++ libraries.&lt;/p&gt;
5287 </description>
5288 </item>
5289
5290 <item>
5291 <title>Unlocking HTC Desire HD on Linux using unruu and fastboot</title>
5292 <link>http://www.hungry.com/~pere/blog/Unlocking_HTC_Desire_HD_on_Linux_using_unruu_and_fastboot.html</link>
5293 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Unlocking_HTC_Desire_HD_on_Linux_using_unruu_and_fastboot.html</guid>
5294 <pubDate>Thu, 7 Jul 2016 11:30:00 +0200</pubDate>
5295 <description>&lt;p&gt;Yesterday, I tried to unlock a HTC Desire HD phone, and it proved
5296 to be a slight challenge. Here is the recipe if I ever need to do it
5297 again. It all started by me wanting to try the recipe to set up
5298 &lt;a href=&quot;https://blog.torproject.org/blog/mission-impossible-hardening-android-security-and-privacy&quot;&gt;an
5299 hardened Android installation&lt;/a&gt; from the Tor project blog on a
5300 device I had access to. It is a old mobile phone with a broken
5301 microphone The initial idea had been to just
5302 &lt;a href=&quot;http://wiki.cyanogenmod.org/w/Install_CM_for_ace&quot;&gt;install
5303 CyanogenMod on it&lt;/a&gt;, but did not quite find time to start on it
5304 until a few days ago.&lt;/p&gt;
5305
5306 &lt;p&gt;The unlock process is supposed to be simple: (1) Boot into the boot
5307 loader (press volume down and power at the same time), (2) select
5308 &#39;fastboot&#39; before (3) connecting the device via USB to a Linux
5309 machine, (4) request the device identifier token by running &#39;fastboot
5310 oem get_identifier_token&#39;, (5) request the device unlocking key using
5311 the &lt;a href=&quot;http://www.htcdev.com/bootloader/&quot;&gt;HTC developer web
5312 site&lt;/a&gt; and unlock the phone using the key file emailed to you.&lt;/p&gt;
5313
5314 &lt;p&gt;Unfortunately, this only work fi you have hboot version 2.00.0029
5315 or newer, and the device I was working on had 2.00.0027. This
5316 apparently can be easily fixed by downloading a Windows program and
5317 running it on your Windows machine, if you accept the terms Microsoft
5318 require you to accept to use Windows - which I do not. So I had to
5319 come up with a different approach. I got a lot of help from AndyCap
5320 on #nuug, and would not have been able to get this working without
5321 him.&lt;/p&gt;
5322
5323 &lt;p&gt;First I needed to extract the hboot firmware from
5324 &lt;a href=&quot;http://www.htcdev.com/ruu/PD9810000_Ace_Sense30_S_hboot_2.00.0029.exe&quot;&gt;the
5325 windows binary for HTC Desire HD&lt;/a&gt; downloaded as &#39;the RUU&#39; from HTC.
5326 For this there is is &lt;a href=&quot;https://github.com/kmdm/unruu/&quot;&gt;a github
5327 project named unruu&lt;/a&gt; using libunshield. The unshield tool did not
5328 recognise the file format, but unruu worked and extracted rom.zip,
5329 containing the new hboot firmware and a text file describing which
5330 devices it would work for.&lt;/p&gt;
5331
5332 &lt;p&gt;Next, I needed to get the new firmware into the device. For this I
5333 followed some instructions
5334 &lt;a href=&quot;http://www.htc1guru.com/2013/09/new-ruu-zips-posted/&quot;&gt;available
5335 from HTC1Guru.com&lt;/a&gt;, and ran these commands as root on a Linux
5336 machine with Debian testing:&lt;/p&gt;
5337
5338 &lt;p&gt;&lt;pre&gt;
5339 adb reboot-bootloader
5340 fastboot oem rebootRUU
5341 fastboot flash zip rom.zip
5342 fastboot flash zip rom.zip
5343 fastboot reboot
5344 &lt;/pre&gt;&lt;/p&gt;
5345
5346 &lt;p&gt;The flash command apparently need to be done twice to take effect,
5347 as the first is just preparations and the second one do the flashing.
5348 The adb command is just to get to the boot loader menu, so turning the
5349 device on while holding volume down and the power button should work
5350 too.&lt;/p&gt;
5351
5352 &lt;p&gt;With the new hboot version in place I could start following the
5353 instructions on the HTC developer web site. I got the device token
5354 like this:&lt;/p&gt;
5355
5356 &lt;p&gt;&lt;pre&gt;
5357 fastboot oem get_identifier_token 2&gt;&amp;1 | sed &#39;s/(bootloader) //&#39;
5358 &lt;/pre&gt;
5359
5360 &lt;p&gt;And once I got the unlock code via email, I could use it like
5361 this:&lt;/p&gt;
5362
5363 &lt;p&gt;&lt;pre&gt;
5364 fastboot flash unlocktoken Unlock_code.bin
5365 &lt;/pre&gt;&lt;/p&gt;
5366
5367 &lt;p&gt;And with that final step in place, the phone was unlocked and I
5368 could start stuffing the software of my own choosing into the device.
5369 So far I only inserted a replacement recovery image to wipe the phone
5370 before I start. We will see what happen next. Perhaps I should
5371 install &lt;a href=&quot;https://www.debian.org/&quot;&gt;Debian&lt;/a&gt; on it. :)&lt;/p&gt;
5372 </description>
5373 </item>
5374
5375 <item>
5376 <title>How to use the Signal app if you only have a land line (ie no mobile phone)</title>
5377 <link>http://www.hungry.com/~pere/blog/How_to_use_the_Signal_app_if_you_only_have_a_land_line__ie_no_mobile_phone_.html</link>
5378 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/How_to_use_the_Signal_app_if_you_only_have_a_land_line__ie_no_mobile_phone_.html</guid>
5379 <pubDate>Sun, 3 Jul 2016 14:20:00 +0200</pubDate>
5380 <description>&lt;p&gt;For a while now, I have wanted to test
5381 &lt;a href=&quot;https://whispersystems.org/&quot;&gt;the Signal app&lt;/a&gt;, as it is
5382 said to provide end to end encrypted communication and several of my
5383 friends and family are already using it. As I by choice do not own a
5384 mobile phone, this proved to be harder than expected. And I wanted to
5385 have the source of the client and know that it was the code used on my
5386 machine. But yesterday I managed to get it working. I used the
5387 Github source, compared it to the source in
5388 &lt;a href=&quot;https://chrome.google.com/webstore/detail/signal-private-messenger/bikioccmkafdpakkkcpdbppfkghcmihk?hl=en-US&quot;&gt;the
5389 Signal Chrome app&lt;/a&gt; available from the Chrome web store, applied
5390 patches to use the production Signal servers, started the app and
5391 asked for the hidden &quot;register without a smart phone&quot; form. Here is
5392 the recipe how I did it.&lt;/p&gt;
5393
5394 &lt;p&gt;First, I fetched the Signal desktop source from Github, using
5395
5396 &lt;pre&gt;
5397 git clone https://github.com/WhisperSystems/Signal-Desktop.git
5398 &lt;/pre&gt;
5399
5400 &lt;p&gt;Next, I patched the source to use the production servers, to be
5401 able to talk to other Signal users:&lt;/p&gt;
5402
5403 &lt;pre&gt;
5404 cat &amp;lt;&amp;lt;EOF | patch -p0
5405 diff -ur ./js/background.js userdata/Default/Extensions/bikioccmkafdpakkkcpdbppfkghcmihk/0.15.0_0/js/background.js
5406 --- ./js/background.js 2016-06-29 13:43:15.630344628 +0200
5407 +++ userdata/Default/Extensions/bikioccmkafdpakkkcpdbppfkghcmihk/0.15.0_0/js/background.js 2016-06-29 14:06:29.530300934 +0200
5408 @@ -47,8 +47,8 @@
5409 });
5410 });
5411
5412 - var SERVER_URL = &#39;https://textsecure-service-staging.whispersystems.org&#39;;
5413 - var ATTACHMENT_SERVER_URL = &#39;https://whispersystems-textsecure-attachments-staging.s3.amazonaws.com&#39;;
5414 + var SERVER_URL = &#39;https://textsecure-service-ca.whispersystems.org:4433&#39;;
5415 + var ATTACHMENT_SERVER_URL = &#39;https://whispersystems-textsecure-attachments.s3.amazonaws.com&#39;;
5416 var messageReceiver;
5417 window.getSocketStatus = function() {
5418 if (messageReceiver) {
5419 diff -ur ./js/expire.js userdata/Default/Extensions/bikioccmkafdpakkkcpdbppfkghcmihk/0.15.0_0/js/expire.js
5420 --- ./js/expire.js 2016-06-29 13:43:15.630344628 +0200
5421 +++ userdata/Default/Extensions/bikioccmkafdpakkkcpdbppfkghcmihk/0.15.0_0/js/expire.js2016-06-29 14:06:29.530300934 +0200
5422 @@ -1,6 +1,6 @@
5423 ;(function() {
5424 &#39;use strict&#39;;
5425 - var BUILD_EXPIRATION = 0;
5426 + var BUILD_EXPIRATION = 1474492690000;
5427
5428 window.extension = window.extension || {};
5429
5430 EOF
5431 &lt;/pre&gt;
5432
5433 &lt;p&gt;The first part is changing the servers, and the second is updating
5434 an expiration timestamp. This timestamp need to be updated regularly.
5435 It is set 90 days in the future by the build process (Gruntfile.js).
5436 The value is seconds since 1970 times 1000, as far as I can tell.&lt;/p&gt;
5437
5438 &lt;p&gt;Based on a tip and good help from the #nuug IRC channel, I wrote a
5439 script to launch Signal in Chromium.&lt;/p&gt;
5440
5441 &lt;pre&gt;
5442 #!/bin/sh
5443 cd $(dirname $0)
5444 mkdir -p userdata
5445 exec chromium \
5446 --proxy-server=&quot;socks://localhost:9050&quot; \
5447 --user-data-dir=`pwd`/userdata --load-and-launch-app=`pwd`
5448 &lt;/pre&gt;
5449
5450 &lt;p&gt; The script start the app and configure Chromium to use the Tor
5451 SOCKS5 proxy to make sure those controlling the Signal servers (today
5452 Amazon and Whisper Systems) as well as those listening on the lines
5453 will have a harder time location my laptop based on the Signal
5454 connections if they use source IP address.&lt;/p&gt;
5455
5456 &lt;p&gt;When the script starts, one need to follow the instructions under
5457 &quot;Standalone Registration&quot; in the CONTRIBUTING.md file in the git
5458 repository. I right clicked on the Signal window to get up the
5459 Chromium debugging tool, visited the &#39;Console&#39; tab and wrote
5460 &#39;extension.install(&quot;standalone&quot;)&#39; on the console prompt to get the
5461 registration form. Then I entered by land line phone number and
5462 pressed &#39;Call&#39;. 5 seconds later the phone rang and a robot voice
5463 repeated the verification code three times. After entering the number
5464 into the verification code field in the form, I could start using
5465 Signal from my laptop.
5466
5467 &lt;p&gt;As far as I can tell, The Signal app will leak who is talking to
5468 whom and thus who know who to those controlling the central server,
5469 but such leakage is hard to avoid with a centrally controlled server
5470 setup. It is something to keep in mind when using Signal - the
5471 content of your chats are harder to intercept, but the meta data
5472 exposing your contact network is available to people you do not know.
5473 So better than many options, but not great. And sadly the usage is
5474 connected to my land line, thus allowing those controlling the server
5475 to associate it to my home and person. I would prefer it if only
5476 those I knew could tell who I was on Signal. There are options
5477 avoiding such information leakage, but most of my friends are not
5478 using them, so I am stuck with Signal for now.&lt;/p&gt;
5479
5480 &lt;p&gt;&lt;strong&gt;Update 2017-01-10&lt;/strong&gt;: There is an updated blog post
5481 on this topic in
5482 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Experience_and_updated_recipe_for_using_the_Signal_app_without_a_mobile_phone.html&quot;&gt;Experience
5483 and updated recipe for using the Signal app without a mobile
5484 phone&lt;/a&gt;.&lt;/p&gt;
5485 </description>
5486 </item>
5487
5488 <item>
5489 <title>The new &quot;best&quot; multimedia player in Debian?</title>
5490 <link>http://www.hungry.com/~pere/blog/The_new__best__multimedia_player_in_Debian_.html</link>
5491 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/The_new__best__multimedia_player_in_Debian_.html</guid>
5492 <pubDate>Mon, 6 Jun 2016 12:50:00 +0200</pubDate>
5493 <description>&lt;p&gt;When I set out a few weeks ago to figure out
5494 &lt;a href=&quot;http://www.hungry.com/~pere/blog/What_is_the_best_multimedia_player_in_Debian_.html&quot;&gt;which
5495 multimedia player in Debian claimed to support most file formats /
5496 MIME types&lt;/a&gt;, I was a bit surprised how varied the sets of MIME types
5497 the various players claimed support for. The range was from 55 to 130
5498 MIME types. I suspect most media formats are supported by all
5499 players, but this is not really reflected in the MimeTypes values in
5500 their desktop files. There are probably also some bogus MIME types
5501 listed, but it is hard to identify which one this is.&lt;/p&gt;
5502
5503 &lt;p&gt;Anyway, in the mean time I got in touch with upstream for some of
5504 the players suggesting to add more MIME types to their desktop files,
5505 and decided to spend some time myself improving the situation for my
5506 favorite media player VLC. The fixes for VLC entered Debian unstable
5507 yesterday. The complete list of MIME types can be seen on the
5508 &lt;a href=&quot;https://wiki.debian.org/DebianMultimedia/PlayerSupport&quot;&gt;Multimedia
5509 player MIME type support status&lt;/a&gt; Debian wiki page.&lt;/p&gt;
5510
5511 &lt;p&gt;The new &quot;best&quot; multimedia player in Debian? It is VLC, followed by
5512 totem, parole, kplayer, gnome-mpv, mpv, smplayer, mplayer-gui and
5513 kmplayer. I am sure some of the other players desktop files support
5514 several of the formats currently listed as working only with vlc,
5515 toten and parole.&lt;/p&gt;
5516
5517 &lt;p&gt;A sad observation is that only 14 MIME types are listed as
5518 supported by all the tested multimedia players in Debian in their
5519 desktop files: audio/mpeg, audio/vnd.rn-realaudio, audio/x-mpegurl,
5520 audio/x-ms-wma, audio/x-scpls, audio/x-wav, video/mp4, video/mpeg,
5521 video/quicktime, video/vnd.rn-realvideo, video/x-matroska,
5522 video/x-ms-asf, video/x-ms-wmv and video/x-msvideo. Personally I find
5523 it sad that video/ogg and video/webm is not supported by all the media
5524 players in Debian. As far as I can tell, all of them can handle both
5525 formats.&lt;/p&gt;
5526 </description>
5527 </item>
5528
5529 <item>
5530 <title>A program should be able to open its own files on Linux</title>
5531 <link>http://www.hungry.com/~pere/blog/A_program_should_be_able_to_open_its_own_files_on_Linux.html</link>
5532 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/A_program_should_be_able_to_open_its_own_files_on_Linux.html</guid>
5533 <pubDate>Sun, 5 Jun 2016 08:30:00 +0200</pubDate>
5534 <description>&lt;p&gt;Many years ago, when koffice was fresh and with few users, I
5535 decided to test its presentation tool when making the slides for a
5536 talk I was giving for NUUG on Japhar, a free Java virtual machine. I
5537 wrote the first draft of the slides, saved the result and went to bed
5538 the day before I would give the talk. The next day I took a plane to
5539 the location where the meeting should take place, and on the plane I
5540 started up koffice again to polish the talk a bit, only to discover
5541 that kpresenter refused to load its own data file. I cursed a bit and
5542 started making the slides again from memory, to have something to
5543 present when I arrived. I tested that the saved files could be
5544 loaded, and the day seemed to be rescued. I continued to polish the
5545 slides until I suddenly discovered that the saved file could no longer
5546 be loaded into kpresenter. In the end I had to rewrite the slides
5547 three times, condensing the content until the talk became shorter and
5548 shorter. After the talk I was able to pinpoint the problem &amp;ndash;
5549 kpresenter wrote inline images in a way itself could not understand.
5550 Eventually that bug was fixed and kpresenter ended up being a great
5551 program to make slides. The point I&#39;m trying to make is that we
5552 expect a program to be able to load its own data files, and it is
5553 embarrassing to its developers if it can&#39;t.&lt;/p&gt;
5554
5555 &lt;p&gt;Did you ever experience a program failing to load its own data
5556 files from the desktop file browser? It is not a uncommon problem. A
5557 while back I discovered that the screencast recorder
5558 gtk-recordmydesktop would save an Ogg Theora video file the KDE file
5559 browser would refuse to open. No video player claimed to understand
5560 such file. I tracked down the cause being &lt;tt&gt;file --mime-type&lt;/tt&gt;
5561 returning the application/ogg MIME type, which no video player I had
5562 installed listed as a MIME type they would understand. I asked for
5563 &lt;a href=&quot;http://bugs.gw.com/view.php?id=382&quot;&gt;file to change its
5564 behavour&lt;/a&gt; and use the MIME type video/ogg instead. I also asked
5565 several video players to add video/ogg to their desktop files, to give
5566 the file browser an idea what to do about Ogg Theora files. After a
5567 while, the desktop file browsers in Debian started to handle the
5568 output from gtk-recordmydesktop properly.&lt;/p&gt;
5569
5570 &lt;p&gt;But history repeats itself. A few days ago I tested the music
5571 system Rosegarden again, and I discovered that the KDE and xfce file
5572 browsers did not know what to do with the Rosegarden project files
5573 (*.rg). I&#39;ve reported &lt;a href=&quot;http://bugs.debian.org/825993&quot;&gt;the
5574 rosegarden problem to BTS&lt;/a&gt; and a fix is commited to git and will be
5575 included in the next upload. To increase the chance of me remembering
5576 how to fix the problem next time some program fail to load its files
5577 from the file browser, here are some notes on how to fix it.&lt;/p&gt;
5578
5579 &lt;p&gt;The file browsers in Debian in general operates on MIME types.
5580 There are two sources for the MIME type of a given file. The output from
5581 &lt;tt&gt;file --mime-type&lt;/tt&gt; mentioned above, and the content of the
5582 shared MIME type registry (under /usr/share/mime/). The file MIME
5583 type is mapped to programs supporting the MIME type, and this
5584 information is collected from
5585 &lt;a href=&quot;https://www.freedesktop.org/wiki/Specifications/desktop-entry-spec/&quot;&gt;the
5586 desktop files&lt;/a&gt; available in /usr/share/applications/. If there is
5587 one desktop file claiming support for the MIME type of the file, it is
5588 activated when asking to open a given file. If there are more, one
5589 can normally select which one to use by right-clicking on the file and
5590 selecting the wanted one using &#39;Open with&#39; or similar. In general
5591 this work well. But it depend on each program picking a good MIME
5592 type (preferably
5593 &lt;a href=&quot;http://www.iana.org/assignments/media-types/media-types.xhtml&quot;&gt;a
5594 MIME type registered with IANA&lt;/a&gt;), file and/or the shared MIME
5595 registry recognizing the file and the desktop file to list the MIME
5596 type in its list of supported MIME types.&lt;/p&gt;
5597
5598 &lt;p&gt;The &lt;tt&gt;/usr/share/mime/packages/rosegarden.xml&lt;/tt&gt; entry for
5599 &lt;a href=&quot;http://www.freedesktop.org/wiki/Specifications/shared-mime-info-spec&quot;&gt;the
5600 Shared MIME database&lt;/a&gt; look like this:&lt;/p&gt;
5601
5602 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
5603 &amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
5604 &amp;lt;mime-info xmlns=&quot;http://www.freedesktop.org/standards/shared-mime-info&quot;&amp;gt;
5605 &amp;lt;mime-type type=&quot;audio/x-rosegarden&quot;&amp;gt;
5606 &amp;lt;sub-class-of type=&quot;application/x-gzip&quot;/&amp;gt;
5607 &amp;lt;comment&amp;gt;Rosegarden project file&amp;lt;/comment&amp;gt;
5608 &amp;lt;glob pattern=&quot;*.rg&quot;/&amp;gt;
5609 &amp;lt;/mime-type&amp;gt;
5610 &amp;lt;/mime-info&amp;gt;
5611 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
5612
5613 &lt;p&gt;This states that audio/x-rosegarden is a kind of application/x-gzip
5614 (it is a gzipped XML file). Note, it is much better to use an
5615 official MIME type registered with IANA than it is to make up ones own
5616 unofficial ones like the x-rosegarden type used by rosegarden.&lt;/p&gt;
5617
5618 &lt;p&gt;The desktop file of the rosegarden program failed to list
5619 audio/x-rosegarden in its list of supported MIME types, causing the
5620 file browsers to have no idea what to do with *.rg files:&lt;/p&gt;
5621
5622 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
5623 % grep Mime /usr/share/applications/rosegarden.desktop
5624 MimeType=audio/x-rosegarden-composition;audio/x-rosegarden-device;audio/x-rosegarden-project;audio/x-rosegarden-template;audio/midi;
5625 X-KDE-NativeMimeType=audio/x-rosegarden-composition
5626 %
5627 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
5628
5629 &lt;p&gt;The fix was to add &quot;audio/x-rosegarden;&quot; at the end of the
5630 MimeType= line.&lt;/p&gt;
5631
5632 &lt;p&gt;If you run into a file which fail to open the correct program when
5633 selected from the file browser, please check out the output from
5634 &lt;tt&gt;file --mime-type&lt;/tt&gt; for the file, ensure the file ending and
5635 MIME type is registered somewhere under /usr/share/mime/ and check
5636 that some desktop file under /usr/share/applications/ is claiming
5637 support for this MIME type. If not, please report a bug to have it
5638 fixed. :)&lt;/p&gt;
5639 </description>
5640 </item>
5641
5642 <item>
5643 <title>Isenkram with PackageKit support - new version 0.23 available in Debian unstable</title>
5644 <link>http://www.hungry.com/~pere/blog/Isenkram_with_PackageKit_support___new_version_0_23_available_in_Debian_unstable.html</link>
5645 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Isenkram_with_PackageKit_support___new_version_0_23_available_in_Debian_unstable.html</guid>
5646 <pubDate>Wed, 25 May 2016 10:20:00 +0200</pubDate>
5647 <description>&lt;p&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/isenkram&quot;&gt;The isenkram
5648 system&lt;/a&gt; is a user-focused solution in Debian for handling hardware
5649 related packages. The idea is to have a database of mappings between
5650 hardware and packages, and pop up a dialog suggesting for the user to
5651 install the packages to use a given hardware dongle. Some use cases
5652 are when you insert a Yubikey, it proposes to install the software
5653 needed to control it; when you insert a braille reader list it
5654 proposes to install the packages needed to send text to the reader;
5655 and when you insert a ColorHug screen calibrator it suggests to
5656 install the driver for it. The system work well, and even have a few
5657 command line tools to install firmware packages and packages for the
5658 hardware already in the machine (as opposed to hotpluggable hardware).&lt;/p&gt;
5659
5660 &lt;p&gt;The system was initially written using aptdaemon, because I found
5661 good documentation and example code on how to use it. But aptdaemon
5662 is going away and is generally being replaced by
5663 &lt;a href=&quot;http://www.freedesktop.org/software/PackageKit/&quot;&gt;PackageKit&lt;/a&gt;,
5664 so Isenkram needed a rewrite. And today, thanks to the great patch
5665 from my college Sunil Mohan Adapa in the FreedomBox project, the
5666 rewrite finally took place. I&#39;ve just uploaded a new version of
5667 Isenkram into Debian Unstable with the patch included, and the default
5668 for the background daemon is now to use PackageKit. To check it out,
5669 install the &lt;tt&gt;isenkram&lt;/tt&gt; package and insert some hardware dongle
5670 and see if it is recognised.&lt;/p&gt;
5671
5672 &lt;p&gt;If you want to know what kind of packages isenkram would propose for
5673 the machine it is running on, you can check out the isenkram-lookup
5674 program. This is what it look like on a Thinkpad X230:&lt;/p&gt;
5675
5676 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
5677 % isenkram-lookup
5678 bluez
5679 cheese
5680 fprintd
5681 fprintd-demo
5682 gkrellm-thinkbat
5683 hdapsd
5684 libpam-fprintd
5685 pidgin-blinklight
5686 thinkfan
5687 tleds
5688 tp-smapi-dkms
5689 tp-smapi-source
5690 tpb
5691 %p
5692 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
5693
5694 &lt;p&gt;The hardware mappings come from several places. The preferred way
5695 is for packages to announce their hardware support using
5696 &lt;a href=&quot;https://www.freedesktop.org/software/appstream/docs/&quot;&gt;the
5697 cross distribution appstream system&lt;/a&gt;.
5698 See
5699 &lt;a href=&quot;http://www.hungry.com/~pere/blog/tags/isenkram/&quot;&gt;previous
5700 blog posts about isenkram&lt;/a&gt; to learn how to do that.&lt;/p&gt;
5701 </description>
5702 </item>
5703
5704 <item>
5705 <title>Discharge rate estimate in new battery statistics collector for Debian</title>
5706 <link>http://www.hungry.com/~pere/blog/Discharge_rate_estimate_in_new_battery_statistics_collector_for_Debian.html</link>
5707 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Discharge_rate_estimate_in_new_battery_statistics_collector_for_Debian.html</guid>
5708 <pubDate>Mon, 23 May 2016 09:35:00 +0200</pubDate>
5709 <description>&lt;p&gt;Yesterday I updated the
5710 &lt;a href=&quot;https://tracker.debian.org/pkg/battery-stats&quot;&gt;battery-stats
5711 package in Debian&lt;/a&gt; with a few patches sent to me by skilled and
5712 enterprising users. There were some nice user and visible changes.
5713 First of all, both desktop menu entries now work. A design flaw in
5714 one of the script made the history graph fail to show up (its PNG was
5715 dumped in ~/.xsession-errors) if no controlling TTY was available.
5716 The script worked when called from the command line, but not when
5717 called from the desktop menu. I changed this to look for a DISPLAY
5718 variable or a TTY before deciding where to draw the graph, and now the
5719 graph window pop up as expected.&lt;/p&gt;
5720
5721 &lt;p&gt;The next new feature is a discharge rate estimator in one of the
5722 graphs (the one showing the last few hours). New is also the user of
5723 colours showing charging in blue and discharge in red. The percentages
5724 of this graph is relative to last full charge, not battery design
5725 capacity.&lt;/p&gt;
5726
5727 &lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;http://www.hungry.com/~pere/blog/images/2016-05-23-battery-stats-rate.png&quot;/&gt;&lt;/p&gt;
5728
5729 &lt;p&gt;The other graph show the entire history of the collected battery
5730 statistics, comparing it to the design capacity of the battery to
5731 visualise how the battery life time get shorter over time. The red
5732 line in this graph is what the previous graph considers 100 percent:
5733
5734 &lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;http://www.hungry.com/~pere/blog/images/2016-05-23-battery-stats-history.png&quot;/&gt;&lt;/p&gt;
5735
5736 &lt;p&gt;In this graph you can see that I only charge the battery to 80
5737 percent of last full capacity, and how the capacity of the battery is
5738 shrinking. :(&lt;/p&gt;
5739
5740 &lt;p&gt;The last new feature is in the collector, which now will handle
5741 more hardware models. On some hardware, Linux power supply
5742 information is stored in /sys/class/power_supply/ACAD/, while the
5743 collector previously only looked in /sys/class/power_supply/AC/. Now
5744 both are checked to figure if there is power connected to the
5745 machine.&lt;/p&gt;
5746
5747 &lt;p&gt;If you are interested in how your laptop battery is doing, please
5748 check out the
5749 &lt;a href=&quot;https://tracker.debian.org/pkg/battery-stats&quot;&gt;battery-stats&lt;/a&gt;
5750 in Debian unstable, or rebuild it on Jessie to get it working on
5751 Debian stable. :) The upstream source is available from &lt;a
5752 href=&quot;https://github.com/petterreinholdtsen/battery-stats&quot;&gt;github&lt;/a&gt;.
5753 Patches are very welcome.&lt;/p&gt;
5754
5755 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
5756 activities, please send Bitcoin donations to my address
5757 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
5758 </description>
5759 </item>
5760
5761 <item>
5762 <title>Debian now with ZFS on Linux included</title>
5763 <link>http://www.hungry.com/~pere/blog/Debian_now_with_ZFS_on_Linux_included.html</link>
5764 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Debian_now_with_ZFS_on_Linux_included.html</guid>
5765 <pubDate>Thu, 12 May 2016 07:30:00 +0200</pubDate>
5766 <description>&lt;p&gt;Today, after many years of hard work from many people,
5767 &lt;a href=&quot;http://zfsonlinux.org/&quot;&gt;ZFS for Linux&lt;/a&gt; finally entered
5768 Debian. The package status can be seen on
5769 &lt;a href=&quot;https://tracker.debian.org/pkg/zfs-linux&quot;&gt;the package tracker
5770 for zfs-linux&lt;/a&gt;. and
5771 &lt;a href=&quot;https://qa.debian.org/developer.php?login=pkg-zfsonlinux-devel@lists.alioth.debian.org&quot;&gt;the
5772 team status page&lt;/a&gt;. If you want to help out, please join us.
5773 &lt;a href=&quot;http://anonscm.debian.org/gitweb/?p=pkg-zfsonlinux/zfs.git&quot;&gt;The
5774 source code&lt;/a&gt; is available via git on Alioth. It would also be
5775 great if you could help out with
5776 &lt;a href=&quot;https://tracker.debian.org/pkg/dkms&quot;&gt;the dkms package&lt;/a&gt;, as
5777 it is an important piece of the puzzle to get ZFS working.&lt;/p&gt;
5778 </description>
5779 </item>
5780
5781 <item>
5782 <title>What is the best multimedia player in Debian?</title>
5783 <link>http://www.hungry.com/~pere/blog/What_is_the_best_multimedia_player_in_Debian_.html</link>
5784 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/What_is_the_best_multimedia_player_in_Debian_.html</guid>
5785 <pubDate>Sun, 8 May 2016 09:40:00 +0200</pubDate>
5786 <description>&lt;p&gt;&lt;strong&gt;Where I set out to figure out which multimedia player in
5787 Debian claim support for most file formats.&lt;/strong&gt;&lt;/p&gt;
5788
5789 &lt;p&gt;A few years ago, I had a look at the media support for Browser
5790 plugins in Debian, to get an idea which plugins to include in Debian
5791 Edu. I created a script to extract the set of supported MIME types
5792 for each plugin, and used this to find out which multimedia browser
5793 plugin supported most file formats / media types.
5794 &lt;a href=&quot;https://wiki.debian.org/DebianEdu/BrowserMultimedia&quot;&gt;The
5795 result&lt;/a&gt; can still be seen on the Debian wiki, even though it have
5796 not been updated for a while. But browser plugins are less relevant
5797 these days, so I thought it was time to look at standalone
5798 players.&lt;/p&gt;
5799
5800 &lt;p&gt;A few days ago I was tired of VLC not being listed as a viable
5801 player when I wanted to play videos from the Norwegian National
5802 Broadcasting Company, and decided to investigate why. The cause is a
5803 &lt;a href=&quot;https://bugs.debian.org/822245&quot;&gt;missing MIME type in the VLC
5804 desktop file&lt;/a&gt;. In the process I wrote a script to compare the set
5805 of MIME types announced in the desktop file and the browser plugin,
5806 only to discover that there is quite a large difference between the
5807 two for VLC. This discovery made me dig up the script I used to
5808 compare browser plugins, and adjust it to compare desktop files
5809 instead, to try to figure out which multimedia player in Debian
5810 support most file formats.&lt;/p&gt;
5811
5812 &lt;p&gt;The result can be seen on the Debian Wiki, as
5813 &lt;a href=&quot;https://wiki.debian.org/DebianMultimedia/PlayerSupport&quot;&gt;a
5814 table listing all MIME types supported by one of the packages included
5815 in the table&lt;/a&gt;, with the package supporting most MIME types being
5816 listed first in the table.&lt;/p&gt;
5817
5818 &lt;/p&gt;The best multimedia player in Debian? It is totem, followed by
5819 parole, kplayer, mpv, vlc, smplayer mplayer-gui gnome-mpv and
5820 kmplayer. Time for the other players to update their announced MIME
5821 support?&lt;/p&gt;
5822 </description>
5823 </item>
5824
5825 <item>
5826 <title>The Pyra - handheld computer with Debian preinstalled</title>
5827 <link>http://www.hungry.com/~pere/blog/The_Pyra___handheld_computer_with_Debian_preinstalled.html</link>
5828 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/The_Pyra___handheld_computer_with_Debian_preinstalled.html</guid>
5829 <pubDate>Wed, 4 May 2016 10:00:00 +0200</pubDate>
5830 <description>A friend of mine made me aware of
5831 &lt;a href=&quot;https://pyra-handheld.com/boards/pages/pyra/&quot;&gt;The Pyra&lt;/a&gt;, a
5832 handheld computer which will be delivered with Debian preinstalled. I
5833 would love to get one of those for my birthday. :)&lt;/p&gt;
5834
5835 &lt;p&gt;The machine is a complete ARM-based PC with micro HDMI, SATA, USB
5836 plugs and many others connectors, and include a full keyboard and a 5&quot;
5837 LCD touch screen. The 6000mAh battery is claimed to provide a whole
5838 day of battery life time, but I have not seen any independent tests
5839 confirming this. The vendor is still collecting preorders, and the
5840 last I heard last night was that 22 more orders were needed before
5841 production started.&lt;/p&gt;
5842
5843 &lt;p&gt;As far as I know, this is the first handheld preinstalled with
5844 Debian. Please let me know if you know of any others. Is it the
5845 first computer being sold with Debian preinstalled?&lt;/p&gt;
5846 </description>
5847 </item>
5848
5849 <item>
5850 <title>Lets make a Norwegian Bokmål edition of The Debian Administrator&#39;s Handbook</title>
5851 <link>http://www.hungry.com/~pere/blog/Lets_make_a_Norwegian_Bokm_l_edition_of_The_Debian_Administrator_s_Handbook.html</link>
5852 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Lets_make_a_Norwegian_Bokm_l_edition_of_The_Debian_Administrator_s_Handbook.html</guid>
5853 <pubDate>Sun, 10 Apr 2016 23:20:00 +0200</pubDate>
5854 <description>&lt;p&gt;During this weekends
5855 &lt;a href=&quot;http://www.nuug.no/news/Oslo__Takk_for_feilfiksingsfesten.shtml&quot;&gt;bug
5856 squashing party and developer gathering&lt;/a&gt;, we decided to do our part
5857 to make sure there are good books about Debian available in Norwegian
5858 Bokmål, and got in touch with the people behind the
5859 &lt;a href=&quot;http://debian-handbook.info/&quot;&gt;Debian Administrator&#39;s Handbook
5860 project&lt;/a&gt; to get started. If you want to help out, please start
5861 contributing using
5862 &lt;a href=&quot;https://hosted.weblate.org/projects/debian-handbook/&quot;&gt;the
5863 hosted weblate project page&lt;/a&gt;, and get in touch using
5864 &lt;a href=&quot;http://lists.alioth.debian.org/mailman/listinfo/debian-handbook-translators&quot;&gt;the
5865 translators mailing list&lt;/a&gt;. Please also check out
5866 &lt;a href=&quot;https://debian-handbook.info/contribute/&quot;&gt;the instructions for
5867 contributors&lt;/a&gt;.&lt;/p&gt;
5868
5869 &lt;p&gt;The book is already available on paper in English, French and
5870 Japanese, and our goal is to get it available on paper in Norwegian
5871 Bokmål too. In addition to the paper edition, there are also EPUB and
5872 Mobi versions available. And there are incomplete translations
5873 available for many more languages.&lt;/p&gt;
5874 </description>
5875 </item>
5876
5877 <item>
5878 <title>One in two hundred Debian users using ZFS on Linux?</title>
5879 <link>http://www.hungry.com/~pere/blog/One_in_two_hundred_Debian_users_using_ZFS_on_Linux_.html</link>
5880 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/One_in_two_hundred_Debian_users_using_ZFS_on_Linux_.html</guid>
5881 <pubDate>Thu, 7 Apr 2016 22:30:00 +0200</pubDate>
5882 <description>&lt;p&gt;Just for fun I had a look at the popcon number of ZFS related
5883 packages in Debian, and was quite surprised with what I found. I use
5884 ZFS myself at home, but did not really expect many others to do so.
5885 But I might be wrong.&lt;/p&gt;
5886
5887 &lt;p&gt;According to
5888 &lt;a href=&quot;https://qa.debian.org/popcon.php?package=spl-linux&quot;&gt;the popcon
5889 results for spl-linux&lt;/a&gt;, there are 1019 Debian installations, or
5890 0.53% of the population, with the package installed. As far as I know
5891 the only use of the spl-linux package is as a support library for ZFS
5892 on Linux, so I use it here as proxy for measuring the number of ZFS
5893 installation on Linux in Debian. In the kFreeBSD variant of Debian
5894 the ZFS feature is already available, and there
5895 &lt;a href=&quot;https://qa.debian.org/popcon.php?package=zfsutils&quot;&gt;the popcon
5896 results for zfsutils&lt;/a&gt; show 1625 Debian installations or 0.84% of
5897 the population. So I guess I am not alone in using ZFS on Debian.&lt;/p&gt;
5898
5899 &lt;p&gt;But even though the Debian project leader Lucas Nussbaum
5900 &lt;a href=&quot;https://lists.debian.org/debian-devel-announce/2015/04/msg00006.html&quot;&gt;announced
5901 in April 2015&lt;/a&gt; that the legal obstacles blocking ZFS on Debian were
5902 cleared, the package is still not in Debian. The package is again in
5903 the NEW queue. Several uploads have been rejected so far because the
5904 debian/copyright file was incomplete or wrong, but there is no reason
5905 to give up. The current status can be seen on
5906 &lt;a href=&quot;https://qa.debian.org/developer.php?login=pkg-zfsonlinux-devel@lists.alioth.debian.org&quot;&gt;the
5907 team status page&lt;/a&gt;, and
5908 &lt;a href=&quot;http://anonscm.debian.org/gitweb/?p=pkg-zfsonlinux/zfs.git&quot;&gt;the
5909 source code&lt;/a&gt; is available on Alioth.&lt;/p&gt;
5910
5911 &lt;p&gt;As I want ZFS to be included in next version of Debian to make sure
5912 my home server can function in the future using only official Debian
5913 packages, and the current blocker is to get the debian/copyright file
5914 accepted by the FTP masters in Debian, I decided a while back to try
5915 to help out the team. This was the background for my blog post about
5916 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Creating__updating_and_checking_debian_copyright_semi_automatically.html&quot;&gt;creating,
5917 updating and checking debian/copyright semi-automatically&lt;/a&gt;, and I
5918 used the techniques I explored there to try to find any errors in the
5919 copyright file. It is not very easy to check every one of the around
5920 2000 files in the source package, but I hope we this time got it
5921 right. If you want to help out, check out the git source and try to
5922 find missing entries in the debian/copyright file.&lt;/p&gt;
5923 </description>
5924 </item>
5925
5926 <item>
5927 <title>Full battery stats collector is now available in Debian</title>
5928 <link>http://www.hungry.com/~pere/blog/Full_battery_stats_collector_is_now_available_in_Debian.html</link>
5929 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Full_battery_stats_collector_is_now_available_in_Debian.html</guid>
5930 <pubDate>Wed, 23 Mar 2016 22:10:00 +0100</pubDate>
5931 <description>&lt;p&gt;Since this morning, the battery-stats package in Debian include an
5932 extended collector that will collect the complete battery history for
5933 later processing and graphing. The original collector store the
5934 battery level as percentage of last full level, while the new
5935 collector also record battery vendor, model, serial number, design
5936 full level, last full level and current battery level. This make it
5937 possible to predict the lifetime of the battery as well as visualise
5938 the energy flow when the battery is charging or discharging.&lt;/p&gt;
5939
5940 &lt;p&gt;The new tools are available in &lt;tt&gt;/usr/share/battery-stats/&lt;/tt&gt;
5941 in the version 0.5.1 package in unstable. Get the new battery level graph
5942 and lifetime prediction by running:
5943
5944 &lt;p&gt;&lt;pre&gt;
5945 /usr/share/battery-stats/battery-stats-graph /var/log/battery-stats.csv
5946 &lt;/pre&gt;&lt;/p&gt;
5947
5948 &lt;p&gt;Or select the &#39;Battery Level Graph&#39; from your application menu.&lt;/p&gt;
5949
5950 &lt;p&gt;The flow in/out of the battery can be seen by running (no menu
5951 entry yet):&lt;/p&gt;
5952
5953 &lt;p&gt;&lt;pre&gt;
5954 /usr/share/battery-stats/battery-stats-graph-flow
5955 &lt;/pre&gt;&lt;/p&gt;
5956
5957 &lt;p&gt;I&#39;m not quite happy with the way the data is visualised, at least
5958 when there are few data points. The graphs look a bit better with a
5959 few years of data.&lt;/p&gt;
5960
5961 &lt;p&gt;A while back one important feature I use in the battery stats
5962 collector broke in Debian. The scripts in
5963 &lt;tt&gt;/usr/lib/pm-utils/power.d/&lt;/tt&gt; were no longer executed. I
5964 suspect it happened when Jessie started using systemd, but I do not
5965 know. The issue is reported as
5966 &lt;a href=&quot;https://bugs.debian.org/818649&quot;&gt;bug #818649&lt;/a&gt; against
5967 pm-utils. I managed to work around it by adding an udev rule to call
5968 the collector script every time the power connector is connected and
5969 disconnected. With this fix in place it was finally time to make a
5970 new release of the package, and get it into Debian.&lt;/p&gt;
5971
5972 &lt;p&gt;If you are interested in how your laptop battery is doing, please
5973 check out the
5974 &lt;a href=&quot;https://tracker.debian.org/pkg/battery-stats&quot;&gt;battery-stats&lt;/a&gt;
5975 in Debian unstable, or rebuild it on Jessie to get it working on
5976 Debian stable. :) The upstream source is available from
5977 &lt;a href=&quot;https://github.com/petterreinholdtsen/battery-stats&quot;&gt;github&lt;/a&gt;.
5978 As always, patches are very welcome.&lt;/p&gt;
5979 </description>
5980 </item>
5981
5982 <item>
5983 <title>Making battery measurements a little easier in Debian</title>
5984 <link>http://www.hungry.com/~pere/blog/Making_battery_measurements_a_little_easier_in_Debian.html</link>
5985 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Making_battery_measurements_a_little_easier_in_Debian.html</guid>
5986 <pubDate>Tue, 15 Mar 2016 15:00:00 +0100</pubDate>
5987 <description>&lt;p&gt;Back in September, I blogged about
5988 &lt;a href=&quot;http://www.hungry.com/~pere/blog/The_life_and_death_of_a_laptop_battery.html&quot;&gt;the
5989 system I wrote to collect statistics about my laptop battery&lt;/a&gt;, and
5990 how it showed the decay and death of this battery (now replaced). I
5991 created a simple deb package to handle the collection and graphing,
5992 but did not want to upload it to Debian as there were already
5993 &lt;a href=&quot;https://tracker.debian.org/pkg/battery-stats&quot;&gt;a battery-stats
5994 package in Debian&lt;/a&gt; that should do the same thing, and I did not see
5995 a point of uploading a competing package when battery-stats could be
5996 fixed instead. I reported a few bugs about its non-function, and
5997 hoped someone would step in and fix it. But no-one did.&lt;/p&gt;
5998
5999 &lt;p&gt;I got tired of waiting a few days ago, and took matters in my own
6000 hands. The end result is that I am now the new upstream developer of
6001 battery stats (&lt;a href=&quot;https://github.com/petterreinholdtsen/battery-stats&quot;&gt;available from github&lt;/a&gt;) and part of the team maintaining
6002 battery-stats in Debian, and the package in Debian unstable is finally
6003 able to collect battery status using the &lt;tt&gt;/sys/class/power_supply/&lt;/tt&gt;
6004 information provided by the Linux kernel. If you install the
6005 battery-stats package from unstable now, you will be able to get a
6006 graph of the current battery fill level, to get some idea about the
6007 status of the battery. The source package build and work just fine in
6008 Debian testing and stable (and probably oldstable too, but I have not
6009 tested). The default graph you get for that system look like this:&lt;/p&gt;
6010
6011 &lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;http://www.hungry.com/~pere/blog/images/2016-03-15-battery-stats-graph-example.png&quot; width=&quot;70%&quot; align=&quot;center&quot;&gt;&lt;/p&gt;
6012
6013 &lt;p&gt;My plans for the future is to merge my old scripts into the
6014 battery-stats package, as my old scripts collected a lot more details
6015 about the battery. The scripts are merged into the upstream
6016 battery-stats git repository already, but I am not convinced they work
6017 yet, as I changed a lot of paths along the way. Will have to test a
6018 bit more before I make a new release.&lt;/p&gt;
6019
6020 &lt;p&gt;I will also consider changing the file format slightly, as I
6021 suspect the way I combine several values into one field might make it
6022 impossible to know the type of the value when using it for processing
6023 and graphing.&lt;/p&gt;
6024
6025 &lt;p&gt;If you would like I would like to keep an close eye on your laptop
6026 battery, check out the battery-stats package in
6027 &lt;a href=&quot;https://tracker.debian.org/pkg/battery-stats&quot;&gt;Debian&lt;/a&gt; and
6028 on
6029 &lt;a href=&quot;https://github.com/petterreinholdtsen/battery-stats&quot;&gt;github&lt;/a&gt;.
6030 I would love some help to improve the system further.&lt;/p&gt;
6031 </description>
6032 </item>
6033
6034 <item>
6035 <title>Creating, updating and checking debian/copyright semi-automatically</title>
6036 <link>http://www.hungry.com/~pere/blog/Creating__updating_and_checking_debian_copyright_semi_automatically.html</link>
6037 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Creating__updating_and_checking_debian_copyright_semi_automatically.html</guid>
6038 <pubDate>Fri, 19 Feb 2016 15:00:00 +0100</pubDate>
6039 <description>&lt;p&gt;Making packages for Debian requires quite a lot of attention to
6040 details. And one of the details is the content of the
6041 debian/copyright file, which should list all relevant licenses used by
6042 the code in the package in question, preferably in
6043 &lt;a href=&quot;https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/&quot;&gt;machine
6044 readable DEP5 format&lt;/a&gt;.&lt;/p&gt;
6045
6046 &lt;p&gt;For large packages with lots of contributors it is hard to write
6047 and update this file manually, and if you get some detail wrong, the
6048 package is normally rejected by the ftpmasters. So getting it right
6049 the first time around get the package into Debian faster, and save
6050 both you and the ftpmasters some work.. Today, while trying to figure
6051 out what was wrong with
6052 &lt;a href=&quot;https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=686447&quot;&gt;the
6053 zfsonlinux copyright file&lt;/a&gt;, I decided to spend some time on
6054 figuring out the options for doing this job automatically, or at least
6055 semi-automatically.&lt;/p&gt;
6056
6057 &lt;p&gt;Lucikly, there are at least two tools available for generating the
6058 file based on the code in the source package,
6059 &lt;tt&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/debmake&quot;&gt;debmake&lt;/a&gt;&lt;/tt&gt;
6060 and &lt;tt&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/cme&quot;&gt;cme&lt;/a&gt;&lt;/tt&gt;. I&#39;m
6061 not sure which one of them came first, but both seem to be able to
6062 create a sensible draft file. As far as I can tell, none of them can
6063 be trusted to get the result just right, so the content need to be
6064 polished a bit before the file is OK to upload. I found the debmake
6065 option in
6066 &lt;a href=&quot;http://goofying-with-debian.blogspot.com/2014/07/debmake-checking-source-against-dep-5.html&quot;&gt;a
6067 blog posts from 2014&lt;/a&gt;.
6068
6069 &lt;p&gt;To generate using debmake, use the -cc option:
6070
6071 &lt;p&gt;&lt;pre&gt;
6072 debmake -cc &gt; debian/copyright
6073 &lt;/pre&gt;&lt;/p&gt;
6074
6075 &lt;p&gt;Note there are some problems with python and non-ASCII names, so
6076 this might not be the best option.&lt;/p&gt;
6077
6078 &lt;p&gt;The cme option is based on a config parsing library, and I found
6079 this approach in
6080 &lt;a href=&quot;https://ddumont.wordpress.com/2015/04/05/improving-creation-of-debian-copyright-file/&quot;&gt;a
6081 blog post from 2015&lt;/a&gt;. To generate using cme, use the &#39;update
6082 dpkg-copyright&#39; option:
6083
6084 &lt;p&gt;&lt;pre&gt;
6085 cme update dpkg-copyright
6086 &lt;/pre&gt;&lt;/p&gt;
6087
6088 &lt;p&gt;This will create or update debian/copyright. The cme tool seem to
6089 handle UTF-8 names better than debmake.&lt;/p&gt;
6090
6091 &lt;p&gt;When the copyright file is created, I would also like some help to
6092 check if the file is correct. For this I found two good options,
6093 &lt;tt&gt;debmake -k&lt;/tt&gt; and &lt;tt&gt;license-reconcile&lt;/tt&gt;. The former seem
6094 to focus on license types and file matching, and is able to detect
6095 ineffective blocks in the copyright file. The latter reports missing
6096 copyright holders and years, but was confused by inconsistent license
6097 names (like CDDL vs. CDDL-1.0). I suspect it is good to use both and
6098 fix all issues reported by them before uploading. But I do not know
6099 if the tools and the ftpmasters agree on what is important to fix in a
6100 copyright file, so the package might still be rejected.&lt;/p&gt;
6101
6102 &lt;p&gt;The devscripts tool &lt;tt&gt;licensecheck&lt;/tt&gt; deserve mentioning. It
6103 will read through the source and try to find all copyright statements.
6104 It is not comparing the result to the content of debian/copyright, but
6105 can be useful when verifying the content of the copyright file.&lt;/p&gt;
6106
6107 &lt;p&gt;Are you aware of better tools in Debian to create and update
6108 debian/copyright file. Please let me know, or blog about it on
6109 planet.debian.org.&lt;/p&gt;
6110
6111 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
6112 activities, please send Bitcoin donations to my address
6113 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
6114
6115 &lt;p&gt;&lt;strong&gt;Update 2016-02-20&lt;/strong&gt;: I got a tip from Mike Gabriel
6116 on how to use licensecheck and cdbs to create a draft copyright file
6117
6118 &lt;p&gt;&lt;pre&gt;
6119 licensecheck --copyright -r `find * -type f` | \
6120 /usr/lib/cdbs/licensecheck2dep5 &gt; debian/copyright.auto
6121 &lt;/pre&gt;&lt;/p&gt;
6122
6123 &lt;p&gt;He mentioned that he normally check the generated file into the
6124 version control system to make it easier to discover license and
6125 copyright changes in the upstream source. I will try to do the same
6126 with my packages in the future.&lt;/p&gt;
6127
6128 &lt;p&gt;&lt;strong&gt;Update 2016-02-21&lt;/strong&gt;: The cme author recommended
6129 against using -quiet for new users, so I removed it from the proposed
6130 command line.&lt;/p&gt;
6131 </description>
6132 </item>
6133
6134 <item>
6135 <title>Using appstream in Debian to locate packages with firmware and mime type support</title>
6136 <link>http://www.hungry.com/~pere/blog/Using_appstream_in_Debian_to_locate_packages_with_firmware_and_mime_type_support.html</link>
6137 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Using_appstream_in_Debian_to_locate_packages_with_firmware_and_mime_type_support.html</guid>
6138 <pubDate>Thu, 4 Feb 2016 16:40:00 +0100</pubDate>
6139 <description>&lt;p&gt;The &lt;a href=&quot;https://wiki.debian.org/DEP-11&quot;&gt;appstream system&lt;/a&gt;
6140 is taking shape in Debian, and one provided feature is a very
6141 convenient way to tell you which package to install to make a given
6142 firmware file available when the kernel is looking for it. This can
6143 be done using apt-file too, but that is for someone else to blog
6144 about. :)&lt;/p&gt;
6145
6146 &lt;p&gt;Here is a small recipe to find the package with a given firmware
6147 file, in this example I am looking for ctfw-3.2.3.0.bin, randomly
6148 picked from the set of firmware announced using appstream in Debian
6149 unstable. In general you would be looking for the firmware requested
6150 by the kernel during kernel module loading. To find the package
6151 providing the example file, do like this:&lt;/p&gt;
6152
6153 &lt;blockquote&gt;&lt;pre&gt;
6154 % apt install appstream
6155 [...]
6156 % apt update
6157 [...]
6158 % appstreamcli what-provides firmware:runtime ctfw-3.2.3.0.bin | \
6159 awk &#39;/Package:/ {print $2}&#39;
6160 firmware-qlogic
6161 %
6162 &lt;/pre&gt;&lt;/blockquote&gt;
6163
6164 &lt;p&gt;See &lt;a href=&quot;https://wiki.debian.org/AppStream/Guidelines&quot;&gt;the
6165 appstream wiki&lt;/a&gt; page to learn how to embed the package metadata in
6166 a way appstream can use.&lt;/p&gt;
6167
6168 &lt;p&gt;This same approach can be used to find any package supporting a
6169 given MIME type. This is very useful when you get a file you do not
6170 know how to handle. First find the mime type using &lt;tt&gt;file
6171 --mime-type&lt;/tt&gt;, and next look up the package providing support for
6172 it. Lets say you got an SVG file. Its MIME type is image/svg+xml,
6173 and you can find all packages handling this type like this:&lt;/p&gt;
6174
6175 &lt;blockquote&gt;&lt;pre&gt;
6176 % apt install appstream
6177 [...]
6178 % apt update
6179 [...]
6180 % appstreamcli what-provides mimetype image/svg+xml | \
6181 awk &#39;/Package:/ {print $2}&#39;
6182 bkchem
6183 phototonic
6184 inkscape
6185 shutter
6186 tetzle
6187 geeqie
6188 xia
6189 pinta
6190 gthumb
6191 karbon
6192 comix
6193 mirage
6194 viewnior
6195 postr
6196 ristretto
6197 kolourpaint4
6198 eog
6199 eom
6200 gimagereader
6201 midori
6202 %
6203 &lt;/pre&gt;&lt;/blockquote&gt;
6204
6205 &lt;p&gt;I believe the MIME types are fetched from the desktop file for
6206 packages providing appstream metadata.&lt;/p&gt;
6207 </description>
6208 </item>
6209
6210 <item>
6211 <title>Creepy, visualise geotagged social media information - nice free software</title>
6212 <link>http://www.hungry.com/~pere/blog/Creepy__visualise_geotagged_social_media_information___nice_free_software.html</link>
6213 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Creepy__visualise_geotagged_social_media_information___nice_free_software.html</guid>
6214 <pubDate>Sun, 24 Jan 2016 10:50:00 +0100</pubDate>
6215 <description>&lt;p&gt;Most people seem not to realise that every time they walk around
6216 with the computerised radio beacon known as a mobile phone their
6217 position is tracked by the phone company and often stored for a long
6218 time (like every time a SMS is received or sent). And if their
6219 computerised radio beacon is capable of running programs (often called
6220 mobile apps) downloaded from the Internet, these programs are often
6221 also capable of tracking their location (if the app requested access
6222 during installation). And when these programs send out information to
6223 central collection points, the location is often included, unless
6224 extra care is taken to not send the location. The provided
6225 information is used by several entities, for good and bad (what is
6226 good and bad, depend on your point of view). What is certain, is that
6227 the private sphere and the right to free movement is challenged and
6228 perhaps even eradicated for those announcing their location this way,
6229 when they share their whereabouts with private and public
6230 entities.&lt;/p&gt;
6231
6232 &lt;p align=&quot;center&quot;&gt;&lt;img width=&quot;70%&quot; src=&quot;http://www.hungry.com/~pere/blog/images/2016-01-24-nice-creepy-desktop-window.png&quot;&gt;&lt;/p&gt;
6233
6234 &lt;p&gt;The phone company logs provide a register of locations to check out
6235 when one want to figure out what the tracked person was doing. It is
6236 unavailable for most of us, but provided to selected government
6237 officials, company staff, those illegally buying information from
6238 unfaithful servants and crackers stealing the information. But the
6239 public information can be collected and analysed, and a free software
6240 tool to do so is called
6241 &lt;a href=&quot;http://www.geocreepy.com/&quot;&gt;Creepy or Cree.py&lt;/a&gt;. I
6242 discovered it when I read
6243 &lt;a href=&quot;http://www.aftenposten.no/kultur/Slik-kan-du-bli-overvaket-pa-Twitter-og-Instagram-uten-a-ane-det-7787884.html&quot;&gt;an
6244 article about Creepy&lt;/a&gt; in the Norwegian newspaper Aftenposten i
6245 November 2014, and decided to check if it was available in Debian.
6246 The python program was in Debian, but
6247 &lt;a href=&quot;https://tracker.debian.org/pkg/creepy&quot;&gt;the version in
6248 Debian&lt;/a&gt; was completely broken and practically unmaintained. I
6249 uploaded a new version which did not work quite right, but did not
6250 have time to fix it then. This Christmas I decided to finally try to
6251 get Creepy operational in Debian. Now a fixed version is available in
6252 Debian unstable and testing, and almost all Debian specific patches
6253 are now included
6254 &lt;a href=&quot;https://github.com/jkakavas/creepy&quot;&gt;upstream&lt;/a&gt;.&lt;/p&gt;
6255
6256 &lt;p&gt;The Creepy program visualises geolocation information fetched from
6257 Twitter, Instagram, Flickr and Google+, and allow one to get a
6258 complete picture of every social media message posted recently in a
6259 given area, or track the movement of a given individual across all
6260 these services. Earlier it was possible to use the search API of at
6261 least some of these services without identifying oneself, but these
6262 days it is impossible. This mean that to use Creepy, you need to
6263 configure it to log in as yourself on these services, and provide
6264 information to them about your search interests. This should be taken
6265 into account when using Creepy, as it will also share information
6266 about yourself with the services.&lt;/p&gt;
6267
6268 &lt;p&gt;The picture above show the twitter messages sent from (or at least
6269 geotagged with a position from) the city centre of Oslo, the capital
6270 of Norway. One useful way to use Creepy is to first look at
6271 information tagged with an area of interest, and next look at all the
6272 information provided by one or more individuals who was in the area.
6273 I tested it by checking out which celebrity provide their location in
6274 twitter messages by checkout out who sent twitter messages near a
6275 Norwegian TV station, and next could track their position over time,
6276 making it possible to locate their home and work place, among other
6277 things. A similar technique have been
6278 &lt;a href=&quot;http://www.buzzfeed.com/maxseddon/does-this-soldiers-instagram-account-prove-russia-is-covertl&quot;&gt;used
6279 to locate Russian soldiers in Ukraine&lt;/a&gt;, and it is both a powerful
6280 tool to discover lying governments, and a useful tool to help people
6281 understand the value of the private information they provide to the
6282 public.&lt;/p&gt;
6283
6284 &lt;p&gt;The package is not trivial to backport to Debian Stable/Jessie, as
6285 it depend on several python modules currently missing in Jessie (at
6286 least python-instagram, python-flickrapi and
6287 python-requests-toolbelt).&lt;/p&gt;
6288
6289 &lt;p&gt;(I have uploaded
6290 &lt;a href=&quot;https://screenshots.debian.net/package/creepy&quot;&gt;the image to
6291 screenshots.debian.net&lt;/a&gt; and licensed it under the same terms as the
6292 Creepy program in Debian.)&lt;/p&gt;
6293 </description>
6294 </item>
6295
6296 <item>
6297 <title>Always download Debian packages using Tor - the simple recipe</title>
6298 <link>http://www.hungry.com/~pere/blog/Always_download_Debian_packages_using_Tor___the_simple_recipe.html</link>
6299 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Always_download_Debian_packages_using_Tor___the_simple_recipe.html</guid>
6300 <pubDate>Fri, 15 Jan 2016 00:30:00 +0100</pubDate>
6301 <description>&lt;p&gt;During his DebConf15 keynote, Jacob Appelbaum
6302 &lt;a href=&quot;https://summit.debconf.org/debconf15/meeting/331/what-is-to-be-done/&quot;&gt;observed
6303 that those listening on the Internet lines would have good reason to
6304 believe a computer have a given security hole&lt;/a&gt; if it download a
6305 security fix from a Debian mirror. This is a good reason to always
6306 use encrypted connections to the Debian mirror, to make sure those
6307 listening do not know which IP address to attack. In August, Richard
6308 Hartmann observed that encryption was not enough, when it was possible
6309 to interfere download size to security patches or the fact that
6310 download took place shortly after a security fix was released, and
6311 &lt;a href=&quot;http://richardhartmann.de/blog/posts/2015/08/24-Tor-enabled_Debian_mirror/&quot;&gt;proposed
6312 to always use Tor to download packages from the Debian mirror&lt;/a&gt;. He
6313 was not the first to propose this, as the
6314 &lt;tt&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/apt-transport-tor&quot;&gt;apt-transport-tor&lt;/a&gt;&lt;/tt&gt;
6315 package by Tim Retout already existed to make it easy to convince apt
6316 to use &lt;a href=&quot;https://www.torproject.org/&quot;&gt;Tor&lt;/a&gt;, but I was not
6317 aware of that package when I read the blog post from Richard.&lt;/p&gt;
6318
6319 &lt;p&gt;Richard discussed the idea with Peter Palfrader, one of the Debian
6320 sysadmins, and he set up a Tor hidden service on one of the central
6321 Debian mirrors using the address vwakviie2ienjx6t.onion, thus making
6322 it possible to download packages directly between two tor nodes,
6323 making sure the network traffic always were encrypted.&lt;/p&gt;
6324
6325 &lt;p&gt;Here is a short recipe for enabling this on your machine, by
6326 installing &lt;tt&gt;apt-transport-tor&lt;/tt&gt; and replacing http and https
6327 urls with tor+http and tor+https, and using the hidden service instead
6328 of the official Debian mirror site. I recommend installing
6329 &lt;tt&gt;etckeeper&lt;/tt&gt; before you start to have a history of the changes
6330 done in /etc/.&lt;/p&gt;
6331
6332 &lt;blockquote&gt;&lt;pre&gt;
6333 apt install apt-transport-tor
6334 sed -i &#39;s% http://ftp.debian.org/% tor+http://vwakviie2ienjx6t.onion/%&#39; /etc/apt/sources.list
6335 sed -i &#39;s% http% tor+http%&#39; /etc/apt/sources.list
6336 &lt;/pre&gt;&lt;/blockquote&gt;
6337
6338 &lt;p&gt;If you have more sources listed in /etc/apt/sources.list.d/, run
6339 the sed commands for these too. The sed command is assuming your are
6340 using the ftp.debian.org Debian mirror. Adjust the command (or just
6341 edit the file manually) to match your mirror.&lt;/p&gt;
6342
6343 &lt;p&gt;This work in Debian Jessie and later. Note that tools like
6344 &lt;tt&gt;apt-file&lt;/tt&gt; only recently started using the apt transport
6345 system, and do not work with these tor+http URLs. For
6346 &lt;tt&gt;apt-file&lt;/tt&gt; you need the version currently in experimental,
6347 which need a recent apt version currently only in unstable. So if you
6348 need a working &lt;tt&gt;apt-file&lt;/tt&gt;, this is not for you.&lt;/p&gt;
6349
6350 &lt;p&gt;Another advantage from this change is that your machine will start
6351 using Tor regularly and at fairly random intervals (every time you
6352 update the package lists or upgrade or install a new package), thus
6353 masking other Tor traffic done from the same machine. Using Tor will
6354 become normal for the machine in question.&lt;/p&gt;
6355
6356 &lt;p&gt;On &lt;a href=&quot;https://wiki.debian.org/FreedomBox&quot;&gt;Freedombox&lt;/a&gt;, APT
6357 is set up by default to use &lt;tt&gt;apt-transport-tor&lt;/tt&gt; when Tor is
6358 enabled. It would be great if it was the default on any Debian
6359 system.&lt;/p&gt;
6360 </description>
6361 </item>
6362
6363 <item>
6364 <title>OpenALPR, find car license plates in video streams - nice free software</title>
6365 <link>http://www.hungry.com/~pere/blog/OpenALPR__find_car_license_plates_in_video_streams___nice_free_software.html</link>
6366 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/OpenALPR__find_car_license_plates_in_video_streams___nice_free_software.html</guid>
6367 <pubDate>Wed, 23 Dec 2015 01:00:00 +0100</pubDate>
6368 <description>&lt;p&gt;When I was a kid, we used to collect &quot;car numbers&quot;, as we used to
6369 call the car license plate numbers in those days. I would write the
6370 numbers down in my little book and compare notes with the other kids
6371 to see how many region codes we had seen and if we had seen some
6372 exotic or special region codes and numbers. It was a fun game to pass
6373 time, as we kids have plenty of it.&lt;/p&gt;
6374
6375 &lt;p&gt;A few days I came across
6376 &lt;a href=&quot;https://github.com/openalpr/openalpr&quot;&gt;the OpenALPR
6377 project&lt;/a&gt;, a free software project to automatically discover and
6378 report license plates in images and video streams, and provide the
6379 &quot;car numbers&quot; in a machine readable format. I&#39;ve been looking for
6380 such system for a while now, because I believe it is a bad idea that the
6381 &lt;a href=&quot;https://en.wikipedia.org/wiki/Automatic_number_plate_recognition&quot;&gt;automatic
6382 number plate recognition&lt;/a&gt; tool only is available in the hands of
6383 the powerful, and want it to be available also for the powerless to
6384 even the score when it comes to surveillance and sousveillance. I
6385 discovered the developer
6386 &lt;a href=&quot;https://bugs.debian.org/747509&quot;&gt;wanted to get the tool into
6387 Debian&lt;/a&gt;, and as I too wanted it to be in Debian, I volunteered to
6388 help him get it into shape to get the package uploaded into the Debian
6389 archive.&lt;/p&gt;
6390
6391 &lt;p&gt;Today we finally managed to get the package into shape and uploaded
6392 it into Debian, where it currently
6393 &lt;a href=&quot;https://ftp-master.debian.org//new/openalpr_2.2.1-1.html&quot;&gt;waits
6394 in the NEW queue&lt;/a&gt; for review by the Debian ftpmasters.&lt;/p&gt;
6395
6396 &lt;p&gt;I guess you are wondering why on earth such tool would be useful
6397 for the common folks, ie those not running a large government
6398 surveillance system? Well, I plan to put it in a computer on my bike
6399 and in my car, tracking the cars nearby and allowing me to be notified
6400 when number plates on my watch list are discovered. Another use case
6401 was suggested by a friend of mine, who wanted to set it up at his home
6402 to open the car port automatically when it discovered the plate on his
6403 car. When I mentioned it perhaps was a bit foolhardy to allow anyone
6404 capable of placing his license plate number of a piece of cardboard to
6405 open his car port, men replied that it was always unlocked anyway. I
6406 guess for such use case it make sense. I am sure there are other use
6407 cases too, for those with imagination and a vision.&lt;/p&gt;
6408
6409 &lt;p&gt;If you want to build your own version of the Debian package, check
6410 out the upstream git source and symlink ./distros/debian to ./debian/
6411 before running &quot;debuild&quot; to build the source. Or wait a bit until the
6412 package show up in unstable.&lt;/p&gt;
6413 </description>
6414 </item>
6415
6416 <item>
6417 <title>Using appstream with isenkram to install hardware related packages in Debian</title>
6418 <link>http://www.hungry.com/~pere/blog/Using_appstream_with_isenkram_to_install_hardware_related_packages_in_Debian.html</link>
6419 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Using_appstream_with_isenkram_to_install_hardware_related_packages_in_Debian.html</guid>
6420 <pubDate>Sun, 20 Dec 2015 12:20:00 +0100</pubDate>
6421 <description>&lt;p&gt;Around three years ago, I created
6422 &lt;a href=&quot;http://packages.qa.debian.org/isenkram&quot;&gt;the isenkram
6423 system&lt;/a&gt; to get a more practical solution in Debian for handing
6424 hardware related packages. A GUI system in the isenkram package will
6425 present a pop-up dialog when some hardware dongle supported by
6426 relevant packages in Debian is inserted into the machine. The same
6427 lookup mechanism to detect packages is available as command line
6428 tools in the isenkram-cli package. In addition to mapping hardware,
6429 it will also map kernel firmware files to packages and make it easy to
6430 install needed firmware packages automatically. The key for this
6431 system to work is a good way to map hardware to packages, in other
6432 words, allow packages to announce what hardware they will work
6433 with.&lt;/p&gt;
6434
6435 &lt;p&gt;I started by providing data files in the isenkram source, and
6436 adding code to download the latest version of these data files at run
6437 time, to ensure every user had the most up to date mapping available.
6438 I also added support for storing the mapping in the Packages file in
6439 the apt repositories, but did not push this approach because while I
6440 was trying to figure out how to best store hardware/package mappings,
6441 &lt;a href=&quot;http://www.freedesktop.org/software/appstream/docs/&quot;&gt;the
6442 appstream system&lt;/a&gt; was announced. I got in touch and suggested to
6443 add the hardware mapping into that data set to be able to use
6444 appstream as a data source, and this was accepted at least for the
6445 Debian version of appstream.&lt;/p&gt;
6446
6447 &lt;p&gt;A few days ago using appstream in Debian for this became possible,
6448 and today I uploaded a new version 0.20 of isenkram adding support for
6449 appstream as a data source for mapping hardware to packages. The only
6450 package so far using appstream to announce its hardware support is my
6451 pymissile package. I got help from Matthias Klumpp with figuring out
6452 how do add the required
6453 &lt;a href=&quot;https://appstream.debian.org/html/sid/main/metainfo/pymissile.html&quot;&gt;metadata
6454 in pymissile&lt;/a&gt;. I added a file debian/pymissile.metainfo.xml with
6455 this content:&lt;/p&gt;
6456
6457 &lt;blockquote&gt;&lt;pre&gt;
6458 &amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
6459 &amp;lt;component&amp;gt;
6460 &amp;lt;id&amp;gt;pymissile&amp;lt;/id&amp;gt;
6461 &amp;lt;metadata_license&amp;gt;MIT&amp;lt;/metadata_license&amp;gt;
6462 &amp;lt;name&amp;gt;pymissile&amp;lt;/name&amp;gt;
6463 &amp;lt;summary&amp;gt;Control original Striker USB Missile Launcher&amp;lt;/summary&amp;gt;
6464 &amp;lt;description&amp;gt;
6465 &amp;lt;p&amp;gt;
6466 Pymissile provides a curses interface to control an original
6467 Marks and Spencer / Striker USB Missile Launcher, as well as a
6468 motion control script to allow a webcamera to control the
6469 launcher.
6470 &amp;lt;/p&amp;gt;
6471 &amp;lt;/description&amp;gt;
6472 &amp;lt;provides&amp;gt;
6473 &amp;lt;modalias&amp;gt;usb:v1130p0202d*&amp;lt;/modalias&amp;gt;
6474 &amp;lt;/provides&amp;gt;
6475 &amp;lt;/component&amp;gt;
6476 &lt;/pre&gt;&lt;/blockquote&gt;
6477
6478 &lt;p&gt;The key for isenkram is the component/provides/modalias value,
6479 which is a glob style match rule for hardware specific strings
6480 (modalias strings) provided by the Linux kernel. In this case, it
6481 will map to all USB devices with vendor code 1130 and product code
6482 0202.&lt;/p&gt;
6483
6484 &lt;p&gt;Note, it is important that the license of all the metadata files
6485 are compatible to have permissions to aggregate them into archive wide
6486 appstream files. Matthias suggested to use MIT or BSD licenses for
6487 these files. A challenge is figuring out a good id for the data, as
6488 it is supposed to be globally unique and shared across distributions
6489 (in other words, best to coordinate with upstream what to use). But
6490 it can be changed later or, so we went with the package name as
6491 upstream for this project is dormant.&lt;/p&gt;
6492
6493 &lt;p&gt;To get the metadata file installed in the correct location for the
6494 mirror update scripts to pick it up and include its content the
6495 appstream data source, the file must be installed in the binary
6496 package under /usr/share/appdata/. I did this by adding the following
6497 line to debian/pymissile.install:&lt;/p&gt;
6498
6499 &lt;blockquote&gt;&lt;pre&gt;
6500 debian/pymissile.metainfo.xml usr/share/appdata
6501 &lt;/pre&gt;&lt;/blockquote&gt;
6502
6503 &lt;p&gt;With that in place, the command line tool isenkram-lookup will list
6504 all packages useful on the current computer automatically, and the GUI
6505 pop-up handler will propose to install the package not already
6506 installed if a hardware dongle is inserted into the machine in
6507 question.&lt;/p&gt;
6508
6509 &lt;p&gt;Details of the modalias field in appstream is available from the
6510 &lt;a href=&quot;https://wiki.debian.org/DEP-11&quot;&gt;DEP-11&lt;/a&gt; proposal.&lt;/p&gt;
6511
6512 &lt;p&gt;To locate the modalias values of all hardware present in a machine,
6513 try running this command on the command line:&lt;/p&gt;
6514
6515 &lt;blockquote&gt;&lt;pre&gt;
6516 cat $(find /sys/devices/|grep modalias)
6517 &lt;/pre&gt;&lt;/blockquote&gt;
6518
6519 &lt;p&gt;To learn more about the isenkram system, please check out
6520 &lt;a href=&quot;http://www.hungry.com/~pere/blog/tags/isenkram/&quot;&gt;my
6521 blog posts tagged isenkram&lt;/a&gt;.&lt;/p&gt;
6522 </description>
6523 </item>
6524
6525 <item>
6526 <title>The GNU General Public License is not magic pixie dust</title>
6527 <link>http://www.hungry.com/~pere/blog/The_GNU_General_Public_License_is_not_magic_pixie_dust.html</link>
6528 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/The_GNU_General_Public_License_is_not_magic_pixie_dust.html</guid>
6529 <pubDate>Mon, 30 Nov 2015 09:55:00 +0100</pubDate>
6530 <description>&lt;p&gt;A blog post from my fellow Debian developer Paul Wise titled
6531 &quot;&lt;a href=&quot;http://bonedaddy.net/pabs3/log/2015/11/27/sfc-supporter/&quot;&gt;The
6532 GPL is not magic pixie dust&lt;/a&gt;&quot; explain the importance of making sure
6533 the &lt;a href=&quot;http://www.gnu.org/copyleft/gpl.html&quot;&gt;GPL&lt;/a&gt; is enforced.
6534 I quote the blog post from Paul in full here with his permission:&lt;p&gt;
6535
6536 &lt;blockquote&gt;
6537
6538 &lt;p&gt;&lt;a href=&quot;https://sfconservancy.org/supporter/&quot;&gt;&lt;img src=&quot;https://sfconservancy.org/img/supporter-badge.png&quot; width=&quot;194&quot; height=&quot;90&quot; alt=&quot;Become a Software Freedom Conservancy Supporter!&quot; align=&quot;right&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
6539
6540 &lt;blockquote&gt;
6541 The GPL is not magic pixie dust. It does not work by itself.&lt;br/&gt;
6542
6543 The first step is to choose a
6544 &lt;a href=&quot;https://copyleft.org/&quot;&gt;copyleft&lt;/a&gt; license for your
6545 code.&lt;br/&gt;
6546
6547 The next step is, when someone fails to follow that copyleft license,
6548 &lt;b&gt;it must be enforced&lt;/b&gt;&lt;br/&gt;
6549
6550 and its a simple fact of our modern society that such type of
6551 work&lt;br/&gt;
6552
6553 is incredibly expensive to do and incredibly difficult to do.
6554 &lt;/blockquote&gt;
6555
6556 &lt;p&gt;&lt;small&gt;-- &lt;a href=&quot;http://ebb.org/bkuhn/&quot;&gt;Bradley Kuhn&lt;/a&gt;, in
6557 &lt;a href=&quot;http://faif.us/&quot; title=&quot;Free as in Freedom&quot;&gt;FaiF&lt;/a&gt;
6558 &lt;a href=&quot;http://faif.us/cast/2015/nov/24/0x57/&quot;&gt;episode
6559 0x57&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
6560
6561 &lt;p&gt;As the Debian Website
6562 &lt;a href=&quot;https://bugs.debian.org/794116&quot;&gt;used&lt;/a&gt;
6563 &lt;a href=&quot;https://anonscm.debian.org/viewvc/webwml/webwml/english/intro/free.wml?r1=1.24&amp;amp;r2=1.25&quot;&gt;to&lt;/a&gt;
6564 imply, public domain and permissively licensed software can lead to
6565 the production of more proprietary software as people discover useful
6566 software, extend it and or incorporate it into their hardware or
6567 software products. Copyleft licenses such as the GNU GPL were created
6568 to close off this avenue to the production of proprietary software but
6569 such licenses are not enough. With the ongoing adoption of Free
6570 Software by individuals and groups, inevitably the community&#39;s
6571 expectations of license compliance are violated, usually out of
6572 ignorance of the way Free Software works, but not always. As Karen
6573 and Bradley explained in &lt;a href=&quot;http://faif.us/&quot; title=&quot;Free as in
6574 Freedom&quot;&gt;FaiF&lt;/a&gt;
6575 &lt;a href=&quot;http://faif.us/cast/2015/nov/24/0x57/&quot;&gt;episode 0x57&lt;/a&gt;,
6576 copyleft is nothing if no-one is willing and able to stand up in court
6577 to protect it. The reality of today&#39;s world is that legal
6578 representation is expensive, difficult and time consuming. With
6579 &lt;a href=&quot;http://gpl-violations.org/&quot;&gt;gpl-violations.org&lt;/a&gt; in hiatus
6580 &lt;a href=&quot;http://gpl-violations.org/news/20151027-homepage-recovers/&quot;&gt;until&lt;/a&gt;
6581 some time in 2016, the &lt;a href=&quot;https://sfconservancy.org/&quot;&gt;Software
6582 Freedom Conservancy&lt;/a&gt; (a tax-exempt charity) is the major defender
6583 of the Linux project, Debian and other groups against GPL violations.
6584 In March the SFC supported a
6585 &lt;a href=&quot;https://sfconservancy.org/news/2015/mar/05/vmware-lawsuit/&quot;&gt;lawsuit
6586 by Christoph Hellwig&lt;/a&gt; against VMware for refusing to
6587 &lt;a href=&quot;https://sfconservancy.org/linux-compliance/vmware-lawsuit-faq.html&quot;&gt;comply
6588 with the GPL&lt;/a&gt; in relation to their use of parts of the Linux
6589 kernel. Since then two of their sponsors pulled corporate funding and
6590 conferences
6591 &lt;a href=&quot;https://sfconservancy.org/blog/2015/nov/24/faif-carols-fundraiser/&quot;&gt;blocked
6592 or cancelled their talks&lt;/a&gt;. As a result they have decided to rely
6593 less on corporate funding and more on the broad community of
6594 individuals who support Free Software and copyleft. So the SFC has
6595 &lt;a href=&quot;https://sfconservancy.org/news/2015/nov/23/2015fundraiser/&quot;&gt;launched&lt;/a&gt;
6596 a &lt;a href=&quot;https://sfconservancy.org/supporter/&quot;&gt;campaign&lt;/a&gt; to create
6597 a community of folks who stand up for copyleft and the GPL by
6598 supporting their work on promoting and supporting copyleft and Free
6599 Software.&lt;/p&gt;
6600
6601 &lt;p&gt;If you support Free Software,
6602 &lt;a href=&quot;https://sfconservancy.org/blog/2015/nov/26/like-what-I-do/&quot;&gt;like&lt;/a&gt;
6603 what the SFC do, agree with their
6604 &lt;a href=&quot;https://sfconservancy.org/linux-compliance/principles.html&quot;&gt;compliance
6605 principles&lt;/a&gt;, are happy about their
6606 &lt;a href=&quot;https://sfconservancy.org/supporter/&quot;&gt;successes&lt;/a&gt; in 2015,
6607 work on a project that is an SFC
6608 &lt;a href=&quot;https://sfconservancy.org/members/current/&quot;&gt;member&lt;/a&gt; and or
6609 just want to stand up for copyleft, please join
6610 &lt;a href=&quot;https://identi.ca/cwebber/image/JQGPA4qbTyyp3-MY8QpvuA&quot;&gt;Christopher
6611 Allan Webber&lt;/a&gt;,
6612 &lt;a href=&quot;https://sfconservancy.org/blog/2015/nov/24/faif-carols-fundraiser/&quot;&gt;Carol
6613 Smith&lt;/a&gt;,
6614 &lt;a href=&quot;http://www.jonobacon.org/2015/11/25/supporting-software-freedom-conservancy/&quot;&gt;Jono
6615 Bacon&lt;/a&gt;, myself and
6616 &lt;a href=&quot;https://sfconservancy.org/sponsors/#supporters&quot;&gt;others&lt;/a&gt; in
6617 becoming a
6618 &lt;a href=&quot;https://sfconservancy.org/supporter/&quot;&gt;supporter&lt;/a&gt;. For the
6619 next week your donation will be
6620 &lt;a href=&quot;https://sfconservancy.org/news/2015/nov/27/black-friday/&quot;&gt;matched&lt;/a&gt;
6621 by an anonymous donor. Please also consider asking your employer to
6622 match your donation or become a sponsor of SFC. Don&#39;t forget to
6623 spread the word about your support for SFC via email, your blog and or
6624 social media accounts.&lt;/p&gt;
6625
6626 &lt;/blockquote&gt;
6627
6628 &lt;p&gt;I agree with Paul on this topic and just signed up as a Supporter
6629 of Software Freedom Conservancy myself. Perhaps you should be a
6630 supporter too?&lt;/p&gt;
6631 </description>
6632 </item>
6633
6634 <item>
6635 <title>PGP key transition statement for key EE4E02F9</title>
6636 <link>http://www.hungry.com/~pere/blog/PGP_key_transition_statement_for_key_EE4E02F9.html</link>
6637 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/PGP_key_transition_statement_for_key_EE4E02F9.html</guid>
6638 <pubDate>Tue, 17 Nov 2015 10:50:00 +0100</pubDate>
6639 <description>&lt;p&gt;I&#39;ve needed a new OpenPGP key for a while, but have not had time to
6640 set it up properly. I wanted to generate it offline and have it
6641 available on &lt;a href=&quot;http://shop.kernelconcepts.de/#openpgp&quot;&gt;a OpenPGP
6642 smart card&lt;/a&gt; for daily use, and learning how to do it and finding
6643 time to sit down with an offline machine almost took forever. But
6644 finally I&#39;ve been able to complete the process, and have now moved
6645 from my old GPG key to a new GPG key. See
6646 &lt;a href=&quot;http://www.hungry.com/~pere/blog/images/2015-11-17-new-gpg-key-transition.txt&quot;&gt;the
6647 full transition statement, signed with both my old and new key&lt;/a&gt; for
6648 the details. This is my new key:&lt;/p&gt;
6649
6650 &lt;pre&gt;
6651 pub 3936R/&lt;a href=&quot;http://pgp.cs.uu.nl/stats/111D6B29EE4E02F9.html&quot;&gt;111D6B29EE4E02F9&lt;/a&gt; 2015-11-03 [expires: 2019-11-14]
6652 Key fingerprint = 3AC7 B2E3 ACA5 DF87 78F1 D827 111D 6B29 EE4E 02F9
6653 uid Petter Reinholdtsen &amp;lt;pere@hungry.com&amp;gt;
6654 uid Petter Reinholdtsen &amp;lt;pere@debian.org&amp;gt;
6655 sub 4096R/87BAFB0E 2015-11-03 [expires: 2019-11-02]
6656 sub 4096R/F91E6DE9 2015-11-03 [expires: 2019-11-02]
6657 sub 4096R/A0439BAB 2015-11-03 [expires: 2019-11-02]
6658 &lt;/pre&gt;
6659
6660 &lt;p&gt;The key can be downloaded from the OpenPGP key servers, signed by
6661 my old key.&lt;/p&gt;
6662
6663 &lt;p&gt;If you signed my old key
6664 (&lt;a href=&quot;http://pgp.cs.uu.nl/stats/DB4CCC4B2A30D729.html&quot;&gt;DB4CCC4B2A30D729&lt;/a&gt;),
6665 I&#39;d very much appreciate a signature on my new key, details and
6666 instructions in the transition statement. I m happy to reciprocate if
6667 you have a similarly signed transition statement to present.&lt;/p&gt;
6668 </description>
6669 </item>
6670
6671 <item>
6672 <title>The life and death of a laptop battery</title>
6673 <link>http://www.hungry.com/~pere/blog/The_life_and_death_of_a_laptop_battery.html</link>
6674 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/The_life_and_death_of_a_laptop_battery.html</guid>
6675 <pubDate>Thu, 24 Sep 2015 16:00:00 +0200</pubDate>
6676 <description>&lt;p&gt;When I get a new laptop, the battery life time at the start is OK.
6677 But this do not last. The last few laptops gave me a feeling that
6678 within a year, the life time is just a fraction of what it used to be,
6679 and it slowly become painful to use the laptop without power connected
6680 all the time. Because of this, when I got a new Thinkpad X230 laptop
6681 about two years ago, I decided to monitor its battery state to have
6682 more hard facts when the battery started to fail.&lt;/p&gt;
6683
6684 &lt;img src=&quot;http://www.hungry.com/~pere/blog/images/2015-09-24-laptop-battery-graph.png&quot;/&gt;
6685
6686 &lt;p&gt;First I tried to find a sensible Debian package to record the
6687 battery status, assuming that this must be a problem already handled
6688 by someone else. I found
6689 &lt;a href=&quot;https://tracker.debian.org/pkg/battery-stats&quot;&gt;battery-stats&lt;/a&gt;,
6690 which collects statistics from the battery, but it was completely
6691 broken. I sent a few suggestions to the maintainer, but decided to
6692 write my own collector as a shell script while I waited for feedback
6693 from him. Via
6694 &lt;a href=&quot;http://www.ifweassume.com/2013/08/the-de-evolution-of-my-laptop-battery.html&quot;&gt;a
6695 blog post about the battery development on a MacBook Air&lt;/a&gt; I also
6696 discovered
6697 &lt;a href=&quot;https://github.com/jradavenport/batlog.git&quot;&gt;batlog&lt;/a&gt;, not
6698 available in Debian.&lt;/p&gt;
6699
6700 &lt;p&gt;I started my collector 2013-07-15, and it has been collecting
6701 battery stats ever since. Now my
6702 /var/log/hjemmenett-battery-status.log file contain around 115,000
6703 measurements, from the time the battery was working great until now,
6704 when it is unable to charge above 7% of original capacity. My
6705 collector shell script is quite simple and look like this:&lt;/p&gt;
6706
6707 &lt;pre&gt;
6708 #!/bin/sh
6709 # Inspired by
6710 # http://www.ifweassume.com/2013/08/the-de-evolution-of-my-laptop-battery.html
6711 # See also
6712 # http://blog.sleeplessbeastie.eu/2013/01/02/debian-how-to-monitor-battery-capacity/
6713 logfile=/var/log/hjemmenett-battery-status.log
6714
6715 files=&quot;manufacturer model_name technology serial_number \
6716 energy_full energy_full_design energy_now cycle_count status&quot;
6717
6718 if [ ! -e &quot;$logfile&quot; ] ; then
6719 (
6720 printf &quot;timestamp,&quot;
6721 for f in $files; do
6722 printf &quot;%s,&quot; $f
6723 done
6724 echo
6725 ) &gt; &quot;$logfile&quot;
6726 fi
6727
6728 log_battery() {
6729 # Print complete message in one echo call, to avoid race condition
6730 # when several log processes run in parallel.
6731 msg=$(printf &quot;%s,&quot; $(date +%s); \
6732 for f in $files; do \
6733 printf &quot;%s,&quot; $(cat $f); \
6734 done)
6735 echo &quot;$msg&quot;
6736 }
6737
6738 cd /sys/class/power_supply
6739
6740 for bat in BAT*; do
6741 (cd $bat &amp;&amp; log_battery &gt;&gt; &quot;$logfile&quot;)
6742 done
6743 &lt;/pre&gt;
6744
6745 &lt;p&gt;The script is called when the power management system detect a
6746 change in the power status (power plug in or out), and when going into
6747 and out of hibernation and suspend. In addition, it collect a value
6748 every 10 minutes. This make it possible for me know when the battery
6749 is discharging, charging and how the maximum charge change over time.
6750 The code for the Debian package
6751 &lt;a href=&quot;https://github.com/petterreinholdtsen/battery-status&quot;&gt;is now
6752 available on github&lt;/a&gt;.&lt;/p&gt;
6753
6754 &lt;p&gt;The collected log file look like this:&lt;/p&gt;
6755
6756 &lt;pre&gt;
6757 timestamp,manufacturer,model_name,technology,serial_number,energy_full,energy_full_design,energy_now,cycle_count,status,
6758 1376591133,LGC,45N1025,Li-ion,974,62800000,62160000,39050000,0,Discharging,
6759 [...]
6760 1443090528,LGC,45N1025,Li-ion,974,4900000,62160000,4900000,0,Full,
6761 1443090601,LGC,45N1025,Li-ion,974,4900000,62160000,4900000,0,Full,
6762 &lt;/pre&gt;
6763
6764 &lt;p&gt;I wrote a small script to create a graph of the charge development
6765 over time. This graph depicted above show the slow death of my laptop
6766 battery.&lt;/p&gt;
6767
6768 &lt;p&gt;But why is this happening? Why are my laptop batteries always
6769 dying in a year or two, while the batteries of space probes and
6770 satellites keep working year after year. If we are to believe
6771 &lt;a href=&quot;http://batteryuniversity.com/learn/article/how_to_prolong_lithium_based_batteries&quot;&gt;Battery
6772 University&lt;/a&gt;, the cause is me charging the battery whenever I have a
6773 chance, and the fix is to not charge the Lithium-ion batteries to 100%
6774 all the time, but to stay below 90% of full charge most of the time.
6775 I&#39;ve been told that the Tesla electric cars
6776 &lt;a href=&quot;http://my.teslamotors.com/de_CH/forum/forums/battery-charge-limit&quot;&gt;limit
6777 the charge of their batteries to 80%&lt;/a&gt;, with the option to charge to
6778 100% when preparing for a longer trip (not that I would want a car
6779 like Tesla where rights to privacy is abandoned, but that is another
6780 story), which I guess is the option we should have for laptops on
6781 Linux too.&lt;/p&gt;
6782
6783 &lt;p&gt;Is there a good and generic way with Linux to tell the battery to
6784 stop charging at 80%, unless requested to charge to 100% once in
6785 preparation for a longer trip? I found
6786 &lt;a href=&quot;http://askubuntu.com/questions/34452/how-can-i-limit-battery-charging-to-80-capacity&quot;&gt;one
6787 recipe on askubuntu for Ubuntu to limit charging on Thinkpad to
6788 80%&lt;/a&gt;, but could not get it to work (kernel module refused to
6789 load).&lt;/p&gt;
6790
6791 &lt;p&gt;I wonder why the battery capacity was reported to be more than 100%
6792 at the start. I also wonder why the &quot;full capacity&quot; increases some
6793 times, and if it is possible to repeat the process to get the battery
6794 back to design capacity. And I wonder if the discharge and charge
6795 speed change over time, or if this stay the same. I did not yet try
6796 to write a tool to calculate the derivative values of the battery
6797 level, but suspect some interesting insights might be learned from
6798 those.&lt;/p&gt;
6799
6800 &lt;p&gt;Update 2015-09-24: I got a tip to install the packages
6801 acpi-call-dkms and tlp (unfortunately missing in Debian stable)
6802 packages instead of the tp-smapi-dkms package I had tried to use
6803 initially, and use &#39;tlp setcharge 40 80&#39; to change when charging start
6804 and stop. I&#39;ve done so now, but expect my existing battery is toast
6805 and need to be replaced. The proposal is unfortunately Thinkpad
6806 specific.&lt;/p&gt;
6807 </description>
6808 </item>
6809
6810 <item>
6811 <title>New laptop - some more clues and ideas based on feedback</title>
6812 <link>http://www.hungry.com/~pere/blog/New_laptop___some_more_clues_and_ideas_based_on_feedback.html</link>
6813 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/New_laptop___some_more_clues_and_ideas_based_on_feedback.html</guid>
6814 <pubDate>Sun, 5 Jul 2015 21:40:00 +0200</pubDate>
6815 <description>&lt;p&gt;Several people contacted me after my previous blog post about my
6816 need for a new laptop, and provided very useful feedback. I wish to
6817 thank every one of these. Several pointed me to the possibility of
6818 fixing my X230, and I am already in the process of getting Lenovo to
6819 do so thanks to the on site, next day support contract covering the
6820 machine. But the battery is almost useless (I expect to replace it
6821 with a non-official battery) and I do not expect the machine to live
6822 for many more years, so it is time to plan its replacement. If I did
6823 not have a support contract, it was suggested to find replacement parts
6824 using &lt;a href=&quot;http://www.francecrans.com/&quot;&gt;FrancEcrans&lt;/a&gt;, but it
6825 might present a language barrier as I do not understand French.&lt;/p&gt;
6826
6827 &lt;p&gt;One tip I got was to use the
6828 &lt;a href=&quot;https://skinflint.co.uk/?cat=nb&quot;&gt;Skinflint&lt;/a&gt; web service to
6829 compare laptop models. It seem to have more models available than
6830 prisjakt.no. Another tip I got from someone I know have similar
6831 keyboard preferences was that the HP EliteBook 840 keyboard is not
6832 very good, and this matches my experience with earlier EliteBook
6833 keyboards I tested. Because of this, I will not consider it any further.
6834
6835 &lt;p&gt;When I wrote my blog post, I was not aware of Thinkpad X250, the
6836 newest Thinkpad X model. The keyboard reintroduces mouse buttons
6837 (which is missing from the X240), and is working fairly well with
6838 Debian Sid/Unstable according to
6839 &lt;a href=&quot;http://www.corsac.net/X250/&quot;&gt;Corsac.net&lt;/a&gt;. The reports I
6840 got on the keyboard quality are not consistent. Some say the keyboard
6841 is good, others say it is ok, while others say it is not very good.
6842 Those with experience from X41 and and X60 agree that the X250
6843 keyboard is not as good as those trusty old laptops, and suggest I
6844 keep and fix my X230 instead of upgrading, or get a used X230 to
6845 replace it. I&#39;m also told that the X250 lack leds for caps lock, disk
6846 activity and battery status, which is very convenient on my X230. I&#39;m
6847 also told that the CPU fan is running very often, making it a bit
6848 noisy. In any case, the X250 do not work out of the box with Debian
6849 Stable/Jessie, one of my requirements.&lt;/p&gt;
6850
6851 &lt;p&gt;I have also gotten a few vendor proposals, one was
6852 &lt;a href=&quot;http://pro-star.com&quot;&gt;Pro-Star&lt;/a&gt;, another was
6853 &lt;a href=&quot;http://shop.gluglug.org.uk/product/libreboot-x200/&quot;&gt;Libreboot&lt;/a&gt;.
6854 The latter look very attractive to me.&lt;/p&gt;
6855
6856 &lt;p&gt;Again, thank you all for the very useful feedback. It help a lot
6857 as I keep looking for a replacement.&lt;/p&gt;
6858
6859 &lt;p&gt;Update 2015-07-06: I was recommended to check out the
6860 &lt;a href=&quot;&quot;&gt;lapstore.de&lt;/a&gt; web shop for used laptops. They got several
6861 different
6862 &lt;a href=&quot;http://www.lapstore.de/f.php/shop/lapstore/f/411/lang/x/kw/Lenovo_ThinkPad_X_Serie/&quot;&gt;old
6863 thinkpad X models&lt;/a&gt;, and provide one year warranty.&lt;/p&gt;
6864 </description>
6865 </item>
6866
6867 <item>
6868 <title>Time to find a new laptop, as the old one is broken after only two years</title>
6869 <link>http://www.hungry.com/~pere/blog/Time_to_find_a_new_laptop__as_the_old_one_is_broken_after_only_two_years.html</link>
6870 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Time_to_find_a_new_laptop__as_the_old_one_is_broken_after_only_two_years.html</guid>
6871 <pubDate>Fri, 3 Jul 2015 07:10:00 +0200</pubDate>
6872 <description>&lt;p&gt;My primary work horse laptop is failing, and will need a
6873 replacement soon. The left 5 cm of the screen on my Thinkpad X230
6874 started flickering yesterday, and I suspect the cause is a broken
6875 cable, as changing the angle of the screen some times get rid of the
6876 flickering.&lt;/p&gt;
6877
6878 &lt;p&gt;My requirements have not really changed since I bought it, and is
6879 still as
6880 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Thank_you_Thinkpad_X41__for_your_long_and_trustworthy_service.html&quot;&gt;I
6881 described them in 2013&lt;/a&gt;. The last time I bought a laptop, I had
6882 good help from
6883 &lt;a href=&quot;http://www.prisjakt.no/category.php?k=353&quot;&gt;prisjakt.no&lt;/a&gt;
6884 where I could select at least a few of the requirements (mouse pin,
6885 wifi, weight) and go through the rest manually. Three button mouse
6886 and a good keyboard is not available as an option, and all the three
6887 laptop models proposed today (Thinkpad X240, HP EliteBook 820 G1 and
6888 G2) lack three mouse buttons). It is also unclear to me how good the
6889 keyboard on the HP EliteBooks are. I hope Lenovo have not messed up
6890 the keyboard, even if the quality and robustness in the X series have
6891 deteriorated since X41.&lt;/p&gt;
6892
6893 &lt;p&gt;I wonder how I can find a sensible laptop when none of the options
6894 seem sensible to me? Are there better services around to search the
6895 set of available laptops for features? Please send me an email if you
6896 have suggestions.&lt;/p&gt;
6897
6898 &lt;p&gt;Update 2015-07-23: I got a suggestion to check out the FSF
6899 &lt;a href=&quot;http://www.fsf.org/resources/hw/endorsement/respects-your-freedom&quot;&gt;list
6900 of endorsed hardware&lt;/a&gt;, which is useful background information.&lt;/p&gt;
6901 </description>
6902 </item>
6903
6904 <item>
6905 <title>How to stay with sysvinit in Debian Jessie</title>
6906 <link>http://www.hungry.com/~pere/blog/How_to_stay_with_sysvinit_in_Debian_Jessie.html</link>
6907 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/How_to_stay_with_sysvinit_in_Debian_Jessie.html</guid>
6908 <pubDate>Sat, 22 Nov 2014 01:00:00 +0100</pubDate>
6909 <description>&lt;p&gt;By now, it is well known that Debian Jessie will not be using
6910 sysvinit as its boot system by default. But how can one keep using
6911 sysvinit in Jessie? It is fairly easy, and here are a few recipes,
6912 courtesy of
6913 &lt;a href=&quot;http://www.vitavonni.de/blog/201410/2014102101-avoiding-systemd.html&quot;&gt;Erich
6914 Schubert&lt;/a&gt; and
6915 &lt;a href=&quot;http://smcv.pseudorandom.co.uk/2014/still_universal/&quot;&gt;Simon
6916 McVittie&lt;/a&gt;.
6917
6918 &lt;p&gt;If you already are using Wheezy and want to upgrade to Jessie and
6919 keep sysvinit as your boot system, create a file
6920 &lt;tt&gt;/etc/apt/preferences.d/use-sysvinit&lt;/tt&gt; with this content before
6921 you upgrade:&lt;/p&gt;
6922
6923 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
6924 Package: systemd-sysv
6925 Pin: release o=Debian
6926 Pin-Priority: -1
6927 &lt;/pre&gt;&lt;/blockquote&gt;&lt;p&gt;
6928
6929 &lt;p&gt;This file content will tell apt and aptitude to not consider
6930 installing systemd-sysv as part of any installation and upgrade
6931 solution when resolving dependencies, and thus tell it to avoid
6932 systemd as a default boot system. The end result should be that the
6933 upgraded system keep using sysvinit.&lt;/p&gt;
6934
6935 &lt;p&gt;If you are installing Jessie for the first time, there is no way to
6936 get sysvinit installed by default (debootstrap used by
6937 debian-installer have no option for this), but one can tell the
6938 installer to switch to sysvinit before the first boot. Either by
6939 using a kernel argument to the installer, or by adding a line to the
6940 preseed file used. First, the kernel command line argument:
6941
6942 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
6943 preseed/late_command=&quot;in-target apt-get install --purge -y sysvinit-core&quot;
6944 &lt;/pre&gt;&lt;/blockquote&gt;&lt;p&gt;
6945
6946 &lt;p&gt;Next, the line to use in a preseed file:&lt;/p&gt;
6947
6948 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
6949 d-i preseed/late_command string in-target apt-get install -y sysvinit-core
6950 &lt;/pre&gt;&lt;/blockquote&gt;&lt;p&gt;
6951
6952 &lt;p&gt;One can of course also do this after the first boot by installing
6953 the sysvinit-core package.&lt;/p&gt;
6954
6955 &lt;p&gt;I recommend only using sysvinit if you really need it, as the
6956 sysvinit boot sequence in Debian have several hardware specific bugs
6957 on Linux caused by the fact that it is unpredictable when hardware
6958 devices show up during boot. But on the other hand, the new default
6959 boot system still have a few rough edges I hope will be fixed before
6960 Jessie is released.&lt;/p&gt;
6961
6962 &lt;p&gt;Update 2014-11-26: Inspired by
6963 &lt;ahref=&quot;https://www.mirbsd.org/permalinks/wlog-10-tg_e20141125-tg.htm#e20141125-tg_wlog-10-tg&quot;&gt;a
6964 blog post by Torsten Glaser&lt;/a&gt;, added --purge to the preseed
6965 line.&lt;/p&gt;
6966 </description>
6967 </item>
6968
6969 <item>
6970 <title>A Debian package for SMTP via Tor (aka SMTorP) using exim4</title>
6971 <link>http://www.hungry.com/~pere/blog/A_Debian_package_for_SMTP_via_Tor__aka_SMTorP__using_exim4.html</link>
6972 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/A_Debian_package_for_SMTP_via_Tor__aka_SMTorP__using_exim4.html</guid>
6973 <pubDate>Mon, 10 Nov 2014 13:40:00 +0100</pubDate>
6974 <description>&lt;p&gt;The right to communicate with your friends and family in private,
6975 without anyone snooping, is a right every citicen have in a liberal
6976 democracy. But this right is under serious attack these days.&lt;/p&gt;
6977
6978 &lt;p&gt;A while back it occurred to me that one way to make the dragnet
6979 surveillance conducted by NSA, GCHQ, FRA and others (and confirmed by
6980 the whisleblower Snowden) more expensive for Internet email,
6981 is to deliver all email using SMTP via Tor. Such SMTP option would be
6982 a nice addition to the FreedomBox project if we could send email
6983 between FreedomBox machines without leaking metadata about the emails
6984 to the people peeking on the wire. I
6985 &lt;a href=&quot;http://lists.alioth.debian.org/pipermail/freedombox-discuss/2014-October/006493.html&quot;&gt;proposed
6986 this on the FreedomBox project mailing list in October&lt;/a&gt; and got a
6987 lot of useful feedback and suggestions. It also became obvious to me
6988 that this was not a novel idea, as the same idea was tested and
6989 documented by Johannes Berg as early as 2006, and both
6990 &lt;a href=&quot;https://github.com/pagekite/Mailpile/wiki/SMTorP&quot;&gt;the
6991 Mailpile&lt;/a&gt; and &lt;a href=&quot;http://dee.su/cables&quot;&gt;the Cables&lt;/a&gt; systems
6992 propose a similar method / protocol to pass emails between users.&lt;/p&gt;
6993
6994 &lt;p&gt;To implement such system one need to set up a Tor hidden service
6995 providing the SMTP protocol on port 25, and use email addresses
6996 looking like username@hidden-service-name.onion. With such addresses
6997 the connections to port 25 on hidden-service-name.onion using Tor will
6998 go to the correct SMTP server. To do this, one need to configure the
6999 Tor daemon to provide the hidden service and the mail server to accept
7000 emails for this .onion domain. To learn more about Exim configuration
7001 in Debian and test the design provided by Johannes Berg in his FAQ, I
7002 set out yesterday to create a Debian package for making it trivial to
7003 set up such SMTP over Tor service based on Debian. Getting it to work
7004 were fairly easy, and
7005 &lt;a href=&quot;https://github.com/petterreinholdtsen/exim4-smtorp&quot;&gt;the
7006 source code for the Debian package&lt;/a&gt; is available from github. I
7007 plan to move it into Debian if further testing prove this to be a
7008 useful approach.&lt;/p&gt;
7009
7010 &lt;p&gt;If you want to test this, set up a blank Debian machine without any
7011 mail system installed (or run &lt;tt&gt;apt-get purge exim4-config&lt;/tt&gt; to
7012 get rid of exim4). Install tor, clone the git repository mentioned
7013 above, build the deb and install it on the machine. Next, run
7014 &lt;tt&gt;/usr/lib/exim4-smtorp/setup-exim-hidden-service&lt;/tt&gt; and follow
7015 the instructions to get the service up and running. Restart tor and
7016 exim when it is done, and test mail delivery using swaks like
7017 this:&lt;/p&gt;
7018
7019 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
7020 torsocks swaks --server dutlqrrmjhtfa3vp.onion \
7021 --to fbx@dutlqrrmjhtfa3vp.onion
7022 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
7023
7024 &lt;p&gt;This will test the SMTP delivery using tor. Replace the email
7025 address with your own address to test your server. :)&lt;/p&gt;
7026
7027 &lt;p&gt;The setup procedure is still to complex, and I hope it can be made
7028 easier and more automatic. Especially the tor setup need more work.
7029 Also, the package include a tor-smtp tool written in C, but its task
7030 should probably be rewritten in some script language to make the deb
7031 architecture independent. It would probably also make the code easier
7032 to review. The tor-smtp tool currently need to listen on a socket for
7033 exim to talk to it and is started using xinetd. It would be better if
7034 no daemon and no socket is needed. I suspect it is possible to get
7035 exim to run a command line tool for delivery instead of talking to a
7036 socket, and hope to figure out how in a future version of this
7037 system.&lt;/p&gt;
7038
7039 &lt;p&gt;Until I wipe my test machine, I can be reached using the
7040 &lt;tt&gt;fbx@dutlqrrmjhtfa3vp.onion&lt;/tt&gt; mail address, deliverable over
7041 SMTorP. :)&lt;/p&gt;
7042 </description>
7043 </item>
7044
7045 <item>
7046 <title>listadmin, the quick way to moderate mailman lists - nice free software</title>
7047 <link>http://www.hungry.com/~pere/blog/listadmin__the_quick_way_to_moderate_mailman_lists___nice_free_software.html</link>
7048 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/listadmin__the_quick_way_to_moderate_mailman_lists___nice_free_software.html</guid>
7049 <pubDate>Wed, 22 Oct 2014 20:00:00 +0200</pubDate>
7050 <description>&lt;p&gt;If you ever had to moderate a mailman list, like the ones on
7051 alioth.debian.org, you know the web interface is fairly slow to
7052 operate. First you visit one web page, enter the moderation password
7053 and get a new page shown with a list of all the messages to moderate
7054 and various options for each email address. This take a while for
7055 every list you moderate, and you need to do it regularly to do a good
7056 job as a list moderator. But there is a quick alternative,
7057 &lt;a href=&quot;http://heim.ifi.uio.no/kjetilho/hacks/#listadmin&quot;&gt;the
7058 listadmin program&lt;/a&gt;. It allow you to check lists for new messages
7059 to moderate in a fraction of a second. Here is a test run on two
7060 lists I recently took over:&lt;/p&gt;
7061
7062 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
7063 % time listadmin xiph
7064 fetching data for pkg-xiph-commits@lists.alioth.debian.org ... nothing in queue
7065 fetching data for pkg-xiph-maint@lists.alioth.debian.org ... nothing in queue
7066
7067 real 0m1.709s
7068 user 0m0.232s
7069 sys 0m0.012s
7070 %
7071 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
7072
7073 &lt;p&gt;In 1.7 seconds I had checked two mailing lists and confirmed that
7074 there are no message in the moderation queue. Every morning I
7075 currently moderate 68 mailman lists, and it normally take around two
7076 minutes. When I took over the two pkg-xiph lists above a few days
7077 ago, there were 400 emails waiting in the moderator queue. It took me
7078 less than 15 minutes to process them all using the listadmin
7079 program.&lt;/p&gt;
7080
7081 &lt;p&gt;If you install
7082 &lt;a href=&quot;https://tracker.debian.org/pkg/listadmin&quot;&gt;the listadmin
7083 package&lt;/a&gt; from Debian and create a file &lt;tt&gt;~/.listadmin.ini&lt;/tt&gt;
7084 with content like this, the moderation task is a breeze:&lt;/p&gt;
7085
7086 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
7087 username username@example.org
7088 spamlevel 23
7089 default discard
7090 discard_if_reason &quot;Posting restricted to members only. Remove us from your mail list.&quot;
7091
7092 password secret
7093 adminurl https://{domain}/mailman/admindb/{list}
7094 mailman-list@lists.example.com
7095
7096 password hidden
7097 other-list@otherserver.example.org
7098 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
7099
7100 &lt;p&gt;There are other options to set as well. Check the manual page to
7101 learn the details.&lt;/p&gt;
7102
7103 &lt;p&gt;If you are forced to moderate lists on a mailman installation where
7104 the SSL certificate is self signed or not properly signed by a
7105 generally accepted signing authority, you can set a environment
7106 variable when calling listadmin to disable SSL verification:&lt;/p&gt;
7107
7108 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
7109 PERL_LWP_SSL_VERIFY_HOSTNAME=0 listadmin
7110 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
7111
7112 &lt;p&gt;If you want to moderate a subset of the lists you take care of, you
7113 can provide an argument to the listadmin script like I do in the
7114 initial screen dump (the xiph argument). Using an argument, only
7115 lists matching the argument string will be processed. This make it
7116 quick to accept messages if you notice the moderation request in your
7117 email.&lt;/p&gt;
7118
7119 &lt;p&gt;Without the listadmin program, I would never be the moderator of 68
7120 mailing lists, as I simply do not have time to spend on that if the
7121 process was any slower. The listadmin program have saved me hours of
7122 time I could spend elsewhere over the years. It truly is nice free
7123 software.&lt;/p&gt;
7124
7125 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
7126 activities, please send Bitcoin donations to my address
7127 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
7128
7129 &lt;p&gt;Update 2014-10-27: Added missing &#39;username&#39; statement in
7130 configuration example. Also, I&#39;ve been told that the
7131 PERL_LWP_SSL_VERIFY_HOSTNAME=0 setting do not work for everyone. Not
7132 sure why.&lt;/p&gt;
7133 </description>
7134 </item>
7135
7136 <item>
7137 <title>Debian Jessie, PXE and automatic firmware installation</title>
7138 <link>http://www.hungry.com/~pere/blog/Debian_Jessie__PXE_and_automatic_firmware_installation.html</link>
7139 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Debian_Jessie__PXE_and_automatic_firmware_installation.html</guid>
7140 <pubDate>Fri, 17 Oct 2014 14:10:00 +0200</pubDate>
7141 <description>&lt;p&gt;When PXE installing laptops with Debian, I often run into the
7142 problem that the WiFi card require some firmware to work properly.
7143 And it has been a pain to fix this using preseeding in Debian.
7144 Normally something more is needed. But thanks to
7145 &lt;a href=&quot;https://packages.qa.debian.org/i/isenkram.html&quot;&gt;my isenkram
7146 package&lt;/a&gt; and its recent tasksel extension, it has now become easy
7147 to do this using simple preseeding.&lt;/p&gt;
7148
7149 &lt;p&gt;The isenkram-cli package provide tasksel tasks which will install
7150 firmware for the hardware found in the machine (actually, requested by
7151 the kernel modules for the hardware). (It can also install user space
7152 programs supporting the hardware detected, but that is not the focus
7153 of this story.)&lt;/p&gt;
7154
7155 &lt;p&gt;To get this working in the default installation, two preeseding
7156 values are needed. First, the isenkram-cli package must be installed
7157 into the target chroot (aka the hard drive) before tasksel is executed
7158 in the pkgsel step of the debian-installer system. This is done by
7159 preseeding the base-installer/includes debconf value to include the
7160 isenkram-cli package. The package name is next passed to debootstrap
7161 for installation. With the isenkram-cli package in place, tasksel
7162 will automatically use the isenkram tasks to detect hardware specific
7163 packages for the machine being installed and install them, because
7164 isenkram-cli contain tasksel tasks.&lt;/p&gt;
7165
7166 &lt;p&gt;Second, one need to enable the non-free APT repository, because
7167 most firmware unfortunately is non-free. This is done by preseeding
7168 the apt-mirror-setup step. This is unfortunate, but for a lot of
7169 hardware it is the only option in Debian.&lt;/p&gt;
7170
7171 &lt;p&gt;The end result is two lines needed in your preseeding file to get
7172 firmware installed automatically by the installer:&lt;/p&gt;
7173
7174 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
7175 base-installer base-installer/includes string isenkram-cli
7176 apt-mirror-setup apt-setup/non-free boolean true
7177 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
7178
7179 &lt;p&gt;The current version of isenkram-cli in testing/jessie will install
7180 both firmware and user space packages when using this method. It also
7181 do not work well, so use version 0.15 or later. Installing both
7182 firmware and user space packages might give you a bit more than you
7183 want, so I decided to split the tasksel task in two, one for firmware
7184 and one for user space programs. The firmware task is enabled by
7185 default, while the one for user space programs is not. This split is
7186 implemented in the package currently in unstable.&lt;/p&gt;
7187
7188 &lt;p&gt;If you decide to give this a go, please let me know (via email) how
7189 this recipe work for you. :)&lt;/p&gt;
7190
7191 &lt;p&gt;So, I bet you are wondering, how can this work. First and
7192 foremost, it work because tasksel is modular, and driven by whatever
7193 files it find in /usr/lib/tasksel/ and /usr/share/tasksel/. So the
7194 isenkram-cli package place two files for tasksel to find. First there
7195 is the task description file (/usr/share/tasksel/descs/isenkram.desc):&lt;/p&gt;
7196
7197 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
7198 Task: isenkram-packages
7199 Section: hardware
7200 Description: Hardware specific packages (autodetected by isenkram)
7201 Based on the detected hardware various hardware specific packages are
7202 proposed.
7203 Test-new-install: show show
7204 Relevance: 8
7205 Packages: for-current-hardware
7206
7207 Task: isenkram-firmware
7208 Section: hardware
7209 Description: Hardware specific firmware packages (autodetected by isenkram)
7210 Based on the detected hardware various hardware specific firmware
7211 packages are proposed.
7212 Test-new-install: mark show
7213 Relevance: 8
7214 Packages: for-current-hardware-firmware
7215 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
7216
7217 &lt;p&gt;The key parts are Test-new-install which indicate how the task
7218 should be handled and the Packages line referencing to a script in
7219 /usr/lib/tasksel/packages/. The scripts use other scripts to get a
7220 list of packages to install. The for-current-hardware-firmware script
7221 look like this to list relevant firmware for the machine:
7222
7223 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
7224 #!/bin/sh
7225 #
7226 PATH=/usr/sbin:$PATH
7227 export PATH
7228 isenkram-autoinstall-firmware -l
7229 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
7230
7231 &lt;p&gt;With those two pieces in place, the firmware is installed by
7232 tasksel during the normal d-i run. :)&lt;/p&gt;
7233
7234 &lt;p&gt;If you want to test what tasksel will install when isenkram-cli is
7235 installed, run &lt;tt&gt;DEBIAN_PRIORITY=critical tasksel --test
7236 --new-install&lt;/tt&gt; to get the list of packages that tasksel would
7237 install.&lt;/p&gt;
7238
7239 &lt;p&gt;&lt;a href=&quot;https://wiki.debian.org/DebianEdu/&quot;&gt;Debian Edu&lt;/a&gt; will be
7240 pilots in testing this feature, as isenkram is used there now to
7241 install firmware, replacing the earlier scripts.&lt;/p&gt;
7242 </description>
7243 </item>
7244
7245 <item>
7246 <title>Ubuntu used to show the bread prizes at ICA Storo</title>
7247 <link>http://www.hungry.com/~pere/blog/Ubuntu_used_to_show_the_bread_prizes_at_ICA_Storo.html</link>
7248 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Ubuntu_used_to_show_the_bread_prizes_at_ICA_Storo.html</guid>
7249 <pubDate>Sat, 4 Oct 2014 15:20:00 +0200</pubDate>
7250 <description>&lt;p&gt;Today I came across an unexpected Ubuntu boot screen. Above the
7251 bread shelf on the ICA shop at Storo in Oslo, the grub menu of Ubuntu
7252 with Linux kernel 3.2.0-23 (ie probably version 12.04 LTS) was stuck
7253 on a screen normally showing the bread types and prizes:&lt;/p&gt;
7254
7255 &lt;p align=&quot;center&quot;&gt;&lt;img width=&quot;70%&quot; src=&quot;http://www.hungry.com/~pere/blog/images/2014-10-04-ubuntu-ica-storo-crop.jpeg&quot;&gt;&lt;/p&gt;
7256
7257 &lt;p&gt;If it had booted as it was supposed to, I would never had known
7258 about this hidden Linux installation. It is interesting what
7259 &lt;a href=&quot;http://revealingerrors.com/&quot;&gt;errors can reveal&lt;/a&gt;.&lt;/p&gt;
7260 </description>
7261 </item>
7262
7263 <item>
7264 <title>New lsdvd release version 0.17 is ready</title>
7265 <link>http://www.hungry.com/~pere/blog/New_lsdvd_release_version_0_17_is_ready.html</link>
7266 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/New_lsdvd_release_version_0_17_is_ready.html</guid>
7267 <pubDate>Sat, 4 Oct 2014 08:40:00 +0200</pubDate>
7268 <description>&lt;p&gt;The &lt;a href=&quot;https://sourceforge.net/p/lsdvd/&quot;&gt;lsdvd project&lt;/a&gt;
7269 got a new set of developers a few weeks ago, after the original
7270 developer decided to step down and pass the project to fresh blood.
7271 This project is now maintained by Petter Reinholdtsen and Steve
7272 Dibb.&lt;/p&gt;
7273
7274 &lt;p&gt;I just wrapped up
7275 &lt;a href=&quot;https://sourceforge.net/p/lsdvd/mailman/message/32896061/&quot;&gt;a
7276 new lsdvd release&lt;/a&gt;, available in git or from
7277 &lt;a href=&quot;https://sourceforge.net/projects/lsdvd/files/lsdvd/&quot;&gt;the
7278 download page&lt;/a&gt;. This is the changelog dated 2014-10-03 for version
7279 0.17.&lt;/p&gt;
7280
7281 &lt;ul&gt;
7282
7283 &lt;li&gt;Ignore &#39;phantom&#39; audio, subtitle tracks&lt;/li&gt;
7284 &lt;li&gt;Check for garbage in the program chains, which indicate that a track is
7285 non-existant, to work around additional copy protection&lt;/li&gt;
7286 &lt;li&gt;Fix displaying content type for audio tracks, subtitles&lt;/li&gt;
7287 &lt;li&gt;Fix pallete display of first entry&lt;/li&gt;
7288 &lt;li&gt;Fix include orders&lt;/li&gt;
7289 &lt;li&gt;Ignore read errors in titles that would not be displayed anyway&lt;/li&gt;
7290 &lt;li&gt;Fix the chapter count&lt;/li&gt;
7291 &lt;li&gt;Make sure the array size and the array limit used when initialising
7292 the palette size is the same.&lt;/li&gt;
7293 &lt;li&gt;Fix array printing.&lt;/li&gt;
7294 &lt;li&gt;Correct subsecond calculations.&lt;/li&gt;
7295 &lt;li&gt;Add sector information to the output format.&lt;/li&gt;
7296 &lt;li&gt;Clean up code to be closer to ANSI C and compile without warnings
7297 with more GCC compiler warnings.&lt;/li&gt;
7298
7299 &lt;/ul&gt;
7300
7301 &lt;p&gt;This change bring together patches for lsdvd in use in various
7302 Linux and Unix distributions, as well as patches submitted to the
7303 project the last nine years. Please check it out. :)&lt;/p&gt;
7304 </description>
7305 </item>
7306
7307 <item>
7308 <title>How to test Debian Edu Jessie despite some fatal problems with the installer</title>
7309 <link>http://www.hungry.com/~pere/blog/How_to_test_Debian_Edu_Jessie_despite_some_fatal_problems_with_the_installer.html</link>
7310 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/How_to_test_Debian_Edu_Jessie_despite_some_fatal_problems_with_the_installer.html</guid>
7311 <pubDate>Fri, 26 Sep 2014 12:20:00 +0200</pubDate>
7312 <description>&lt;p&gt;The &lt;a href=&quot;http://www.skolelinux.org/&quot;&gt;Debian Edu / Skolelinux
7313 project&lt;/a&gt; provide a Linux solution for schools, including a
7314 powerful desktop with education software, a central server providing
7315 web pages, user database, user home directories, central login and PXE
7316 boot of both clients without disk and the installation to install Debian
7317 Edu on machines with disk (and a few other services perhaps to small
7318 to mention here). We in the Debian Edu team are currently working on
7319 the Jessie based version, trying to get everything in shape before the
7320 freeze, to avoid having to maintain our own package repository in the
7321 future. The
7322 &lt;a href=&quot;https://wiki.debian.org/DebianEdu/Status/Jessie&quot;&gt;current
7323 status&lt;/a&gt; can be seen on the Debian wiki, and there is still heaps of
7324 work left. Some fatal problems block testing, breaking the installer,
7325 but it is possible to work around these to get anyway. Here is a
7326 recipe on how to get the installation limping along.&lt;/p&gt;
7327
7328 &lt;p&gt;First, download the test ISO via
7329 &lt;a href=&quot;ftp://ftp.skolelinux.no/cd-edu-testing-nolocal-netinst/debian-edu-amd64-i386-NETINST-1.iso&quot;&gt;ftp&lt;/a&gt;,
7330 &lt;a href=&quot;http://ftp.skolelinux.no/cd-edu-testing-nolocal-netinst/debian-edu-amd64-i386-NETINST-1.iso&quot;&gt;http&lt;/a&gt;
7331 or rsync (use
7332 ftp.skolelinux.org::cd-edu-testing-nolocal-netinst/debian-edu-amd64-i386-NETINST-1.iso).
7333 The ISO build was broken on Tuesday, so we do not get a new ISO every
7334 12 hours or so, but thankfully the ISO we already got we are able to
7335 install with some tweaking.&lt;/p&gt;
7336
7337 &lt;p&gt;When you get to the Debian Edu profile question, go to tty2
7338 (use Alt-Ctrl-F2), run&lt;/p&gt;
7339
7340 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
7341 nano /usr/bin/edu-eatmydata-install
7342 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
7343
7344 &lt;p&gt;and add &#39;exit 0&#39; as the second line, disabling the eatmydata
7345 optimization. Return to the installation, select the profile you want
7346 and continue. Without this change, exim4-config will fail to install
7347 due to a known bug in eatmydata.&lt;/p&gt;
7348
7349 &lt;p&gt;When you get the grub question at the end, answer /dev/sda (or if
7350 this do not work, figure out what your correct value would be. All my
7351 test machines need /dev/sda, so I have no advice if it do not fit
7352 your need.&lt;/p&gt;
7353
7354 &lt;p&gt;If you installed a profile including a graphical desktop, log in as
7355 root after the initial boot from hard drive, and install the
7356 education-desktop-XXX metapackage. XXX can be kde, gnome, lxde, xfce
7357 or mate. If you want several desktop options, install more than one
7358 metapackage. Once this is done, reboot and you should have a working
7359 graphical login screen. This workaround should no longer be needed
7360 once the education-tasks package version 1.801 enter testing in two
7361 days.&lt;/p&gt;
7362
7363 &lt;p&gt;I believe the ISO build will start working on two days when the new
7364 tasksel package enter testing and Steve McIntyre get a chance to
7365 update the debian-cd git repository. The eatmydata, grub and desktop
7366 issues are already fixed in unstable and testing, and should show up
7367 on the ISO as soon as the ISO build start working again. Well the
7368 eatmydata optimization is really just disabled. The proper fix
7369 require an upload by the eatmydata maintainer applying the patch
7370 provided in bug &lt;a href=&quot;https://bugs.debian.org/702711&quot;&gt;#702711&lt;/a&gt;.
7371 The rest have proper fixes in unstable.&lt;/p&gt;
7372
7373 &lt;p&gt;I hope this get you going with the installation testing, as we are
7374 quickly running out of time trying to get our Jessie based
7375 installation ready before the distribution freeze in a month.&lt;/p&gt;
7376 </description>
7377 </item>
7378
7379 <item>
7380 <title>Suddenly I am the new upstream of the lsdvd command line tool</title>
7381 <link>http://www.hungry.com/~pere/blog/Suddenly_I_am_the_new_upstream_of_the_lsdvd_command_line_tool.html</link>
7382 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Suddenly_I_am_the_new_upstream_of_the_lsdvd_command_line_tool.html</guid>
7383 <pubDate>Thu, 25 Sep 2014 11:20:00 +0200</pubDate>
7384 <description>&lt;p&gt;I use the &lt;a href=&quot;https://sourceforge.net/p/lsdvd/&quot;&gt;lsdvd tool&lt;/a&gt;
7385 to handle my fairly large DVD collection. It is a nice command line
7386 tool to get details about a DVD, like title, tracks, track length,
7387 etc, in XML, Perl or human readable format. But lsdvd have not seen
7388 any new development since 2006 and had a few irritating bugs affecting
7389 its use with some DVDs. Upstream seemed to be dead, and in January I
7390 sent a small probe asking for a version control repository for the
7391 project, without any reply. But I use it regularly and would like to
7392 get &lt;a href=&quot;https://packages.qa.debian.org/lsdvd&quot;&gt;an updated version
7393 into Debian&lt;/a&gt;. So two weeks ago I tried harder to get in touch with
7394 the project admin, and after getting a reply from him explaining that
7395 he was no longer interested in the project, I asked if I could take
7396 over. And yesterday, I became project admin.&lt;/p&gt;
7397
7398 &lt;p&gt;I&#39;ve been in touch with a Gentoo developer and the Debian
7399 maintainer interested in joining forces to maintain the upstream
7400 project, and I hope we can get a new release out fairly quickly,
7401 collecting the patches spread around on the internet into on place.
7402 I&#39;ve added the relevant Debian patches to the freshly created git
7403 repository, and expect the Gentoo patches to make it too. If you got
7404 a DVD collection and care about command line tools, check out
7405 &lt;a href=&quot;https://sourceforge.net/p/lsdvd/git/ci/master/tree/&quot;&gt;the git source&lt;/a&gt; and join
7406 &lt;a href=&quot;https://sourceforge.net/p/lsdvd/mailman/&quot;&gt;the project mailing
7407 list&lt;/a&gt;. :)&lt;/p&gt;
7408 </description>
7409 </item>
7410
7411 <item>
7412 <title>Speeding up the Debian installer using eatmydata and dpkg-divert</title>
7413 <link>http://www.hungry.com/~pere/blog/Speeding_up_the_Debian_installer_using_eatmydata_and_dpkg_divert.html</link>
7414 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Speeding_up_the_Debian_installer_using_eatmydata_and_dpkg_divert.html</guid>
7415 <pubDate>Tue, 16 Sep 2014 14:00:00 +0200</pubDate>
7416 <description>&lt;p&gt;The &lt;a href=&quot;https://www.debian.org/&quot;&gt;Debian&lt;/a&gt; installer could be
7417 a lot quicker. When we install more than 2000 packages in
7418 &lt;a href=&quot;http://www.skolelinux.org/&quot;&gt;Skolelinux / Debian Edu&lt;/a&gt; using
7419 tasksel in the installer, unpacking the binary packages take forever.
7420 A part of the slow I/O issue was discussed in
7421 &lt;a href=&quot;https://bugs.debian.org/613428&quot;&gt;bug #613428&lt;/a&gt; about too
7422 much file system sync-ing done by dpkg, which is the package
7423 responsible for unpacking the binary packages. Other parts (like code
7424 executed by postinst scripts) might also sync to disk during
7425 installation. All this sync-ing to disk do not really make sense to
7426 me. If the machine crash half-way through, I start over, I do not try
7427 to salvage the half installed system. So the failure sync-ing is
7428 supposed to protect against, hardware or system crash, is not really
7429 relevant while the installer is running.&lt;/p&gt;
7430
7431 &lt;p&gt;A few days ago, I thought of a way to get rid of all the file
7432 system sync()-ing in a fairly non-intrusive way, without the need to
7433 change the code in several packages. The idea is not new, but I have
7434 not heard anyone propose the approach using dpkg-divert before. It
7435 depend on the small and clever package
7436 &lt;a href=&quot;https://packages.qa.debian.org/eatmydata&quot;&gt;eatmydata&lt;/a&gt;, which
7437 uses LD_PRELOAD to replace the system functions for syncing data to
7438 disk with functions doing nothing, thus allowing programs to live
7439 dangerous while speeding up disk I/O significantly. Instead of
7440 modifying the implementation of dpkg, apt and tasksel (which are the
7441 packages responsible for selecting, fetching and installing packages),
7442 it occurred to me that we could just divert the programs away, replace
7443 them with a simple shell wrapper calling
7444 &quot;eatmydata&amp;nbsp;$program&amp;nbsp;$@&quot;, to get the same effect.
7445 Two days ago I decided to test the idea, and wrapped up a simple
7446 implementation for the Debian Edu udeb.&lt;/p&gt;
7447
7448 &lt;p&gt;The effect was stunning. In my first test it reduced the running
7449 time of the pkgsel step (installing tasks) from 64 to less than 44
7450 minutes (20 minutes shaved off the installation) on an old Dell
7451 Latitude D505 machine. I am not quite sure what the optimised time
7452 would have been, as I messed up the testing a bit, causing the debconf
7453 priority to get low enough for two questions to pop up during
7454 installation. As soon as I saw the questions I moved the installation
7455 along, but do not know how long the question were holding up the
7456 installation. I did some more measurements using Debian Edu Jessie,
7457 and got these results. The time measured is the time stamp in
7458 /var/log/syslog between the &quot;pkgsel: starting tasksel&quot; and the
7459 &quot;pkgsel: finishing up&quot; lines, if you want to do the same measurement
7460 yourself. In Debian Edu, the tasksel dialog do not show up, and the
7461 timing thus do not depend on how quickly the user handle the tasksel
7462 dialog.&lt;/p&gt;
7463
7464 &lt;p&gt;&lt;table&gt;
7465
7466 &lt;tr&gt;
7467 &lt;th&gt;Machine/setup&lt;/th&gt;
7468 &lt;th&gt;Original tasksel&lt;/th&gt;
7469 &lt;th&gt;Optimised tasksel&lt;/th&gt;
7470 &lt;th&gt;Reduction&lt;/th&gt;
7471 &lt;/tr&gt;
7472
7473 &lt;tr&gt;
7474 &lt;td&gt;Latitude D505 Main+LTSP LXDE&lt;/td&gt;
7475 &lt;td&gt;64 min (07:46-08:50)&lt;/td&gt;
7476 &lt;td&gt;&lt;44 min (11:27-12:11)&lt;/td&gt;
7477 &lt;td&gt;&gt;20 min 18%&lt;/td&gt;
7478 &lt;/tr&gt;
7479
7480 &lt;tr&gt;
7481 &lt;td&gt;Latitude D505 Roaming LXDE&lt;/td&gt;
7482 &lt;td&gt;57 min (08:48-09:45)&lt;/td&gt;
7483 &lt;td&gt;34 min (07:43-08:17)&lt;/td&gt;
7484 &lt;td&gt;23 min 40%&lt;/td&gt;
7485 &lt;/tr&gt;
7486
7487 &lt;tr&gt;
7488 &lt;td&gt;Latitude D505 Minimal&lt;/td&gt;
7489 &lt;td&gt;22 min (10:37-10:59)&lt;/td&gt;
7490 &lt;td&gt;11 min (11:16-11:27)&lt;/td&gt;
7491 &lt;td&gt;11 min 50%&lt;/td&gt;
7492 &lt;/tr&gt;
7493
7494 &lt;tr&gt;
7495 &lt;td&gt;Thinkpad X200 Minimal&lt;/td&gt;
7496 &lt;td&gt;6 min (08:19-08:25)&lt;/td&gt;
7497 &lt;td&gt;4 min (08:04-08:08)&lt;/td&gt;
7498 &lt;td&gt;2 min 33%&lt;/td&gt;
7499 &lt;/tr&gt;
7500
7501 &lt;tr&gt;
7502 &lt;td&gt;Thinkpad X200 Roaming KDE&lt;/td&gt;
7503 &lt;td&gt;19 min (09:21-09:40)&lt;/td&gt;
7504 &lt;td&gt;15 min (10:25-10:40)&lt;/td&gt;
7505 &lt;td&gt;4 min 21%&lt;/td&gt;
7506 &lt;/tr&gt;
7507
7508 &lt;/table&gt;&lt;/p&gt;
7509
7510 &lt;p&gt;The test is done using a netinst ISO on a USB stick, so some of the
7511 time is spent downloading packages. The connection to the Internet
7512 was 100Mbit/s during testing, so downloading should not be a
7513 significant factor in the measurement. Download typically took a few
7514 seconds to a few minutes, depending on the amount of packages being
7515 installed.&lt;/p&gt;
7516
7517 &lt;p&gt;The speedup is implemented by using two hooks in
7518 &lt;a href=&quot;https://www.debian.org/devel/debian-installer/&quot;&gt;Debian
7519 Installer&lt;/a&gt;, the pre-pkgsel.d hook to set up the diverts, and the
7520 finish-install.d hook to remove the divert at the end of the
7521 installation. I picked the pre-pkgsel.d hook instead of the
7522 post-base-installer.d hook because I test using an ISO without the
7523 eatmydata package included, and the post-base-installer.d hook in
7524 Debian Edu can only operate on packages included in the ISO. The
7525 negative effect of this is that I am unable to activate this
7526 optimization for the kernel installation step in d-i. If the code is
7527 moved to the post-base-installer.d hook, the speedup would be larger
7528 for the entire installation.&lt;/p&gt;
7529
7530 &lt;p&gt;I&#39;ve implemented this in the
7531 &lt;a href=&quot;https://packages.qa.debian.org/debian-edu-install&quot;&gt;debian-edu-install&lt;/a&gt;
7532 git repository, and plan to provide the optimization as part of the
7533 Debian Edu installation. If you want to test this yourself, you can
7534 create two files in the installer (or in an udeb). One shell script
7535 need do go into /usr/lib/pre-pkgsel.d/, with content like this:&lt;/p&gt;
7536
7537 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
7538 #!/bin/sh
7539 set -e
7540 . /usr/share/debconf/confmodule
7541 info() {
7542 logger -t my-pkgsel &quot;info: $*&quot;
7543 }
7544 error() {
7545 logger -t my-pkgsel &quot;error: $*&quot;
7546 }
7547 override_install() {
7548 apt-install eatmydata || true
7549 if [ -x /target/usr/bin/eatmydata ] ; then
7550 for bin in dpkg apt-get aptitude tasksel ; do
7551 file=/usr/bin/$bin
7552 # Test that the file exist and have not been diverted already.
7553 if [ -f /target$file ] ; then
7554 info &quot;diverting $file using eatmydata&quot;
7555 printf &quot;#!/bin/sh\neatmydata $bin.distrib \&quot;\$@\&quot;\n&quot; \
7556 &gt; /target$file.edu
7557 chmod 755 /target$file.edu
7558 in-target dpkg-divert --package debian-edu-config \
7559 --rename --quiet --add $file
7560 ln -sf ./$bin.edu /target$file
7561 else
7562 error &quot;unable to divert $file, as it is missing.&quot;
7563 fi
7564 done
7565 else
7566 error &quot;unable to find /usr/bin/eatmydata after installing the eatmydata pacage&quot;
7567 fi
7568 }
7569
7570 override_install
7571 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
7572
7573 &lt;p&gt;To clean up, another shell script should go into
7574 /usr/lib/finish-install.d/ with code like this:
7575
7576 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
7577 #! /bin/sh -e
7578 . /usr/share/debconf/confmodule
7579 error() {
7580 logger -t my-finish-install &quot;error: $@&quot;
7581 }
7582 remove_install_override() {
7583 for bin in dpkg apt-get aptitude tasksel ; do
7584 file=/usr/bin/$bin
7585 if [ -x /target$file.edu ] ; then
7586 rm /target$file
7587 in-target dpkg-divert --package debian-edu-config \
7588 --rename --quiet --remove $file
7589 rm /target$file.edu
7590 else
7591 error &quot;Missing divert for $file.&quot;
7592 fi
7593 done
7594 sync # Flush file buffers before continuing
7595 }
7596
7597 remove_install_override
7598 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
7599
7600 &lt;p&gt;In Debian Edu, I placed both code fragments in a separate script
7601 edu-eatmydata-install and call it from the pre-pkgsel.d and
7602 finish-install.d scripts.&lt;/p&gt;
7603
7604 &lt;p&gt;By now you might ask if this change should get into the normal
7605 Debian installer too? I suspect it should, but am not sure the
7606 current debian-installer coordinators find it useful enough. It also
7607 depend on the side effects of the change. I&#39;m not aware of any, but I
7608 guess we will see if the change is safe after some more testing.
7609 Perhaps there is some package in Debian depending on sync() and
7610 fsync() having effect? Perhaps it should go into its own udeb, to
7611 allow those of us wanting to enable it to do so without affecting
7612 everyone.&lt;/p&gt;
7613
7614 &lt;p&gt;Update 2014-09-24: Since a few days ago, enabling this optimization
7615 will break installation of all programs using gnutls because of
7616 &lt;a href=&quot;https://bugs.debian.org/702711&quot;&gt;bug #702711&lt;/a&gt;. An updated
7617 eatmydata package in Debian will solve it.&lt;/p&gt;
7618
7619 &lt;p&gt;Update 2014-10-17: The bug mentioned above is fixed in testing and
7620 the optimization work again. And I have discovered that the
7621 dpkg-divert trick is not really needed and implemented a slightly
7622 simpler approach as part of the debian-edu-install package. See
7623 tools/edu-eatmydata-install in the source package.&lt;/p&gt;
7624
7625 &lt;p&gt;Update 2014-11-11: Unfortunately, a new
7626 &lt;a href=&quot;http://bugs.debian.org/765738&quot;&gt;bug #765738&lt;/a&gt; in eatmydata only
7627 triggering on i386 made it into testing, and broke this installation
7628 optimization again. If &lt;a href=&quot;http://bugs.debian.org/768893&quot;&gt;unblock
7629 request 768893&lt;/a&gt; is accepted, it should be working again.&lt;/p&gt;
7630 </description>
7631 </item>
7632
7633 <item>
7634 <title>Good bye subkeys.pgp.net, welcome pool.sks-keyservers.net</title>
7635 <link>http://www.hungry.com/~pere/blog/Good_bye_subkeys_pgp_net__welcome_pool_sks_keyservers_net.html</link>
7636 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Good_bye_subkeys_pgp_net__welcome_pool_sks_keyservers_net.html</guid>
7637 <pubDate>Wed, 10 Sep 2014 13:10:00 +0200</pubDate>
7638 <description>&lt;p&gt;Yesterday, I had the pleasure of attending a talk with the
7639 &lt;a href=&quot;http://www.nuug.no/&quot;&gt;Norwegian Unix User Group&lt;/a&gt; about
7640 &lt;a href=&quot;http://www.nuug.no/aktiviteter/20140909-sks-keyservers/&quot;&gt;the
7641 OpenPGP keyserver pool sks-keyservers.net&lt;/a&gt;, and was very happy to
7642 learn that there is a large set of publicly available key servers to
7643 use when looking for peoples public key. So far I have used
7644 subkeys.pgp.net, and some times wwwkeys.nl.pgp.net when the former
7645 were misbehaving, but those days are ended. The servers I have used
7646 up until yesterday have been slow and some times unavailable. I hope
7647 those problems are gone now.&lt;/p&gt;
7648
7649 &lt;p&gt;Behind the round robin DNS entry of the
7650 &lt;a href=&quot;https://sks-keyservers.net/&quot;&gt;sks-keyservers.net&lt;/a&gt; service
7651 there is a pool of more than 100 keyservers which are checked every
7652 day to ensure they are well connected and up to date. It must be
7653 better than what I have used so far. :)&lt;/p&gt;
7654
7655 &lt;p&gt;Yesterdays speaker told me that the service is the default
7656 keyserver provided by the default configuration in GnuPG, but this do
7657 not seem to be used in Debian. Perhaps it should?&lt;/p&gt;
7658
7659 &lt;p&gt;Anyway, I&#39;ve updated my ~/.gnupg/options file to now include this
7660 line:&lt;/p&gt;
7661
7662 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
7663 keyserver pool.sks-keyservers.net
7664 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
7665
7666 &lt;p&gt;With GnuPG version 2 one can also locate the keyserver using SRV
7667 entries in DNS. Just for fun, I did just that at work, so now every
7668 user of GnuPG at the University of Oslo should find a OpenGPG
7669 keyserver automatically should their need it:&lt;/p&gt;
7670
7671 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
7672 % host -t srv _pgpkey-http._tcp.uio.no
7673 _pgpkey-http._tcp.uio.no has SRV record 0 100 11371 pool.sks-keyservers.net.
7674 %
7675 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
7676
7677 &lt;p&gt;Now if only
7678 &lt;a href=&quot;http://ietfreport.isoc.org/idref/draft-shaw-openpgp-hkp/&quot;&gt;the
7679 HKP lookup protocol&lt;/a&gt; supported finding signature paths, I would be
7680 very happy. It can look up a given key or search for a user ID, but I
7681 normally do not want that, but to find a trust path from my key to
7682 another key. Given a user ID or key ID, I would like to find (and
7683 download) the keys representing a signature path from my key to the
7684 key in question, to be able to get a trust path between the two keys.
7685 This is as far as I can tell not possible today. Perhaps something
7686 for a future version of the protocol?&lt;/p&gt;
7687 </description>
7688 </item>
7689
7690 <item>
7691 <title>From English wiki to translated PDF and epub via Docbook</title>
7692 <link>http://www.hungry.com/~pere/blog/From_English_wiki_to_translated_PDF_and_epub_via_Docbook.html</link>
7693 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/From_English_wiki_to_translated_PDF_and_epub_via_Docbook.html</guid>
7694 <pubDate>Tue, 17 Jun 2014 11:30:00 +0200</pubDate>
7695 <description>&lt;p&gt;The &lt;a href=&quot;http://www.skolelinux.org/&quot;&gt;Debian Edu / Skolelinux
7696 project&lt;/a&gt; provide an instruction manual for teachers, system
7697 administrators and other users that contain useful tips for setting up
7698 and maintaining a Debian Edu installation. This text is about how the
7699 text processing of this manual is handled in the project.&lt;/p&gt;
7700
7701 &lt;p&gt;One goal of the project is to provide information in the native
7702 language of its users, and for this we need to handle translations.
7703 But we also want to make sure each language contain the same
7704 information, so for this we need a good way to keep the translations
7705 in sync. And we want it to be easy for our users to improve the
7706 documentation, avoiding the need to learn special formats or tools to
7707 contribute, and the obvious way to do this is to make it possible to
7708 edit the documentation using a web browser. We also want it to be
7709 easy for translators to keep the translation up to date, and give them
7710 help in figuring out what need to be translated. Here is the list of
7711 tools and the process we have found trying to reach all these
7712 goals.&lt;/p&gt;
7713
7714 &lt;p&gt;We maintain the authoritative source of our manual in the
7715 &lt;a href=&quot;https://wiki.debian.org/DebianEdu/Documentation/Wheezy/&quot;&gt;Debian
7716 wiki&lt;/a&gt;, as several wiki pages written in English. It consist of one
7717 front page with references to the different chapters, several pages
7718 for each chapter, and finally one &quot;collection page&quot; gluing all the
7719 chapters together into one large web page (aka
7720 &lt;a href=&quot;https://wiki.debian.org/DebianEdu/Documentation/Wheezy/AllInOne&quot;&gt;the
7721 AllInOne page&lt;/a&gt;). The AllInOne page is the one used for further
7722 processing and translations. Thanks to the fact that the
7723 &lt;a href=&quot;http://moinmo.in/&quot;&gt;MoinMoin&lt;/a&gt; installation on
7724 wiki.debian.org support exporting pages in
7725 &lt;a href=&quot;http://www.docbook.org/&quot;&gt;the Docbook format&lt;/a&gt;, we can fetch
7726 the list of pages to export using the raw version of the AllInOne
7727 page, loop over each of them to generate a Docbook XML version of the
7728 manual. This process also download images and transform image
7729 references to use the locally downloaded images. The generated
7730 Docbook XML files are slightly broken, so some post-processing is done
7731 using the &lt;tt&gt;documentation/scripts/get_manual&lt;/tt&gt; program, and the
7732 result is a nice Docbook XML file (debian-edu-wheezy-manual.xml) and
7733 a handfull of images. The XML file can now be used to generate PDF, HTML
7734 and epub versions of the English manual. This is the basic step of
7735 our process, making PDF (using dblatex), HTML (using xsltproc) and
7736 epub (using dbtoepub) version from Docbook XML, and the resulting files
7737 are placed in the debian-edu-doc-en binary package.&lt;/p&gt;
7738
7739 &lt;p&gt;But English documentation is not enough for us. We want translated
7740 documentation too, and we want to make it easy for translators to
7741 track the English original. For this we use the
7742 &lt;a href=&quot;http://packages.qa.debian.org/p/poxml.html&quot;&gt;poxml&lt;/a&gt; package,
7743 which allow us to transform the English Docbook XML file into a
7744 translation file (a .pot file), usable with the normal gettext based
7745 translation tools used by those translating free software. The pot
7746 file is used to create and maintain translation files (several .po
7747 files), which the translations update with the native language
7748 translations of all titles, paragraphs and blocks of text in the
7749 original. The next step is combining the original English Docbook XML
7750 and the translation file (say debian-edu-wheezy-manual.nb.po), to
7751 create a translated Docbook XML file (in this case
7752 debian-edu-wheezy-manual.nb.xml). This translated (or partly
7753 translated, if the translation is not complete) Docbook XML file can
7754 then be used like the original to create a PDF, HTML and epub version
7755 of the documentation.&lt;/p&gt;
7756
7757 &lt;p&gt;The translators use different tools to edit the .po files. We
7758 recommend using
7759 &lt;a href=&quot;http://www.kde.org/applications/development/lokalize/&quot;&gt;lokalize&lt;/a&gt;,
7760 while some use emacs and vi, others can use web based editors like
7761 &lt;a href=&quot;http://pootle.translatehouse.org/&quot;&gt;Poodle&lt;/a&gt; or
7762 &lt;a href=&quot;https://www.transifex.com/&quot;&gt;Transifex&lt;/a&gt;. All we care about
7763 is where the .po file end up, in our git repository. Updated
7764 translations can either be committed directly to git, or submitted as
7765 &lt;a href=&quot;https://bugs.debian.org/src:debian-edu-doc&quot;&gt;bug reports
7766 against the debian-edu-doc package&lt;/a&gt;.&lt;/p&gt;
7767
7768 &lt;p&gt;One challenge is images, which both might need to be translated (if
7769 they show translated user applications), and are needed in different
7770 formats when creating PDF and HTML versions (epub is a HTML version in
7771 this regard). For this we transform the original PNG images to the
7772 needed density and format during build, and have a way to provide
7773 translated images by storing translated versions in
7774 images/$LANGUAGECODE/. I am a bit unsure about the details here. The
7775 package maintainers know more.&lt;/p&gt;
7776
7777 &lt;p&gt;If you wonder what the result look like, we provide
7778 &lt;a href=&quot;http://maintainer.skolelinux.org/debian-edu-doc/&quot;&gt;the content
7779 of the documentation packages on the web&lt;/a&gt;. See for example the
7780 &lt;a href=&quot;http://maintainer.skolelinux.org/debian-edu-doc/it/debian-edu-wheezy-manual.pdf&quot;&gt;Italian
7781 PDF version&lt;/a&gt; or the
7782 &lt;a href=&quot;http://maintainer.skolelinux.org/debian-edu-doc/de/debian-edu-wheezy-manual.html&quot;&gt;German
7783 HTML version&lt;/a&gt;. We do not yet build the epub version by default,
7784 but perhaps it will be done in the future.&lt;/p&gt;
7785
7786 &lt;p&gt;To learn more, check out
7787 &lt;a href=&quot;http://packages.qa.debian.org/d/debian-edu-doc.html&quot;&gt;the
7788 debian-edu-doc package&lt;/a&gt;,
7789 &lt;a href=&quot;https://wiki.debian.org/DebianEdu/Documentation/Wheezy/&quot;&gt;the
7790 manual on the wiki&lt;/a&gt; and
7791 &lt;a href=&quot;https://wiki.debian.org/DebianEdu/Documentation/Wheezy/Translations&quot;&gt;the
7792 translation instructions&lt;/a&gt; in the manual.&lt;/p&gt;
7793 </description>
7794 </item>
7795
7796 <item>
7797 <title>Install hardware dependent packages using tasksel (Isenkram 0.7)</title>
7798 <link>http://www.hungry.com/~pere/blog/Install_hardware_dependent_packages_using_tasksel__Isenkram_0_7_.html</link>
7799 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Install_hardware_dependent_packages_using_tasksel__Isenkram_0_7_.html</guid>
7800 <pubDate>Wed, 23 Apr 2014 14:50:00 +0200</pubDate>
7801 <description>&lt;p&gt;It would be nice if it was easier in Debian to get all the hardware
7802 related packages relevant for the computer installed automatically.
7803 So I implemented one, using
7804 &lt;a href=&quot;http://packages.qa.debian.org/isenkram&quot;&gt;my Isenkram
7805 package&lt;/a&gt;. To use it, install the tasksel and isenkram packages and
7806 run tasksel as user root. You should be presented with a new option,
7807 &quot;Hardware specific packages (autodetected by isenkram)&quot;. When you
7808 select it, tasksel will install the packages isenkram claim is fit for
7809 the current hardware, hot pluggable or not.&lt;p&gt;
7810
7811 &lt;p&gt;The implementation is in two files, one is the tasksel menu entry
7812 description, and the other is the script used to extract the list of
7813 packages to install. The first part is in
7814 &lt;tt&gt;/usr/share/tasksel/descs/isenkram.desc&lt;/tt&gt; and look like
7815 this:&lt;/p&gt;
7816
7817 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
7818 Task: isenkram
7819 Section: hardware
7820 Description: Hardware specific packages (autodetected by isenkram)
7821 Based on the detected hardware various hardware specific packages are
7822 proposed.
7823 Test-new-install: mark show
7824 Relevance: 8
7825 Packages: for-current-hardware
7826 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
7827
7828 &lt;p&gt;The second part is in
7829 &lt;tt&gt;/usr/lib/tasksel/packages/for-current-hardware&lt;/tt&gt; and look like
7830 this:&lt;/p&gt;
7831
7832 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
7833 #!/bin/sh
7834 #
7835 (
7836 isenkram-lookup
7837 isenkram-autoinstall-firmware -l
7838 ) | sort -u
7839 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
7840
7841 &lt;p&gt;All in all, a very short and simple implementation making it
7842 trivial to install the hardware dependent package we all may want to
7843 have installed on our machines. I&#39;ve not been able to find a way to
7844 get tasksel to tell you exactly which packages it plan to install
7845 before doing the installation. So if you are curious or careful,
7846 check the output from the isenkram-* command line tools first.&lt;/p&gt;
7847
7848 &lt;p&gt;The information about which packages are handling which hardware is
7849 fetched either from the isenkram package itself in
7850 /usr/share/isenkram/, from git.debian.org or from the APT package
7851 database (using the Modaliases header). The APT package database
7852 parsing have caused a nasty resource leak in the isenkram daemon (bugs
7853 &lt;a href=&quot;http://bugs.debian.org/719837&quot;&gt;#719837&lt;/a&gt; and
7854 &lt;a href=&quot;http://bugs.debian.org/730704&quot;&gt;#730704&lt;/a&gt;). The cause is in
7855 the python-apt code (bug
7856 &lt;a href=&quot;http://bugs.debian.org/745487&quot;&gt;#745487&lt;/a&gt;), but using a
7857 workaround I was able to get rid of the file descriptor leak and
7858 reduce the memory leak from ~30 MiB per hardware detection down to
7859 around 2 MiB per hardware detection. It should make the desktop
7860 daemon a lot more useful. The fix is in version 0.7 uploaded to
7861 unstable today.&lt;/p&gt;
7862
7863 &lt;p&gt;I believe the current way of mapping hardware to packages in
7864 Isenkram is is a good draft, but in the future I expect isenkram to
7865 use the AppStream data source for this. A proposal for getting proper
7866 AppStream support into Debian is floating around as
7867 &lt;a href=&quot;https://wiki.debian.org/DEP-11&quot;&gt;DEP-11&lt;/a&gt;, and
7868 &lt;a href=&quot;https://wiki.debian.org/SummerOfCode2014/Projects#SummerOfCode2014.2FProjects.2FAppStreamDEP11Implementation.AppStream.2FDEP-11_for_the_Debian_Archive&quot;&gt;GSoC
7869 project&lt;/a&gt; will take place this summer to improve the situation. I
7870 look forward to seeing the result, and welcome patches for isenkram to
7871 start using the information when it is ready.&lt;/p&gt;
7872
7873 &lt;p&gt;If you want your package to map to some specific hardware, either
7874 add a &quot;Xb-Modaliases&quot; header to your control file like I did in
7875 &lt;a href=&quot;http://packages.qa.debian.org/pymissile&quot;&gt;the pymissile
7876 package&lt;/a&gt; or submit a bug report with the details to the isenkram
7877 package. See also
7878 &lt;a href=&quot;http://www.hungry.com/~pere/blog/tags/isenkram/&quot;&gt;all my
7879 blog posts tagged isenkram&lt;/a&gt; for details on the notation. I expect
7880 the information will be migrated to AppStream eventually, but for the
7881 moment I got no better place to store it.&lt;/p&gt;
7882 </description>
7883 </item>
7884
7885 <item>
7886 <title>FreedomBox milestone - all packages now in Debian Sid</title>
7887 <link>http://www.hungry.com/~pere/blog/FreedomBox_milestone___all_packages_now_in_Debian_Sid.html</link>
7888 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/FreedomBox_milestone___all_packages_now_in_Debian_Sid.html</guid>
7889 <pubDate>Tue, 15 Apr 2014 22:10:00 +0200</pubDate>
7890 <description>&lt;p&gt;The &lt;a href=&quot;https://wiki.debian.org/FreedomBox&quot;&gt;Freedombox
7891 project&lt;/a&gt; is working on providing the software and hardware to make
7892 it easy for non-technical people to host their data and communication
7893 at home, and being able to communicate with their friends and family
7894 encrypted and away from prying eyes. It is still going strong, and
7895 today a major mile stone was reached.&lt;/p&gt;
7896
7897 &lt;p&gt;Today, the last of the packages currently used by the project to
7898 created the system images were accepted into Debian Unstable. It was
7899 the freedombox-setup package, which is used to configure the images
7900 during build and on the first boot. Now all one need to get going is
7901 the build code from the freedom-maker git repository and packages from
7902 Debian. And once the freedombox-setup package enter testing, we can
7903 build everything directly from Debian. :)&lt;/p&gt;
7904
7905 &lt;p&gt;Some key packages used by Freedombox are
7906 &lt;a href=&quot;http://packages.qa.debian.org/freedombox-setup&quot;&gt;freedombox-setup&lt;/a&gt;,
7907 &lt;a href=&quot;http://packages.qa.debian.org/plinth&quot;&gt;plinth&lt;/a&gt;,
7908 &lt;a href=&quot;http://packages.qa.debian.org/pagekite&quot;&gt;pagekite&lt;/a&gt;,
7909 &lt;a href=&quot;http://packages.qa.debian.org/tor&quot;&gt;tor&lt;/a&gt;,
7910 &lt;a href=&quot;http://packages.qa.debian.org/privoxy&quot;&gt;privoxy&lt;/a&gt;,
7911 &lt;a href=&quot;http://packages.qa.debian.org/owncloud&quot;&gt;owncloud&lt;/a&gt; and
7912 &lt;a href=&quot;http://packages.qa.debian.org/dnsmasq&quot;&gt;dnsmasq&lt;/a&gt;. There
7913 are plans to integrate more packages into the setup. User
7914 documentation is maintained on the Debian wiki. Please
7915 &lt;a href=&quot;https://wiki.debian.org/FreedomBox/Manual/Jessie&quot;&gt;check out
7916 the manual&lt;/a&gt; and help us improve it.&lt;/p&gt;
7917
7918 &lt;p&gt;To test for yourself and create boot images with the FreedomBox
7919 setup, run this on a Debian machine using a user with sudo rights to
7920 become root:&lt;/p&gt;
7921
7922 &lt;p&gt;&lt;pre&gt;
7923 sudo apt-get install git vmdebootstrap mercurial python-docutils \
7924 mktorrent extlinux virtualbox qemu-user-static binfmt-support \
7925 u-boot-tools
7926 git clone http://anonscm.debian.org/git/freedombox/freedom-maker.git \
7927 freedom-maker
7928 make -C freedom-maker dreamplug-image raspberry-image virtualbox-image
7929 &lt;/pre&gt;&lt;/p&gt;
7930
7931 &lt;p&gt;Root access is needed to run debootstrap and mount loopback
7932 devices. See the README in the freedom-maker git repo for more
7933 details on the build. If you do not want all three images, trim the
7934 make line. Note that the virtualbox-image target is not really
7935 virtualbox specific. It create a x86 image usable in kvm, qemu,
7936 vmware and any other x86 virtual machine environment. You might need
7937 the version of vmdebootstrap in Jessie to get the build working, as it
7938 include fixes for a race condition with kpartx.&lt;/p&gt;
7939
7940 &lt;p&gt;If you instead want to install using a Debian CD and the preseed
7941 method, boot a Debian Wheezy ISO and use this boot argument to load
7942 the preseed values:&lt;/p&gt;
7943
7944 &lt;p&gt;&lt;pre&gt;
7945 url=&lt;a href=&quot;http://www.reinholdtsen.name/freedombox/preseed-jessie.dat&quot;&gt;http://www.reinholdtsen.name/freedombox/preseed-jessie.dat&lt;/a&gt;
7946 &lt;/pre&gt;&lt;/p&gt;
7947
7948 &lt;p&gt;I have not tested it myself the last few weeks, so I do not know if
7949 it still work.&lt;/p&gt;
7950
7951 &lt;p&gt;If you wonder how to help, one task you could look at is using
7952 systemd as the boot system. It will become the default for Linux in
7953 Jessie, so we need to make sure it is usable on the Freedombox. I did
7954 a simple test a few weeks ago, and noticed dnsmasq failed to start
7955 during boot when using systemd. I suspect there are other problems
7956 too. :) To detect problems, there is a test suite included, which can
7957 be run from the plinth web interface.&lt;/p&gt;
7958
7959 &lt;p&gt;Give it a go and let us know how it goes on the mailing list, and help
7960 us get the new release published. :) Please join us on
7961 &lt;a href=&quot;irc://irc.debian.org:6667/%23freedombox&quot;&gt;IRC (#freedombox on
7962 irc.debian.org)&lt;/a&gt; and
7963 &lt;a href=&quot;http://lists.alioth.debian.org/mailman/listinfo/freedombox-discuss&quot;&gt;the
7964 mailing list&lt;/a&gt; if you want to help make this vision come true.&lt;/p&gt;
7965 </description>
7966 </item>
7967
7968 <item>
7969 <title>S3QL, a locally mounted cloud file system - nice free software</title>
7970 <link>http://www.hungry.com/~pere/blog/S3QL__a_locally_mounted_cloud_file_system___nice_free_software.html</link>
7971 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/S3QL__a_locally_mounted_cloud_file_system___nice_free_software.html</guid>
7972 <pubDate>Wed, 9 Apr 2014 11:30:00 +0200</pubDate>
7973 <description>&lt;p&gt;For a while now, I have been looking for a sensible offsite backup
7974 solution for use at home. My requirements are simple, it must be
7975 cheap and locally encrypted (in other words, I keep the encryption
7976 keys, the storage provider do not have access to my private files).
7977 One idea me and my friends had many years ago, before the cloud
7978 storage providers showed up, was to use Google mail as storage,
7979 writing a Linux block device storing blocks as emails in the mail
7980 service provided by Google, and thus get heaps of free space. On top
7981 of this one can add encryption, RAID and volume management to have
7982 lots of (fairly slow, I admit that) cheap and encrypted storage. But
7983 I never found time to implement such system. But the last few weeks I
7984 have looked at a system called
7985 &lt;a href=&quot;https://bitbucket.org/nikratio/s3ql/&quot;&gt;S3QL&lt;/a&gt;, a locally
7986 mounted network backed file system with the features I need.&lt;/p&gt;
7987
7988 &lt;p&gt;S3QL is a fuse file system with a local cache and cloud storage,
7989 handling several different storage providers, any with Amazon S3,
7990 Google Drive or OpenStack API. There are heaps of such storage
7991 providers. S3QL can also use a local directory as storage, which
7992 combined with sshfs allow for file storage on any ssh server. S3QL
7993 include support for encryption, compression, de-duplication, snapshots
7994 and immutable file systems, allowing me to mount the remote storage as
7995 a local mount point, look at and use the files as if they were local,
7996 while the content is stored in the cloud as well. This allow me to
7997 have a backup that should survive fire. The file system can not be
7998 shared between several machines at the same time, as only one can
7999 mount it at the time, but any machine with the encryption key and
8000 access to the storage service can mount it if it is unmounted.&lt;/p&gt;
8001
8002 &lt;p&gt;It is simple to use. I&#39;m using it on Debian Wheezy, where the
8003 package is included already. So to get started, run &lt;tt&gt;apt-get
8004 install s3ql&lt;/tt&gt;. Next, pick a storage provider. I ended up picking
8005 Greenqloud, after reading their nice recipe on
8006 &lt;a href=&quot;https://greenqloud.zendesk.com/entries/44611757-How-To-Use-S3QL-to-mount-a-StorageQloud-bucket-on-Debian-Wheezy&quot;&gt;how
8007 to use S3QL with their Amazon S3 service&lt;/a&gt;, because I trust the laws
8008 in Iceland more than those in USA when it come to keeping my personal
8009 data safe and private, and thus would rather spend money on a company
8010 in Iceland. Another nice recipe is available from the article
8011 &lt;a href=&quot;http://www.admin-magazine.com/HPC/Articles/HPC-Cloud-Storage&quot;&gt;S3QL
8012 Filesystem for HPC Storage&lt;/a&gt; by Jeff Layton in the HPC section of
8013 Admin magazine. When the provider is picked, figure out how to get
8014 the API key needed to connect to the storage API. With Greencloud,
8015 the key did not show up until I had added payment details to my
8016 account.&lt;/p&gt;
8017
8018 &lt;p&gt;Armed with the API access details, it is time to create the file
8019 system. First, create a new bucket in the cloud. This bucket is the
8020 file system storage area. I picked a bucket name reflecting the
8021 machine that was going to store data there, but any name will do.
8022 I&#39;ll refer to it as &lt;tt&gt;bucket-name&lt;/tt&gt; below. In addition, one need
8023 the API login and password, and a locally created password. Store it
8024 all in ~root/.s3ql/authinfo2 like this:
8025
8026 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
8027 [s3c]
8028 storage-url: s3c://s.greenqloud.com:443/bucket-name
8029 backend-login: API-login
8030 backend-password: API-password
8031 fs-passphrase: local-password
8032 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
8033
8034 &lt;p&gt;I create my local passphrase using &lt;tt&gt;pwget 50&lt;/tt&gt; or similar,
8035 but any sensible way to create a fairly random password should do it.
8036 Armed with these details, it is now time to run mkfs, entering the API
8037 details and password to create it:&lt;/p&gt;
8038
8039 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
8040 # mkdir -m 700 /var/lib/s3ql-cache
8041 # mkfs.s3ql --cachedir /var/lib/s3ql-cache --authfile /root/.s3ql/authinfo2 \
8042 --ssl s3c://s.greenqloud.com:443/bucket-name
8043 Enter backend login:
8044 Enter backend password:
8045 Before using S3QL, make sure to read the user&#39;s guide, especially
8046 the &#39;Important Rules to Avoid Loosing Data&#39; section.
8047 Enter encryption password:
8048 Confirm encryption password:
8049 Generating random encryption key...
8050 Creating metadata tables...
8051 Dumping metadata...
8052 ..objects..
8053 ..blocks..
8054 ..inodes..
8055 ..inode_blocks..
8056 ..symlink_targets..
8057 ..names..
8058 ..contents..
8059 ..ext_attributes..
8060 Compressing and uploading metadata...
8061 Wrote 0.00 MB of compressed metadata.
8062 # &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
8063
8064 &lt;p&gt;The next step is mounting the file system to make the storage available.
8065
8066 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
8067 # mount.s3ql --cachedir /var/lib/s3ql-cache --authfile /root/.s3ql/authinfo2 \
8068 --ssl --allow-root s3c://s.greenqloud.com:443/bucket-name /s3ql
8069 Using 4 upload threads.
8070 Downloading and decompressing metadata...
8071 Reading metadata...
8072 ..objects..
8073 ..blocks..
8074 ..inodes..
8075 ..inode_blocks..
8076 ..symlink_targets..
8077 ..names..
8078 ..contents..
8079 ..ext_attributes..
8080 Mounting filesystem...
8081 # df -h /s3ql
8082 Filesystem Size Used Avail Use% Mounted on
8083 s3c://s.greenqloud.com:443/bucket-name 1.0T 0 1.0T 0% /s3ql
8084 #
8085 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
8086
8087 &lt;p&gt;The file system is now ready for use. I use rsync to store my
8088 backups in it, and as the metadata used by rsync is downloaded at
8089 mount time, no network traffic (and storage cost) is triggered by
8090 running rsync. To unmount, one should not use the normal umount
8091 command, as this will not flush the cache to the cloud storage, but
8092 instead running the umount.s3ql command like this:
8093
8094 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
8095 # umount.s3ql /s3ql
8096 #
8097 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
8098
8099 &lt;p&gt;There is a fsck command available to check the file system and
8100 correct any problems detected. This can be used if the local server
8101 crashes while the file system is mounted, to reset the &quot;already
8102 mounted&quot; flag. This is what it look like when processing a working
8103 file system:&lt;/p&gt;
8104
8105 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
8106 # fsck.s3ql --force --ssl s3c://s.greenqloud.com:443/bucket-name
8107 Using cached metadata.
8108 File system seems clean, checking anyway.
8109 Checking DB integrity...
8110 Creating temporary extra indices...
8111 Checking lost+found...
8112 Checking cached objects...
8113 Checking names (refcounts)...
8114 Checking contents (names)...
8115 Checking contents (inodes)...
8116 Checking contents (parent inodes)...
8117 Checking objects (reference counts)...
8118 Checking objects (backend)...
8119 ..processed 5000 objects so far..
8120 ..processed 10000 objects so far..
8121 ..processed 15000 objects so far..
8122 Checking objects (sizes)...
8123 Checking blocks (referenced objects)...
8124 Checking blocks (refcounts)...
8125 Checking inode-block mapping (blocks)...
8126 Checking inode-block mapping (inodes)...
8127 Checking inodes (refcounts)...
8128 Checking inodes (sizes)...
8129 Checking extended attributes (names)...
8130 Checking extended attributes (inodes)...
8131 Checking symlinks (inodes)...
8132 Checking directory reachability...
8133 Checking unix conventions...
8134 Checking referential integrity...
8135 Dropping temporary indices...
8136 Backing up old metadata...
8137 Dumping metadata...
8138 ..objects..
8139 ..blocks..
8140 ..inodes..
8141 ..inode_blocks..
8142 ..symlink_targets..
8143 ..names..
8144 ..contents..
8145 ..ext_attributes..
8146 Compressing and uploading metadata...
8147 Wrote 0.89 MB of compressed metadata.
8148 #
8149 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
8150
8151 &lt;p&gt;Thanks to the cache, working on files that fit in the cache is very
8152 quick, about the same speed as local file access. Uploading large
8153 amount of data is to me limited by the bandwidth out of and into my
8154 house. Uploading 685 MiB with a 100 MiB cache gave me 305 kiB/s,
8155 which is very close to my upload speed, and downloading the same
8156 Debian installation ISO gave me 610 kiB/s, close to my download speed.
8157 Both were measured using &lt;tt&gt;dd&lt;/tt&gt;. So for me, the bottleneck is my
8158 network, not the file system code. I do not know what a good cache
8159 size would be, but suspect that the cache should e larger than your
8160 working set.&lt;/p&gt;
8161
8162 &lt;p&gt;I mentioned that only one machine can mount the file system at the
8163 time. If another machine try, it is told that the file system is
8164 busy:&lt;/p&gt;
8165
8166 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
8167 # mount.s3ql --cachedir /var/lib/s3ql-cache --authfile /root/.s3ql/authinfo2 \
8168 --ssl --allow-root s3c://s.greenqloud.com:443/bucket-name /s3ql
8169 Using 8 upload threads.
8170 Backend reports that fs is still mounted elsewhere, aborting.
8171 #
8172 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
8173
8174 &lt;p&gt;The file content is uploaded when the cache is full, while the
8175 metadata is uploaded once every 24 hour by default. To ensure the
8176 file system content is flushed to the cloud, one can either umount the
8177 file system, or ask S3QL to flush the cache and metadata using
8178 s3qlctrl:
8179
8180 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
8181 # s3qlctrl upload-meta /s3ql
8182 # s3qlctrl flushcache /s3ql
8183 #
8184 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
8185
8186 &lt;p&gt;If you are curious about how much space your data uses in the
8187 cloud, and how much compression and deduplication cut down on the
8188 storage usage, you can use s3qlstat on the mounted file system to get
8189 a report:&lt;/p&gt;
8190
8191 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
8192 # s3qlstat /s3ql
8193 Directory entries: 9141
8194 Inodes: 9143
8195 Data blocks: 8851
8196 Total data size: 22049.38 MB
8197 After de-duplication: 21955.46 MB (99.57% of total)
8198 After compression: 21877.28 MB (99.22% of total, 99.64% of de-duplicated)
8199 Database size: 2.39 MB (uncompressed)
8200 (some values do not take into account not-yet-uploaded dirty blocks in cache)
8201 #
8202 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
8203
8204 &lt;p&gt;I mentioned earlier that there are several possible suppliers of
8205 storage. I did not try to locate them all, but am aware of at least
8206 &lt;a href=&quot;https://www.greenqloud.com/&quot;&gt;Greenqloud&lt;/a&gt;,
8207 &lt;a href=&quot;http://drive.google.com/&quot;&gt;Google Drive&lt;/a&gt;,
8208 &lt;a href=&quot;http://aws.amazon.com/s3/&quot;&gt;Amazon S3 web serivces&lt;/a&gt;,
8209 &lt;a href=&quot;http://www.rackspace.com/&quot;&gt;Rackspace&lt;/a&gt; and
8210 &lt;a href=&quot;http://crowncloud.net/&quot;&gt;Crowncloud&lt;/A&gt;. The latter even
8211 accept payment in Bitcoin. Pick one that suit your need. Some of
8212 them provide several GiB of free storage, but the prize models are
8213 quite different and you will have to figure out what suits you
8214 best.&lt;/p&gt;
8215
8216 &lt;p&gt;While researching this blog post, I had a look at research papers
8217 and posters discussing the S3QL file system. There are several, which
8218 told me that the file system is getting a critical check by the
8219 science community and increased my confidence in using it. One nice
8220 poster is titled
8221 &quot;&lt;a href=&quot;http://www.lanl.gov/orgs/adtsc/publications/science_highlights_2013/docs/pg68_69.pdf&quot;&gt;An
8222 Innovative Parallel Cloud Storage System using OpenStack’s SwiftObject
8223 Store and Transformative Parallel I/O Approach&lt;/a&gt;&quot; by Hsing-Bung
8224 Chen, Benjamin McClelland, David Sherrill, Alfred Torrez, Parks Fields
8225 and Pamela Smith. Please have a look.&lt;/p&gt;
8226
8227 &lt;p&gt;Given my problems with different file systems earlier, I decided to
8228 check out the mounted S3QL file system to see if it would be usable as
8229 a home directory (in other word, that it provided POSIX semantics when
8230 it come to locking and umask handling etc). Running
8231 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Testing_if_a_file_system_can_be_used_for_home_directories___.html&quot;&gt;my
8232 test code to check file system semantics&lt;/a&gt;, I was happy to discover that
8233 no error was found. So the file system can be used for home
8234 directories, if one chooses to do so.&lt;/p&gt;
8235
8236 &lt;p&gt;If you do not want a locally file system, and want something that
8237 work without the Linux fuse file system, I would like to mention the
8238 &lt;a href=&quot;http://www.tarsnap.com/&quot;&gt;Tarsnap service&lt;/a&gt;, which also
8239 provide locally encrypted backup using a command line client. It have
8240 a nicer access control system, where one can split out read and write
8241 access, allowing some systems to write to the backup and others to
8242 only read from it.&lt;/p&gt;
8243
8244 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
8245 activities, please send Bitcoin donations to my address
8246 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
8247 </description>
8248 </item>
8249
8250 <item>
8251 <title>Freedombox on Dreamplug, Raspberry Pi and virtual x86 machine</title>
8252 <link>http://www.hungry.com/~pere/blog/Freedombox_on_Dreamplug__Raspberry_Pi_and_virtual_x86_machine.html</link>
8253 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Freedombox_on_Dreamplug__Raspberry_Pi_and_virtual_x86_machine.html</guid>
8254 <pubDate>Fri, 14 Mar 2014 11:00:00 +0100</pubDate>
8255 <description>&lt;p&gt;The &lt;a href=&quot;https://wiki.debian.org/FreedomBox&quot;&gt;Freedombox
8256 project&lt;/a&gt; is working on providing the software and hardware for
8257 making it easy for non-technical people to host their data and
8258 communication at home, and being able to communicate with their
8259 friends and family encrypted and away from prying eyes. It has been
8260 going on for a while, and is slowly progressing towards a new test
8261 release (0.2).&lt;/p&gt;
8262
8263 &lt;p&gt;And what day could be better than the Pi day to announce that the
8264 new version will provide &quot;hard drive&quot; / SD card / USB stick images for
8265 Dreamplug, Raspberry Pi and VirtualBox (or any other virtualization
8266 system), and can also be installed using a Debian installer preseed
8267 file. The Debian based Freedombox is now based on Debian Jessie,
8268 where most of the needed packages used are already present. Only one,
8269 the freedombox-setup package, is missing. To try to build your own
8270 boot image to test the current status, fetch the freedom-maker scripts
8271 and build using
8272 &lt;a href=&quot;http://packages.qa.debian.org/vmdebootstrap&quot;&gt;vmdebootstrap&lt;/a&gt;
8273 with a user with sudo access to become root:
8274
8275 &lt;pre&gt;
8276 git clone http://anonscm.debian.org/git/freedombox/freedom-maker.git \
8277 freedom-maker
8278 sudo apt-get install git vmdebootstrap mercurial python-docutils \
8279 mktorrent extlinux virtualbox qemu-user-static binfmt-support \
8280 u-boot-tools
8281 make -C freedom-maker dreamplug-image raspberry-image virtualbox-image
8282 &lt;/pre&gt;
8283
8284 &lt;p&gt;Root access is needed to run debootstrap and mount loopback
8285 devices. See the README for more details on the build. If you do not
8286 want all three images, trim the make line. But note that thanks to &lt;a
8287 href=&quot;https://bugs.debian.org/741407&quot;&gt;a race condition in
8288 vmdebootstrap&lt;/a&gt;, the build might fail without the patch to the
8289 kpartx call.&lt;/p&gt;
8290
8291 &lt;p&gt;If you instead want to install using a Debian CD and the preseed
8292 method, boot a Debian Wheezy ISO and use this boot argument to load
8293 the preseed values:&lt;/p&gt;
8294
8295 &lt;pre&gt;
8296 url=&lt;a href=&quot;http://www.reinholdtsen.name/freedombox/preseed-jessie.dat&quot;&gt;http://www.reinholdtsen.name/freedombox/preseed-jessie.dat&lt;/a&gt;
8297 &lt;/pre&gt;
8298
8299 &lt;p&gt;But note that due to &lt;a href=&quot;https://bugs.debian.org/740673&quot;&gt;a
8300 recently introduced bug in apt in Jessie&lt;/a&gt;, the installer will
8301 currently hang while setting up APT sources. Killing the
8302 &#39;&lt;tt&gt;apt-cdrom ident&lt;/tt&gt;&#39; process when it hang a few times during the
8303 installation will get the installation going. This affect all
8304 installations in Jessie, and I expect it will be fixed soon.&lt;/p&gt;
8305
8306 &lt;p&gt;Give it a go and let us know how it goes on the mailing list, and help
8307 us get the new release published. :) Please join us on
8308 &lt;a href=&quot;irc://irc.debian.org:6667/%23freedombox&quot;&gt;IRC (#freedombox on
8309 irc.debian.org)&lt;/a&gt; and
8310 &lt;a href=&quot;http://lists.alioth.debian.org/mailman/listinfo/freedombox-discuss&quot;&gt;the
8311 mailing list&lt;/a&gt; if you want to help make this vision come true.&lt;/p&gt;
8312 </description>
8313 </item>
8314
8315 <item>
8316 <title>New home and release 1.0 for netgroup and innetgr (aka ng-utils)</title>
8317 <link>http://www.hungry.com/~pere/blog/New_home_and_release_1_0_for_netgroup_and_innetgr__aka_ng_utils_.html</link>
8318 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/New_home_and_release_1_0_for_netgroup_and_innetgr__aka_ng_utils_.html</guid>
8319 <pubDate>Sat, 22 Feb 2014 21:45:00 +0100</pubDate>
8320 <description>&lt;p&gt;Many years ago, I wrote a GPL licensed version of the netgroup and
8321 innetgr tools, because I needed them in
8322 &lt;a href=&quot;http://www.skolelinux.org/&quot;&gt;Skolelinux&lt;/a&gt;. I called the project
8323 ng-utils, and it has served me well. I placed the project under the
8324 &lt;a href=&quot;http://www.hungry.com/&quot;&gt;Hungry Programmer&lt;/a&gt; umbrella, and it was maintained in our CVS
8325 repository. But many years ago, the CVS repository was dropped (lost,
8326 not migrated to new hardware, not sure), and the project have lacked a
8327 proper home since then.&lt;/p&gt;
8328
8329 &lt;p&gt;Last summer, I had a look at the package and made a new release
8330 fixing a irritating crash bug, but was unable to store the changes in
8331 a proper source control system. I applied for a project on
8332 &lt;a href=&quot;https://alioth.debian.org/&quot;&gt;Alioth&lt;/a&gt;, but did not have time
8333 to follow up on it. Until today. :)&lt;/p&gt;
8334
8335 &lt;p&gt;After many hours of cleaning and migration, the ng-utils project
8336 now have a new home, and a git repository with the highlight of the
8337 history of the project. I published all release tarballs and imported
8338 them into the git repository. As the project is really stable and not
8339 expected to gain new features any time soon, I decided to make a new
8340 release and call it 1.0. Visit the new project home on
8341 &lt;a href=&quot;https://alioth.debian.org/projects/ng-utils/&quot;&gt;https://alioth.debian.org/projects/ng-utils/&lt;/a&gt;
8342 if you want to check it out. The new version is also uploaded into
8343 &lt;a href=&quot;http://packages.qa.debian.org/n/ng-utils.html&quot;&gt;Debian Unstable&lt;/a&gt;.&lt;/p&gt;
8344 </description>
8345 </item>
8346
8347 <item>
8348 <title>Testing sysvinit from experimental in Debian Hurd</title>
8349 <link>http://www.hungry.com/~pere/blog/Testing_sysvinit_from_experimental_in_Debian_Hurd.html</link>
8350 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Testing_sysvinit_from_experimental_in_Debian_Hurd.html</guid>
8351 <pubDate>Mon, 3 Feb 2014 13:40:00 +0100</pubDate>
8352 <description>&lt;p&gt;A few days ago I decided to try to help the Hurd people to get
8353 their changes into sysvinit, to allow them to use the normal sysvinit
8354 boot system instead of their old one. This follow up on the
8355 &lt;a href=&quot;https://teythoon.cryptobitch.de//categories/gsoc.html&quot;&gt;great
8356 Google Summer of Code work&lt;/a&gt; done last summer by Justus Winter to
8357 get Debian on Hurd working more like Debian on Linux. To get started,
8358 I downloaded a prebuilt hard disk image from
8359 &lt;a href=&quot;http://ftp.debian-ports.org/debian-cd/hurd-i386/current/debian-hurd.img.tar.gz&quot;&gt;http://ftp.debian-ports.org/debian-cd/hurd-i386/current/debian-hurd.img.tar.gz&lt;/a&gt;,
8360 and started it using virt-manager.&lt;/p&gt;
8361
8362 &lt;p&gt;The first think I had to do after logging in (root without any
8363 password) was to get the network operational. I followed
8364 &lt;a href=&quot;https://www.debian.org/ports/hurd/hurd-install&quot;&gt;the
8365 instructions on the Debian GNU/Hurd ports page&lt;/a&gt; and ran these
8366 commands as root to get the machine to accept a IP address from the
8367 kvm internal DHCP server:&lt;/p&gt;
8368
8369 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
8370 settrans -fgap /dev/netdde /hurd/netdde
8371 kill $(ps -ef|awk &#39;/[p]finet/ { print $2}&#39;)
8372 kill $(ps -ef|awk &#39;/[d]evnode/ { print $2}&#39;)
8373 dhclient /dev/eth0
8374 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
8375
8376 &lt;p&gt;After this, the machine had internet connectivity, and I could
8377 upgrade it and install the sysvinit packages from experimental and
8378 enable it as the default boot system in Hurd.&lt;/p&gt;
8379
8380 &lt;p&gt;But before I did that, I set a password on the root user, as ssh is
8381 running on the machine it for ssh login to work a password need to be
8382 set. Also, note that a bug somewhere in openssh on Hurd block
8383 compression from working. Remember to turn that off on the client
8384 side.&lt;/p&gt;
8385
8386 &lt;p&gt;Run these commands as root to upgrade and test the new sysvinit
8387 stuff:&lt;/p&gt;
8388
8389 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
8390 cat &gt; /etc/apt/sources.list.d/experimental.list &amp;lt;&amp;lt;EOF
8391 deb http://http.debian.net/debian/ experimental main
8392 EOF
8393 apt-get update
8394 apt-get dist-upgrade
8395 apt-get install -t experimental initscripts sysv-rc sysvinit \
8396 sysvinit-core sysvinit-utils
8397 update-alternatives --config runsystem
8398 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
8399
8400 &lt;p&gt;To reboot after switching boot system, you have to use
8401 &lt;tt&gt;reboot-hurd&lt;/tt&gt; instead of just &lt;tt&gt;reboot&lt;/tt&gt;, as there is not
8402 yet a sysvinit process able to receive the signals from the normal
8403 &#39;reboot&#39; command. After switching to sysvinit as the boot system,
8404 upgrading every package and rebooting, the network come up with DHCP
8405 after boot as it should, and the settrans/pkill hack mentioned at the
8406 start is no longer needed. But for some strange reason, there are no
8407 longer any login prompt in the virtual console, so I logged in using
8408 ssh instead.
8409
8410 &lt;p&gt;Note that there are some race conditions in Hurd making the boot
8411 fail some times. No idea what the cause is, but hope the Hurd porters
8412 figure it out. At least Justus said on IRC (#debian-hurd on
8413 irc.debian.org) that they are aware of the problem. A way to reduce
8414 the impact is to upgrade to the Hurd packages built by Justus by
8415 adding this repository to the machine:&lt;/p&gt;
8416
8417 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
8418 cat &gt; /etc/apt/sources.list.d/hurd-ci.list &amp;lt;&amp;lt;EOF
8419 deb http://darnassus.sceen.net/~teythoon/hurd-ci/ sid main
8420 EOF
8421 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
8422
8423 &lt;p&gt;At the moment the prebuilt virtual machine get some packages from
8424 http://ftp.debian-ports.org/debian, because some of the packages in
8425 unstable do not yet include the required patches that are lingering in
8426 BTS. This is the completely list of &quot;unofficial&quot; packages installed:&lt;/p&gt;
8427
8428 &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;
8429 # aptitude search &#39;?narrow(?version(CURRENT),?origin(Debian Ports))&#39;
8430 i emacs - GNU Emacs editor (metapackage)
8431 i gdb - GNU Debugger
8432 i hurd-recommended - Miscellaneous translators
8433 i isc-dhcp-client - ISC DHCP client
8434 i isc-dhcp-common - common files used by all the isc-dhcp* packages
8435 i libc-bin - Embedded GNU C Library: Binaries
8436 i libc-dev-bin - Embedded GNU C Library: Development binaries
8437 i libc0.3 - Embedded GNU C Library: Shared libraries
8438 i A libc0.3-dbg - Embedded GNU C Library: detached debugging symbols
8439 i libc0.3-dev - Embedded GNU C Library: Development Libraries and Hea
8440 i multiarch-support - Transitional package to ensure multiarch compatibilit
8441 i A x11-common - X Window System (X.Org) infrastructure
8442 i xorg - X.Org X Window System
8443 i A xserver-xorg - X.Org X server
8444 i A xserver-xorg-input-all - X.Org X server -- input driver metapackage
8445 #
8446 &lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;
8447
8448 &lt;p&gt;All in all, testing hurd has been an interesting experience. :)
8449 X.org did not work out of the box and I never took the time to follow
8450 the porters instructions to fix it. This time I was interested in the
8451 command line stuff.&lt;p&gt;
8452 </description>
8453 </item>
8454
8455 <item>
8456 <title>New chrpath release 0.16</title>
8457 <link>http://www.hungry.com/~pere/blog/New_chrpath_release_0_16.html</link>
8458 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/New_chrpath_release_0_16.html</guid>
8459 <pubDate>Tue, 14 Jan 2014 11:00:00 +0100</pubDate>
8460 <description>&lt;p&gt;&lt;a href=&quot;http://www.coverity.com/&quot;&gt;Coverity&lt;/a&gt; is a nice tool to
8461 find problems in C, C++ and Java code using static source code
8462 analysis. It can detect a lot of different problems, and is very
8463 useful to find memory and locking bugs in the error handling part of
8464 the source. The company behind it provide
8465 &lt;a href=&quot;https://scan.coverity.com/&quot;&gt;check of free software projects as
8466 a community service&lt;/a&gt;, and many hundred free software projects are
8467 already checked. A few days ago I decided to have a closer look at
8468 the Coverity system, and discovered that the
8469 &lt;a href=&quot;http://www.gnu.org/software/gnash/&quot;&gt;gnash&lt;/a&gt; and
8470 &lt;a href=&quot;http://sourceforge.net/projects/ipmitool/&quot;&gt;ipmitool&lt;/a&gt;
8471 projects I am involved with was already registered. But these are
8472 fairly big, and I would also like to have a small and easy project to
8473 check, and decided to &lt;a href=&quot;http://scan.coverity.com/projects/1179&quot;&gt;request
8474 checking of the chrpath project&lt;/a&gt;. It was
8475 added to the checker and discovered seven potential defects. Six of
8476 these were real, mostly resource &quot;leak&quot; when the program detected an
8477 error. Nothing serious, as the resources would be released a fraction
8478 of a second later when the program exited because of the error, but it
8479 is nice to do it right in case the source of the program some time in
8480 the future end up in a library. Having fixed all defects and added
8481 &lt;a href=&quot;https://lists.alioth.debian.org/mailman/listinfo/chrpath-devel&quot;&gt;a
8482 mailing list for the chrpath developers&lt;/a&gt;, I decided it was time to
8483 publish a new release. These are the release notes:&lt;/p&gt;
8484
8485 &lt;p&gt;New in 0.16 released 2014-01-14:&lt;/p&gt;
8486
8487 &lt;ul&gt;
8488
8489 &lt;li&gt;Fixed all minor bugs discovered by Coverity.&lt;/li&gt;
8490 &lt;li&gt;Updated config.sub and config.guess from the GNU project.&lt;/li&gt;
8491 &lt;li&gt;Mention new project mailing list in the documentation.&lt;/li&gt;
8492
8493 &lt;/ul&gt;
8494
8495 &lt;p&gt;You can
8496 &lt;a href=&quot;https://alioth.debian.org/frs/?group_id=31052&quot;&gt;download the
8497 new version 0.16 from alioth&lt;/a&gt;. Please let us know via the Alioth
8498 project if something is wrong with the new release. The test suite
8499 did not discover any old errors, so if you find a new one, please also
8500 include a test suite check.&lt;/p&gt;
8501 </description>
8502 </item>
8503
8504 <item>
8505 <title>New chrpath release 0.15</title>
8506 <link>http://www.hungry.com/~pere/blog/New_chrpath_release_0_15.html</link>
8507 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/New_chrpath_release_0_15.html</guid>
8508 <pubDate>Sun, 24 Nov 2013 09:30:00 +0100</pubDate>
8509 <description>&lt;p&gt;After many years break from the package and a vain hope that
8510 development would be continued by someone else, I finally pulled my
8511 acts together this morning and wrapped up a new release of chrpath,
8512 the command line tool to modify the rpath and runpath of already
8513 compiled ELF programs. The update was triggered by the persistence of
8514 Isha Vishnoi at IBM, which needed a new config.guess file to get
8515 support for the ppc64le architecture (powerpc 64-bit Little Endian) he
8516 is working on. I checked the
8517 &lt;a href=&quot;http://packages.qa.debian.org/chrpath&quot;&gt;Debian&lt;/a&gt;,
8518 &lt;a href=&quot;https://launchpad.net/ubuntu/+source/chrpath&quot;&gt;Ubuntu&lt;/a&gt; and
8519 &lt;a href=&quot;https://admin.fedoraproject.org/pkgdb/acls/name/chrpath&quot;&gt;Fedora&lt;/a&gt;
8520 packages for interesting patches (failed to find the source from
8521 OpenSUSE and Mandriva packages), and found quite a few nice fixes.
8522 These are the release notes:&lt;/p&gt;
8523
8524 &lt;p&gt;New in 0.15 released 2013-11-24:&lt;/p&gt;
8525
8526 &lt;ul&gt;
8527
8528 &lt;li&gt;Updated config.sub and config.guess from the GNU project to work
8529 with newer architectures. Thanks to isha vishnoi for the heads
8530 up.&lt;/li&gt;
8531
8532 &lt;li&gt;Updated README with current URLs.&lt;/li&gt;
8533
8534 &lt;li&gt;Added byteswap fix found in Ubuntu, credited Jeremy Kerr and
8535 Matthias Klose.&lt;/li&gt;
8536
8537 &lt;li&gt;Added missing help for -k|--keepgoing option, using patch by
8538 Petr Machata found in Fedora.&lt;/li&gt;
8539
8540 &lt;li&gt;Rewrite removal of RPATH/RUNPATH to make sure the entry in
8541 .dynamic is a NULL terminated string. Based on patch found in
8542 Fedora credited Axel Thimm and Christian Krause.&lt;/li&gt;
8543
8544 &lt;/ul&gt;
8545
8546 &lt;p&gt;You can
8547 &lt;a href=&quot;https://alioth.debian.org/frs/?group_id=31052&quot;&gt;download the
8548 new version 0.15 from alioth&lt;/a&gt;. Please let us know via the Alioth
8549 project if something is wrong with the new release. The test suite
8550 did not discover any old errors, so if you find a new one, please also
8551 include a testsuite check.&lt;/p&gt;
8552 </description>
8553 </item>
8554
8555 <item>
8556 <title>Debian init.d boot script example for rsyslog</title>
8557 <link>http://www.hungry.com/~pere/blog/Debian_init_d_boot_script_example_for_rsyslog.html</link>
8558 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Debian_init_d_boot_script_example_for_rsyslog.html</guid>
8559 <pubDate>Sat, 2 Nov 2013 22:40:00 +0100</pubDate>
8560 <description>&lt;p&gt;If one of the points of switching to a new init system in Debian is
8561 &lt;a href=&quot;http://thomas.goirand.fr/blog/?p=147&quot;&gt;to get rid of huge
8562 init.d scripts&lt;/a&gt;, I doubt we need to switch away from sysvinit and
8563 init.d scripts at all. Here is an example init.d script, ie a rewrite
8564 of /etc/init.d/rsyslog:&lt;/p&gt;
8565
8566 &lt;p&gt;&lt;pre&gt;
8567 #!/lib/init/init-d-script
8568 ### BEGIN INIT INFO
8569 # Provides: rsyslog
8570 # Required-Start: $remote_fs $time
8571 # Required-Stop: umountnfs $time
8572 # X-Stop-After: sendsigs
8573 # Default-Start: 2 3 4 5
8574 # Default-Stop: 0 1 6
8575 # Short-Description: enhanced syslogd
8576 # Description: Rsyslog is an enhanced multi-threaded syslogd.
8577 # It is quite compatible to stock sysklogd and can be
8578 # used as a drop-in replacement.
8579 ### END INIT INFO
8580 DESC=&quot;enhanced syslogd&quot;
8581 DAEMON=/usr/sbin/rsyslogd
8582 &lt;/pre&gt;&lt;/p&gt;
8583
8584 &lt;p&gt;Pretty minimalistic to me... For the record, the original sysv-rc
8585 script was 137 lines, and the above is just 15 lines, most of it meta
8586 info/comments.&lt;/p&gt;
8587
8588 &lt;p&gt;How to do this, you ask? Well, one create a new script
8589 /lib/init/init-d-script looking something like this:
8590
8591 &lt;p&gt;&lt;pre&gt;
8592 #!/bin/sh
8593
8594 # Define LSB log_* functions.
8595 # Depend on lsb-base (&gt;= 3.2-14) to ensure that this file is present
8596 # and status_of_proc is working.
8597 . /lib/lsb/init-functions
8598
8599 #
8600 # Function that starts the daemon/service
8601
8602 #
8603 do_start()
8604 {
8605 # Return
8606 # 0 if daemon has been started
8607 # 1 if daemon was already running
8608 # 2 if daemon could not be started
8609 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test &gt; /dev/null \
8610 || return 1
8611 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
8612 $DAEMON_ARGS \
8613 || return 2
8614 # Add code here, if necessary, that waits for the process to be ready
8615 # to handle requests from services started subsequently which depend
8616 # on this one. As a last resort, sleep for some time.
8617 }
8618
8619 #
8620 # Function that stops the daemon/service
8621 #
8622 do_stop()
8623 {
8624 # Return
8625 # 0 if daemon has been stopped
8626 # 1 if daemon was already stopped
8627 # 2 if daemon could not be stopped
8628 # other if a failure occurred
8629 start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
8630 RETVAL=&quot;$?&quot;
8631 [ &quot;$RETVAL&quot; = 2 ] &amp;&amp; return 2
8632 # Wait for children to finish too if this is a daemon that forks
8633 # and if the daemon is only ever run from this initscript.
8634 # If the above conditions are not satisfied then add some other code
8635 # that waits for the process to drop all resources that could be
8636 # needed by services started subsequently. A last resort is to
8637 # sleep for some time.
8638 start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
8639 [ &quot;$?&quot; = 2 ] &amp;&amp; return 2
8640 # Many daemons don&#39;t delete their pidfiles when they exit.
8641 rm -f $PIDFILE
8642 return &quot;$RETVAL&quot;
8643 }
8644
8645 #
8646 # Function that sends a SIGHUP to the daemon/service
8647 #
8648 do_reload() {
8649 #
8650 # If the daemon can reload its configuration without
8651 # restarting (for example, when it is sent a SIGHUP),
8652 # then implement that here.
8653 #
8654 start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
8655 return 0
8656 }
8657
8658 SCRIPTNAME=$1
8659 scriptbasename=&quot;$(basename $1)&quot;
8660 echo &quot;SN: $scriptbasename&quot;
8661 if [ &quot;$scriptbasename&quot; != &quot;init-d-library&quot; ] ; then
8662 script=&quot;$1&quot;
8663 shift
8664 . $script
8665 else
8666 exit 0
8667 fi
8668
8669 NAME=$(basename $DAEMON)
8670 PIDFILE=/var/run/$NAME.pid
8671
8672 # Exit if the package is not installed
8673 #[ -x &quot;$DAEMON&quot; ] || exit 0
8674
8675 # Read configuration variable file if it is present
8676 [ -r /etc/default/$NAME ] &amp;&amp; . /etc/default/$NAME
8677
8678 # Load the VERBOSE setting and other rcS variables
8679 . /lib/init/vars.sh
8680
8681 case &quot;$1&quot; in
8682 start)
8683 [ &quot;$VERBOSE&quot; != no ] &amp;&amp; log_daemon_msg &quot;Starting $DESC&quot; &quot;$NAME&quot;
8684 do_start
8685 case &quot;$?&quot; in
8686 0|1) [ &quot;$VERBOSE&quot; != no ] &amp;&amp; log_end_msg 0 ;;
8687 2) [ &quot;$VERBOSE&quot; != no ] &amp;&amp; log_end_msg 1 ;;
8688 esac
8689 ;;
8690 stop)
8691 [ &quot;$VERBOSE&quot; != no ] &amp;&amp; log_daemon_msg &quot;Stopping $DESC&quot; &quot;$NAME&quot;
8692 do_stop
8693 case &quot;$?&quot; in
8694 0|1) [ &quot;$VERBOSE&quot; != no ] &amp;&amp; log_end_msg 0 ;;
8695 2) [ &quot;$VERBOSE&quot; != no ] &amp;&amp; log_end_msg 1 ;;
8696 esac
8697 ;;
8698 status)
8699 status_of_proc &quot;$DAEMON&quot; &quot;$NAME&quot; &amp;&amp; exit 0 || exit $?
8700 ;;
8701 #reload|force-reload)
8702 #
8703 # If do_reload() is not implemented then leave this commented out
8704 # and leave &#39;force-reload&#39; as an alias for &#39;restart&#39;.
8705 #
8706 #log_daemon_msg &quot;Reloading $DESC&quot; &quot;$NAME&quot;
8707 #do_reload
8708 #log_end_msg $?
8709 #;;
8710 restart|force-reload)
8711 #
8712 # If the &quot;reload&quot; option is implemented then remove the
8713 # &#39;force-reload&#39; alias
8714 #
8715 log_daemon_msg &quot;Restarting $DESC&quot; &quot;$NAME&quot;
8716 do_stop
8717 case &quot;$?&quot; in
8718 0|1)
8719 do_start
8720 case &quot;$?&quot; in
8721 0) log_end_msg 0 ;;
8722 1) log_end_msg 1 ;; # Old process is still running
8723 *) log_end_msg 1 ;; # Failed to start
8724 esac
8725 ;;
8726 *)
8727 # Failed to stop
8728 log_end_msg 1
8729 ;;
8730 esac
8731 ;;
8732 *)
8733 echo &quot;Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}&quot; &gt;&amp;2
8734 exit 3
8735 ;;
8736 esac
8737
8738 :
8739 &lt;/pre&gt;&lt;/p&gt;
8740
8741 &lt;p&gt;It is based on /etc/init.d/skeleton, and could be improved quite a
8742 lot. I did not really polish the approach, so it might not always
8743 work out of the box, but you get the idea. I did not try very hard to
8744 optimize it nor make it more robust either.&lt;/p&gt;
8745
8746 &lt;p&gt;A better argument for switching init system in Debian than reducing
8747 the size of init scripts (which is a good thing to do anyway), is to
8748 get boot system that is able to handle the kernel events sensibly and
8749 robustly, and do not depend on the boot to run sequentially. The boot
8750 and the kernel have not behaved sequentially in years.&lt;/p&gt;
8751 </description>
8752 </item>
8753
8754 <item>
8755 <title>Browser plugin for SPICE (spice-xpi) uploaded to Debian</title>
8756 <link>http://www.hungry.com/~pere/blog/Browser_plugin_for_SPICE__spice_xpi__uploaded_to_Debian.html</link>
8757 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Browser_plugin_for_SPICE__spice_xpi__uploaded_to_Debian.html</guid>
8758 <pubDate>Fri, 1 Nov 2013 11:00:00 +0100</pubDate>
8759 <description>&lt;p&gt;&lt;a href=&quot;http://www.spice-space.org/&quot;&gt;The SPICE protocol&lt;/a&gt; for
8760 remote display access is the preferred solution with oVirt and RedHat
8761 Enterprise Virtualization, and I was sad to discover the other day
8762 that the browser plugin needed to use these systems seamlessly was
8763 missing in Debian. The &lt;a href=&quot;http://bugs.debian.org/668284&quot;&gt;request
8764 for a package&lt;/a&gt; was from 2012-04-10 with no progress since
8765 2013-04-01, so I decided to wrap up a package based on the great work
8766 from Cajus Pollmeier and put it in a collab-maint maintained git
8767 repository to get a package I could use. I would very much like
8768 others to help me maintain the package (or just take over, I do not
8769 mind), but as no-one had volunteered so far, I just uploaded it to
8770 NEW. I hope it will be available in Debian in a few days.&lt;/p&gt;
8771
8772 &lt;p&gt;The source is now available from
8773 &lt;a href=&quot;http://anonscm.debian.org/gitweb/?p=collab-maint/spice-xpi.git;a=summary&quot;&gt;http://anonscm.debian.org/gitweb/?p=collab-maint/spice-xpi.git;a=summary&lt;/a&gt;.&lt;/p&gt;
8774 </description>
8775 </item>
8776
8777 <item>
8778 <title>Teaching vmdebootstrap to create Raspberry Pi SD card images</title>
8779 <link>http://www.hungry.com/~pere/blog/Teaching_vmdebootstrap_to_create_Raspberry_Pi_SD_card_images.html</link>
8780 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Teaching_vmdebootstrap_to_create_Raspberry_Pi_SD_card_images.html</guid>
8781 <pubDate>Sun, 27 Oct 2013 17:00:00 +0100</pubDate>
8782 <description>&lt;p&gt;The
8783 &lt;a href=&quot;http://packages.qa.debian.org/v/vmdebootstrap.html&quot;&gt;vmdebootstrap&lt;/a&gt;
8784 program is a a very nice system to create virtual machine images. It
8785 create a image file, add a partition table, mount it and run
8786 debootstrap in the mounted directory to create a Debian system on a
8787 stick. Yesterday, I decided to try to teach it how to make images for
8788 &lt;a href=&quot;https://wiki.debian.org/RaspberryPi&quot;&gt;Raspberry Pi&lt;/a&gt;, as part
8789 of a plan to simplify the build system for
8790 &lt;a href=&quot;https://wiki.debian.org/FreedomBox&quot;&gt;the FreedomBox
8791 project&lt;/a&gt;. The FreedomBox project already uses vmdebootstrap for
8792 the virtualbox images, but its current build system made multistrap
8793 based system for Dreamplug images, and it is lacking support for
8794 Raspberry Pi.&lt;/p&gt;
8795
8796 &lt;p&gt;Armed with the knowledge on how to build &quot;foreign&quot; (aka non-native
8797 architecture) chroots for Raspberry Pi, I dived into the vmdebootstrap
8798 code and adjusted it to be able to build armel images on my amd64
8799 Debian laptop. I ended up giving vmdebootstrap five new options,
8800 allowing me to replicate the image creation process I use to make
8801 &lt;a href=&quot;http://www.hungry.com/~pere/blog/A_Raspberry_Pi_based_batman_adv_Mesh_network_node.html&quot;&gt;Debian
8802 Jessie based mesh node images for the Raspberry Pi&lt;/a&gt;. First, the
8803 &lt;tt&gt;--foreign /path/to/binfm_handler&lt;/tt&gt; option tell vmdebootstrap to
8804 call debootstrap with --foreign and to copy the handler into the
8805 generated chroot before running the second stage. This allow
8806 vmdebootstrap to create armel images on an amd64 host. Next I added
8807 two new options &lt;tt&gt;--bootsize size&lt;/tt&gt; and &lt;tt&gt;--boottype
8808 fstype&lt;/tt&gt; to teach it to create a separate /boot/ partition with the
8809 given file system type, allowing me to create an image with a vfat
8810 partition for the /boot/ stuff. I also added a &lt;tt&gt;--variant
8811 variant&lt;/tt&gt; option to allow me to create smaller images without the
8812 Debian base system packages installed. Finally, I added an option
8813 &lt;tt&gt;--no-extlinux&lt;/tt&gt; to tell vmdebootstrap to not install extlinux
8814 as a boot loader. It is not needed on the Raspberry Pi and probably
8815 most other non-x86 architectures. The changes were accepted by the
8816 upstream author of vmdebootstrap yesterday and today, and is now
8817 available from
8818 &lt;a href=&quot;http://git.liw.fi/cgi-bin/cgit/cgit.cgi/vmdebootstrap/&quot;&gt;the
8819 upstream project page&lt;/a&gt;.&lt;/p&gt;
8820
8821 &lt;p&gt;To use it to build a Raspberry Pi image using Debian Jessie, first
8822 create a small script (the customize script) to add the non-free
8823 binary blob needed to boot the Raspberry Pi and the APT source
8824 list:&lt;/p&gt;
8825
8826 &lt;p&gt;&lt;pre&gt;
8827 #!/bin/sh
8828 set -e # Exit on first error
8829 rootdir=&quot;$1&quot;
8830 cd &quot;$rootdir&quot;
8831 cat &amp;lt;&amp;lt;EOF &gt; etc/apt/sources.list
8832 deb http://http.debian.net/debian/ jessie main contrib non-free
8833 EOF
8834 # Install non-free binary blob needed to boot Raspberry Pi. This
8835 # install a kernel somewhere too.
8836 wget https://raw.github.com/Hexxeh/rpi-update/master/rpi-update \
8837 -O $rootdir/usr/bin/rpi-update
8838 chmod a+x $rootdir/usr/bin/rpi-update
8839 mkdir -p $rootdir/lib/modules
8840 touch $rootdir/boot/start.elf
8841 chroot $rootdir rpi-update
8842 &lt;/pre&gt;&lt;/p&gt;
8843
8844 &lt;p&gt;Next, fetch the latest vmdebootstrap script and call it like this
8845 to build the image:&lt;/p&gt;
8846
8847 &lt;pre&gt;
8848 sudo ./vmdebootstrap \
8849 --variant minbase \
8850 --arch armel \
8851 --distribution jessie \
8852 --mirror http://http.debian.net/debian \
8853 --image test.img \
8854 --size 600M \
8855 --bootsize 64M \
8856 --boottype vfat \
8857 --log-level debug \
8858 --verbose \
8859 --no-kernel \
8860 --no-extlinux \
8861 --root-password raspberry \
8862 --hostname raspberrypi \
8863 --foreign /usr/bin/qemu-arm-static \
8864 --customize `pwd`/customize \
8865 --package netbase \
8866 --package git-core \
8867 --package binutils \
8868 --package ca-certificates \
8869 --package wget \
8870 --package kmod
8871 &lt;/pre&gt;&lt;/p&gt;
8872
8873 &lt;p&gt;The list of packages being installed are the ones needed by
8874 rpi-update to make the image bootable on the Raspberry Pi, with the
8875 exception of netbase, which is needed by debootstrap to find
8876 /etc/hosts with the minbase variant. I really wish there was a way to
8877 set up an Raspberry Pi using only packages in the Debian archive, but
8878 that is not possible as far as I know, because it boots from the GPU
8879 using a non-free binary blob.&lt;/p&gt;
8880
8881 &lt;p&gt;The build host need debootstrap, kpartx and qemu-user-static and
8882 probably a few others installed. I have not checked the complete
8883 build dependency list.&lt;/p&gt;
8884
8885 &lt;p&gt;The resulting image will not use the hardware floating point unit
8886 on the Raspberry PI, because the armel architecture in Debian is not
8887 optimized for that use. So the images created will be a bit slower
8888 than &lt;a href=&quot;http://www.raspbian.org/&quot;&gt;Raspbian&lt;/a&gt; based images.&lt;/p&gt;
8889 </description>
8890 </item>
8891
8892 <item>
8893 <title>Good causes: Debian Outreach Program for Women, EFF documenting the spying and Open access in Norway</title>
8894 <link>http://www.hungry.com/~pere/blog/Good_causes__Debian_Outreach_Program_for_Women__EFF_documenting_the_spying_and_Open_access_in_Norway.html</link>
8895 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Good_causes__Debian_Outreach_Program_for_Women__EFF_documenting_the_spying_and_Open_access_in_Norway.html</guid>
8896 <pubDate>Tue, 15 Oct 2013 21:30:00 +0200</pubDate>
8897 <description>&lt;p&gt;The last few days I came across a few good causes that should get
8898 wider attention. I recommend signing and donating to each one of
8899 these. :)&lt;/p&gt;
8900
8901 &lt;p&gt;Via &lt;a href=&quot;http://www.debian.org/News/weekly/2013/18/&quot;&gt;Debian
8902 Project News for 2013-10-14&lt;/a&gt; I came across the Outreach Program for
8903 Women program which is a Google Summer of Code like initiative to get
8904 more women involved in free software. One debian sponsor has offered
8905 to match &lt;a href=&quot;http://debian.ch/opw2013&quot;&gt;any donation done to Debian
8906 earmarked&lt;/a&gt; for this initiative. I donated a few minutes ago, and
8907 hope you will to. :)&lt;/p&gt;
8908
8909 &lt;p&gt;And the Electronic Frontier Foundation just announced plans to
8910 create &lt;a href=&quot;https://supporters.eff.org/donate/nsa-videos&quot;&gt;video
8911 documentaries about the excessive spying&lt;/a&gt; on every Internet user that
8912 take place these days, and their need to fund the work. I&#39;ve already
8913 donated. Are you next?&lt;/p&gt;
8914
8915 &lt;p&gt;For my Norwegian audience, the organisation Studentenes og
8916 Akademikernes Internasjonale Hjelpefond is collecting signatures for a
8917 statement under the heading
8918 &lt;a href=&quot;http://saih.no/Bloggers_United/&quot;&gt;Bloggers United for Open
8919 Access&lt;/a&gt; for those of us asking for more focus on open access in the
8920 Norwegian government. So far 499 signatures. I hope you will sign it
8921 too.&lt;/p&gt;
8922 </description>
8923 </item>
8924
8925 <item>
8926 <title>Videos about the Freedombox project - for inspiration and learning</title>
8927 <link>http://www.hungry.com/~pere/blog/Videos_about_the_Freedombox_project___for_inspiration_and_learning.html</link>
8928 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Videos_about_the_Freedombox_project___for_inspiration_and_learning.html</guid>
8929 <pubDate>Fri, 27 Sep 2013 14:10:00 +0200</pubDate>
8930 <description>&lt;p&gt;The &lt;a href=&quot;http://www.freedomboxfoundation.org/&quot;&gt;Freedombox
8931 project&lt;/a&gt; have been going on for a while, and have presented the
8932 vision, ideas and solution several places. Here is a little
8933 collection of videos of talks and presentation of the project.&lt;/p&gt;
8934
8935 &lt;ul&gt;
8936
8937 &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=ukvUz5taxvA&quot;&gt;FreedomBox -
8938 2,5 minute marketing film&lt;/a&gt; (Youtube)&lt;/li&gt;
8939
8940 &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=SzW25QTVWsE&quot;&gt;Eben Moglen
8941 discusses the Freedombox on CBS news 2011&lt;/a&gt; (Youtube)&lt;/li&gt;
8942
8943 &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=Ae8SZbxfE0g&quot;&gt;Eben Moglen -
8944 Freedom in the Cloud - Software Freedom, Privacy and and Security for
8945 Web 2.0 and Cloud computing at ISOC-NY Public Meeting 2010&lt;/a&gt;
8946 (Youtube)&lt;/li&gt;
8947
8948 &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=vNaIji_3xBE&quot;&gt;Fosdem 2011
8949 Keynote by Eben Moglen presenting the Freedombox&lt;/a&gt; (Youtube)&lt;/li&gt;
8950
8951 &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=9bDDUyJSQ9s&quot;&gt;Presentation of
8952 the Freedombox by James Vasile at Elevate in Gratz 2011&lt;/a&gt; (Youtube)&lt;/li&gt;
8953
8954 &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=zQTmnk27g9s&quot;&gt; Freedombox -
8955 Discovery, Identity, and Trust by Nick Daly at Freedombox Hackfest New
8956 York City in 2012&lt;/a&gt; (Youtube)&lt;/li&gt;
8957
8958 &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=tkbSB4Ba7Ck&quot;&gt;Introduction
8959 to the Freedombox at Freedombox Hackfest New York City in 2012&lt;/a&gt;
8960 (Youtube)&lt;/li&gt;
8961
8962 &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=z-P2Jaeg0aQ&quot;&gt;Freedom, Out
8963 of the Box! by Bdale Garbee at linux.conf.au Ballarat, 2012&lt;/a&gt; (Youtube) &lt;/li&gt;
8964
8965 &lt;li&gt;&lt;a href=&quot;https://archive.fosdem.org/2013/schedule/event/freedombox/&quot;&gt;Freedombox
8966 1.0 by Eben Moglen and Bdale Garbee at Fosdem 2013&lt;/a&gt; (FOSDEM) &lt;/li&gt;
8967
8968 &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=e1LpYX2zVYg&quot;&gt;What is the
8969 FreedomBox today by Bdale Garbee at Debconf13 in Vaumarcus
8970 2013&lt;/a&gt; (Youtube)&lt;/li&gt;
8971
8972 &lt;/ul&gt;
8973
8974 &lt;p&gt;A larger list is available from
8975 &lt;a href=&quot;https://wiki.debian.org/FreedomBox/TalksAndPresentations&quot;&gt;the
8976 Freedombox Wiki&lt;/a&gt;.&lt;/p&gt;
8977
8978 &lt;p&gt;On other news, I am happy to report that Freedombox based on Debian
8979 Jessie is coming along quite well, and soon both Owncloud and using
8980 Tor should be available for testers of the Freedombox solution. :) In
8981 a few weeks I hope everything needed to test it is included in Debian.
8982 The withsqlite package is already in Debian, and the plinth package is
8983 pending in NEW. The third and vital part of that puzzle is the
8984 metapackage/setup framework, which is still pending an upload. Join
8985 us on &lt;a href=&quot;irc://irc.debian.org:6667/%23freedombox&quot;&gt;IRC
8986 (#freedombox on irc.debian.org)&lt;/a&gt; and
8987 &lt;a href=&quot;http://lists.alioth.debian.org/mailman/listinfo/freedombox-discuss&quot;&gt;the
8988 mailing list&lt;/a&gt; if you want to help make this vision come true.&lt;/p&gt;
8989 </description>
8990 </item>
8991
8992 <item>
8993 <title>Recipe to test the Freedombox project on amd64 or Raspberry Pi</title>
8994 <link>http://www.hungry.com/~pere/blog/Recipe_to_test_the_Freedombox_project_on_amd64_or_Raspberry_Pi.html</link>
8995 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Recipe_to_test_the_Freedombox_project_on_amd64_or_Raspberry_Pi.html</guid>
8996 <pubDate>Tue, 10 Sep 2013 14:20:00 +0200</pubDate>
8997 <description>&lt;p&gt;I was introduced to the
8998 &lt;a href=&quot;http://www.freedomboxfoundation.org/&quot;&gt;Freedombox project&lt;/a&gt;
8999 in 2010, when Eben Moglen presented his vision about serving the need
9000 of non-technical people to keep their personal information private and
9001 within the legal protection of their own homes. The idea is to give
9002 people back the power over their network and machines, and return
9003 Internet back to its intended peer-to-peer architecture. Instead of
9004 depending on a central service, the Freedombox will give everyone
9005 control over their own basic infrastructure.&lt;/p&gt;
9006
9007 &lt;p&gt;I&#39;ve intended to join the effort since then, but other tasks have
9008 taken priority. But this summers nasty news about the misuse of trust
9009 and privilege exercised by the &quot;western&quot; intelligence gathering
9010 communities increased my eagerness to contribute to a point where I
9011 actually started working on the project a while back.&lt;/p&gt;
9012
9013 &lt;p&gt;The &lt;a href=&quot;https://alioth.debian.org/projects/freedombox/&quot;&gt;initial
9014 Debian initiative&lt;/a&gt; based on the vision from Eben Moglen, is to
9015 create a simple and cheap Debian based appliance that anyone can hook
9016 up in their home and get access to secure and private services and
9017 communication. The initial deployment platform have been the
9018 &lt;a href=&quot;http://www.globalscaletechnologies.com/t-dreamplugdetails.aspx&quot;&gt;Dreamplug&lt;/a&gt;,
9019 which is a piece of hardware I do not own. So to be able to test what
9020 the current Freedombox setup look like, I had to come up with a way to install
9021 it on some hardware I do have access to. I have rewritten the
9022 &lt;a href=&quot;https://github.com/NickDaly/freedom-maker&quot;&gt;freedom-maker&lt;/a&gt;
9023 image build framework to use .deb packages instead of only copying
9024 setup into the boot images, and thanks to this rewrite I am able to
9025 set up any machine supported by Debian Wheezy as a Freedombox, using
9026 the previously mentioned deb (and a few support debs for packages
9027 missing in Debian).&lt;/p&gt;
9028
9029 &lt;p&gt;The current Freedombox setup consist of a set of bootstrapping
9030 scripts
9031 (&lt;a href=&quot;https://github.com/petterreinholdtsen/freedombox-setup&quot;&gt;freedombox-setup&lt;/a&gt;),
9032 and a administrative web interface
9033 (&lt;a href=&quot;https://github.com/NickDaly/Plinth&quot;&gt;plinth&lt;/a&gt; + exmachina +
9034 withsqlite), as well as a privacy enhancing proxy based on
9035 &lt;a href=&quot;http://packages.qa.debian.org/privoxy&quot;&gt;privoxy&lt;/a&gt;
9036 (freedombox-privoxy). There is also a web/javascript based XMPP
9037 client (&lt;a href=&quot;http://packages.qa.debian.org/jwchat&quot;&gt;jwchat&lt;/a&gt;)
9038 trying (unsuccessfully so far) to talk to the XMPP server
9039 (&lt;a href=&quot;http://packages.qa.debian.org/ejabberd&quot;&gt;ejabberd&lt;/a&gt;). The
9040 web interface is pluggable, and the goal is to use it to enable OpenID
9041 services, mesh network connectivity, use of TOR, etc, etc. Not much of
9042 this is really working yet, see
9043 &lt;a href=&quot;https://github.com/NickDaly/freedombox-todos/blob/master/TODO&quot;&gt;the
9044 project TODO&lt;/a&gt; for links to GIT repositories. Most of the code is
9045 on github at the moment. The HTTP proxy is operational out of the
9046 box, and the admin web interface can be used to add/remove plinth
9047 users. I&#39;ve not been able to do anything else with it so far, but
9048 know there are several branches spread around github and other places
9049 with lots of half baked features.&lt;/p&gt;
9050
9051 &lt;p&gt;Anyway, if you want to have a look at the current state, the
9052 following recipes should work to give you a test machine to poke
9053 at.&lt;/p&gt;
9054
9055 &lt;p&gt;&lt;strong&gt;Debian Wheezy amd64&lt;/strong&gt;&lt;/p&gt;
9056
9057 &lt;ol&gt;
9058
9059 &lt;li&gt;Fetch normal Debian Wheezy installation ISO.&lt;/li&gt;
9060 &lt;li&gt;Boot from it, either as CD or USB stick.&lt;/li&gt;
9061 &lt;li&gt;&lt;p&gt;Press [tab] on the boot prompt and add this as a boot argument
9062 to the Debian installer:&lt;p&gt;
9063 &lt;pre&gt;url=&lt;a href=&quot;http://www.reinholdtsen.name/freedombox/preseed-wheezy.dat&quot;&gt;http://www.reinholdtsen.name/freedombox/preseed-wheezy.dat&lt;/a&gt;&lt;/pre&gt;&lt;/li&gt;
9064
9065 &lt;li&gt;Answer the few language/region/password questions and pick disk to
9066 install on.&lt;/li&gt;
9067
9068 &lt;li&gt;When the installation is finished and the machine have rebooted a
9069 few times, your Freedombox is ready for testing.&lt;/li&gt;
9070
9071 &lt;/ol&gt;
9072
9073 &lt;p&gt;&lt;strong&gt;Raspberry Pi Raspbian&lt;/strong&gt;&lt;/p&gt;
9074
9075 &lt;ol&gt;
9076
9077 &lt;li&gt;Fetch a Raspbian SD card image, create SD card.&lt;/li&gt;
9078 &lt;li&gt;Boot from SD card, extend file system to fill the card completely.&lt;/li&gt;
9079 &lt;li&gt;&lt;p&gt;Log in and add this to /etc/sources.list:&lt;/p&gt;
9080 &lt;pre&gt;
9081 deb &lt;a href=&quot;http://www.reinholdtsen.name/freedombox/&quot;&gt;http://www.reinholdtsen.name/freedombox&lt;/a&gt; wheezy main
9082 &lt;/pre&gt;&lt;/li&gt;
9083 &lt;li&gt;&lt;p&gt;Run this as root:&lt;/p&gt;
9084 &lt;pre&gt;
9085 wget -O - http://www.reinholdtsen.name/freedombox/BE1A583D.asc | \
9086 apt-key add -
9087 apt-get update
9088 apt-get install freedombox-setup
9089 /usr/lib/freedombox/setup
9090 &lt;/pre&gt;&lt;/li&gt;
9091 &lt;li&gt;Reboot into your freshly created Freedombox.&lt;/li&gt;
9092
9093 &lt;/ol&gt;
9094
9095 &lt;p&gt;You can test it on other architectures too, but because the
9096 freedombox-privoxy package is binary, it will only work as intended on
9097 the architectures where I have had time to build the binary and put it
9098 in my APT repository. But do not let this stop you. It is only a
9099 short &quot;&lt;tt&gt;apt-get source -b freedombox-privoxy&lt;/tt&gt;&quot; away. :)&lt;/p&gt;
9100
9101 &lt;p&gt;Note that by default Freedombox is a DHCP server on the
9102 192.168.1.0/24 subnet, so if this is your subnet be careful and turn
9103 off the DHCP server by running &quot;&lt;tt&gt;update-rc.d isc-dhcp-server
9104 disable&lt;/tt&gt;&quot; as root.&lt;/p&gt;
9105
9106 &lt;p&gt;Please let me know if this works for you, or if you have any
9107 problems. We gather on the IRC channel
9108 &lt;a href=&quot;irc://irc.debian.org:6667/%23freedombox&quot;&gt;#freedombox&lt;/a&gt; on
9109 irc.debian.org and the
9110 &lt;a href=&quot;http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/freedombox-discuss&quot;&gt;project
9111 mailing list&lt;/a&gt;.&lt;/p&gt;
9112
9113 &lt;p&gt;Once you get your freedombox operational, you can visit
9114 &lt;tt&gt;http://your-host-name:8001/&lt;/tt&gt; to see the state of the plint
9115 welcome screen (dead end - do not be surprised if you are unable to
9116 get past it), and next visit &lt;tt&gt;http://your-host-name:8001/help/&lt;/tt&gt;
9117 to look at the rest of plinth. The default user is &#39;admin&#39; and the
9118 default password is &#39;secret&#39;.&lt;/p&gt;
9119 </description>
9120 </item>
9121
9122 <item>
9123 <title>Intel 180 SSD disk with Lenovo firmware can not use Intel firmware</title>
9124 <link>http://www.hungry.com/~pere/blog/Intel_180_SSD_disk_with_Lenovo_firmware_can_not_use_Intel_firmware.html</link>
9125 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Intel_180_SSD_disk_with_Lenovo_firmware_can_not_use_Intel_firmware.html</guid>
9126 <pubDate>Sun, 18 Aug 2013 14:00:00 +0200</pubDate>
9127 <description>&lt;p&gt;Earlier, I reported about
9128 &lt;a href=&quot;http://www.hungry.com/~pere/blog/How_to_fix_a_Thinkpad_X230_with_a_broken_180_GB_SSD_disk.html&quot;&gt;my
9129 problems using an Intel SSD 520 Series 180 GB disk&lt;/a&gt;. Friday I was
9130 told by IBM that the original disk should be thrown away. And as
9131 there no longer was a problem if I bricked the firmware, I decided
9132 today to try to install Intel firmware to replace the Lenovo firmware
9133 currently on the disk.&lt;/p&gt;
9134
9135 &lt;p&gt;I searched the Intel site for firmware, and found
9136 &lt;a href=&quot;https://downloadcenter.intel.com/Detail_Desc.aspx?agr=Y&amp;ProdId=3472&amp;DwnldID=18363&amp;ProductFamily=Solid-State+Drives+and+Caching&amp;ProductLine=Intel%c2%ae+High+Performance+Solid-State+Drive&amp;ProductProduct=Intel%c2%ae+SSD+520+Series+(180GB%2c+2.5in+SATA+6Gb%2fs%2c+25nm%2c+MLC)&amp;lang=eng&quot;&gt;issdfut_2.0.4.iso&lt;/a&gt;
9137 (aka Intel SATA Solid-State Drive Firmware Update Tool) which
9138 according to the site should contain the latest firmware for SSD
9139 disks. I inserted the broken disk in one of my spare laptops and
9140 booted the ISO from a USB stick. The disk was recognized, but the
9141 program claimed the newest firmware already were installed and refused
9142 to insert any Intel firmware. So no change, and the disk is still
9143 unable to handle write load. :( I guess the only way to get them
9144 working would be if Lenovo releases new firmware. No idea how likely
9145 that is. Anyway, just blogging about this test for completeness. I
9146 got a working Samsung disk, and see no point in spending more time on
9147 the broken disks.&lt;/p&gt;
9148 </description>
9149 </item>
9150
9151 <item>
9152 <title>How to fix a Thinkpad X230 with a broken 180 GB SSD disk</title>
9153 <link>http://www.hungry.com/~pere/blog/How_to_fix_a_Thinkpad_X230_with_a_broken_180_GB_SSD_disk.html</link>
9154 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/How_to_fix_a_Thinkpad_X230_with_a_broken_180_GB_SSD_disk.html</guid>
9155 <pubDate>Wed, 17 Jul 2013 23:50:00 +0200</pubDate>
9156 <description>&lt;p&gt;Today I switched to
9157 &lt;a href=&quot;http://www.hungry.com/~pere/blog/The_Thinkpad_is_dead__long_live_the_Thinkpad_X230_.html&quot;&gt;my
9158 new laptop&lt;/a&gt;. I&#39;ve previously written about the problems I had with
9159 my new Thinkpad X230, which was delivered with an
9160 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Intel_SSD_520_Series_180_GB_with_Lenovo_firmware_still_lock_up_from_sustained_writes.html&quot;&gt;180
9161 GB Intel SSD disk with Lenovo firmware&lt;/a&gt; that did not handle
9162 sustained writes. My hardware supplier have been very forthcoming in
9163 trying to find a solution, and after first trying with another
9164 identical 180 GB disks they decided to send me a 256 GB Samsung SSD
9165 disk instead to fix it once and for all. The Samsung disk survived
9166 the installation of Debian with encrypted disks (filling the disk with
9167 random data during installation killed the first two), and I thus
9168 decided to trust it with my data. I have installed it as a Debian Edu
9169 Wheezy roaming workstation hooked up with my Debian Edu Squeeze main
9170 server at home using Kerberos and LDAP, and will use it as my work
9171 station from now on.&lt;/p&gt;
9172
9173 &lt;p&gt;As this is a solid state disk with no moving parts, I believe the
9174 Debian Wheezy default installation need to be tuned a bit to increase
9175 performance and increase life time of the disk. The Linux kernel and
9176 user space applications do not yet adjust automatically to such
9177 environment. To make it easier for my self, I created a draft Debian
9178 package &lt;tt&gt;ssd-setup&lt;/tt&gt; to handle this tuning. The
9179 &lt;a href=&quot;http://anonscm.debian.org/gitweb/?p=collab-maint/ssd-setup.git&quot;&gt;source
9180 for the ssd-setup package&lt;/a&gt; is available from collab-maint, and it
9181 is set up to adjust the setup of the machine by just installing the
9182 package. If there is any non-SSD disk in the machine, the package
9183 will refuse to install, as I did not try to write any logic to sort
9184 file systems in SSD and non-SSD file systems.&lt;/p&gt;
9185
9186 &lt;p&gt;I consider the package a draft, as I am a bit unsure how to best
9187 set up Debian Wheezy with an SSD. It is adjusted to my use case,
9188 where I set up the machine with one large encrypted partition (in
9189 addition to /boot), put LVM on top of this and set up partitions on
9190 top of this again. See the README file in the package source for the
9191 references I used to pick the settings. At the moment these
9192 parameters are tuned:&lt;/p&gt;
9193
9194 &lt;ul&gt;
9195
9196 &lt;li&gt;Set up cryptsetup to pass TRIM commands to the physical disk
9197 (adding discard to /etc/crypttab)&lt;/li&gt;
9198
9199 &lt;li&gt;Set up LVM to pass on TRIM commands to the underlying device (in
9200 this case a cryptsetup partition) by changing issue_discards from
9201 0 to 1 in /etc/lvm/lvm.conf.&lt;/li&gt;
9202
9203 &lt;li&gt;Set relatime as a file system option for ext3 and ext4 file
9204 systems.&lt;/li&gt;
9205
9206 &lt;li&gt;Tell swap to use TRIM commands by adding &#39;discard&#39; to
9207 /etc/fstab.&lt;/li&gt;
9208
9209 &lt;li&gt;Change I/O scheduler from cfq to deadline using a udev rule.&lt;/li&gt;
9210
9211 &lt;li&gt;Run fstrim on every ext3 and ext4 file system every night (from
9212 cron.daily).&lt;/li&gt;
9213
9214 &lt;li&gt;Adjust sysctl values vm.swappiness to 1 and vm.vfs_cache_pressure
9215 to 50 to reduce the kernel eagerness to swap out processes.&lt;/li&gt;
9216
9217 &lt;/ul&gt;
9218
9219 &lt;p&gt;During installation, I cancelled the part where the installer fill
9220 the disk with random data, as this would kill the SSD performance for
9221 little gain. My goal with the encrypted file system is to ensure
9222 those stealing my laptop end up with a brick and not a working
9223 computer. I have no hope in keeping the really resourceful people
9224 from getting the data on the disk (see
9225 &lt;a href=&quot;http://xkcd.com/538/&quot;&gt;XKCD #538&lt;/a&gt; for an explanation why).
9226 Thus I concluded that adding the discard option to crypttab is the
9227 right thing to do.&lt;/p&gt;
9228
9229 &lt;p&gt;I considered using the noop I/O scheduler, as several recommended
9230 it for SSD, but others recommended deadline and a benchmark I found
9231 indicated that deadline might be better for interactive use.&lt;/p&gt;
9232
9233 &lt;p&gt;I also considered using the &#39;discard&#39; file system option for ext3
9234 and ext4, but read that it would give a performance hit ever time a
9235 file is removed, and thought it best to that that slowdown once a day
9236 instead of during my work.&lt;/p&gt;
9237
9238 &lt;p&gt;My package do not set up tmpfs on /var/run, /var/lock and /tmp, as
9239 this is already done by Debian Edu.&lt;/p&gt;
9240
9241 &lt;p&gt;I have not yet started on the user space tuning. I expect
9242 iceweasel need some tuning, and perhaps other applications too, but
9243 have not yet had time to investigate those parts.&lt;/p&gt;
9244
9245 &lt;p&gt;The package should work on Ubuntu too, but I have not yet tested it
9246 there.&lt;/p&gt;
9247
9248 &lt;p&gt;As for the answer to the question in the title of this blog post,
9249 as far as I know, the only solution I know about is to replace the
9250 disk. It might be possible to flash it with Intel firmware instead of
9251 the Lenovo firmware. But I have not tried and did not want to do so
9252 without approval from Lenovo as I wanted to keep the warranty on the
9253 disk until a solution was found and they wanted the broken disks
9254 back.&lt;/p&gt;
9255 </description>
9256 </item>
9257
9258 <item>
9259 <title>Intel SSD 520 Series 180 GB with Lenovo firmware still lock up from sustained writes</title>
9260 <link>http://www.hungry.com/~pere/blog/Intel_SSD_520_Series_180_GB_with_Lenovo_firmware_still_lock_up_from_sustained_writes.html</link>
9261 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Intel_SSD_520_Series_180_GB_with_Lenovo_firmware_still_lock_up_from_sustained_writes.html</guid>
9262 <pubDate>Wed, 10 Jul 2013 13:30:00 +0200</pubDate>
9263 <description>&lt;p&gt;A few days ago, I wrote about
9264 &lt;a href=&quot;http://www.hungry.com/~pere/blog/The_Thinkpad_is_dead__long_live_the_Thinkpad_X230_.html&quot;&gt;the
9265 problems I experienced with my new X230 and its SSD disk&lt;/a&gt;, which
9266 was dying during installation because it is unable to cope with
9267 sustained write. My supplier is in contact with
9268 &lt;a href=&quot;http://www.lenovo.com/&quot;&gt;Lenovo&lt;/a&gt;, and they wanted to send a
9269 replacement disk to try to fix the problem. They decided to send an
9270 identical model, so my hopes for a permanent fix was slim.&lt;/p&gt;
9271
9272 &lt;p&gt;Anyway, today I got the replacement disk and tried to install
9273 Debian Edu Wheezy with encrypted disk on it. The new disk have the
9274 same firmware version as the original. This time my hope raised
9275 slightly as the installation progressed, as the original disk used to
9276 die after 4-7% of the disk was written to, while this time it kept
9277 going past 10%, 20%, 40% and even past 50%. But around 60%, the disk
9278 died again and I was back on square one. I still do not have a new
9279 laptop with a disk I can trust. I can not live with a disk that might
9280 lock up when I download a new
9281 &lt;a href=&quot;http://www.skolelinux.org/&quot;&gt;Debian Edu / Skolelinux&lt;/a&gt; ISO or
9282 other large files. I look forward to hearing from my supplier with
9283 the next proposal from Lenovo.&lt;/p&gt;
9284
9285 &lt;p&gt;The original disk is marked Intel SSD 520 Series 180 GB,
9286 11S0C38722Z1ZNME35X1TR, ISN: CVCV321407HB180EGN, SA: G57560302, FW:
9287 LF1i, 29MAY2013, PBA: G39779-300, LBA 351,651,888, LI P/N: 0C38722,
9288 Pb-free 2LI, LC P/N: 16-200366, WWN: 55CD2E40002756C4, Model:
9289 SSDSC2BW180A3L 2.5&quot; 6Gb/s SATA SSD 180G 5V 1A, ASM P/N 0C38732, FRU
9290 P/N 45N8295, P0C38732.&lt;/p&gt;
9291
9292 &lt;p&gt;The replacement disk is marked Intel SSD 520 Series 180 GB,
9293 11S0C38722Z1ZNDE34N0L0, ISN: CVCV315306RK180EGN, SA: G57560-302, FW:
9294 LF1i, 22APR2013, PBA: G39779-300, LBA 351,651,888, LI P/N: 0C38722,
9295 Pb-free 2LI, LC P/N: 16-200366, WWN: 55CD2E40000AB69E, Model:
9296 SSDSC2BW180A3L 2.5&quot; 6Gb/s SATA SSD 180G 5V 1A, ASM P/N 0C38732, FRU
9297 P/N 45N8295, P0C38732.&lt;/p&gt;
9298
9299 &lt;p&gt;The only difference is in the first number (serial number?), ISN,
9300 SA, date and WNPP values. Mentioning all the details here in case
9301 someone is able to use the information to find a way to identify the
9302 failing disk among working ones (if any such working disk actually
9303 exist).&lt;/p&gt;
9304 </description>
9305 </item>
9306
9307 <item>
9308 <title>July 13th: Debian/Ubuntu BSP and Skolelinux/Debian Edu developer gathering in Oslo</title>
9309 <link>http://www.hungry.com/~pere/blog/July_13th__Debian_Ubuntu_BSP_and_Skolelinux_Debian_Edu_developer_gathering_in_Oslo.html</link>
9310 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/July_13th__Debian_Ubuntu_BSP_and_Skolelinux_Debian_Edu_developer_gathering_in_Oslo.html</guid>
9311 <pubDate>Tue, 9 Jul 2013 10:40:00 +0200</pubDate>
9312 <description>&lt;p&gt;The upcoming Saturday, 2013-07-13, we are organising a combined
9313 Debian Edu developer gathering and Debian and Ubuntu bug squashing
9314 party in Oslo. It is organised by &lt;a href=&quot;http://www.nuug.no/&quot;&gt;the
9315 member assosiation NUUG&lt;/a&gt; and
9316 &lt;a href=&quot;http://www.skolelinux.org/&quot;&gt;the Debian Edu / Skolelinux
9317 project&lt;/a&gt; together with &lt;a href=&quot;http://bitraf.no/&quot;&gt;the hack space
9318 Bitraf&lt;/a&gt;.&lt;/p&gt;
9319
9320 &lt;p&gt;It starts 10:00 and continue until late evening. Everyone is
9321 welcome, and there is no fee to participate. There is on the other
9322 hand limited space, and only room for 30 people. Please put your name
9323 on &lt;a href=&quot;http://wiki.debian.org/BSP/2013/07/13/no/Oslo&quot;&gt;the event
9324 wiki page&lt;/a&gt; if you plan to join us.&lt;/p&gt;
9325 </description>
9326 </item>
9327
9328 <item>
9329 <title>The Thinkpad is dead, long live the Thinkpad X230?</title>
9330 <link>http://www.hungry.com/~pere/blog/The_Thinkpad_is_dead__long_live_the_Thinkpad_X230_.html</link>
9331 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/The_Thinkpad_is_dead__long_live_the_Thinkpad_X230_.html</guid>
9332 <pubDate>Fri, 5 Jul 2013 08:30:00 +0200</pubDate>
9333 <description>&lt;p&gt;Half a year ago, I reported that I had to find a
9334 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Thank_you_Thinkpad_X41__for_your_long_and_trustworthy_service.html&quot;&gt;replacement
9335 for my trusty old Thinkpad X41&lt;/a&gt;. Unfortunately I did not have much
9336 time to spend on it, and it took a while to find a model I believe
9337 will do the job, but two days ago the replacement finally arrived. I
9338 ended up picking a
9339 &lt;a href=&quot;http://www.linlap.com/lenovo_thinkpad_x230&quot;&gt;Thinkpad X230&lt;/a&gt;
9340 with SSD disk (NZDAJMN). I first test installed Debian Edu Wheezy as
9341 a roaming workstation, and it seemed to work flawlessly. But my
9342 second installation with encrypted disk was not as successful. More
9343 on that below.&lt;/p&gt;
9344
9345 &lt;p&gt;I had a hard time trying to track down a good laptop, as my most
9346 important requirements (robust and with a good keyboard) are never
9347 listed in the feature list. But I did get good help from the search
9348 feature at &lt;a href=&quot;http://www.prisjakt.no/&quot;&gt;Prisjakt&lt;/a&gt;, which
9349 allowed me to limit the list of interesting laptops based on my other
9350 requirements. A bit surprising that SSD disk are not disks according
9351 to that search interface, so I had to drop specifying the number of
9352 disks from my search parameters. I also asked around among friends to
9353 get their impression on keyboards and robustness.&lt;/p&gt;
9354
9355 &lt;p&gt;So the new laptop arrived, and it is quite a lot wider than the
9356 X41. I am not quite convinced about the keyboard, as it is
9357 significantly wider than my old keyboard, and I have to stretch my
9358 hand a lot more to reach the edges. But the key response is fairly
9359 good and the individual key shape is fairly easy to handle, so I hope
9360 I will get used to it. My old X40 was starting to fail, and I really
9361 needed a new laptop now. :)&lt;/p&gt;
9362
9363 &lt;p&gt;Turning off the touch pad was simple. All it took was a quick
9364 visit to the BIOS during boot it disable it.&lt;/p&gt;
9365
9366 &lt;p&gt;But there is a fatal problem with the laptop. The 180 GB SSD disk
9367 lock up during load. And this happen when installing Debian Wheezy
9368 with encrypted disk, while the disk is being filled with random data.
9369 I also tested to install Ubuntu Raring, and it happen there too if I
9370 reenable the code to fill the disk with random data (it is disabled by
9371 default in Ubuntu). And the bug with is already known. It was
9372 reported to Debian as &lt;a href=&quot;http://bugs.debian.org/691427&quot;&gt;BTS
9373 report #691427 2012-10-25&lt;/a&gt; (journal commit I/O error on brand-new
9374 Thinkpad T430s ext4 on lvm on SSD). It is also reported to the Linux
9375 kernel developers as
9376 &lt;a href=&quot;https://bugzilla.kernel.org/show_bug.cgi?id=51861&quot;&gt;Kernel bugzilla
9377 report #51861 2012-12-20&lt;/a&gt; (Intel SSD 520 stops working under load
9378 (SSDSC2BW180A3L in Lenovo ThinkPad T430s)). It is also reported on the
9379 Lenovo forums, both for
9380 &lt;a href=&quot;http://forums.lenovo.com/t5/T400-T500-and-newer-T-series/T430s-Intel-SSD-520-180GB-issue/m-p/1070549&quot;&gt;T430
9381 2012-11-10&lt;/a&gt; and for
9382 &lt;a href=&quot;http://forums.lenovo.com/t5/X-Series-ThinkPad-Laptops/x230-SATA-errors-with-180GB-Intel-520-SSD-under-heavy-write-load/m-p/1068147&quot;&gt;X230
9383 03-20-2013&lt;/a&gt;. The problem do not only affect installation. The
9384 reports state that the disk lock up during use if many writes are done
9385 on the disk, so it is much no use to work around the installation
9386 problem and end up with a computer that can lock up at any moment.
9387 There is even a
9388 &lt;a href=&quot;https://git.efficios.com/?p=test-ssd.git&quot;&gt;small C program
9389 available&lt;/a&gt; that will lock up the hard drive after running a few
9390 minutes by writing to a file.&lt;/p&gt;
9391
9392 &lt;p&gt;I&#39;ve contacted my supplier and asked how to handle this, and after
9393 contacting PCHELP Norway (request 01D1FDP) which handle support
9394 requests for Lenovo, his first suggestion was to upgrade the disk
9395 firmware. Unfortunately there is no newer firmware available from
9396 Lenovo, as my disk already have the most recent one (version LF1i). I
9397 hope to hear more from him today and hope the problem can be
9398 fixed. :)&lt;/p&gt;
9399 </description>
9400 </item>
9401
9402 <item>
9403 <title>The Thinkpad is dead, long live the Thinkpad X230</title>
9404 <link>http://www.hungry.com/~pere/blog/The_Thinkpad_is_dead__long_live_the_Thinkpad_X230.html</link>
9405 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/The_Thinkpad_is_dead__long_live_the_Thinkpad_X230.html</guid>
9406 <pubDate>Thu, 4 Jul 2013 09:20:00 +0200</pubDate>
9407 <description>&lt;p&gt;Half a year ago, I reported that I had to find a replacement for my
9408 trusty old Thinkpad X41. Unfortunately I did not have much time to
9409 spend on it, but today the replacement finally arrived. I ended up
9410 picking a &lt;a href=&quot;http://www.linlap.com/lenovo_thinkpad_x230&quot;&gt;Thinkpad
9411 X230&lt;/a&gt; with SSD disk (NZDAJMN). I first test installed Debian Edu
9412 Wheezy as a roaming workstation, and it worked flawlessly. As I write
9413 this, it is installing what I hope will be a more final installation,
9414 with a encrypted hard drive to ensure any dope head stealing it end up
9415 with an expencive door stop.&lt;/p&gt;
9416
9417 &lt;p&gt;I had a hard time trying to track down a good laptop, as my most
9418 important requirements (robust and with a good keyboard) are never
9419 listed in the feature list. But I did get good help from the search
9420 feature at &lt;ahref=&quot;http://www.prisjakt.no/&quot;&gt;Prisjakt&lt;/a&gt;, which
9421 allowed me to limit the list of interesting laptops based on my other
9422 requirements. A bit surprising that SSD disk are not disks, so I had
9423 to drop number of disks from my search parameters.&lt;/p&gt;
9424
9425 &lt;p&gt;I am not quite convinced about the keyboard, as it is significantly
9426 wider than my old keyboard, and I have to stretch my hand a lot more
9427 to reach the edges. But the key response is fairly good and the
9428 individual key shape is fairly easy to handle, so I hope I will get
9429 used to it. My old X40 was starting to fail, and I really needed a
9430 new laptop now. :)&lt;/p&gt;
9431
9432 &lt;p&gt;I look forward to figuring out how to turn off the touch pad.&lt;/p&gt;
9433 </description>
9434 </item>
9435
9436 <item>
9437 <title>Automatically locate and install required firmware packages on Debian (Isenkram 0.4)</title>
9438 <link>http://www.hungry.com/~pere/blog/Automatically_locate_and_install_required_firmware_packages_on_Debian__Isenkram_0_4_.html</link>
9439 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Automatically_locate_and_install_required_firmware_packages_on_Debian__Isenkram_0_4_.html</guid>
9440 <pubDate>Tue, 25 Jun 2013 11:50:00 +0200</pubDate>
9441 <description>&lt;p&gt;It annoys me when the computer fail to do automatically what it is
9442 perfectly capable of, and I have to do it manually to get things
9443 working. One such task is to find out what firmware packages are
9444 needed to get the hardware on my computer working. Most often this
9445 affect the wifi card, but some times it even affect the RAID
9446 controller or the ethernet card. Today I pushed version 0.4 of the
9447 &lt;a href=&quot;http://packages.qa.debian.org/isenkram&quot;&gt;Isenkram package&lt;/a&gt;
9448 including a new script isenkram-autoinstall-firmware handling the
9449 process of asking all the loaded kernel modules what firmware files
9450 they want, find debian packages providing these files and install the
9451 debian packages. Here is a test run on my laptop:&lt;/p&gt;
9452
9453 &lt;p&gt;&lt;pre&gt;
9454 # isenkram-autoinstall-firmware
9455 info: kernel drivers requested extra firmware: ipw2200-bss.fw ipw2200-ibss.fw ipw2200-sniffer.fw
9456 info: fetching http://http.debian.net/debian/dists/squeeze/Contents-i386.gz
9457 info: locating packages with the requested firmware files
9458 info: Updating APT sources after adding non-free APT source
9459 info: trying to install firmware-ipw2x00
9460 firmware-ipw2x00
9461 firmware-ipw2x00
9462 Preconfiguring packages ...
9463 Selecting previously deselected package firmware-ipw2x00.
9464 (Reading database ... 259727 files and directories currently installed.)
9465 Unpacking firmware-ipw2x00 (from .../firmware-ipw2x00_0.28+squeeze1_all.deb) ...
9466 Setting up firmware-ipw2x00 (0.28+squeeze1) ...
9467 #
9468 &lt;/pre&gt;&lt;/p&gt;
9469
9470 &lt;p&gt;When all the requested firmware is present, a simple message is
9471 printed instead:&lt;/p&gt;
9472
9473 &lt;p&gt;&lt;pre&gt;
9474 # isenkram-autoinstall-firmware
9475 info: did not find any firmware files requested by loaded kernel modules. exiting
9476 #
9477 &lt;/pre&gt;&lt;/p&gt;
9478
9479 &lt;p&gt;It could use some polish, but it is already working well and saving
9480 me some time when setting up new machines. :)&lt;/p&gt;
9481
9482 &lt;p&gt;So, how does it work? It look at the set of currently loaded
9483 kernel modules, and look up each one of them using modinfo, to find
9484 the firmware files listed in the module meta-information. Next, it
9485 download the Contents file from a nearby APT mirror, and search for
9486 the firmware files in this file to locate the package with the
9487 requested firmware file. If the package is in the non-free section, a
9488 non-free APT source is added and the package is installed using
9489 &lt;tt&gt;apt-get install&lt;/tt&gt;. The end result is a slightly better working
9490 machine.&lt;/p&gt;
9491
9492 &lt;p&gt;I hope someone find time to implement a more polished version of
9493 this script as part of the hw-detect debian-installer module, to
9494 finally fix &lt;a href=&quot;http://bugs.debian.org/655507&quot;&gt;BTS report
9495 #655507&lt;/a&gt;. There really is no need to insert USB sticks with
9496 firmware during a PXE install when the packages already are available
9497 from the nearby Debian mirror.&lt;/p&gt;
9498 </description>
9499 </item>
9500
9501 <item>
9502 <title>Fixing the Linux black screen of death on machines with Intel HD video</title>
9503 <link>http://www.hungry.com/~pere/blog/Fixing_the_Linux_black_screen_of_death_on_machines_with_Intel_HD_video.html</link>
9504 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Fixing_the_Linux_black_screen_of_death_on_machines_with_Intel_HD_video.html</guid>
9505 <pubDate>Tue, 11 Jun 2013 11:00:00 +0200</pubDate>
9506 <description>&lt;p&gt;When installing RedHat, Fedora, Debian and Ubuntu on some machines,
9507 the screen just turn black when Linux boot, either during installation
9508 or on first boot from the hard disk. I&#39;ve seen it once in a while the
9509 last few years, but only recently understood the cause. I&#39;ve seen it
9510 on HP laptops, and on my latest acquaintance the Packard Bell laptop.
9511 The reason seem to be in the wiring of some laptops. The system to
9512 control the screen background light is inverted, so when Linux try to
9513 turn the brightness fully on, it end up turning it off instead. I do
9514 not know which Linux drivers are affected, but this post is about the
9515 i915 driver used by the
9516 &lt;a href=&quot;http://www.linlap.com/packard_bell_easynote_lv&quot;&gt;Packard Bell
9517 EasyNote LV&lt;/a&gt;, Thinkpad X40 and many other laptops.&lt;/p&gt;
9518
9519 &lt;p&gt;The problem can be worked around two ways. Either by adding
9520 i915.invert_brightness=1 as a kernel option, or by adding a file in
9521 /etc/modprobe.d/ to tell modprobe to add the invert_brightness=1
9522 option when it load the i915 kernel module. On Debian and Ubuntu, it
9523 can be done by running these commands as root:&lt;/p&gt;
9524
9525 &lt;pre&gt;
9526 echo options i915 invert_brightness=1 | tee /etc/modprobe.d/i915.conf
9527 update-initramfs -u -k all
9528 &lt;/pre&gt;
9529
9530 &lt;p&gt;Since March 2012 there is
9531 &lt;a href=&quot;http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=4dca20efb1a9c2efefc28ad2867e5d6c3f5e1955&quot;&gt;a
9532 mechanism in the Linux kernel&lt;/a&gt; to tell the i915 driver which
9533 hardware have this problem, and get the driver to invert the
9534 brightness setting automatically. To use it, one need to add a row in
9535 &lt;a href=&quot;http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/gpu/drm/i915/intel_display.c&quot;&gt;the
9536 intel_quirks array&lt;/a&gt; in the driver source
9537 &lt;tt&gt;drivers/gpu/drm/i915/intel_display.c&lt;/tt&gt; (look for &quot;&lt;tt&gt;static
9538 struct intel_quirk intel_quirks&lt;/tt&gt;&quot;), specifying the PCI device
9539 number (vendor number 8086 is assumed) and subdevice vendor and device
9540 number.&lt;/p&gt;
9541
9542 &lt;p&gt;My Packard Bell EasyNote LV got this output from &lt;tt&gt;lspci
9543 -vvnn&lt;/tt&gt; for the video card in question:&lt;/p&gt;
9544
9545 &lt;p&gt;&lt;pre&gt;
9546 00:02.0 VGA compatible controller [0300]: Intel Corporation \
9547 3rd Gen Core processor Graphics Controller [8086:0156] \
9548 (rev 09) (prog-if 00 [VGA controller])
9549 Subsystem: Acer Incorporated [ALI] Device [1025:0688]
9550 Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- \
9551 ParErr- Stepping- SE RR- FastB2B- DisINTx+
9552 Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=fast &gt;TAbort- \
9553 &lt;TAbort- &lt;MAbort-&gt;SERR- &lt;PERR- INTx-
9554 Latency: 0
9555 Interrupt: pin A routed to IRQ 42
9556 Region 0: Memory at c2000000 (64-bit, non-prefetchable) [size=4M]
9557 Region 2: Memory at b0000000 (64-bit, prefetchable) [size=256M]
9558 Region 4: I/O ports at 4000 [size=64]
9559 Expansion ROM at &lt;unassigned&gt; [disabled]
9560 Capabilities: &lt;access denied&gt;
9561 Kernel driver in use: i915
9562 &lt;/pre&gt;&lt;/p&gt;
9563
9564 &lt;p&gt;The resulting intel_quirks entry would then look like this:&lt;/p&gt;
9565
9566 &lt;p&gt;&lt;pre&gt;
9567 struct intel_quirk intel_quirks[] = {
9568 ...
9569 /* Packard Bell EasyNote LV11HC needs invert brightness quirk */
9570 { 0x0156, 0x1025, 0x0688, quirk_invert_brightness },
9571 ...
9572 }
9573 &lt;/pre&gt;&lt;/p&gt;
9574
9575 &lt;p&gt;According to the kernel module instructions (as seen using
9576 &lt;tt&gt;modinfo i915&lt;/tt&gt;), information about hardware needing the
9577 invert_brightness flag should be sent to the
9578 &lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/dri-devel&quot;&gt;dri-devel
9579 (at) lists.freedesktop.org&lt;/a&gt; mailing list to reach the kernel
9580 developers. But my email about the laptop sent 2013-06-03 have not
9581 yet shown up in
9582 &lt;a href=&quot;http://lists.freedesktop.org/archives/dri-devel/2013-June/thread.html&quot;&gt;the
9583 web archive for the mailing list&lt;/a&gt;, so I suspect they do not accept
9584 emails from non-subscribers. Because of this, I sent my patch also to
9585 the Debian bug tracking system instead as
9586 &lt;a href=&quot;http://bugs.debian.org/710938&quot;&gt;BTS report #710938&lt;/a&gt;, to make
9587 sure the patch is not lost.&lt;/p&gt;
9588
9589 &lt;p&gt;Unfortunately, it is not enough to fix the kernel to get Laptops
9590 with this problem working properly with Linux. If you use Gnome, your
9591 worries should be over at this point. But if you use KDE, there is
9592 something in KDE ignoring the invert_brightness setting and turning on
9593 the screen during login. I&#39;ve reported it to Debian as
9594 &lt;a href=&quot;http://bugs.debian.org/711237&quot;&gt;BTS report #711237&lt;/a&gt;, and
9595 have no idea yet how to figure out exactly what subsystem is doing
9596 this. Perhaps you can help? Perhaps you know what the Gnome
9597 developers did to handle this, and this can give a clue to the KDE
9598 developers? Or you know where in KDE the screen brightness is changed
9599 during login? If so, please update the BTS report (or get in touch if
9600 you do not know how to update BTS).&lt;/p&gt;
9601
9602 &lt;p&gt;Update 2013-07-19: The correct fix for this machine seem to be
9603 acpi_backlight=vendor, to disable ACPI backlight support completely,
9604 as the ACPI information on the machine is trash and it is better to
9605 leave it to the intel video driver to control the screen
9606 backlight.&lt;/p&gt;
9607 </description>
9608 </item>
9609
9610 <item>
9611 <title>How to install Linux on a Packard Bell Easynote LV preinstalled with Windows 8</title>
9612 <link>http://www.hungry.com/~pere/blog/How_to_install_Linux_on_a_Packard_Bell_Easynote_LV_preinstalled_with_Windows_8.html</link>
9613 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/How_to_install_Linux_on_a_Packard_Bell_Easynote_LV_preinstalled_with_Windows_8.html</guid>
9614 <pubDate>Mon, 27 May 2013 15:20:00 +0200</pubDate>
9615 <description>&lt;p&gt;Two days ago, I asked
9616 &lt;a href=&quot;http://www.hungry.com/~pere/blog/How_can_I_install_Linux_on_a_Packard_Bell_Easynote_LV_preinstalled_with_Windows_8_.html&quot;&gt;how
9617 I could install Linux on a Packard Bell EasyNote LV computer
9618 preinstalled with Windows 8&lt;/a&gt;. I found a solution, but am horrified
9619 with the obstacles put in the way of Linux users on a laptop with UEFI
9620 and Windows 8.&lt;/p&gt;
9621
9622 &lt;p&gt;I never found out if the cause of my problems were the use of UEFI
9623 secure booting or fast boot. I suspect fast boot was the problem,
9624 causing the firmware to boot directly from HD without considering any
9625 key presses and alternative devices, but do not know UEFI settings
9626 enough to tell.&lt;/p&gt;
9627
9628 &lt;p&gt;There is no way to install Linux on the machine in question without
9629 opening the box and disconnecting the hard drive! This is as far as I
9630 can tell, the only way to get access to the firmware setup menu
9631 without accepting the Windows 8 license agreement. I am told (and
9632 found description on how to) that it is possible to configure the
9633 firmware setup once booted into Windows 8. But as I believe the terms
9634 of that agreement are completely unacceptable, accepting the license
9635 was never an alternative. I do not enter agreements I do not intend
9636 to follow.&lt;/p&gt;
9637
9638 &lt;p&gt;I feared I had to return the laptops and ask for a refund, and
9639 waste many hours on this, but luckily there was a way to get it to
9640 work. But I would not recommend it to anyone planning to run Linux on
9641 it, and I have become sceptical to Windows 8 certified laptops. Is
9642 this the way Linux will be forced out of the market place, by making
9643 it close to impossible for &quot;normal&quot; users to install Linux without
9644 accepting the Microsoft Windows license terms? Or at least not
9645 without risking to loose the warranty?&lt;/p&gt;
9646
9647 &lt;p&gt;I&#39;ve updated the
9648 &lt;a href=&quot;http://www.linlap.com/packard_bell_easynote_lv&quot;&gt;Linux Laptop
9649 wiki page for Packard Bell EasyNote LV&lt;/a&gt;, to ensure the next person
9650 do not have to struggle as much as I did to get Linux into the
9651 machine.&lt;/p&gt;
9652
9653 &lt;p&gt;Thanks to Bob Rosbag, Florian Weimer, Philipp Kern, Ben Hutching,
9654 Michael Tokarev and others for feedback and ideas.&lt;/p&gt;
9655 </description>
9656 </item>
9657
9658 <item>
9659 <title>How can I install Linux on a Packard Bell Easynote LV preinstalled with Windows 8?</title>
9660 <link>http://www.hungry.com/~pere/blog/How_can_I_install_Linux_on_a_Packard_Bell_Easynote_LV_preinstalled_with_Windows_8_.html</link>
9661 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/How_can_I_install_Linux_on_a_Packard_Bell_Easynote_LV_preinstalled_with_Windows_8_.html</guid>
9662 <pubDate>Sat, 25 May 2013 18:20:00 +0200</pubDate>
9663 <description>&lt;p&gt;I&#39;ve run into quite a problem the last few days. I bought three
9664 new laptops for my parents and a few others. I bought Packard Bell
9665 Easynote LV to run Kubuntu on and use as their home computer. But I
9666 am completely unable to figure out how to install Linux on it. The
9667 computer is preinstalled with Windows 8, and I suspect it uses UEFI
9668 instead of a BIOS to boot.&lt;/p&gt;
9669
9670 &lt;p&gt;The problem is that I am unable to get it to PXE boot, and unable
9671 to get it to boot the Linux installer from my USB stick. I have yet
9672 to try the DVD install, and still hope it will work. when I turn on
9673 the computer, there is no information on what buttons to press to get
9674 the normal boot menu. I expect to get some boot menu to select PXE or
9675 USB stick booting. When booting, it first ask for the language to
9676 use, then for some regional settings, and finally if I will accept the
9677 Windows 8 terms of use. As these terms are completely unacceptable to
9678 me, I have no other choice but to turn off the computer and try again
9679 to get it to boot the Linux installer.&lt;/p&gt;
9680
9681 &lt;p&gt;I have gathered my findings so far on a Linlap page about the
9682 &lt;a href=&quot;http://www.linlap.com/packard_bell_easynote_lv&quot;&gt;Packard Bell
9683 EasyNote LV&lt;/a&gt; model. If you have any idea how to get Linux
9684 installed on this machine, please get in touch or update that wiki
9685 page. If I can&#39;t find a way to install Linux, I will have to return
9686 the laptop to the seller and find another machine for my parents.&lt;/p&gt;
9687
9688 &lt;p&gt;I wonder, is this the way Linux will be forced out of the market
9689 using UEFI and &quot;secure boot&quot; by making it impossible to install Linux
9690 on new Laptops?&lt;/p&gt;
9691 </description>
9692 </item>
9693
9694 <item>
9695 <title>How to transform a Debian based system to a Debian Edu installation</title>
9696 <link>http://www.hungry.com/~pere/blog/How_to_transform_a_Debian_based_system_to_a_Debian_Edu_installation.html</link>
9697 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/How_to_transform_a_Debian_based_system_to_a_Debian_Edu_installation.html</guid>
9698 <pubDate>Fri, 17 May 2013 11:50:00 +0200</pubDate>
9699 <description>&lt;p&gt;&lt;a href=&quot;http://www.skolelinux.org/&quot;&gt;Debian Edu / Skolelinux&lt;/a&gt; is
9700 an operating system based on Debian intended for use in schools. It
9701 contain a turn-key solution for the computer network provided to
9702 pupils in the primary schools. It provide both the central server,
9703 network boot servers and desktop environments with heaps of
9704 educational software. The project was founded almost 12 years ago,
9705 2001-07-02. If you want to support the project, which is in need for
9706 cash to fund developer gatherings and other project related activity,
9707 &lt;a href=&quot;http://www.linuxiskolen.no/slxdebianlabs/donations.html&quot;&gt;please
9708 donate some money&lt;/a&gt;.
9709
9710 &lt;p&gt;A topic that come up again and again on the Debian Edu mailing
9711 lists and elsewhere, is the question on how to transform a Debian or
9712 Ubuntu installation into a Debian Edu installation. It isn&#39;t very
9713 hard, and last week I wrote a script to replicate the steps done by
9714 the Debian Edu installer.&lt;/p&gt;
9715
9716 &lt;p&gt;The script,
9717 &lt;a href=&quot;http://anonscm.debian.org/viewvc/debian-edu/branches/wheezy/debian-edu-config/share/debian-edu-config/tools/debian-edu-bless?view=markup&quot;&gt;debian-edu-bless&lt;a/&gt;
9718 in the debian-edu-config package, will go through these six steps and
9719 transform an existing Debian Wheezy or Ubuntu (untested) installation
9720 into a Debian Edu Workstation:&lt;/p&gt;
9721
9722 &lt;ol&gt;
9723
9724 &lt;li&gt;Add skolelinux related APT sources.&lt;/li&gt;
9725 &lt;li&gt;Create /etc/debian-edu/config with the wanted configuration.&lt;/li&gt;
9726 &lt;li&gt;Install debian-edu-install to load preseeding values and pull in
9727 our configuration.&lt;/li&gt;
9728 &lt;li&gt;Preseed debconf database with profile setup in
9729 /etc/debian-edu/config, and run tasksel to install packages
9730 according to the profile specified in the config above,
9731 overriding some of the Debian automation machinery.&lt;/li&gt;
9732 &lt;li&gt;Run debian-edu-cfengine-D installation to configure everything
9733 that could not be done using preseeding.&lt;/li&gt;
9734 &lt;li&gt;Ask for a reboot to enable all the configuration changes.&lt;/li&gt;
9735
9736 &lt;/ol&gt;
9737
9738 &lt;p&gt;There are some steps in the Debian Edu installation that can not be
9739 replicated like this. Disk partitioning and LVM setup, for example.
9740 So this script just assume there is enough disk space to install all
9741 the needed packages.&lt;/p&gt;
9742
9743 &lt;p&gt;The script was created to help a Debian Edu student working on
9744 setting up &lt;a href=&quot;http://www.raspberrypi.org&quot;&gt;Raspberry Pi&lt;/a&gt; as a
9745 Debian Edu client, and using it he can take the existing
9746 &lt;a href=&quot;http://www.raspbian.org/FrontPage‎&quot;&gt;Raspbian&lt;/a&gt; installation and
9747 transform it into a fully functioning Debian Edu Workstation (or
9748 Roaming Workstation, or whatever :).&lt;/p&gt;
9749
9750 &lt;p&gt;The default setting in the script is to create a KDE Workstation.
9751 If a LXDE based Roaming workstation is wanted instead, modify the
9752 PROFILE and DESKTOP values at the top to look like this instead:&lt;/p&gt;
9753
9754 &lt;p&gt;&lt;pre&gt;
9755 PROFILE=&quot;Roaming-Workstation&quot;
9756 DESKTOP=&quot;lxde&quot;
9757 &lt;/pre&gt;&lt;/p&gt;
9758
9759 &lt;p&gt;The script could even become useful to set up Debian Edu servers in
9760 the cloud, by starting with a virtual Debian installation at some
9761 virtual hosting service and setting up all the services on first
9762 boot.&lt;/p&gt;
9763 </description>
9764 </item>
9765
9766 <item>
9767 <title>Debian, the Linux distribution of choice for LEGO designers?</title>
9768 <link>http://www.hungry.com/~pere/blog/Debian__the_Linux_distribution_of_choice_for_LEGO_designers_.html</link>
9769 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Debian__the_Linux_distribution_of_choice_for_LEGO_designers_.html</guid>
9770 <pubDate>Sat, 11 May 2013 20:30:00 +0200</pubDate>
9771 <description>&lt;P&gt;In January,
9772 &lt;a href=&quot;http://www.hungry.com/~pere/blog/New_IRC_channel_for_LEGO_designers_using_Debian.html&quot;&gt;I
9773 announced a&lt;/a&gt; new &lt;a href=&quot;irc://irc.debian.org/%23debian-lego&quot;&gt;IRC
9774 channel #debian-lego&lt;/a&gt;, for those of us in the Debian and Linux
9775 community interested in &lt;a href=&quot;http://www.lego.com/&quot;&gt;LEGO&lt;/a&gt;, the
9776 marvellous construction system from Denmark. We also created
9777 &lt;a href=&quot;http://wiki.debian.org/LegoDesigners&quot;&gt;a wiki page&lt;/a&gt; to have
9778 a place to take notes and write down our plans and hopes. And several
9779 people showed up to help. I was very happy to see the effect of my
9780 call. Since the small start, we have a debtags tag
9781 &lt;a href=&quot;http://debtags.debian.net/search/bytag?wl=hardware::hobby:lego&quot;&gt;hardware::hobby:lego&lt;/a&gt;
9782 tag for LEGO related packages, and now count 10 packages related to
9783 LEGO and &lt;a href=&quot;http://mindstorms.lego.com/&quot;&gt;Mindstorms&lt;/a&gt;:&lt;/p&gt;
9784
9785 &lt;p&gt;&lt;table&gt;
9786 &lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://packages.qa.debian.org/brickos&quot;&gt;brickos&lt;/a&gt;&lt;/td&gt;&lt;td&gt;alternative OS for LEGO Mindstorms RCX. Supports development in C/C++&lt;/td&gt;&lt;/tr&gt;
9787 &lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://packages.qa.debian.org/leocad&quot;&gt;leocad&lt;/a&gt;&lt;/td&gt;&lt;td&gt;virtual brick CAD software&lt;/td&gt;&lt;/tr&gt;
9788 &lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://packages.qa.debian.org/libnxt&quot;&gt;libnxt&lt;/a&gt;&lt;/td&gt;&lt;td&gt;utility library for talking to the LEGO Mindstorms NX&lt;/td&gt;&lt;/tr&gt;
9789 &lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://packages.qa.debian.org/lnpd&quot;&gt;lnpd&lt;/a&gt;&lt;/td&gt;&lt;td&gt;daemon for LNP communication with BrickOS&lt;/td&gt;&lt;/tr&gt;
9790 &lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://packages.qa.debian.org/nbc&quot;&gt;nbc&lt;/a&gt;&lt;/td&gt;&lt;td&gt;compiler for LEGO Mindstorms NXT bricks&lt;/td&gt;&lt;/tr&gt;
9791 &lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://packages.qa.debian.org/nqc&quot;&gt;nqc&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Not Quite C compiler for LEGO Mindstorms RCX&lt;/td&gt;&lt;/tr&gt;
9792 &lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://packages.qa.debian.org/python-nxt&quot;&gt;python-nxt&lt;/a&gt;&lt;/td&gt;&lt;td&gt;python driver/interface/wrapper for the Lego Mindstorms NXT robot&lt;/td&gt;&lt;/tr&gt;
9793 &lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://packages.qa.debian.org/python-nxt-filer&quot;&gt;python-nxt-filer&lt;/a&gt;&lt;/td&gt;&lt;td&gt;simple GUI to manage files on a LEGO Mindstorms NXT&lt;/td&gt;&lt;/tr&gt;
9794 &lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://packages.qa.debian.org/scratch&quot;&gt;scratch&lt;/a&gt;&lt;/td&gt;&lt;td&gt;easy to use programming environment for ages 8 and up&lt;/td&gt;&lt;/tr&gt;
9795 &lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://packages.qa.debian.org/t2n&quot;&gt;t2n&lt;/a&gt;&lt;/td&gt;&lt;td&gt;simple command-line tool for Lego NXT&lt;/td&gt;&lt;/tr&gt;
9796 &lt;/table&gt;&lt;/p&gt;
9797
9798 &lt;p&gt;Some of these are available in Wheezy, and all but one are
9799 currently available in Jessie/testing. leocad is so far only
9800 available in experimental.&lt;/p&gt;
9801
9802 &lt;p&gt;If you care about LEGO in Debian, please join us on IRC and help
9803 adding the rest of the great free software tools available on Linux
9804 for LEGO designers.&lt;/p&gt;
9805 </description>
9806 </item>
9807
9808 <item>
9809 <title>Debian Wheezy is out - and Debian Edu / Skolelinux should soon follow! #newinwheezy</title>
9810 <link>http://www.hungry.com/~pere/blog/Debian_Wheezy_is_out___and_Debian_Edu___Skolelinux_should_soon_follow___newinwheezy.html</link>
9811 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Debian_Wheezy_is_out___and_Debian_Edu___Skolelinux_should_soon_follow___newinwheezy.html</guid>
9812 <pubDate>Sun, 5 May 2013 07:40:00 +0200</pubDate>
9813 <description>&lt;p&gt;When I woke up this morning, I was very happy to see that the
9814 &lt;a href=&quot;http://www.debian.org/News/2013/20130504&quot;&gt;release announcement
9815 for Debian Wheezy&lt;/a&gt; was waiting in my mail box. This is a great
9816 Debian release, and I expect to move my machines at home over to it fairly
9817 soon.&lt;/p&gt;
9818
9819 &lt;p&gt;The new debian release contain heaps of new stuff, and one program
9820 in particular make me very happy to see included. The
9821 &lt;a href=&quot;http://scratch.mit.edu/&quot;&gt;Scratch&lt;/a&gt; program, made famous by
9822 the &lt;a href=&quot;http://www.code.org/&quot;&gt;Teach kids code&lt;/a&gt; movement, is
9823 included for the first time. Alongside similar programs like
9824 &lt;a href=&quot;http://edu.kde.org/kturtle/&quot;&gt;kturtle&lt;/a&gt; and
9825 &lt;a href=&quot;http://wiki.sugarlabs.org/go/Activities/Turtle_Art&quot;&gt;turtleart&lt;/a&gt;,
9826 it allow for visual programming where syntax errors can not happen,
9827 and a friendly programming environment for learning to control the
9828 computer. Scratch will also be included in the next release of Debian
9829 Edu.&lt;/a&gt;
9830
9831 &lt;p&gt;And now that Wheezy is wrapped up, we can wrap up the next Debian
9832 Edu/Skolelinux release too. The
9833 &lt;a href=&quot;http://lists.debian.org/debian-edu/2013/04/msg00132.html&quot;&gt;first
9834 alpha release&lt;/a&gt; went out last week, and the next should soon
9835 follow.&lt;p&gt;
9836 </description>
9837 </item>
9838
9839 <item>
9840 <title>Isenkram 0.2 finally in the Debian archive</title>
9841 <link>http://www.hungry.com/~pere/blog/Isenkram_0_2_finally_in_the_Debian_archive.html</link>
9842 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Isenkram_0_2_finally_in_the_Debian_archive.html</guid>
9843 <pubDate>Wed, 3 Apr 2013 23:40:00 +0200</pubDate>
9844 <description>&lt;p&gt;Today the &lt;a href=&quot;http://packages.qa.debian.org/isenkram&quot;&gt;Isenkram
9845 package&lt;/a&gt; finally made it into the archive, after lingering in NEW
9846 for many months. I uploaded it to the Debian experimental suite
9847 2013-01-27, and today it was accepted into the archive.&lt;/p&gt;
9848
9849 &lt;p&gt;Isenkram is a system for suggesting to users what packages to
9850 install to work with a pluggable hardware device. The suggestion pop
9851 up when the device is plugged in. For example if a Lego Mindstorm NXT
9852 is inserted, it will suggest to install the program needed to program
9853 the NXT controller. Give it a go, and report bugs and suggestions to
9854 BTS. :)&lt;/p&gt;
9855 </description>
9856 </item>
9857
9858 <item>
9859 <title>Bitcoin GUI now available from Debian/unstable (and Ubuntu/raring)</title>
9860 <link>http://www.hungry.com/~pere/blog/Bitcoin_GUI_now_available_from_Debian_unstable__and_Ubuntu_raring_.html</link>
9861 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Bitcoin_GUI_now_available_from_Debian_unstable__and_Ubuntu_raring_.html</guid>
9862 <pubDate>Sat, 2 Feb 2013 09:00:00 +0100</pubDate>
9863 <description>&lt;p&gt;My
9864 &lt;a href=&quot;http://www.hungry.com/~pere/blog/How_to_backport_bitcoin_qt_version_0_7_2_2_to_Debian_Squeeze.html&quot;&gt;last
9865 bitcoin related blog post&lt;/a&gt; mentioned that the new
9866 &lt;a href=&quot;http://packages.qa.debian.org/bitcoin&quot;&gt;bitcoin package&lt;/a&gt; for
9867 Debian was waiting in NEW. It was accepted by the Debian ftp-masters
9868 2013-01-19, and have been available in unstable since then. It was
9869 automatically copied to Ubuntu, and is available in their Raring
9870 version too.&lt;/p&gt;
9871
9872 &lt;p&gt;But there is a strange problem with the build that block this new
9873 version from being available on the i386 and kfreebsd-i386
9874 architectures. For some strange reason, the autobuilders in Debian
9875 for these architectures fail to run the test suite on these
9876 architectures (&lt;a href=&quot;http://bugs.debian.org/672524&quot;&gt;BTS #672524&lt;/a&gt;).
9877 We are so far unable to reproduce it when building it manually, and
9878 no-one have been able to propose a fix. If you got an idea what is
9879 failing, please let us know via the BTS.&lt;/p&gt;
9880
9881 &lt;p&gt;One feature that is annoying me with of the bitcoin client, because
9882 I often run low on disk space, is the fact that the client will exit
9883 if it run short on space (&lt;a href=&quot;http://bugs.debian.org/696715&quot;&gt;BTS
9884 #696715&lt;/a&gt;). So make sure you have enough disk space when you run
9885 it. :)&lt;/p&gt;
9886
9887 &lt;p&gt;As usual, if you use bitcoin and want to show your support of my
9888 activities, please send Bitcoin donations to my address
9889 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
9890 </description>
9891 </item>
9892
9893 <item>
9894 <title>Welcome to the world, Isenkram!</title>
9895 <link>http://www.hungry.com/~pere/blog/Welcome_to_the_world__Isenkram_.html</link>
9896 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Welcome_to_the_world__Isenkram_.html</guid>
9897 <pubDate>Tue, 22 Jan 2013 22:00:00 +0100</pubDate>
9898 <description>&lt;p&gt;Yesterday, I
9899 &lt;a href=&quot;http://www.hungry.com/~pere/blog/First_prototype_ready_making_hardware_easier_to_use_in_Debian.html&quot;&gt;asked
9900 for testers&lt;/a&gt; for my prototype for making Debian better at handling
9901 pluggable hardware devices, which I
9902 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Lets_make_hardware_dongles_easier_to_use_in_Debian.html&quot;&gt;set
9903 out to create&lt;/a&gt; earlier this month. Several valuable testers showed
9904 up, and caused me to really want to to open up the development to more
9905 people. But before I did this, I want to come up with a sensible name
9906 for this project. Today I finally decided on a new name, and I have
9907 renamed the project from hw-support-handler to this new name. In the
9908 process, I moved the source to git and made it available as a
9909 &lt;a href=&quot;http://anonscm.debian.org/gitweb/?p=collab-maint/isenkram.git&quot;&gt;collab-maint&lt;/a&gt;
9910 repository in Debian. The new name? It is &lt;strong&gt;Isenkram&lt;/strong&gt;.
9911 To fetch and build the latest version of the source, use&lt;/p&gt;
9912
9913 &lt;pre&gt;
9914 git clone http://anonscm.debian.org/git/collab-maint/isenkram.git
9915 cd isenkram &amp;&amp; git-buildpackage -us -uc
9916 &lt;/pre&gt;
9917
9918 &lt;p&gt;I have not yet adjusted all files to use the new name yet. If you
9919 want to hack on the source or improve the package, please go ahead.
9920 But please talk to me first on IRC or via email before you do major
9921 changes, to make sure we do not step on each others toes. :)&lt;/p&gt;
9922
9923 &lt;p&gt;If you wonder what &#39;isenkram&#39; is, it is a Norwegian word for iron
9924 stuff, typically meaning tools, nails, screws, etc. Typical hardware
9925 stuff, in other words. I&#39;ve been told it is the Norwegian variant of
9926 the German word eisenkram, for those that are familiar with that
9927 word.&lt;/p&gt;
9928
9929 &lt;p&gt;&lt;strong&gt;Update 2013-01-26&lt;/strong&gt;: Added -us -us to build
9930 instructions, to avoid confusing people with an error from the signing
9931 process.&lt;/p&gt;
9932
9933 &lt;p&gt;&lt;strong&gt;Update 2013-01-27&lt;/strong&gt;: Switch to HTTP URL for the git
9934 clone argument to avoid the need for authentication.&lt;/p&gt;
9935 </description>
9936 </item>
9937
9938 <item>
9939 <title>First prototype ready making hardware easier to use in Debian</title>
9940 <link>http://www.hungry.com/~pere/blog/First_prototype_ready_making_hardware_easier_to_use_in_Debian.html</link>
9941 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/First_prototype_ready_making_hardware_easier_to_use_in_Debian.html</guid>
9942 <pubDate>Mon, 21 Jan 2013 12:00:00 +0100</pubDate>
9943 <description>&lt;p&gt;Early this month I set out to try to
9944 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Lets_make_hardware_dongles_easier_to_use_in_Debian.html&quot;&gt;improve
9945 the Debian support for pluggable hardware devices&lt;/a&gt;. Now my
9946 prototype is working, and it is ready for a larger audience. To test
9947 it, fetch the
9948 &lt;a href=&quot;http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/&quot;&gt;source
9949 from the Debian Edu subversion repository&lt;/a&gt;, build and install the
9950 package. You might have to log out and in again activate the
9951 autostart script.&lt;/p&gt;
9952
9953 &lt;p&gt;The design is simple:&lt;/p&gt;
9954
9955 &lt;ul&gt;
9956
9957 &lt;li&gt;Add desktop entry in /usr/share/autostart/ causing a program
9958 hw-support-handlerd to start when the user log in.&lt;/li&gt;
9959
9960 &lt;li&gt;This program listen for kernel events about new hardware (directly
9961 from the kernel like udev does), not using HAL dbus events as I
9962 initially did.&lt;/li&gt;
9963
9964 &lt;li&gt;When new hardware is inserted, look up the hardware modalias in
9965 the APT database, a database
9966 &lt;a href=&quot;http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/modaliases?view=markup&quot;&gt;available
9967 via HTTP&lt;/a&gt; and a database available as part of the package.&lt;/li&gt;
9968
9969 &lt;li&gt;If a package is mapped to the hardware in question, the package
9970 isn&#39;t installed yet and this is the first time the hardware was
9971 plugged in, show a desktop notification suggesting to install the
9972 package or packages.&lt;/li&gt;
9973
9974 &lt;li&gt;If the user click on the &#39;install package now&#39; button, ask
9975 aptdaemon via the PackageKit API to install the requrired package.&lt;/li&gt;
9976
9977 &lt;li&gt;aptdaemon ask for root password or sudo password, and install the
9978 package while showing progress information in a window.&lt;/li&gt;
9979
9980 &lt;/ul&gt;
9981
9982 &lt;p&gt;I still need to come up with a better name for the system. Here
9983 are some screen shots showing the prototype in action. First the
9984 notification, then the password request, and finally the request to
9985 approve all the dependencies. Sorry for the Norwegian Bokmål GUI.&lt;/p&gt;
9986
9987 &lt;p&gt;&lt;img src=&quot;http://www.hungry.com/~pere/blog/images/2013-01-21-hw-support-1-notification.png&quot;&gt;
9988 &lt;br&gt;&lt;img src=&quot;http://www.hungry.com/~pere/blog/images/2013-01-21-hw-support-2-password.png&quot;&gt;
9989 &lt;br&gt;&lt;img src=&quot;http://www.hungry.com/~pere/blog/images/2013-01-21-hw-support-3-dependencies.png&quot;&gt;
9990 &lt;br&gt;&lt;img src=&quot;http://www.hungry.com/~pere/blog/images/2013-01-21-hw-support-4-installing.png&quot;&gt;
9991 &lt;br&gt;&lt;img src=&quot;http://www.hungry.com/~pere/blog/images/2013-01-21-hw-support-5-installing-details.png&quot; width=&quot;70%&quot;&gt;&lt;/p&gt;
9992
9993 &lt;p&gt;The prototype still need to be improved with longer timeouts, but
9994 is already useful. The database of hardware to package mappings also
9995 need more work. It is currently compatible with the Ubuntu way of
9996 storing such information in the package control file, but could be
9997 changed to use other formats instead or in addition to the current
9998 method. I&#39;ve dropped the use of discover for this mapping, as the
9999 modalias approach is more flexible and easier to use on Linux as long
10000 as the Linux kernel expose its modalias strings directly.&lt;/p&gt;
10001
10002 &lt;p&gt;&lt;strong&gt;Update 2013-01-21 16:50&lt;/strong&gt;: Due to popular demand,
10003 here is the command required to check out and build the source: Use
10004 &#39;&lt;tt&gt;svn checkout
10005 svn://svn.debian.org/debian-edu/trunk/src/hw-support-handler/; cd
10006 hw-support-handler; debuild&lt;/tt&gt;&#39;. If you lack debuild, install the
10007 devscripts package.&lt;/p&gt;
10008
10009 &lt;p&gt;&lt;strong&gt;Update 2013-01-23 12:00&lt;/strong&gt;: The project is now
10010 renamed to Isenkram and the source moved from the Debian Edu
10011 subversion repository to a Debian collab-maint git repository. See
10012 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Welcome_to_the_world__Isenkram_.html&quot;&gt;build
10013 instructions&lt;/a&gt; for details.&lt;/p&gt;
10014 </description>
10015 </item>
10016
10017 <item>
10018 <title>Thank you Thinkpad X41, for your long and trustworthy service</title>
10019 <link>http://www.hungry.com/~pere/blog/Thank_you_Thinkpad_X41__for_your_long_and_trustworthy_service.html</link>
10020 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Thank_you_Thinkpad_X41__for_your_long_and_trustworthy_service.html</guid>
10021 <pubDate>Sat, 19 Jan 2013 09:20:00 +0100</pubDate>
10022 <description>&lt;p&gt;This Christmas my trusty old laptop died. It died quietly and
10023 suddenly in bed. With a quiet whimper, it went completely quiet and
10024 black. The power button was no longer able to turn it on. It was a
10025 IBM Thinkpad X41, and the best laptop I ever had. Better than both
10026 Thinkpads X30, X31, X40, X60, X61 and X61S. Far better than the
10027 Compaq I had before that. Now I need to find a replacement. To keep
10028 going during Christmas, I moved the one year old SSD disk to my old
10029 X40 where it fitted (only one I had left that could use it), but it is
10030 not a durable solution.
10031
10032 &lt;p&gt;My laptop needs are fairly modest. This is my wishlist from when I
10033 got a new one more than 10 years ago. It still holds true.:)&lt;/p&gt;
10034
10035 &lt;ul&gt;
10036
10037 &lt;li&gt;Lightweight (around 1 kg) and small volume (preferably smaller
10038 than A4).&lt;/li&gt;
10039 &lt;li&gt;Robust, it will be in my backpack every day.&lt;/li&gt;
10040 &lt;li&gt;Three button mouse and a mouse pin instead of touch pad.&lt;/li&gt;
10041 &lt;li&gt;Long battery life time. Preferable a week.&lt;/li&gt;
10042 &lt;li&gt;Internal WIFI network card.&lt;/li&gt;
10043 &lt;li&gt;Internal Twisted Pair network card.&lt;/li&gt;
10044 &lt;li&gt;Some USB slots (2-3 is plenty)&lt;/li&gt;
10045 &lt;li&gt;Good keyboard - similar to the Thinkpad.&lt;/li&gt;
10046 &lt;li&gt;Video resolution at least 1024x768, with size around 12&quot; (A4 paper
10047 size).&lt;/li&gt;
10048 &lt;li&gt;Hardware supported by Debian Stable, ie the default kernel and
10049 X.org packages.&lt;/li&gt;
10050 &lt;li&gt;Quiet, preferably fan free (or at least not using the fan most of
10051 the time).
10052
10053 &lt;/ul&gt;
10054
10055 &lt;p&gt;You will notice that there are no RAM and CPU requirements in the
10056 list. The reason is simply that the specifications on laptops the
10057 last 10-15 years have been sufficient for my needs, and I have to look
10058 at other features to choose my laptop. But are there still made as
10059 robust laptops as my X41? The Thinkpad X60/X61 proved to be less
10060 robust, and Thinkpads seem to be heading in the wrong direction since
10061 Lenovo took over. But I&#39;ve been told that X220 and X1 Carbon might
10062 still be useful.&lt;/p&gt;
10063
10064 &lt;p&gt;Perhaps I should rethink my needs, and look for a pad with an
10065 external keyboard? I&#39;ll have to check the
10066 &lt;a href=&quot;http://www.linux-laptop.net/&quot;&gt;Linux Laptops site&lt;/a&gt; for
10067 well-supported laptops, or perhaps just buy one preinstalled from one
10068 of the vendors listed on the &lt;a href=&quot;http://linuxpreloaded.com/&quot;&gt;Linux
10069 Pre-loaded site&lt;/a&gt;.&lt;/p&gt;
10070 </description>
10071 </item>
10072
10073 <item>
10074 <title>How to find a browser plugin supporting a given MIME type</title>
10075 <link>http://www.hungry.com/~pere/blog/How_to_find_a_browser_plugin_supporting_a_given_MIME_type.html</link>
10076 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/How_to_find_a_browser_plugin_supporting_a_given_MIME_type.html</guid>
10077 <pubDate>Fri, 18 Jan 2013 10:40:00 +0100</pubDate>
10078 <description>&lt;p&gt;Some times I try to figure out which Iceweasel browser plugin to
10079 install to get support for a given MIME type. Thanks to
10080 &lt;a href=&quot;https://wiki.ubuntu.com/MozillaTeam/Plugins&quot;&gt;specifications
10081 done by Ubuntu&lt;/a&gt; and Mozilla, it is possible to do this in Debian.
10082 Unfortunately, not very many packages provide the needed meta
10083 information, Anyway, here is a small script to look up all browser
10084 plugin packages announcing ther MIME support using this specification:&lt;/p&gt;
10085
10086 &lt;pre&gt;
10087 #!/usr/bin/python
10088 import sys
10089 import apt
10090 def pkgs_handling_mimetype(mimetype):
10091 cache = apt.Cache()
10092 cache.open(None)
10093 thepkgs = []
10094 for pkg in cache:
10095 version = pkg.candidate
10096 if version is None:
10097 version = pkg.installed
10098 if version is None:
10099 continue
10100 record = version.record
10101 if not record.has_key(&#39;Npp-MimeType&#39;):
10102 continue
10103 mime_types = record[&#39;Npp-MimeType&#39;].split(&#39;,&#39;)
10104 for t in mime_types:
10105 t = t.rstrip().strip()
10106 if t == mimetype:
10107 thepkgs.append(pkg.name)
10108 return thepkgs
10109 mimetype = &quot;audio/ogg&quot;
10110 if 1 &lt; len(sys.argv):
10111 mimetype = sys.argv[1]
10112 print &quot;Browser plugin packages supporting %s:&quot; % mimetype
10113 for pkg in pkgs_handling_mimetype(mimetype):
10114 print &quot; %s&quot; %pkg
10115 &lt;/pre&gt;
10116
10117 &lt;p&gt;It can be used like this to look up a given MIME type:&lt;/p&gt;
10118
10119 &lt;pre&gt;
10120 % ./apt-find-browserplug-for-mimetype
10121 Browser plugin packages supporting audio/ogg:
10122 gecko-mediaplayer
10123 % ./apt-find-browserplug-for-mimetype application/x-shockwave-flash
10124 Browser plugin packages supporting application/x-shockwave-flash:
10125 browser-plugin-gnash
10126 %
10127 &lt;/pre&gt;
10128
10129 &lt;p&gt;In Ubuntu this mechanism is combined with support in the browser
10130 itself to query for plugins and propose to install the needed
10131 packages. It would be great if Debian supported such feature too. Is
10132 anyone working on adding it?&lt;/p&gt;
10133
10134 &lt;p&gt;&lt;strong&gt;Update 2013-01-18 14:20&lt;/strong&gt;: The Debian BTS
10135 request for icweasel support for this feature is
10136 &lt;a href=&quot;http://bugs.debian.org/484010&quot;&gt;#484010&lt;/a&gt; from 2008 (and
10137 &lt;a href=&quot;http://bugs.debian.org/698426&quot;&gt;#698426&lt;/a&gt; from today). Lack
10138 of manpower and wish for a different design is the reason thus feature
10139 is not yet in iceweasel from Debian.&lt;/p&gt;
10140 </description>
10141 </item>
10142
10143 <item>
10144 <title>What is the most supported MIME type in Debian?</title>
10145 <link>http://www.hungry.com/~pere/blog/What_is_the_most_supported_MIME_type_in_Debian_.html</link>
10146 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/What_is_the_most_supported_MIME_type_in_Debian_.html</guid>
10147 <pubDate>Wed, 16 Jan 2013 10:10:00 +0100</pubDate>
10148 <description>&lt;p&gt;The &lt;a href=&quot;http://wiki.debian.org/AppStreamDebianProposal&quot;&gt;DEP-11
10149 proposal to add AppStream information to the Debian archive&lt;/a&gt;, is a
10150 proposal to make it possible for a Desktop application to propose to
10151 the user some package to install to gain support for a given MIME
10152 type, font, library etc. that is currently missing. With such
10153 mechanism in place, it would be possible for the desktop to
10154 automatically propose and install leocad if some LDraw file is
10155 downloaded by the browser.&lt;/p&gt;
10156
10157 &lt;p&gt;To get some idea about the current content of the archive, I decided
10158 to write a simple program to extract all .desktop files from the
10159 Debian archive and look up the claimed MIME support there. The result
10160 can be found on the
10161 &lt;a href=&quot;http://ftp.skolelinux.org/pub/AppStreamTest&quot;&gt;Skolelinux FTP
10162 site&lt;/a&gt;. Using the collected information, it become possible to
10163 answer the question in the title. Here are the 20 most supported MIME
10164 types in Debian stable (Squeeze), testing (Wheezy) and unstable (Sid).
10165 The complete list is available from the link above.&lt;/p&gt;
10166
10167 &lt;p&gt;&lt;strong&gt;Debian Stable:&lt;/strong&gt;&lt;/p&gt;
10168
10169 &lt;pre&gt;
10170 count MIME type
10171 ----- -----------------------
10172 32 text/plain
10173 30 audio/mpeg
10174 29 image/png
10175 28 image/jpeg
10176 27 application/ogg
10177 26 audio/x-mp3
10178 25 image/tiff
10179 25 image/gif
10180 22 image/bmp
10181 22 audio/x-wav
10182 20 audio/x-flac
10183 19 audio/x-mpegurl
10184 18 video/x-ms-asf
10185 18 audio/x-musepack
10186 18 audio/x-mpeg
10187 18 application/x-ogg
10188 17 video/mpeg
10189 17 audio/x-scpls
10190 17 audio/ogg
10191 16 video/x-ms-wmv
10192 &lt;/pre&gt;
10193
10194 &lt;p&gt;&lt;strong&gt;Debian Testing:&lt;/strong&gt;&lt;/p&gt;
10195
10196 &lt;pre&gt;
10197 count MIME type
10198 ----- -----------------------
10199 33 text/plain
10200 32 image/png
10201 32 image/jpeg
10202 29 audio/mpeg
10203 27 image/gif
10204 26 image/tiff
10205 26 application/ogg
10206 25 audio/x-mp3
10207 22 image/bmp
10208 21 audio/x-wav
10209 19 audio/x-mpegurl
10210 19 audio/x-mpeg
10211 18 video/mpeg
10212 18 audio/x-scpls
10213 18 audio/x-flac
10214 18 application/x-ogg
10215 17 video/x-ms-asf
10216 17 text/html
10217 17 audio/x-musepack
10218 16 image/x-xbitmap
10219 &lt;/pre&gt;
10220
10221 &lt;p&gt;&lt;strong&gt;Debian Unstable:&lt;/strong&gt;&lt;/p&gt;
10222
10223 &lt;pre&gt;
10224 count MIME type
10225 ----- -----------------------
10226 31 text/plain
10227 31 image/png
10228 31 image/jpeg
10229 29 audio/mpeg
10230 28 application/ogg
10231 27 image/gif
10232 26 image/tiff
10233 26 audio/x-mp3
10234 23 audio/x-wav
10235 22 image/bmp
10236 21 audio/x-flac
10237 20 audio/x-mpegurl
10238 19 audio/x-mpeg
10239 18 video/x-ms-asf
10240 18 video/mpeg
10241 18 audio/x-scpls
10242 18 application/x-ogg
10243 17 audio/x-musepack
10244 16 video/x-ms-wmv
10245 16 video/x-msvideo
10246 &lt;/pre&gt;
10247
10248 &lt;p&gt;I am told that PackageKit can provide an API to access the kind of
10249 information mentioned in DEP-11. I have not yet had time to look at
10250 it, but hope the PackageKit people in Debian are on top of these
10251 issues.&lt;/p&gt;
10252
10253 &lt;p&gt;&lt;strong&gt;Update 2013-01-16 13:35&lt;/strong&gt;: Updated numbers after
10254 discovering a typo in my script.&lt;/p&gt;
10255 </description>
10256 </item>
10257
10258 <item>
10259 <title>Using modalias info to find packages handling my hardware</title>
10260 <link>http://www.hungry.com/~pere/blog/Using_modalias_info_to_find_packages_handling_my_hardware.html</link>
10261 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Using_modalias_info_to_find_packages_handling_my_hardware.html</guid>
10262 <pubDate>Tue, 15 Jan 2013 08:00:00 +0100</pubDate>
10263 <description>&lt;p&gt;Yesterday, I wrote about the
10264 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Modalias_strings___a_practical_way_to_map__stuff__to_hardware.html&quot;&gt;modalias
10265 values provided by the Linux kernel&lt;/a&gt; following my hope for
10266 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Lets_make_hardware_dongles_easier_to_use_in_Debian.html&quot;&gt;better
10267 dongle support in Debian&lt;/a&gt;. Using this knowledge, I have tested how
10268 modalias values attached to package names can be used to map packages
10269 to hardware. This allow the system to look up and suggest relevant
10270 packages when I plug in some new hardware into my machine, and replace
10271 discover and discover-data as the database used to map hardware to
10272 packages.&lt;/p&gt;
10273
10274 &lt;p&gt;I create a modaliases file with entries like the following,
10275 containing package name, kernel module name (if relevant, otherwise
10276 the package name) and globs matching the relevant hardware
10277 modalias.&lt;/p&gt;
10278
10279 &lt;p&gt;&lt;blockquote&gt;
10280 Package: package-name
10281 &lt;br&gt;Modaliases: module(modaliasglob, modaliasglob, modaliasglob)&lt;/p&gt;
10282 &lt;/blockquote&gt;&lt;/p&gt;
10283
10284 &lt;p&gt;It is fairly trivial to write code to find the relevant packages
10285 for a given modalias value using this file.&lt;/p&gt;
10286
10287 &lt;p&gt;An entry like this would suggest the video and picture application
10288 cheese for many USB web cameras (interface bus class 0E01):&lt;/p&gt;
10289
10290 &lt;p&gt;&lt;blockquote&gt;
10291 Package: cheese
10292 &lt;br&gt;Modaliases: cheese(usb:v*p*d*dc*dsc*dp*ic0Eisc01ip*)&lt;/p&gt;
10293 &lt;/blockquote&gt;&lt;/p&gt;
10294
10295 &lt;p&gt;An entry like this would suggest the pcmciautils package when a
10296 CardBus bridge (bus class 0607) PCI device is present:&lt;/p&gt;
10297
10298 &lt;p&gt;&lt;blockquote&gt;
10299 Package: pcmciautils
10300 &lt;br&gt;Modaliases: pcmciautils(pci:v*d*sv*sd*bc06sc07i*)
10301 &lt;/blockquote&gt;&lt;/p&gt;
10302
10303 &lt;p&gt;An entry like this would suggest the package colorhug-client when
10304 plugging in a ColorHug with USB IDs 04D8:F8DA:&lt;/p&gt;
10305
10306 &lt;p&gt;&lt;blockquote&gt;
10307 Package: colorhug-client
10308 &lt;br&gt;Modaliases: colorhug-client(usb:v04D8pF8DAd*)&lt;/p&gt;
10309 &lt;/blockquote&gt;&lt;/p&gt;
10310
10311 &lt;p&gt;I believe the format is compatible with the format of the Packages
10312 file in the Debian archive. Ubuntu already uses their Packages file
10313 to store their mappings from packages to hardware.&lt;/p&gt;
10314
10315 &lt;p&gt;By adding a XB-Modaliases: header in debian/control, any .deb can
10316 announce the hardware it support in a way my prototype understand.
10317 This allow those publishing packages in an APT source outside the
10318 Debian archive as well as those backporting packages to make sure the
10319 hardware mapping are included in the package meta information. I&#39;ve
10320 tested such header in the pymissile package, and its modalias mapping
10321 is working as it should with my prototype. It even made it to Ubuntu
10322 Raring.&lt;/p&gt;
10323
10324 &lt;p&gt;To test if it was possible to look up supported hardware using only
10325 the shell tools available in the Debian installer, I wrote a shell
10326 implementation of the lookup code. The idea is to create files for
10327 each modalias and let the shell do the matching. Please check out and
10328 try the
10329 &lt;a href=&quot;http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/hw-support-lookup?view=co&quot;&gt;hw-support-lookup&lt;/a&gt;
10330 shell script. It run without any extra dependencies and fetch the
10331 hardware mappings from the Debian archive and the subversion
10332 repository where I currently work on my prototype.&lt;/p&gt;
10333
10334 &lt;p&gt;When I use it on a machine with a yubikey inserted, it suggest to
10335 install yubikey-personalization:&lt;/p&gt;
10336
10337 &lt;p&gt;&lt;blockquote&gt;
10338 % ./hw-support-lookup
10339 &lt;br&gt;yubikey-personalization
10340 &lt;br&gt;%
10341 &lt;/blockquote&gt;&lt;/p&gt;
10342
10343 &lt;p&gt;When I run it on my Thinkpad X40 with a PCMCIA/CardBus slot, it
10344 propose to install the pcmciautils package:&lt;/p&gt;
10345
10346 &lt;p&gt;&lt;blockquote&gt;
10347 % ./hw-support-lookup
10348 &lt;br&gt;pcmciautils
10349 &lt;br&gt;%
10350 &lt;/blockquote&gt;&lt;/p&gt;
10351
10352 &lt;p&gt;If you know of any hardware-package mapping that should be added to
10353 &lt;a href=&quot;http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/modaliases?view=co&quot;&gt;my
10354 database&lt;/a&gt;, please tell me about it.&lt;/p&gt;
10355
10356 &lt;p&gt;It could be possible to generate several of the mappings between
10357 packages and hardware. One source would be to look at packages with
10358 kernel modules, ie packages with *.ko files in /lib/modules/, and
10359 extract their modalias information. Another would be to look at
10360 packages with udev rules, ie packages with files in
10361 /lib/udev/rules.d/, and extract their vendor/model information to
10362 generate a modalias matching rule. I have not tested any of these to
10363 see if it work.&lt;/p&gt;
10364
10365 &lt;p&gt;If you want to help implementing a system to let us propose what
10366 packages to install when new hardware is plugged into a Debian
10367 machine, please send me an email or talk to me on
10368 &lt;a href=&quot;irc://irc.debian.org/%23debian-devel&quot;&gt;#debian-devel&lt;/a&gt;.&lt;/p&gt;
10369 </description>
10370 </item>
10371
10372 <item>
10373 <title>Modalias strings - a practical way to map &quot;stuff&quot; to hardware</title>
10374 <link>http://www.hungry.com/~pere/blog/Modalias_strings___a_practical_way_to_map__stuff__to_hardware.html</link>
10375 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Modalias_strings___a_practical_way_to_map__stuff__to_hardware.html</guid>
10376 <pubDate>Mon, 14 Jan 2013 11:20:00 +0100</pubDate>
10377 <description>&lt;p&gt;While looking into how to look up Debian packages based on hardware
10378 information, to find the packages that support a given piece of
10379 hardware, I refreshed my memory regarding modalias values, and decided
10380 to document the details. Here are my findings so far, also available
10381 in
10382 &lt;a href=&quot;http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/&quot;&gt;the
10383 Debian Edu subversion repository&lt;/a&gt;:
10384
10385 &lt;p&gt;&lt;strong&gt;Modalias decoded&lt;/strong&gt;&lt;/p&gt;
10386
10387 &lt;p&gt;This document try to explain what the different types of modalias
10388 values stands for. It is in part based on information from
10389 &amp;lt;URL: &lt;a href=&quot;https://wiki.archlinux.org/index.php/Modalias&quot;&gt;https://wiki.archlinux.org/index.php/Modalias&lt;/a&gt; &amp;gt;,
10390 &amp;lt;URL: &lt;a href=&quot;http://unix.stackexchange.com/questions/26132/how-to-assign-usb-driver-to-device&quot;&gt;http://unix.stackexchange.com/questions/26132/how-to-assign-usb-driver-to-device&lt;/a&gt; &amp;gt;,
10391 &amp;lt;URL: &lt;a href=&quot;http://code.metager.de/source/history/linux/stable/scripts/mod/file2alias.c&quot;&gt;http://code.metager.de/source/history/linux/stable/scripts/mod/file2alias.c&lt;/a&gt; &amp;gt; and
10392 &amp;lt;URL: &lt;a href=&quot;http://cvs.savannah.gnu.org/viewvc/dmidecode/dmidecode.c?root=dmidecode&amp;view=markup&quot;&gt;http://cvs.savannah.gnu.org/viewvc/dmidecode/dmidecode.c?root=dmidecode&amp;view=markup&lt;/a&gt; &amp;gt;.
10393
10394 &lt;p&gt;The modalias entries for a given Linux machine can be found using
10395 this shell script:&lt;/p&gt;
10396
10397 &lt;pre&gt;
10398 find /sys -name modalias -print0 | xargs -0 cat | sort -u
10399 &lt;/pre&gt;
10400
10401 &lt;p&gt;The supported modalias globs for a given kernel module can be found
10402 using modinfo:&lt;/p&gt;
10403
10404 &lt;pre&gt;
10405 % /sbin/modinfo psmouse | grep alias:
10406 alias: serio:ty05pr*id*ex*
10407 alias: serio:ty01pr*id*ex*
10408 %
10409 &lt;/pre&gt;
10410
10411 &lt;p&gt;&lt;strong&gt;PCI subtype&lt;/strong&gt;&lt;/p&gt;
10412
10413 &lt;p&gt;A typical PCI entry can look like this. This is an Intel Host
10414 Bridge memory controller:&lt;/p&gt;
10415
10416 &lt;p&gt;&lt;blockquote&gt;
10417 pci:v00008086d00002770sv00001028sd000001ADbc06sc00i00
10418 &lt;/blockquote&gt;&lt;/p&gt;
10419
10420 &lt;p&gt;This represent these values:&lt;/p&gt;
10421
10422 &lt;pre&gt;
10423 v 00008086 (vendor)
10424 d 00002770 (device)
10425 sv 00001028 (subvendor)
10426 sd 000001AD (subdevice)
10427 bc 06 (bus class)
10428 sc 00 (bus subclass)
10429 i 00 (interface)
10430 &lt;/pre&gt;
10431
10432 &lt;p&gt;The vendor/device values are the same values outputted from &#39;lspci
10433 -n&#39; as 8086:2770. The bus class/subclass is also shown by lspci as
10434 0600. The 0600 class is a host bridge. Other useful bus values are
10435 0300 (VGA compatible card) and 0200 (Ethernet controller).&lt;/p&gt;
10436
10437 &lt;p&gt;Not sure how to figure out the interface value, nor what it
10438 means.&lt;/p&gt;
10439
10440 &lt;p&gt;&lt;strong&gt;USB subtype&lt;/strong&gt;&lt;/p&gt;
10441
10442 &lt;p&gt;Some typical USB entries can look like this. This is an internal
10443 USB hub in a laptop:&lt;/p&gt;
10444
10445 &lt;p&gt;&lt;blockquote&gt;
10446 usb:v1D6Bp0001d0206dc09dsc00dp00ic09isc00ip00
10447 &lt;/blockquote&gt;&lt;/p&gt;
10448
10449 &lt;p&gt;Here is the values included in this alias:&lt;/p&gt;
10450
10451 &lt;pre&gt;
10452 v 1D6B (device vendor)
10453 p 0001 (device product)
10454 d 0206 (bcddevice)
10455 dc 09 (device class)
10456 dsc 00 (device subclass)
10457 dp 00 (device protocol)
10458 ic 09 (interface class)
10459 isc 00 (interface subclass)
10460 ip 00 (interface protocol)
10461 &lt;/pre&gt;
10462
10463 &lt;p&gt;The 0900 device class/subclass means hub. Some times the relevant
10464 class is in the interface class section. For a simple USB web camera,
10465 these alias entries show up:&lt;/p&gt;
10466
10467 &lt;p&gt;&lt;blockquote&gt;
10468 usb:v0AC8p3420d5000dcEFdsc02dp01ic01isc01ip00
10469 &lt;br&gt;usb:v0AC8p3420d5000dcEFdsc02dp01ic01isc02ip00
10470 &lt;br&gt;usb:v0AC8p3420d5000dcEFdsc02dp01ic0Eisc01ip00
10471 &lt;br&gt;usb:v0AC8p3420d5000dcEFdsc02dp01ic0Eisc02ip00
10472 &lt;/blockquote&gt;&lt;/p&gt;
10473
10474 &lt;p&gt;Interface class 0E01 is video control, 0E02 is video streaming (aka
10475 camera), 0101 is audio control device and 0102 is audio streaming (aka
10476 microphone). Thus this is a camera with microphone included.&lt;/p&gt;
10477
10478 &lt;p&gt;&lt;strong&gt;ACPI subtype&lt;/strong&gt;&lt;/p&gt;
10479
10480 &lt;p&gt;The ACPI type is used for several non-PCI/USB stuff. This is an IR
10481 receiver in a Thinkpad X40:&lt;/p&gt;
10482
10483 &lt;p&gt;&lt;blockquote&gt;
10484 acpi:IBM0071:PNP0511:
10485 &lt;/blockquote&gt;&lt;/p&gt;
10486
10487 &lt;p&gt;The values between the colons are IDs.&lt;/p&gt;
10488
10489 &lt;p&gt;&lt;strong&gt;DMI subtype&lt;/strong&gt;&lt;/p&gt;
10490
10491 &lt;p&gt;The DMI table contain lots of information about the computer case
10492 and model. This is an entry for a IBM Thinkpad X40, fetched from
10493 /sys/devices/virtual/dmi/id/modalias:&lt;/p&gt;
10494
10495 &lt;p&gt;&lt;blockquote&gt;
10496 dmi:bvnIBM:bvr1UETB6WW(1.66):bd06/15/2005:svnIBM:pn2371H4G:pvrThinkPadX40:rvnIBM:rn2371H4G:rvrNotAvailable:cvnIBM:ct10:cvrNotAvailable:
10497 &lt;/blockquote&gt;&lt;/p&gt;
10498
10499 &lt;p&gt;The values present are&lt;/p&gt;
10500
10501 &lt;pre&gt;
10502 bvn IBM (BIOS vendor)
10503 bvr 1UETB6WW(1.66) (BIOS version)
10504 bd 06/15/2005 (BIOS date)
10505 svn IBM (system vendor)
10506 pn 2371H4G (product name)
10507 pvr ThinkPadX40 (product version)
10508 rvn IBM (board vendor)
10509 rn 2371H4G (board name)
10510 rvr NotAvailable (board version)
10511 cvn IBM (chassis vendor)
10512 ct 10 (chassis type)
10513 cvr NotAvailable (chassis version)
10514 &lt;/pre&gt;
10515
10516 &lt;p&gt;The chassis type 10 is Notebook. Other interesting values can be
10517 found in the dmidecode source:&lt;/p&gt;
10518
10519 &lt;pre&gt;
10520 3 Desktop
10521 4 Low Profile Desktop
10522 5 Pizza Box
10523 6 Mini Tower
10524 7 Tower
10525 8 Portable
10526 9 Laptop
10527 10 Notebook
10528 11 Hand Held
10529 12 Docking Station
10530 13 All In One
10531 14 Sub Notebook
10532 15 Space-saving
10533 16 Lunch Box
10534 17 Main Server Chassis
10535 18 Expansion Chassis
10536 19 Sub Chassis
10537 20 Bus Expansion Chassis
10538 21 Peripheral Chassis
10539 22 RAID Chassis
10540 23 Rack Mount Chassis
10541 24 Sealed-case PC
10542 25 Multi-system
10543 26 CompactPCI
10544 27 AdvancedTCA
10545 28 Blade
10546 29 Blade Enclosing
10547 &lt;/pre&gt;
10548
10549 &lt;p&gt;The chassis type values are not always accurately set in the DMI
10550 table. For example my home server is a tower, but the DMI modalias
10551 claim it is a desktop.&lt;/p&gt;
10552
10553 &lt;p&gt;&lt;strong&gt;SerIO subtype&lt;/strong&gt;&lt;/p&gt;
10554
10555 &lt;p&gt;This type is used for PS/2 mouse plugs. One example is from my
10556 test machine:&lt;/p&gt;
10557
10558 &lt;p&gt;&lt;blockquote&gt;
10559 serio:ty01pr00id00ex00
10560 &lt;/blockquote&gt;&lt;/p&gt;
10561
10562 &lt;p&gt;The values present are&lt;/p&gt;
10563
10564 &lt;pre&gt;
10565 ty 01 (type)
10566 pr 00 (prototype)
10567 id 00 (id)
10568 ex 00 (extra)
10569 &lt;/pre&gt;
10570
10571 &lt;p&gt;This type is supported by the psmouse driver. I am not sure what
10572 the valid values are.&lt;/p&gt;
10573
10574 &lt;p&gt;&lt;strong&gt;Other subtypes&lt;/strong&gt;&lt;/p&gt;
10575
10576 &lt;p&gt;There are heaps of other modalias subtypes according to
10577 file2alias.c. There is the rest of the list from that source: amba,
10578 ap, bcma, ccw, css, eisa, hid, i2c, ieee1394, input, ipack, isapnp,
10579 mdio, of, parisc, pcmcia, platform, scsi, sdio, spi, ssb, vio, virtio,
10580 vmbus, x86cpu and zorro. I did not spend time documenting all of
10581 these, as they do not seem relevant for my intended use with mapping
10582 hardware to packages when new stuff is inserted during run time.&lt;/p&gt;
10583
10584 &lt;p&gt;&lt;strong&gt;Looking up kernel modules using modalias values&lt;/strong&gt;&lt;/p&gt;
10585
10586 &lt;p&gt;To check which kernel modules provide support for a given modalias,
10587 one can use the following shell script:&lt;/p&gt;
10588
10589 &lt;pre&gt;
10590 for id in $(find /sys -name modalias -print0 | xargs -0 cat | sort -u); do \
10591 echo &quot;$id&quot; ; \
10592 /sbin/modprobe --show-depends &quot;$id&quot;|sed &#39;s/^/ /&#39; ; \
10593 done
10594 &lt;/pre&gt;
10595
10596 &lt;p&gt;The output can look like this (only the first few entries as the
10597 list is very long on my test machine):&lt;/p&gt;
10598
10599 &lt;pre&gt;
10600 acpi:ACPI0003:
10601 insmod /lib/modules/2.6.32-5-686/kernel/drivers/acpi/ac.ko
10602 acpi:device:
10603 FATAL: Module acpi:device: not found.
10604 acpi:IBM0068:
10605 insmod /lib/modules/2.6.32-5-686/kernel/drivers/char/nvram.ko
10606 insmod /lib/modules/2.6.32-5-686/kernel/drivers/leds/led-class.ko
10607 insmod /lib/modules/2.6.32-5-686/kernel/net/rfkill/rfkill.ko
10608 insmod /lib/modules/2.6.32-5-686/kernel/drivers/platform/x86/thinkpad_acpi.ko
10609 acpi:IBM0071:PNP0511:
10610 insmod /lib/modules/2.6.32-5-686/kernel/lib/crc-ccitt.ko
10611 insmod /lib/modules/2.6.32-5-686/kernel/net/irda/irda.ko
10612 insmod /lib/modules/2.6.32-5-686/kernel/drivers/net/irda/nsc-ircc.ko
10613 [...]
10614 &lt;/pre&gt;
10615
10616 &lt;p&gt;If you want to help implementing a system to let us propose what
10617 packages to install when new hardware is plugged into a Debian
10618 machine, please send me an email or talk to me on
10619 &lt;a href=&quot;irc://irc.debian.org/%23debian-devel&quot;&gt;#debian-devel&lt;/a&gt;.&lt;/p&gt;
10620
10621 &lt;p&gt;&lt;strong&gt;Update 2013-01-15:&lt;/strong&gt; Rewrite &quot;cat $(find ...)&quot; to
10622 &quot;find ... -print0 | xargs -0 cat&quot; to make sure it handle directories
10623 in /sys/ with space in them.&lt;/p&gt;
10624 </description>
10625 </item>
10626
10627 <item>
10628 <title>Moved the pymissile Debian packaging to collab-maint</title>
10629 <link>http://www.hungry.com/~pere/blog/Moved_the_pymissile_Debian_packaging_to_collab_maint.html</link>
10630 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Moved_the_pymissile_Debian_packaging_to_collab_maint.html</guid>
10631 <pubDate>Thu, 10 Jan 2013 20:40:00 +0100</pubDate>
10632 <description>&lt;p&gt;As part of my investigation on how to improve the support in Debian
10633 for hardware dongles, I dug up my old Mark and Spencer USB Rocket
10634 Launcher and updated the Debian package
10635 &lt;a href=&quot;http://packages.qa.debian.org/pymissile&quot;&gt;pymissile&lt;/a&gt; to make
10636 sure udev will fix the device permissions when it is plugged in. I
10637 also added a &quot;Modaliases&quot; header to test it in the Debian archive and
10638 hopefully make the package be proposed by jockey in Ubuntu when a user
10639 plug in his rocket launcher. In the process I moved the source to a
10640 git repository under collab-maint, to make it easier for any DD to
10641 contribute. &lt;a href=&quot;http://code.google.com/p/pymissile/&quot;&gt;Upstream&lt;/a&gt;
10642 is not very active, but the software still work for me even after five
10643 years of relative silence. The new git repository is not listed in
10644 the uploaded package yet, because I want to test the other changes a
10645 bit more before I upload the new version. If you want to check out
10646 the new version with a .desktop file included, visit the
10647 &lt;a href=&quot;http://anonscm.debian.org/gitweb/?p=collab-maint/pymissile.git&quot;&gt;gitweb
10648 view&lt;/a&gt; or use &quot;&lt;tt&gt;git clone
10649 git://anonscm.debian.org/collab-maint/pymissile.git&lt;/tt&gt;&quot;.&lt;/p&gt;
10650 </description>
10651 </item>
10652
10653 <item>
10654 <title>Lets make hardware dongles easier to use in Debian</title>
10655 <link>http://www.hungry.com/~pere/blog/Lets_make_hardware_dongles_easier_to_use_in_Debian.html</link>
10656 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Lets_make_hardware_dongles_easier_to_use_in_Debian.html</guid>
10657 <pubDate>Wed, 9 Jan 2013 15:40:00 +0100</pubDate>
10658 <description>&lt;p&gt;One thing that annoys me with Debian and Linux distributions in
10659 general, is that there is a great package management system with the
10660 ability to automatically install software packages by downloading them
10661 from the distribution mirrors, but no way to get it to automatically
10662 install the packages I need to use the hardware I plug into my
10663 machine. Even if the package to use it is easily available from the
10664 Linux distribution. When I plug in a LEGO Mindstorms NXT, it could
10665 suggest to automatically install the python-nxt, nbc and t2n packages
10666 I need to talk to it. When I plug in a Yubikey, it could propose the
10667 yubikey-personalization package. The information required to do this
10668 is available, but no-one have pulled all the pieces together.&lt;/p&gt;
10669
10670 &lt;p&gt;Some years ago, I proposed to
10671 &lt;a href=&quot;http://lists.debian.org/debian-devel/2010/05/msg01206.html&quot;&gt;use
10672 the discover subsystem to implement this&lt;/a&gt;. The idea is fairly
10673 simple:
10674
10675 &lt;ul&gt;
10676
10677 &lt;li&gt;Add a desktop entry in /usr/share/autostart/ pointing to a program
10678 starting when a user log in.&lt;/li&gt;
10679
10680 &lt;li&gt;Set this program up to listen for kernel events emitted when new
10681 hardware is inserted into the computer.&lt;/li&gt;
10682
10683 &lt;li&gt;When new hardware is inserted, look up the hardware ID in a
10684 database mapping to packages, and take note of any non-installed
10685 packages.&lt;/li&gt;
10686
10687 &lt;li&gt;Show a message to the user proposing to install the discovered
10688 package, and make it easy to install it.&lt;/li&gt;
10689
10690 &lt;/ul&gt;
10691
10692 &lt;p&gt;I am not sure what the best way to implement this is, but my
10693 initial idea was to use dbus events to discover new hardware, the
10694 discover database to find packages and
10695 &lt;a href=&quot;http://www.packagekit.org/&quot;&gt;PackageKit&lt;/a&gt; to install
10696 packages.&lt;/p&gt;
10697
10698 &lt;p&gt;Yesterday, I found time to try to implement this idea, and the
10699 draft package is now checked into
10700 &lt;a href=&quot;http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/&quot;&gt;the
10701 Debian Edu subversion repository&lt;/a&gt;. In the process, I updated the
10702 &lt;a href=&quot;http://packages.qa.debian.org/d/discover-data.html&quot;&gt;discover-data&lt;/a&gt;
10703 package to map the USB ids of LEGO Mindstorms and Yubikey devices to
10704 the relevant packages in Debian, and uploaded a new version
10705 2.2013.01.09 to unstable. I also discovered that the current
10706 &lt;a href=&quot;http://packages.qa.debian.org/d/discover.html&quot;&gt;discover&lt;/a&gt;
10707 package in Debian no longer discovered any USB devices, because
10708 /proc/bus/usb/devices is no longer present. I ported it to use
10709 libusb as a fall back option to get it working. The fixed package
10710 version 2.1.2-6 is now in experimental (didn&#39;t upload it to unstable
10711 because of the freeze).&lt;/p&gt;
10712
10713 &lt;p&gt;With this prototype in place, I can insert my Yubikey, and get this
10714 desktop notification to show up (only once, the first time it is
10715 inserted):&lt;/p&gt;
10716
10717 &lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;http://www.hungry.com/~pere/blog/images/2013-01-09-hw-autoinstall.png&quot;&gt;&lt;/p&gt;
10718
10719 &lt;p&gt;For this prototype to be really useful, some way to automatically
10720 install the proposed packages by pressing the &quot;Please install
10721 program(s)&quot; button should to be implemented.&lt;/p&gt;
10722
10723 &lt;p&gt;If this idea seem useful to you, and you want to help make it
10724 happen, please help me update the discover-data database with mappings
10725 from hardware to Debian packages. Check if &#39;discover-pkginstall -l&#39;
10726 list the package you would like to have installed when a given
10727 hardware device is inserted into your computer, and report bugs using
10728 reportbug if it isn&#39;t. Or, if you know of a better way to provide
10729 such mapping, please let me know.&lt;/p&gt;
10730
10731 &lt;p&gt;This prototype need more work, and there are several questions that
10732 should be considered before it is ready for production use. Is dbus
10733 the correct way to detect new hardware? At the moment I look for HAL
10734 dbus events on the system bus, because that is the events I could see
10735 on my Debian Squeeze KDE desktop. Are there better events to use?
10736 How should the user be notified? Is the desktop notification
10737 mechanism the best option, or should the background daemon raise a
10738 popup instead? How should packages be installed? When should they
10739 not be installed?&lt;/p&gt;
10740
10741 &lt;p&gt;If you want to help getting such feature implemented in Debian,
10742 please send me an email. :)&lt;/p&gt;
10743 </description>
10744 </item>
10745
10746 <item>
10747 <title>New IRC channel for LEGO designers using Debian</title>
10748 <link>http://www.hungry.com/~pere/blog/New_IRC_channel_for_LEGO_designers_using_Debian.html</link>
10749 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/New_IRC_channel_for_LEGO_designers_using_Debian.html</guid>
10750 <pubDate>Wed, 2 Jan 2013 15:40:00 +0100</pubDate>
10751 <description>&lt;p&gt;During Christmas, I have worked a bit on the Debian support for
10752 &lt;a href=&quot;http://mindstorms.lego.com/en-us/Default.aspx&quot;&gt;LEGO Mindstorm
10753 NXT&lt;/a&gt;. My son and I have played a bit with my NXT set, and I
10754 discovered I had to build all the tools myself because none were
10755 already in Debian Squeeze. If Debian support for LEGO is something
10756 you care about, please join me on the IRC channel
10757 &lt;a href=&quot;irc://irc.debian.org/%23debian-lego&quot;&gt;#debian-lego&lt;/a&gt; (server
10758 irc.debian.org). There is a lot that could be done to improve the
10759 Debian support for LEGO designers. For example both CAD software
10760 and Mindstorm compilers are missing. :)&lt;/p&gt;
10761
10762 &lt;p&gt;Update 2012-01-03: A
10763 &lt;a href=&quot;http://wiki.debian.org/LegoDesigners&quot;&gt;project page&lt;/a&gt;
10764 including links to Lego related packages is now available.&lt;/p&gt;
10765 </description>
10766 </item>
10767
10768 <item>
10769 <title>How to backport bitcoin-qt version 0.7.2-2 to Debian Squeeze</title>
10770 <link>http://www.hungry.com/~pere/blog/How_to_backport_bitcoin_qt_version_0_7_2_2_to_Debian_Squeeze.html</link>
10771 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/How_to_backport_bitcoin_qt_version_0_7_2_2_to_Debian_Squeeze.html</guid>
10772 <pubDate>Tue, 25 Dec 2012 20:50:00 +0100</pubDate>
10773 <description>&lt;p&gt;Let me start by wishing you all marry Christmas and a happy new
10774 year! I hope next year will prove to be a good year.&lt;/p&gt;
10775
10776 &lt;p&gt;&lt;a href=&quot;http://www.bitcoin.org/&quot;&gt;Bitcoin&lt;/a&gt;, the digital
10777 decentralised &quot;currency&quot; that allow people to transfer bitcoins
10778 between each other with minimal overhead, is a very interesting
10779 experiment. And as I wrote a few days ago, the bitcoin situation in
10780 &lt;a href=&quot;http://www.debian.org/&quot;&gt;Debian&lt;/a&gt; is about to improve a bit.
10781 The &lt;a href=&quot;http://packages.qa.debian.org/bitcoin&quot;&gt;new debian source
10782 package&lt;/a&gt; (version 0.7.2-2) was uploaded yesterday, and is waiting
10783 in &lt;a href=&quot;http://ftp-master.debian.org/new.html&quot;&gt;the NEW queue&lt;/A&gt;
10784 for one of the ftpmasters to approve the new bitcoin-qt package
10785 name.&lt;/p&gt;
10786
10787 &lt;p&gt;And thanks to the great work of Jonas and the rest of the bitcoin
10788 team in Debian, you can easily test the package in Debian Squeeze
10789 using the following steps to get a set of working packages:&lt;/p&gt;
10790
10791 &lt;blockquote&gt;&lt;pre&gt;
10792 git clone git://git.debian.org/git/collab-maint/bitcoin
10793 cd bitcoin
10794 DEB_MAINTAINER_MODE=1 DEB_BUILD_OPTIONS=noupnp fakeroot debian/rules clean
10795 DEB_BUILD_OPTIONS=noupnp git-buildpackage --git-ignore-new
10796 &lt;/pre&gt;&lt;/blockquote&gt;
10797
10798 &lt;p&gt;You might have to install some build dependencies as well. The
10799 list of commands should give you two packages, bitcoind and
10800 bitcoin-qt, ready for use in a Squeeze environment. Note that the
10801 client will download the complete set of bitcoin &quot;blocks&quot;, which need
10802 around 5.6 GiB of data on my machine at the moment. Make sure your
10803 ~/.bitcoin/ directory have lots of spare room if you want to download
10804 all the blocks. The client will warn if the disk is getting full, so
10805 there is not really a problem if you got too little room, but you will
10806 not be able to get all the features out of the client.&lt;/p&gt;
10807
10808 &lt;p&gt;As usual, if you use bitcoin and want to show your support of my
10809 activities, please send Bitcoin donations to my address
10810 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
10811 </description>
10812 </item>
10813
10814 <item>
10815 <title>A word on bitcoin support in Debian</title>
10816 <link>http://www.hungry.com/~pere/blog/A_word_on_bitcoin_support_in_Debian.html</link>
10817 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/A_word_on_bitcoin_support_in_Debian.html</guid>
10818 <pubDate>Fri, 21 Dec 2012 23:59:00 +0100</pubDate>
10819 <description>&lt;p&gt;It has been a while since I wrote about
10820 &lt;a href=&quot;http://www.bitcoin.org/&quot;&gt;bitcoin&lt;/a&gt;, the decentralised
10821 peer-to-peer based crypto-currency, and the reason is simply that I
10822 have been busy elsewhere. But two days ago, I started looking at the
10823 state of &lt;a href=&quot;http://packages.qa.debian.org/bitcoin&quot;&gt;bitcoin in
10824 Debian&lt;/a&gt; again to try to recover my old bitcoin wallet. The package
10825 is now maintained by a
10826 &lt;a href=&quot;https://alioth.debian.org/projects/pkg-bitcoin/&quot;&gt;team of
10827 people&lt;/a&gt;, and the grunt work had already been done by this team. We
10828 owe a huge thank you to all these team members. :)
10829 But I was sad to discover that the bitcoin client is missing in
10830 Wheezy. It is only available in Sid (and an outdated client from
10831 backports). The client had several RC bugs registered in BTS blocking
10832 it from entering testing. To try to help the team and improve the
10833 situation, I spent some time providing patches and triaging the bug
10834 reports. I also had a look at the bitcoin package available from Matt
10835 Corallo in a
10836 &lt;a href=&quot;https://launchpad.net/~bitcoin/+archive/bitcoin&quot;&gt;PPA for
10837 Ubuntu&lt;/a&gt;, and moved the useful pieces from that version into the
10838 Debian package.&lt;/p&gt;
10839
10840 &lt;p&gt;After checking with the main package maintainer Jonas Smedegaard on
10841 IRC, I pushed several patches into the collab-maint git repository to
10842 improve the package. It now contains fixes for the RC issues (not from
10843 me, but fixed by Scott Howard), build rules for a Qt GUI client
10844 package, konqueror support for the bitcoin: URI and bash completion
10845 setup. As I work on Debian Squeeze, I also created
10846 &lt;a href=&quot;http://lists.alioth.debian.org/pipermail/pkg-bitcoin-devel/Week-of-Mon-20121217/000041.html&quot;&gt;a
10847 patch to backport&lt;/a&gt; the latest version. Jonas is going to look at
10848 it and try to integrate it into the git repository before uploading a
10849 new version to unstable.
10850
10851 &lt;p&gt;I would very much like bitcoin to succeed, to get rid of the
10852 centralized control currently exercised in the monetary system. I
10853 find it completely unacceptable that the USA government is collecting
10854 transaction data for almost all international money transfers (most are done in USD and transaction logs shipped to the spooks), and
10855 that the major credit card companies can block legal money
10856 transactions to Wikileaks. But for bitcoin to succeed, more people
10857 need to use bitcoins, and more people need to accept bitcoins when
10858 they sell products and services. Improving the bitcoin support in
10859 Debian is a small step in the right direction, but not enough.
10860 Unfortunately the user experience when browsing the web and wanting to
10861 pay with bitcoin is still not very good. The bitcoin: URI is a step
10862 in the right direction, but need to work in most or every browser in
10863 use. Also the bitcoin-qt client is too heavy to fire up to do a
10864 quick transaction. I believe there are other clients available, but
10865 have not tested them.&lt;/p&gt;
10866
10867 &lt;p&gt;My
10868 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Now_accepting_bitcoins___anonymous_and_distributed_p2p_crypto_money.html&quot;&gt;experiment
10869 with bitcoins&lt;/a&gt; showed that at least some of my readers use bitcoin.
10870 I received 20.15 BTC so far on the address I provided in my blog two
10871 years ago, as can be
10872 &lt;a href=&quot;http://blockexplorer.com/address/15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;seen
10873 on the blockexplorer service&lt;/a&gt;. Thank you everyone for your
10874 donation. The blockexplorer service demonstrates quite well that
10875 bitcoin is not quite anonymous and untracked. :) I wonder if the
10876 number of users have gone up since then. If you use bitcoin and want
10877 to show your support of my activity, please send Bitcoin donations to
10878 the same address as last time,
10879 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
10880 </description>
10881 </item>
10882
10883 <item>
10884 <title>Git repository for song book for Computer Scientists</title>
10885 <link>http://www.hungry.com/~pere/blog/Git_repository_for_song_book_for_Computer_Scientists.html</link>
10886 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Git_repository_for_song_book_for_Computer_Scientists.html</guid>
10887 <pubDate>Fri, 7 Sep 2012 13:50:00 +0200</pubDate>
10888 <description>&lt;p&gt;As I
10889 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Song_book_for_Computer_Scientists.html&quot;&gt;mentioned
10890 this summer&lt;/a&gt;, I have created a Computer Science song book a few
10891 years ago, and today I finally found time to create a public
10892 &lt;a href=&quot;https://gitorious.org/pere-cs-songbook/pere-cs-songbook&quot;&gt;Gitorious
10893 repository for the project&lt;/a&gt;.&lt;/p&gt;
10894
10895 &lt;p&gt;If you want to help out, please clone the source and submit patches
10896 to the HTML version. To generate the PDF and PostScript version,
10897 please use prince XML, or let me know about a useful free software
10898 processor capable of creating a good looking PDF from the HTML.&lt;/p&gt;
10899
10900 &lt;p&gt;Want to sing? You can still find the song book in HTML, PDF and
10901 PostScript formats at
10902 &lt;a href=&quot;http://www.hungry.com/~pere/cs-songbook/&quot;&gt;Petter&#39;s Computer
10903 Science Songbook&lt;/a&gt;.&lt;/p&gt;
10904 </description>
10905 </item>
10906
10907 <item>
10908 <title>Gratulerer med 19-årsdagen, Debian!</title>
10909 <link>http://www.hungry.com/~pere/blog/Gratulerer_med_19__rsdagen__Debian_.html</link>
10910 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Gratulerer_med_19__rsdagen__Debian_.html</guid>
10911 <pubDate>Thu, 16 Aug 2012 11:20:00 +0200</pubDate>
10912 <description>&lt;p&gt;I dag fyller
10913 &lt;a href=&quot;http://www.debian.org/News/2012/20120813&quot;&gt;Debian-prosjektet 19
10914 år&lt;/a&gt;. Jeg har fulgt det de siste 12 årene, og er veldig glad for å kunne
10915 si gratulerer med dagen, Debian!&lt;/p&gt;
10916 </description>
10917 </item>
10918
10919 <item>
10920 <title>Song book for Computer Scientists</title>
10921 <link>http://www.hungry.com/~pere/blog/Song_book_for_Computer_Scientists.html</link>
10922 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Song_book_for_Computer_Scientists.html</guid>
10923 <pubDate>Sun, 24 Jun 2012 13:30:00 +0200</pubDate>
10924 <description>&lt;p&gt;Many years ago, while studying Computer Science at the
10925 &lt;a href=&quot;http://www.uit.no/&quot;&gt;University of Tromsø&lt;/a&gt;, I started
10926 collecting computer related songs for use at parties. The original
10927 version was written in LaTeX, but a few years ago I got help from
10928 Håkon W. Lie, one of the inventors of W3C CSS, to convert it to HTML
10929 while keeping the ability to create a nice book in PDF format. I have
10930 not had time to maintain the book for a while now, and guess I should
10931 put it up on some public version control repository where others can
10932 help me extend and update the book. If anyone is volunteering to help
10933 me with this, send me an email. Also let me know if there are songs
10934 missing in my book.&lt;/p&gt;
10935
10936 &lt;p&gt;I have not mentioned the book on my blog so far, and it occured to
10937 me today that I really should let all my readers share the joys of
10938 singing out load about programming, computers and computer networks.
10939 Especially now that &lt;a href=&quot;http://debconf12.debconf.org/&quot;&gt;Debconf
10940 12&lt;/a&gt; is about to start (and I am not going). Want to sing? Check
10941 out &lt;a href=&quot;http://www.hungry.com/~pere/cs-songbook/&quot;&gt;Petter&#39;s
10942 Computer Science Songbook&lt;/a&gt;.
10943 </description>
10944 </item>
10945
10946 <item>
10947 <title>Automatically upgrading server firmware on Dell PowerEdge</title>
10948 <link>http://www.hungry.com/~pere/blog/Automatically_upgrading_server_firmware_on_Dell_PowerEdge.html</link>
10949 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Automatically_upgrading_server_firmware_on_Dell_PowerEdge.html</guid>
10950 <pubDate>Mon, 21 Nov 2011 12:00:00 +0100</pubDate>
10951 <description>&lt;p&gt;At work we have heaps of servers. I believe the total count is
10952 around 1000 at the moment. To be able to get help from the vendors
10953 when something go wrong, we want to keep the firmware on the servers
10954 up to date. If the firmware isn&#39;t the latest and greatest, the
10955 vendors typically refuse to start debugging any problems until the
10956 firmware is upgraded. So before every reboot, we want to upgrade the
10957 firmware, and we would really like everyone handling servers at the
10958 university to do this themselves when they plan to reboot a machine.
10959 For that to happen we at the unix server admin group need to provide
10960 the tools to do so.&lt;/p&gt;
10961
10962 &lt;p&gt;To make firmware upgrading easier, I am working on a script to
10963 fetch and install the latest firmware for the servers we got. Most of
10964 our hardware are from Dell and HP, so I have focused on these servers
10965 so far. This blog post is about the Dell part.&lt;/P&gt;
10966
10967 &lt;p&gt;On the Dell FTP site I was lucky enough to find
10968 &lt;a href=&quot;ftp://ftp.us.dell.com/catalog/Catalog.xml.gz&quot;&gt;an XML file&lt;/a&gt;
10969 with firmware information for all 11th generation servers, listing
10970 which firmware should be used on a given model and where on the FTP
10971 site I can find it. Using a simple perl XML parser I can then
10972 download the shell scripts Dell provides to do firmware upgrades from
10973 within Linux and reboot when all the firmware is primed and ready to
10974 be activated on the first reboot.&lt;/p&gt;
10975
10976 &lt;p&gt;This is the Dell related fragment of the perl code I am working on.
10977 Are there anyone working on similar tools for firmware upgrading all
10978 servers at a site? Please get in touch and lets share resources.&lt;/p&gt;
10979
10980 &lt;p&gt;&lt;pre&gt;
10981 #!/usr/bin/perl
10982 use strict;
10983 use warnings;
10984 use File::Temp qw(tempdir);
10985 BEGIN {
10986 # Install needed RHEL packages if missing
10987 my %rhelmodules = (
10988 &#39;XML::Simple&#39; =&gt; &#39;perl-XML-Simple&#39;,
10989 );
10990 for my $module (keys %rhelmodules) {
10991 eval &quot;use $module;&quot;;
10992 if ($@) {
10993 my $pkg = $rhelmodules{$module};
10994 system(&quot;yum install -y $pkg&quot;);
10995 eval &quot;use $module;&quot;;
10996 }
10997 }
10998 }
10999 my $errorsto = &#39;pere@hungry.com&#39;;
11000
11001 upgrade_dell();
11002
11003 exit 0;
11004
11005 sub run_firmware_script {
11006 my ($opts, $script) = @_;
11007 unless ($script) {
11008 print STDERR &quot;fail: missing script name\n&quot;;
11009 exit 1
11010 }
11011 print STDERR &quot;Running $script\n\n&quot;;
11012
11013 if (0 == system(&quot;sh $script $opts&quot;)) { # FIXME correct exit code handling
11014 print STDERR &quot;success: firmware script ran succcessfully\n&quot;;
11015 } else {
11016 print STDERR &quot;fail: firmware script returned error\n&quot;;
11017 }
11018 }
11019
11020 sub run_firmware_scripts {
11021 my ($opts, @dirs) = @_;
11022 # Run firmware packages
11023 for my $dir (@dirs) {
11024 print STDERR &quot;info: Running scripts in $dir\n&quot;;
11025 opendir(my $dh, $dir) or die &quot;Unable to open directory $dir: $!&quot;;
11026 while (my $s = readdir $dh) {
11027 next if $s =~ m/^\.\.?/;
11028 run_firmware_script($opts, &quot;$dir/$s&quot;);
11029 }
11030 closedir $dh;
11031 }
11032 }
11033
11034 sub download {
11035 my $url = shift;
11036 print STDERR &quot;info: Downloading $url\n&quot;;
11037 system(&quot;wget --quiet \&quot;$url\&quot;&quot;);
11038 }
11039
11040 sub upgrade_dell {
11041 my @dirs;
11042 my $product = `dmidecode -s system-product-name`;
11043 chomp $product;
11044
11045 if ($product =~ m/PowerEdge/) {
11046
11047 # on RHEL, these pacakges are needed by the firwmare upgrade scripts
11048 system(&#39;yum install -y compat-libstdc++-33.i686 libstdc++.i686 libxml2.i686 procmail&#39;);
11049
11050 my $tmpdir = tempdir(
11051 CLEANUP =&gt; 1
11052 );
11053 chdir($tmpdir);
11054 fetch_dell_fw(&#39;catalog/Catalog.xml.gz&#39;);
11055 system(&#39;gunzip Catalog.xml.gz&#39;);
11056 my @paths = fetch_dell_fw_list(&#39;Catalog.xml&#39;);
11057 # -q is quiet, disabling interactivity and reducing console output
11058 my $fwopts = &quot;-q&quot;;
11059 if (@paths) {
11060 for my $url (@paths) {
11061 fetch_dell_fw($url);
11062 }
11063 run_firmware_scripts($fwopts, $tmpdir);
11064 } else {
11065 print STDERR &quot;error: Unsupported Dell model &#39;$product&#39;.\n&quot;;
11066 print STDERR &quot;error: Please report to $errorsto.\n&quot;;
11067 }
11068 chdir(&#39;/&#39;);
11069 } else {
11070 print STDERR &quot;error: Unsupported Dell model &#39;$product&#39;.\n&quot;;
11071 print STDERR &quot;error: Please report to $errorsto.\n&quot;;
11072 }
11073 }
11074
11075 sub fetch_dell_fw {
11076 my $path = shift;
11077 my $url = &quot;ftp://ftp.us.dell.com/$path&quot;;
11078 download($url);
11079 }
11080
11081 # Using ftp://ftp.us.dell.com/catalog/Catalog.xml.gz, figure out which
11082 # firmware packages to download from Dell. Only work for Linux
11083 # machines and 11th generation Dell servers.
11084 sub fetch_dell_fw_list {
11085 my $filename = shift;
11086
11087 my $product = `dmidecode -s system-product-name`;
11088 chomp $product;
11089 my ($mybrand, $mymodel) = split(/\s+/, $product);
11090
11091 print STDERR &quot;Finding firmware bundles for $mybrand $mymodel\n&quot;;
11092
11093 my $xml = XMLin($filename);
11094 my @paths;
11095 for my $bundle (@{$xml-&gt;{SoftwareBundle}}) {
11096 my $brand = $bundle-&gt;{TargetSystems}-&gt;{Brand}-&gt;{Display}-&gt;{content};
11097 my $model = $bundle-&gt;{TargetSystems}-&gt;{Brand}-&gt;{Model}-&gt;{Display}-&gt;{content};
11098 my $oscode;
11099 if (&quot;ARRAY&quot; eq ref $bundle-&gt;{TargetOSes}-&gt;{OperatingSystem}) {
11100 $oscode = $bundle-&gt;{TargetOSes}-&gt;{OperatingSystem}[0]-&gt;{osCode};
11101 } else {
11102 $oscode = $bundle-&gt;{TargetOSes}-&gt;{OperatingSystem}-&gt;{osCode};
11103 }
11104 if ($mybrand eq $brand &amp;&amp; $mymodel eq $model &amp;&amp; &quot;LIN&quot; eq $oscode)
11105 {
11106 @paths = map { $_-&gt;{path} } @{$bundle-&gt;{Contents}-&gt;{Package}};
11107 }
11108 }
11109 for my $component (@{$xml-&gt;{SoftwareComponent}}) {
11110 my $componenttype = $component-&gt;{ComponentType}-&gt;{value};
11111
11112 # Drop application packages, only firmware and BIOS
11113 next if &#39;APAC&#39; eq $componenttype;
11114
11115 my $cpath = $component-&gt;{path};
11116 for my $path (@paths) {
11117 if ($cpath =~ m%/$path$%) {
11118 push(@paths, $cpath);
11119 }
11120 }
11121 }
11122 return @paths;
11123 }
11124 &lt;/pre&gt;
11125
11126 &lt;p&gt;The code is only tested on RedHat Enterprise Linux, but I suspect
11127 it could work on other platforms with some tweaking. Anyone know a
11128 index like Catalog.xml is available from HP for HP servers? At the
11129 moment I maintain a similar list manually and it is quickly getting
11130 outdated.&lt;/p&gt;
11131 </description>
11132 </item>
11133
11134 <item>
11135 <title>How is booting into runlevel 1 different from single user boots?</title>
11136 <link>http://www.hungry.com/~pere/blog/How_is_booting_into_runlevel_1_different_from_single_user_boots_.html</link>
11137 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/How_is_booting_into_runlevel_1_different_from_single_user_boots_.html</guid>
11138 <pubDate>Thu, 4 Aug 2011 12:40:00 +0200</pubDate>
11139 <description>&lt;p&gt;Wouter Verhelst have some
11140 &lt;a href=&quot;http://grep.be/blog/en/retorts/pere_kubuntu_boot&quot;&gt;interesting
11141 comments and opinions&lt;/a&gt; on my blog post on
11142 &lt;a href=&quot;http://www.hungry.com/~pere/blog/What_should_start_from__etc_rcS_d__in_Debian____almost_nothing.html&quot;&gt;the
11143 need to clean up /etc/rcS.d/ in Debian&lt;/a&gt; and my blog post about
11144 &lt;a href=&quot;http://www.hungry.com/~pere/blog/What_is_missing_in_the_Debian_desktop__or_why_my_parents_use_Kubuntu.html&quot;&gt;the
11145 default KDE desktop in Debian&lt;/a&gt;. I only have time to address one
11146 small piece of his comment now, and though it best to address the
11147 misunderstanding he bring forward:&lt;/p&gt;
11148
11149 &lt;p&gt;&lt;blockquote&gt;
11150 Currently, a system admin has four options: [...] boot to a
11151 single-user system (by adding &#39;single&#39; to the kernel command line;
11152 this runs rcS and rc1 scripts)
11153 &lt;/blockquote&gt;&lt;/p&gt;
11154
11155 &lt;p&gt;This make me believe Wouter believe booting into single user mode
11156 and booting into runlevel 1 is the same. I am not surprised he
11157 believe this, because it would make sense and is a quite sensible
11158 thing to believe. But because the boot in Debian is slightly broken,
11159 runlevel 1 do not work properly and it isn&#39;t the same as single user
11160 mode. I&#39;ll try to explain what is actually happing, but it is a bit
11161 hard to explain.&lt;/p&gt;
11162
11163 &lt;p&gt;Single user mode is defined like this in /etc/inittab:
11164 &quot;&lt;tt&gt;~~:S:wait:/sbin/sulogin&lt;/tt&gt;&quot;. This means the only thing that is
11165 executed in single user mode is sulogin. Single user mode is a boot
11166 state &quot;between&quot; the runlevels, and when booting into single user mode,
11167 only the scripts in /etc/rcS.d/ are executed before the init process
11168 enters the single user state. When switching to runlevel 1, the state
11169 is in fact not ending in runlevel 1, but it passes through runlevel 1
11170 and end up in the single user mode (see /etc/rc1.d/S03single, which
11171 runs &quot;init -t1 S&quot; to switch to single user mode at the end of runlevel
11172 1. It is confusing that the &#39;S&#39; (single user) init mode is not the
11173 mode enabled by /etc/rcS.d/ (which is more like the initial boot
11174 mode).&lt;/p&gt;
11175
11176 &lt;p&gt;This summary might make it clearer. When booting for the first
11177 time into single user mode, the following commands are executed:
11178 &quot;&lt;tt&gt;/etc/init.d/rc S; /sbin/sulogin&lt;/tt&gt;&quot;. When booting into
11179 runlevel 1, the following commands are executed: &quot;&lt;tt&gt;/etc/init.d/rc
11180 S; /etc/init.d/rc 1; /sbin/sulogin&lt;/tt&gt;&quot;. A problem show up when
11181 trying to continue after visiting single user mode. Not all services
11182 are started again as they should, causing the machine to end up in an
11183 unpredicatble state. This is why Debian admins recommend rebooting
11184 after visiting single user mode.&lt;/p&gt;
11185
11186 &lt;p&gt;A similar problem with runlevel 1 is caused by the amount of
11187 scripts executed from /etc/rcS.d/. When switching from say runlevel 2
11188 to runlevel 1, the services started from /etc/rcS.d/ are not properly
11189 stopped when passing through the scripts in /etc/rc1.d/, and not
11190 started again when switching away from runlevel 1 to the runlevels
11191 2-5. I believe the problem is best fixed by moving all the scripts
11192 out of /etc/rcS.d/ that are not &lt;strong&gt;required&lt;/strong&gt; to get a
11193 functioning single user mode during boot.&lt;/p&gt;
11194
11195 &lt;p&gt;I have spent several years investigating the Debian boot system,
11196 and discovered this problem a few years ago. I suspect it originates
11197 from when sysvinit was introduced into Debian, a long time ago.&lt;/p&gt;
11198 </description>
11199 </item>
11200
11201 <item>
11202 <title>What should start from /etc/rcS.d/ in Debian? - almost nothing</title>
11203 <link>http://www.hungry.com/~pere/blog/What_should_start_from__etc_rcS_d__in_Debian____almost_nothing.html</link>
11204 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/What_should_start_from__etc_rcS_d__in_Debian____almost_nothing.html</guid>
11205 <pubDate>Sat, 30 Jul 2011 14:00:00 +0200</pubDate>
11206 <description>&lt;p&gt;In the Debian boot system, several packages include scripts that
11207 are started from /etc/rcS.d/. In fact, there is a bite more of them
11208 than make sense, and this causes a few problems. What kind of
11209 problems, you might ask. There are at least two problems. The first
11210 is that it is not possible to recover a machine after switching to
11211 runlevel 1. One need to actually reboot to get the machine back to
11212 the expected state. The other is that single user boot will sometimes
11213 run into problems because some of the subsystems are activated before
11214 the root login is presented, causing problems when trying to recover a
11215 machine from a problem in that subsystem. A minor additional point is
11216 that moving more scripts out of rcS.d/ and into the other rc#.d/
11217 directories will increase the amount of scripts that can run in
11218 parallel during boot, and thus decrease the boot time.&lt;/p&gt;
11219
11220 &lt;p&gt;So, which scripts should start from rcS.d/. In short, only the
11221 scripts that _have_ to execute before the root login prompt is
11222 presented during a single user boot should go there. Everything else
11223 should go into the numeric runlevels. This means things like
11224 lm-sensors, fuse and x11-common should not run from rcS.d, but from
11225 the numeric runlevels. Today in Debian, there are around 115 init.d
11226 scripts that are started from rcS.d/, and most of them should be moved
11227 out. Do your package have one of them? Please help us make single
11228 user and runlevel 1 better by moving it.&lt;/p&gt;
11229
11230 &lt;p&gt;Scripts setting up the screen, keyboard, system partitions
11231 etc. should still be started from rcS.d/, but there is for example no
11232 need to have the network enabled before the single user login prompt
11233 is presented.&lt;/p&gt;
11234
11235 &lt;p&gt;As always, things are not so easy to fix as they sound. To keep
11236 Debian systems working while scripts migrate and during upgrades, the
11237 scripts need to be moved from rcS.d/ to rc2.d/ in reverse dependency
11238 order, ie the scripts that nothing in rcS.d/ depend on can be moved,
11239 and the next ones can only be moved when their dependencies have been
11240 moved first. This migration must be done sequentially while we ensure
11241 that the package system upgrade packages in the right order to keep
11242 the system state correct. This will require some coordination when it
11243 comes to network related packages, but most of the packages with
11244 scripts that should migrate do not have anything in rcS.d/ depending
11245 on them. Some packages have already been updated, like the sudo
11246 package, while others are still left to do. I wish I had time to work
11247 on this myself, but real live constrains make it unlikely that I will
11248 find time to push this forward.&lt;/p&gt;
11249 </description>
11250 </item>
11251
11252 <item>
11253 <title>What is missing in the Debian desktop, or why my parents use Kubuntu</title>
11254 <link>http://www.hungry.com/~pere/blog/What_is_missing_in_the_Debian_desktop__or_why_my_parents_use_Kubuntu.html</link>
11255 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/What_is_missing_in_the_Debian_desktop__or_why_my_parents_use_Kubuntu.html</guid>
11256 <pubDate>Fri, 29 Jul 2011 08:10:00 +0200</pubDate>
11257 <description>&lt;p&gt;While at Debconf11, I have several times during discussions
11258 mentioned the issues I believe should be improved in Debian for its
11259 desktop to be useful for more people. The use case for this is my
11260 parents, which are currently running Kubuntu which solve the
11261 issues.&lt;/p&gt;
11262
11263 &lt;p&gt;I suspect these four missing features are not very hard to
11264 implement. After all, they are present in Ubuntu, so if we wanted to
11265 do this in Debian we would have a source.&lt;/p&gt;
11266
11267 &lt;ol&gt;
11268
11269 &lt;li&gt;&lt;strong&gt;Simple GUI based upgrade of packages.&lt;/strong&gt; When there
11270 are new packages available for upgrades, a icon in the KDE status bar
11271 indicate this, and clicking on it will activate the simple upgrade
11272 tool to handle it. I have no problem guiding both of my parents
11273 through the process over the phone. If a kernel reboot is required,
11274 this too is indicated by the status bars and the upgrade tool. Last
11275 time I checked, nothing with the same features was working in KDE in
11276 Debian.&lt;/li&gt;
11277
11278 &lt;li&gt;&lt;strong&gt;Simple handling of missing Firefox browser
11279 plugins.&lt;/strong&gt; When the browser encounter a MIME type it do not
11280 currently have a handler for, it will ask the user if the system
11281 should search for a package that would add support for this MIME type,
11282 and if the user say yes, the APT sources will be searched for packages
11283 advertising the MIME type in their control file (visible in the
11284 Packages file in the APT archive). If one or more packages are found,
11285 it is a simple click of the mouse to add support for the missing mime
11286 type. If the package require the user to accept some non-free
11287 license, this is explained to the user. The entire process make it
11288 more clear to the user why something do not work in the browser, and
11289 make the chances higher for the user to blame the web page authors and
11290 not the browser for any missing features.&lt;/li&gt;
11291
11292 &lt;li&gt;&lt;strong&gt;Simple handling of missing multimedia codec/format
11293 handlers.&lt;/strong&gt; When the media players encounter a format or codec
11294 it is not supporting, a dialog pop up asking the user if the system
11295 should search for a package that would add support for it. This
11296 happen with things like MP3, Windows Media or H.264. The selection
11297 and installation procedure is very similar to the Firefox browser
11298 plugin handling. This is as far as I know implemented using a
11299 gstreamer hook. The end result is that the user easily get access to
11300 the codecs that are present from the APT archives available, while
11301 explaining more on why a given format is unsupported by Ubuntu.&lt;/li&gt;
11302
11303 &lt;li&gt;&lt;strong&gt;Better browser handling of some MIME types.&lt;/strong&gt; When
11304 displaying a text/plain file in my Debian browser, it will propose to
11305 start emacs to show it. If I remember correctly, when doing the same
11306 in Kunbutu it show the file as a text file in the browser. At least I
11307 know Opera will show text files within the browser. I much prefer the
11308 latter behaviour.&lt;/li&gt;
11309
11310 &lt;/ol&gt;
11311
11312 &lt;p&gt;There are other nice features as well, like the simplified suite
11313 upgrader, but given that I am the one mostly doing the dist-upgrade,
11314 it do not matter much.&lt;/p&gt;
11315
11316 &lt;p&gt;I really hope we could get these features in place for the next
11317 Debian release. It would require the coordinated effort of several
11318 maintainers, but would make the end user experience a lot better.&lt;/p&gt;
11319 </description>
11320 </item>
11321
11322 <item>
11323 <title>Perl modules used by FixMyStreet which are missing in Debian/Squeeze</title>
11324 <link>http://www.hungry.com/~pere/blog/Perl_modules_used_by_FixMyStreet_which_are_missing_in_Debian_Squeeze.html</link>
11325 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Perl_modules_used_by_FixMyStreet_which_are_missing_in_Debian_Squeeze.html</guid>
11326 <pubDate>Tue, 26 Jul 2011 12:25:00 +0200</pubDate>
11327 <description>&lt;p&gt;The Norwegian &lt;a href=&quot;http://www.fiksgatami.no/&quot;&gt;FiksGataMi&lt;/A&gt;
11328 site is build on Debian/Squeeze, and this platform was chosen because
11329 I am most familiar with Debian (being a Debian Developer for around 10
11330 years) because it is the latest stable Debian release which should get
11331 security support for a few years.&lt;/p&gt;
11332
11333 &lt;p&gt;The web service is written in Perl, and depend on some perl modules
11334 that are missing in Debian at the moment. It would be great if these
11335 modules were added to the Debian archive, allowing anyone to set up
11336 their own &lt;a href=&quot;http://www.fixmystreet.com&quot;&gt;FixMyStreet&lt;/a&gt; clone
11337 in their own country using only Debian packages. The list of modules
11338 missing in Debian/Squeeze isn&#39;t very long, and I hope the perl group
11339 will find time to package the 12 modules Catalyst::Plugin::SmartURI,
11340 Catalyst::Plugin::Unicode::Encoding, Catalyst::View::TT, Devel::Hide,
11341 Sort::Key, Statistics::Distributions, Template::Plugin::Comma,
11342 Template::Plugin::DateTime::Format, Term::Size::Any, Term::Size::Perl,
11343 URI::SmartURI and Web::Scraper to make the maintenance of FixMyStreet
11344 easier in the future.&lt;/p&gt;
11345
11346 &lt;p&gt;Thanks to the great tools in Debian, getting the missing modules
11347 installed on my server was a simple call to &#39;cpan2deb Module::Name&#39;
11348 and &#39;dpkg -i&#39; to install the resulting package. But this leave me
11349 with the responsibility of tracking security problems, which I really
11350 do not have time for.&lt;/p&gt;
11351 </description>
11352 </item>
11353
11354 <item>
11355 <title>A Norwegian FixMyStreet have kept me busy the last few weeks</title>
11356 <link>http://www.hungry.com/~pere/blog/A_Norwegian_FixMyStreet_have_kept_me_busy_the_last_few_weeks.html</link>
11357 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/A_Norwegian_FixMyStreet_have_kept_me_busy_the_last_few_weeks.html</guid>
11358 <pubDate>Sun, 3 Apr 2011 22:50:00 +0200</pubDate>
11359 <description>&lt;p&gt;Here is a small update for my English readers. Most of my blog
11360 posts have been in Norwegian the last few weeks, so here is a short
11361 update in English.&lt;/p&gt;
11362
11363 &lt;p&gt;The kids still keep me too busy to get much free software work
11364 done, but I did manage to organise a project to get a Norwegian port
11365 of the British service
11366 &lt;a href=&quot;http://www.fixmystreet.com/&quot;&gt;FixMyStreet&lt;/a&gt; up and running,
11367 and it has been running for a month now. The entire project has been
11368 organised by me and two others. Around Christmas we gathered sponsors
11369 to fund the development work. In January I drafted a contract with
11370 &lt;a href=&quot;http://www.mysociety.org/&quot;&gt;mySociety&lt;/a&gt; on what to develop,
11371 and in February the development took place. Most of it involved
11372 converting the source to use GPS coordinates instead of British
11373 easting/northing, and the resulting code should be a lot easier to get
11374 running in any country by now. The Norwegian
11375 &lt;a href=&quot;http://www.fiksgatami.no/&quot;&gt;FiksGataMi&lt;/a&gt; is using
11376 &lt;a href=&quot;http://www.openstreetmap.org/&quot;&gt;OpenStreetmap&lt;/a&gt; as the map
11377 source and the source for administrative borders in Norway, and
11378 support for this had to be added/fixed.&lt;/p&gt;
11379
11380 &lt;p&gt;The Norwegian version went live March 3th, and we spent the weekend
11381 polishing the system before we announced it March 7th. The system is
11382 running on a KVM instance of Debian/Squeeze, and has seen almost 3000
11383 problem reports in a few weeks. Soon we hope to announce the Android
11384 and iPhone versions making it even easier to report problems with the
11385 public infrastructure.&lt;/p&gt;
11386
11387 &lt;p&gt;Perhaps something to consider for those of you in countries without
11388 such service?&lt;/p&gt;
11389 </description>
11390 </item>
11391
11392 <item>
11393 <title>Using NVD and CPE to track CVEs in locally maintained software</title>
11394 <link>http://www.hungry.com/~pere/blog/Using_NVD_and_CPE_to_track_CVEs_in_locally_maintained_software.html</link>
11395 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Using_NVD_and_CPE_to_track_CVEs_in_locally_maintained_software.html</guid>
11396 <pubDate>Fri, 28 Jan 2011 15:40:00 +0100</pubDate>
11397 <description>&lt;p&gt;The last few days I have looked at ways to track open security
11398 issues here at my work with the University of Oslo. My idea is that
11399 it should be possible to use the information about security issues
11400 available on the Internet, and check our locally
11401 maintained/distributed software against this information. It should
11402 allow us to verify that no known security issues are forgotten. The
11403 CVE database listing vulnerabilities seem like a great central point,
11404 and by using the package lists from Debian mapped to CVEs provided by
11405 the testing security team, I believed it should be possible to figure
11406 out which security holes were present in our free software
11407 collection.&lt;/p&gt;
11408
11409 &lt;p&gt;After reading up on the topic, it became obvious that the first
11410 building block is to be able to name software packages in a unique and
11411 consistent way across data sources. I considered several ways to do
11412 this, for example coming up with my own naming scheme like using URLs
11413 to project home pages or URLs to the Freshmeat entries, or using some
11414 existing naming scheme. And it seem like I am not the first one to
11415 come across this problem, as MITRE already proposed and implemented a
11416 solution. Enter the &lt;a href=&quot;http://cpe.mitre.org/index.html&quot;&gt;Common
11417 Platform Enumeration&lt;/a&gt; dictionary, a vocabulary for referring to
11418 software, hardware and other platform components. The CPE ids are
11419 mapped to CVEs in the &lt;a href=&quot;http://web.nvd.nist.gov/&quot;&gt;National
11420 Vulnerability Database&lt;/a&gt;, allowing me to look up know security
11421 issues for any CPE name. With this in place, all I need to do is to
11422 locate the CPE id for the software packages we use at the university.
11423 This is fairly trivial (I google for &#39;cve cpe $package&#39; and check the
11424 NVD entry if a CVE for the package exist).&lt;/p&gt;
11425
11426 &lt;p&gt;To give you an example. The GNU gzip source package have the CPE
11427 name cpe:/a:gnu:gzip. If the old version 1.3.3 was the package to
11428 check out, one could look up
11429 &lt;a href=&quot;http://web.nvd.nist.gov/view/vuln/search?cpe=cpe%3A%2Fa%3Agnu%3Agzip:1.3.3&quot;&gt;cpe:/a:gnu:gzip:1.3.3
11430 in NVD&lt;/a&gt; and get a list of 6 security holes with public CVE entries.
11431 The most recent one is
11432 &lt;a href=&quot;http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2010-0001&quot;&gt;CVE-2010-0001&lt;/a&gt;,
11433 and at the bottom of the NVD page for this vulnerability the complete
11434 list of affected versions is provided.&lt;/p&gt;
11435
11436 &lt;p&gt;The NVD database of CVEs is also available as a XML dump, allowing
11437 for offline processing of issues. Using this dump, I&#39;ve written a
11438 small script taking a list of CPEs as input and list all CVEs
11439 affecting the packages represented by these CPEs. One give it CPEs
11440 with version numbers as specified above and get a list of open
11441 security issues out.&lt;/p&gt;
11442
11443 &lt;p&gt;Of course for this approach to be useful, the quality of the NVD
11444 information need to be high. For that to happen, I believe as many as
11445 possible need to use and contribute to the NVD database. I notice
11446 RHEL is providing
11447 &lt;a href=&quot;https://www.redhat.com/security/data/metrics/rhsamapcpe.txt&quot;&gt;a
11448 map from CVE to CPE&lt;/a&gt;, indicating that they are using the CPE
11449 information. I&#39;m not aware of Debian and Ubuntu doing the same.&lt;/p&gt;
11450
11451 &lt;p&gt;To get an idea about the quality for free software, I spent some
11452 time making it possible to compare the CVE database from Debian with
11453 the CVE database in NVD. The result look fairly good, but there are
11454 some inconsistencies in NVD (same software package having several
11455 CPEs), and some inaccuracies (NVD not mentioning buggy packages that
11456 Debian believe are affected by a CVE). Hope to find time to improve
11457 the quality of NVD, but that require being able to get in touch with
11458 someone maintaining it. So far my three emails with questions and
11459 corrections have not seen any reply, but I hope contact can be
11460 established soon.&lt;/p&gt;
11461
11462 &lt;p&gt;An interesting application for CPEs is cross platform package
11463 mapping. It would be useful to know which packages in for example
11464 RHEL, OpenSuSe and Mandriva are missing from Debian and Ubuntu, and
11465 this would be trivial if all linux distributions provided CPE entries
11466 for their packages.&lt;/p&gt;
11467 </description>
11468 </item>
11469
11470 <item>
11471 <title>Which module is loaded for a given PCI and USB device?</title>
11472 <link>http://www.hungry.com/~pere/blog/Which_module_is_loaded_for_a_given_PCI_and_USB_device_.html</link>
11473 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Which_module_is_loaded_for_a_given_PCI_and_USB_device_.html</guid>
11474 <pubDate>Sun, 23 Jan 2011 00:20:00 +0100</pubDate>
11475 <description>&lt;p&gt;In the
11476 &lt;a href=&quot;http://packages.qa.debian.org/discover-data&quot;&gt;discover-data&lt;/a&gt;
11477 package in Debian, there is a script to report useful information
11478 about the running hardware for use when people report missing
11479 information. One part of this script that I find very useful when
11480 debugging hardware problems, is the part mapping loaded kernel module
11481 to the PCI device it claims. It allow me to quickly see if the kernel
11482 module I expect is driving the hardware I am struggling with. To see
11483 the output, make sure discover-data is installed and run
11484 &lt;tt&gt;/usr/share/bug/discover-data 3&gt;&amp;1&lt;/tt&gt;. The relevant output on
11485 one of my machines like this:&lt;/p&gt;
11486
11487 &lt;pre&gt;
11488 loaded modules:
11489 10de:03eb i2c_nforce2
11490 10de:03f1 ohci_hcd
11491 10de:03f2 ehci_hcd
11492 10de:03f0 snd_hda_intel
11493 10de:03ec pata_amd
11494 10de:03f6 sata_nv
11495 1022:1103 k8temp
11496 109e:036e bttv
11497 109e:0878 snd_bt87x
11498 11ab:4364 sky2
11499 &lt;/pre&gt;
11500
11501 &lt;p&gt;The code in question look like this, slightly modified for
11502 readability and to drop the output to file descriptor 3:&lt;/p&gt;
11503
11504 &lt;pre&gt;
11505 if [ -d /sys/bus/pci/devices/ ] ; then
11506 echo loaded pci modules:
11507 (
11508 cd /sys/bus/pci/devices/
11509 for address in * ; do
11510 if [ -d &quot;$address/driver/module&quot; ] ; then
11511 module=`cd $address/driver/module ; pwd -P | xargs basename`
11512 if grep -q &quot;^$module &quot; /proc/modules ; then
11513 address=$(echo $address |sed s/0000://)
11514 id=`lspci -n -s $address | tail -n 1 | awk &#39;{print $3}&#39;`
11515 echo &quot;$id $module&quot;
11516 fi
11517 fi
11518 done
11519 )
11520 echo
11521 fi
11522 &lt;/pre&gt;
11523
11524 &lt;p&gt;Similar code could be used to extract USB device module
11525 mappings:&lt;/p&gt;
11526
11527 &lt;pre&gt;
11528 if [ -d /sys/bus/usb/devices/ ] ; then
11529 echo loaded usb modules:
11530 (
11531 cd /sys/bus/usb/devices/
11532 for address in * ; do
11533 if [ -d &quot;$address/driver/module&quot; ] ; then
11534 module=`cd $address/driver/module ; pwd -P | xargs basename`
11535 if grep -q &quot;^$module &quot; /proc/modules ; then
11536 address=$(echo $address |sed s/0000://)
11537 id=$(lsusb -s $address | tail -n 1 | awk &#39;{print $6}&#39;)
11538 if [ &quot;$id&quot; ] ; then
11539 echo &quot;$id $module&quot;
11540 fi
11541 fi
11542 fi
11543 done
11544 )
11545 echo
11546 fi
11547 &lt;/pre&gt;
11548
11549 &lt;p&gt;This might perhaps be something to include in other tools as
11550 well.&lt;/p&gt;
11551 </description>
11552 </item>
11553
11554 <item>
11555 <title>How to test if a laptop is working with Linux</title>
11556 <link>http://www.hungry.com/~pere/blog/How_to_test_if_a_laptop_is_working_with_Linux.html</link>
11557 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/How_to_test_if_a_laptop_is_working_with_Linux.html</guid>
11558 <pubDate>Wed, 22 Dec 2010 14:55:00 +0100</pubDate>
11559 <description>&lt;p&gt;The last few days I have spent at work here at the &lt;a
11560 href=&quot;http://www.uio.no/&quot;&gt;University of Oslo&lt;/a&gt; testing if the new
11561 batch of computers will work with Linux. Every year for the last few
11562 years the university have organised shared bid of a few thousand
11563 computers, and this year HP won the bid. Two different desktops and
11564 five different laptops are on the list this year. We in the UNIX
11565 group want to know which one of these computers work well with RHEL
11566 and Ubuntu, the two Linux distributions we currently handle at the
11567 university.&lt;/p&gt;
11568
11569 &lt;p&gt;My test method is simple, and I share it here to get feedback and
11570 perhaps inspire others to test hardware as well. To test, I PXE
11571 install the OS version of choice, and log in as my normal user and run
11572 a few applications and plug in selected pieces of hardware. When
11573 something fail, I make a note about this in the test matrix and move
11574 on. If I have some spare time I try to report the bug to the OS
11575 vendor, but as I only have the machines for a short time, I rarely
11576 have the time to do this for all the problems I find.&lt;/p&gt;
11577
11578 &lt;p&gt;Anyway, to get to the point of this post. Here is the simple tests
11579 I perform on a new model.&lt;/p&gt;
11580
11581 &lt;ul&gt;
11582
11583 &lt;li&gt;Is PXE installation working? I&#39;m testing with RHEL6, Ubuntu Lucid
11584 and Ubuntu Maverik at the moment. If I feel like it, I also test with
11585 RHEL5 and Debian Edu/Squeeze.&lt;/li&gt;
11586
11587 &lt;li&gt;Is X.org working? If the graphical login screen show up after
11588 installation, X.org is working.&lt;/li&gt;
11589
11590 &lt;li&gt;Is hardware accelerated OpenGL working? Running glxgears (in
11591 package mesa-utils on Ubuntu) and writing down the frames per second
11592 reported by the program.&lt;/li&gt;
11593
11594 &lt;li&gt;Is sound working? With Gnome and KDE, a sound is played when
11595 logging in, and if I can hear this the test is successful. If there
11596 are several audio exits on the machine, I try them all and check if
11597 the Gnome/KDE audio mixer can control where to send the sound. I
11598 normally test this by playing
11599 &lt;a href=&quot;http://www.nuug.no/aktiviteter/20101012-chef/ &quot;&gt;a HTML5
11600 video&lt;/a&gt; in Firefox/Iceweasel.&lt;/li&gt;
11601
11602 &lt;li&gt;Is the USB subsystem working? I test this by plugging in a USB
11603 memory stick and see if Gnome/KDE notices this.&lt;/li&gt;
11604
11605 &lt;li&gt;Is the CD/DVD player working? I test this by inserting any CD/DVD
11606 I have lying around, and see if Gnome/KDE notices this.&lt;/li&gt;
11607
11608 &lt;li&gt;Is any built in camera working? Test using cheese, and see if a
11609 picture from the v4l device show up.&lt;/li&gt;
11610
11611 &lt;li&gt;Is bluetooth working? Use the Gnome/KDE browsing tool to see if
11612 any bluetooth devices are discovered. In my office, I normally see a
11613 few.&lt;/li&gt;
11614
11615 &lt;li&gt;For laptops, is the SD or Compaq Flash reader working. I have
11616 memory modules lying around, and stick them in and see if Gnome/KDE
11617 notice this.&lt;/li&gt;
11618
11619 &lt;li&gt;For laptops, is suspend/hibernate working? I&#39;m testing if the
11620 special button work, and if the laptop continue to work after
11621 resume.&lt;/li&gt;
11622
11623 &lt;li&gt;For laptops, is the extra buttons working, like audio level,
11624 adjusting background light, switching on/off external video output,
11625 switching on/off wifi, bluetooth, etc? The set of buttons differ from
11626 laptop to laptop, so I just write down which are working and which are
11627 not.&lt;/li&gt;
11628
11629 &lt;li&gt;Some laptops have smart card readers, finger print readers,
11630 acceleration sensors etc. I rarely test these, as I do not know how
11631 to quickly test if they are working or not, so I only document their
11632 existence.&lt;/li&gt;
11633
11634 &lt;/ul&gt;
11635
11636 &lt;p&gt;By now I suspect you are really curious what the test results are
11637 for the HP machines I am testing. I&#39;m not done yet, so I will report
11638 the test results later. For now I can report that HP 8100 Elite work
11639 fine, and hibernation fail with HP EliteBook 8440p on Ubuntu Lucid,
11640 and audio fail on RHEL6. Ubuntu Maverik worked with 8440p. As you
11641 can see, I have most machines left to test. One interesting
11642 observation is that Ubuntu Lucid has almost twice the frame rate than
11643 RHEL6 with glxgears. No idea why.&lt;/p&gt;
11644 </description>
11645 </item>
11646
11647 <item>
11648 <title>Some thoughts on BitCoins</title>
11649 <link>http://www.hungry.com/~pere/blog/Some_thoughts_on_BitCoins.html</link>
11650 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Some_thoughts_on_BitCoins.html</guid>
11651 <pubDate>Sat, 11 Dec 2010 15:10:00 +0100</pubDate>
11652 <description>&lt;p&gt;As I continue to explore
11653 &lt;a href=&quot;http://www.bitcoin.org/&quot;&gt;BitCoin&lt;/a&gt;, I&#39;ve starting to wonder
11654 what properties the system have, and how it will be affected by laws
11655 and regulations here in Norway. Here are some random notes.&lt;/p&gt;
11656
11657 &lt;p&gt;One interesting thing to note is that since the transactions are
11658 verified using a peer to peer network, all details about a transaction
11659 is known to everyone. This means that if a BitCoin address has been
11660 published like I did with mine in my initial post about BitCoin, it is
11661 possible for everyone to see how many BitCoins have been transfered to
11662 that address. There is even a web service to look at the details for
11663 all transactions. There I can see that my address
11664 &lt;a href=&quot;http://blockexplorer.com/address/15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;
11665 have received 16.06 Bitcoin, the
11666 &lt;a href=&quot;http://blockexplorer.com/address/1LfdGnGuWkpSJgbQySxxCWhv8MHqvwst3&quot;&gt;1LfdGnGuWkpSJgbQySxxCWhv8MHqvwst3&lt;/a&gt;
11667 address of Simon Phipps have received 181.97 BitCoin and the address
11668 &lt;a href=&quot;http://blockexplorer.com/address/1MCwBbhNGp5hRm5rC1Aims2YFRe2SXPYKt&quot;&gt;1MCwBbhNGp5hRm5rC1Aims2YFRe2SXPYKt&lt;/A&gt;
11669 of EFF have received 2447.38 BitCoins so far. Thank you to each and
11670 every one of you that donated bitcoins to support my activity. The
11671 fact that anyone can see how much money was transfered to a given
11672 address make it more obvious why the BitCoin community recommend to
11673 generate and hand out a new address for each transaction. I&#39;m told
11674 there is no way to track which addresses belong to a given person or
11675 organisation without the person or organisation revealing it
11676 themselves, as Simon, EFF and I have done.&lt;/p&gt;
11677
11678 &lt;p&gt;In Norway, and in most other countries, there are laws and
11679 regulations limiting how much money one can transfer across the border
11680 without declaring it. There are money laundering, tax and accounting
11681 laws and regulations I would expect to apply to the use of BitCoin.
11682 If the Skolelinux foundation
11683 (&lt;a href=&quot;http://linuxiskolen.no/slxdebianlabs/donations.html&quot;&gt;SLX
11684 Debian Labs&lt;/a&gt;) were to accept donations in BitCoin in addition to
11685 normal bank transfers like EFF is doing, how should this be accounted?
11686 Given that it is impossible to know if money can cross the border or
11687 not, should everything or nothing be declared? What exchange rate
11688 should be used when calculating taxes? Would receivers have to pay
11689 income tax if the foundation were to pay Skolelinux contributors in
11690 BitCoin? I have no idea, but it would be interesting to know.&lt;/p&gt;
11691
11692 &lt;p&gt;For a currency to be useful and successful, it must be trusted and
11693 accepted by a lot of users. It must be possible to get easy access to
11694 the currency (as a wage or using currency exchanges), and it must be
11695 easy to spend it. At the moment BitCoin seem fairly easy to get
11696 access to, but there are very few places to spend it. I am not really
11697 a regular user of any of the vendor types currently accepting BitCoin,
11698 so I wonder when my kind of shop would start accepting BitCoins. I
11699 would like to buy electronics, travels and subway tickets, not herbs
11700 and books. :) The currency is young, and this will improve over time
11701 if it become popular, but I suspect regular banks will start to lobby
11702 to get BitCoin declared illegal if it become popular. I&#39;m sure they
11703 will claim it is helping fund terrorism and money laundering (which
11704 probably would be true, as is any currency in existence), but I
11705 believe the problems should be solved elsewhere and not by blaming
11706 currencies.&lt;/p&gt;
11707
11708 &lt;p&gt;The process of creating new BitCoins is called mining, and it is
11709 CPU intensive process that depend on a bit of luck as well (as one is
11710 competing against all the other miners currently spending CPU cycles
11711 to see which one get the next lump of cash). The &quot;winner&quot; get 50
11712 BitCoin when this happen. Yesterday I came across the obvious way to
11713 join forces to increase ones changes of getting at least some coins,
11714 by coordinating the work on mining BitCoins across several machines
11715 and people, and sharing the result if one is lucky and get the 50
11716 BitCoins. Check out
11717 &lt;a href=&quot;http://www.bluishcoder.co.nz/bitcoin-pool/&quot;&gt;BitCoin Pool&lt;/a&gt;
11718 if this sounds interesting. I have not had time to try to set up a
11719 machine to participate there yet, but have seen that running on ones
11720 own for a few days have not yield any BitCoins througth mining
11721 yet.&lt;/p&gt;
11722
11723 &lt;p&gt;Update 2010-12-15: Found an &lt;a
11724 href=&quot;http://inertia.posterous.com/reply-to-the-underground-economist-why-bitcoi&quot;&gt;interesting
11725 criticism&lt;/a&gt; of bitcoin. Not quite sure how valid it is, but thought
11726 it was interesting to read. The arguments presented seem to be
11727 equally valid for gold, which was used as a currency for many years.&lt;/p&gt;
11728 </description>
11729 </item>
11730
11731 <item>
11732 <title>Now accepting bitcoins - anonymous and distributed p2p crypto-money</title>
11733 <link>http://www.hungry.com/~pere/blog/Now_accepting_bitcoins___anonymous_and_distributed_p2p_crypto_money.html</link>
11734 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Now_accepting_bitcoins___anonymous_and_distributed_p2p_crypto_money.html</guid>
11735 <pubDate>Fri, 10 Dec 2010 08:20:00 +0100</pubDate>
11736 <description>&lt;p&gt;With this weeks lawless
11737 &lt;a href=&quot;http://www.salon.com/news/opinion/glenn_greenwald/2010/12/06/wikileaks/index.html&quot;&gt;governmental
11738 attacks&lt;/a&gt; on Wikileak and
11739 &lt;a href=&quot;http://www.salon.com/technology/dan_gillmor/2010/12/06/war_on_speech&quot;&gt;free
11740 speech&lt;/a&gt;, it has become obvious that PayPal, visa and mastercard can
11741 not be trusted to handle money transactions.
11742 A blog post from
11743 &lt;a href=&quot;http://webmink.com/2010/12/06/now-accepting-bitcoin/&quot;&gt;Simon
11744 Phipps on bitcoin&lt;/a&gt; reminded me about a project that a friend of
11745 mine mentioned earlier. I decided to follow Simon&#39;s example, and get
11746 involved with &lt;a href=&quot;http://www.bitcoin.org/&quot;&gt;BitCoin&lt;/a&gt;. I got
11747 some help from my friend to get it all running, and he even handed me
11748 some bitcoins to get started. I even donated a few bitcoins to Simon
11749 for helping me remember BitCoin.&lt;/p&gt;
11750
11751 &lt;p&gt;So, what is bitcoins, you probably wonder? It is a digital
11752 crypto-currency, decentralised and handled using peer-to-peer
11753 networks. It allows anonymous transactions and prohibits central
11754 control over the transactions, making it impossible for governments
11755 and companies alike to block donations and other transactions. The
11756 source is free software, and while the key dependency wxWidgets 2.9
11757 for the graphical user interface is missing in Debian, the command
11758 line client builds just fine. Hopefully Jonas
11759 &lt;a href=&quot;http://bugs.debian.org/578157&quot;&gt;will get the package into
11760 Debian&lt;/a&gt; soon.&lt;/p&gt;
11761
11762 &lt;p&gt;Bitcoins can be converted to other currencies, like USD and EUR.
11763 There are &lt;a href=&quot;http://www.bitcoin.org/trade&quot;&gt;companies accepting
11764 bitcoins&lt;/a&gt; when selling services and goods, and there are even
11765 currency &quot;stock&quot; markets where the exchange rate is decided. There
11766 are not many users so far, but the concept seems promising. If you
11767 want to get started and lack a friend with any bitcoins to spare,
11768 you can even get
11769 &lt;a href=&quot;https://freebitcoins.appspot.com/&quot;&gt;some for free&lt;/a&gt; (0.05
11770 bitcoin at the time of writing). Use
11771 &lt;a href=&quot;http://www.bitcoinwatch.com/&quot;&gt;BitcoinWatch&lt;/a&gt; to keep an eye
11772 on the current exchange rates.&lt;/p&gt;
11773
11774 &lt;p&gt;As an experiment, I have decided to set up bitcoind on one of my
11775 machines. If you want to support my activity, please send Bitcoin
11776 donations to the address
11777 &lt;b&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/b&gt;. Thank you!&lt;/p&gt;
11778 </description>
11779 </item>
11780
11781 <item>
11782 <title>Why isn&#39;t Debian Edu using VLC?</title>
11783 <link>http://www.hungry.com/~pere/blog/Why_isn_t_Debian_Edu_using_VLC_.html</link>
11784 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Why_isn_t_Debian_Edu_using_VLC_.html</guid>
11785 <pubDate>Sat, 27 Nov 2010 11:30:00 +0100</pubDate>
11786 <description>&lt;p&gt;In the latest issue of Linux Journal, the readers choices were
11787 presented, and the winner among the multimedia player were VLC.
11788 Personally, I like VLC, and it is my player of choice when I first try
11789 to play a video file or stream. Only if VLC fail will I drag out
11790 gmplayer to see if it can do better. The reason is mostly the failure
11791 model and trust. When VLC fail, it normally pop up a error message
11792 reporting the problem. When mplayer fail, it normally segfault or
11793 just hangs. The latter failure mode drain my trust in the program.&lt;p&gt;
11794
11795 &lt;p&gt;But even if VLC is my player of choice, we have choosen to use
11796 mplayer in &lt;a href=&quot;http://www.skolelinux.org/&quot;&gt;Debian
11797 Edu/Skolelinux&lt;/a&gt;. The reason is simple. We need a good browser
11798 plugin to play web videos seamlessly, and the VLC browser plugin is
11799 not very good. For example, it lack in-line control buttons, so there
11800 is no way for the user to pause the video. Also, when I
11801 &lt;a href=&quot;http://wiki.debian.org/DebianEdu/BrowserMultimedia&quot;&gt;last
11802 tested the browser plugins&lt;/a&gt; available in Debian, the VLC plugin
11803 failed on several video pages where mplayer based plugins worked. If
11804 the browser plugin for VLC was as good as the gecko-mediaplayer
11805 package (which uses mplayer), we would switch.&lt;/P&gt;
11806
11807 &lt;p&gt;While VLC is a good player, its user interface is slightly
11808 annoying. The most annoying feature is its inconsistent use of
11809 keyboard shortcuts. When the player is in full screen mode, its
11810 shortcuts are different from when it is playing the video in a window.
11811 For example, space only work as pause when in full screen mode. I
11812 wish it had consisten shortcuts and that space also would work when in
11813 window mode. Another nice shortcut in gmplayer is [enter] to restart
11814 the current video. It is very nice when playing short videos from the
11815 web and want to restart it when new people arrive to have a look at
11816 what is going on.&lt;/p&gt;
11817 </description>
11818 </item>
11819
11820 <item>
11821 <title>Lenny-&gt;Squeeze upgrades of the Gnome and KDE desktop, now with apt-get autoremove</title>
11822 <link>http://www.hungry.com/~pere/blog/Lenny__Squeeze_upgrades_of_the_Gnome_and_KDE_desktop__now_with_apt_get_autoremove.html</link>
11823 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Lenny__Squeeze_upgrades_of_the_Gnome_and_KDE_desktop__now_with_apt_get_autoremove.html</guid>
11824 <pubDate>Mon, 22 Nov 2010 14:15:00 +0100</pubDate>
11825 <description>&lt;p&gt;Michael Biebl suggested to me on IRC, that I changed my automated
11826 upgrade testing of the
11827 &lt;a href=&quot;https://people.skolelinux.org/~pere/debian-upgrade-testing/&quot;&gt;Lenny
11828 Gnome and KDE Desktop&lt;/a&gt; to do &lt;tt&gt;apt-get autoremove&lt;/tt&gt; when using apt-get.
11829 This seem like a very good idea, so I adjusted by test scripts and
11830 can now present the updated result from today:&lt;/p&gt;
11831
11832 &lt;p&gt;This is for Gnome:&lt;/p&gt;
11833
11834 &lt;p&gt;Installed using apt-get, missing with aptitude&lt;/p&gt;
11835
11836 &lt;blockquote&gt;&lt;p&gt;
11837 apache2.2-bin
11838 aptdaemon
11839 baobab
11840 binfmt-support
11841 browser-plugin-gnash
11842 cheese-common
11843 cli-common
11844 cups-pk-helper
11845 dmz-cursor-theme
11846 empathy
11847 empathy-common
11848 freedesktop-sound-theme
11849 freeglut3
11850 gconf-defaults-service
11851 gdm-themes
11852 gedit-plugins
11853 geoclue
11854 geoclue-hostip
11855 geoclue-localnet
11856 geoclue-manual
11857 geoclue-yahoo
11858 gnash
11859 gnash-common
11860 gnome
11861 gnome-backgrounds
11862 gnome-cards-data
11863 gnome-codec-install
11864 gnome-core
11865 gnome-desktop-environment
11866 gnome-disk-utility
11867 gnome-screenshot
11868 gnome-search-tool
11869 gnome-session-canberra
11870 gnome-system-log
11871 gnome-themes-extras
11872 gnome-themes-more
11873 gnome-user-share
11874 gstreamer0.10-fluendo-mp3
11875 gstreamer0.10-tools
11876 gtk2-engines
11877 gtk2-engines-pixbuf
11878 gtk2-engines-smooth
11879 hamster-applet
11880 libapache2-mod-dnssd
11881 libapr1
11882 libaprutil1
11883 libaprutil1-dbd-sqlite3
11884 libaprutil1-ldap
11885 libart2.0-cil
11886 libboost-date-time1.42.0
11887 libboost-python1.42.0
11888 libboost-thread1.42.0
11889 libchamplain-0.4-0
11890 libchamplain-gtk-0.4-0
11891 libcheese-gtk18
11892 libclutter-gtk-0.10-0
11893 libcryptui0
11894 libdiscid0
11895 libelf1
11896 libepc-1.0-2
11897 libepc-common
11898 libepc-ui-1.0-2
11899 libfreerdp-plugins-standard
11900 libfreerdp0
11901 libgconf2.0-cil
11902 libgdata-common
11903 libgdata7
11904 libgdu-gtk0
11905 libgee2
11906 libgeoclue0
11907 libgexiv2-0
11908 libgif4
11909 libglade2.0-cil
11910 libglib2.0-cil
11911 libgmime2.4-cil
11912 libgnome-vfs2.0-cil
11913 libgnome2.24-cil
11914 libgnomepanel2.24-cil
11915 libgpod-common
11916 libgpod4
11917 libgtk2.0-cil
11918 libgtkglext1
11919 libgtksourceview2.0-common
11920 libmono-addins-gui0.2-cil
11921 libmono-addins0.2-cil
11922 libmono-cairo2.0-cil
11923 libmono-corlib2.0-cil
11924 libmono-i18n-west2.0-cil
11925 libmono-posix2.0-cil
11926 libmono-security2.0-cil
11927 libmono-sharpzip2.84-cil
11928 libmono-system2.0-cil
11929 libmtp8
11930 libmusicbrainz3-6
11931 libndesk-dbus-glib1.0-cil
11932 libndesk-dbus1.0-cil
11933 libopal3.6.8
11934 libpolkit-gtk-1-0
11935 libpt2.6.7
11936 libpython2.6
11937 librpm1
11938 librpmio1
11939 libsdl1.2debian
11940 libsrtp0
11941 libssh-4
11942 libtelepathy-farsight0
11943 libtelepathy-glib0
11944 libtidy-0.99-0
11945 media-player-info
11946 mesa-utils
11947 mono-2.0-gac
11948 mono-gac
11949 mono-runtime
11950 nautilus-sendto
11951 nautilus-sendto-empathy
11952 p7zip-full
11953 pkg-config
11954 python-aptdaemon
11955 python-aptdaemon-gtk
11956 python-axiom
11957 python-beautifulsoup
11958 python-bugbuddy
11959 python-clientform
11960 python-coherence
11961 python-configobj
11962 python-crypto
11963 python-cupshelpers
11964 python-elementtree
11965 python-epsilon
11966 python-evolution
11967 python-feedparser
11968 python-gdata
11969 python-gdbm
11970 python-gst0.10
11971 python-gtkglext1
11972 python-gtksourceview2
11973 python-httplib2
11974 python-louie
11975 python-mako
11976 python-markupsafe
11977 python-mechanize
11978 python-nevow
11979 python-notify
11980 python-opengl
11981 python-openssl
11982 python-pam
11983 python-pkg-resources
11984 python-pyasn1
11985 python-pysqlite2
11986 python-rdflib
11987 python-serial
11988 python-tagpy
11989 python-twisted-bin
11990 python-twisted-conch
11991 python-twisted-core
11992 python-twisted-web
11993 python-utidylib
11994 python-webkit
11995 python-xdg
11996 python-zope.interface
11997 remmina
11998 remmina-plugin-data
11999 remmina-plugin-rdp
12000 remmina-plugin-vnc
12001 rhythmbox-plugin-cdrecorder
12002 rhythmbox-plugins
12003 rpm-common
12004 rpm2cpio
12005 seahorse-plugins
12006 shotwell
12007 software-center
12008 system-config-printer-udev
12009 telepathy-gabble
12010 telepathy-mission-control-5
12011 telepathy-salut
12012 tomboy
12013 totem
12014 totem-coherence
12015 totem-mozilla
12016 totem-plugins
12017 transmission-common
12018 xdg-user-dirs
12019 xdg-user-dirs-gtk
12020 xserver-xephyr
12021 &lt;/p&gt;&lt;/blockquote&gt;
12022
12023 &lt;p&gt;Installed using apt-get, removed with aptitude&lt;/p&gt;
12024
12025 &lt;blockquote&gt;&lt;p&gt;
12026 cheese
12027 ekiga
12028 eog
12029 epiphany-extensions
12030 evolution-exchange
12031 fast-user-switch-applet
12032 file-roller
12033 gcalctool
12034 gconf-editor
12035 gdm
12036 gedit
12037 gedit-common
12038 gnome-games
12039 gnome-games-data
12040 gnome-nettool
12041 gnome-system-tools
12042 gnome-themes
12043 gnuchess
12044 gucharmap
12045 guile-1.8-libs
12046 libavahi-ui0
12047 libdmx1
12048 libgalago3
12049 libgtk-vnc-1.0-0
12050 libgtksourceview2.0-0
12051 liblircclient0
12052 libsdl1.2debian-alsa
12053 libspeexdsp1
12054 libsvga1
12055 rhythmbox
12056 seahorse
12057 sound-juicer
12058 system-config-printer
12059 totem-common
12060 transmission-gtk
12061 vinagre
12062 vino
12063 &lt;/p&gt;&lt;/blockquote&gt;
12064
12065 &lt;p&gt;Installed using aptitude, missing with apt-get&lt;/p&gt;
12066
12067 &lt;blockquote&gt;&lt;p&gt;
12068 gstreamer0.10-gnomevfs
12069 &lt;/p&gt;&lt;/blockquote&gt;
12070
12071 &lt;p&gt;Installed using aptitude, removed with apt-get&lt;/p&gt;
12072
12073 &lt;blockquote&gt;&lt;p&gt;
12074 [nothing]
12075 &lt;/p&gt;&lt;/blockquote&gt;
12076
12077 &lt;p&gt;This is for KDE:&lt;/p&gt;
12078
12079 &lt;p&gt;Installed using apt-get, missing with aptitude&lt;/p&gt;
12080
12081 &lt;blockquote&gt;&lt;p&gt;
12082 ksmserver
12083 &lt;/p&gt;&lt;/blockquote&gt;
12084
12085 &lt;p&gt;Installed using apt-get, removed with aptitude&lt;/p&gt;
12086
12087 &lt;blockquote&gt;&lt;p&gt;
12088 kwin
12089 network-manager-kde
12090 &lt;/p&gt;&lt;/blockquote&gt;
12091
12092 &lt;p&gt;Installed using aptitude, missing with apt-get&lt;/p&gt;
12093
12094 &lt;blockquote&gt;&lt;p&gt;
12095 arts
12096 dolphin
12097 freespacenotifier
12098 google-gadgets-gst
12099 google-gadgets-xul
12100 kappfinder
12101 kcalc
12102 kcharselect
12103 kde-core
12104 kde-plasma-desktop
12105 kde-standard
12106 kde-window-manager
12107 kdeartwork
12108 kdeartwork-emoticons
12109 kdeartwork-style
12110 kdeartwork-theme-icon
12111 kdebase
12112 kdebase-apps
12113 kdebase-workspace
12114 kdebase-workspace-bin
12115 kdebase-workspace-data
12116 kdeeject
12117 kdelibs
12118 kdeplasma-addons
12119 kdeutils
12120 kdewallpapers
12121 kdf
12122 kfloppy
12123 kgpg
12124 khelpcenter4
12125 kinfocenter
12126 konq-plugins-l10n
12127 konqueror-nsplugins
12128 kscreensaver
12129 kscreensaver-xsavers
12130 ktimer
12131 kwrite
12132 libgle3
12133 libkde4-ruby1.8
12134 libkonq5
12135 libkonq5-templates
12136 libnetpbm10
12137 libplasma-ruby
12138 libplasma-ruby1.8
12139 libqt4-ruby1.8
12140 marble-data
12141 marble-plugins
12142 netpbm
12143 nuvola-icon-theme
12144 plasma-dataengines-workspace
12145 plasma-desktop
12146 plasma-desktopthemes-artwork
12147 plasma-runners-addons
12148 plasma-scriptengine-googlegadgets
12149 plasma-scriptengine-python
12150 plasma-scriptengine-qedje
12151 plasma-scriptengine-ruby
12152 plasma-scriptengine-webkit
12153 plasma-scriptengines
12154 plasma-wallpapers-addons
12155 plasma-widget-folderview
12156 plasma-widget-networkmanagement
12157 ruby
12158 sweeper
12159 update-notifier-kde
12160 xscreensaver-data-extra
12161 xscreensaver-gl
12162 xscreensaver-gl-extra
12163 xscreensaver-screensaver-bsod
12164 &lt;/p&gt;&lt;/blockquote&gt;
12165
12166 &lt;p&gt;Installed using aptitude, removed with apt-get&lt;/p&gt;
12167
12168 &lt;blockquote&gt;&lt;p&gt;
12169 ark
12170 google-gadgets-common
12171 google-gadgets-qt
12172 htdig
12173 kate
12174 kdebase-bin
12175 kdebase-data
12176 kdepasswd
12177 kfind
12178 klipper
12179 konq-plugins
12180 konqueror
12181 ksysguard
12182 ksysguardd
12183 libarchive1
12184 libcln6
12185 libeet1
12186 libeina-svn-06
12187 libggadget-1.0-0b
12188 libggadget-qt-1.0-0b
12189 libgps19
12190 libkdecorations4
12191 libkephal4
12192 libkonq4
12193 libkonqsidebarplugin4a
12194 libkscreensaver5
12195 libksgrd4
12196 libksignalplotter4
12197 libkunitconversion4
12198 libkwineffects1a
12199 libmarblewidget4
12200 libntrack-qt4-1
12201 libntrack0
12202 libplasma-geolocation-interface4
12203 libplasmaclock4a
12204 libplasmagenericshell4
12205 libprocesscore4a
12206 libprocessui4a
12207 libqalculate5
12208 libqedje0a
12209 libqtruby4shared2
12210 libqzion0a
12211 libruby1.8
12212 libscim8c2a
12213 libsmokekdecore4-3
12214 libsmokekdeui4-3
12215 libsmokekfile3
12216 libsmokekhtml3
12217 libsmokekio3
12218 libsmokeknewstuff2-3
12219 libsmokeknewstuff3-3
12220 libsmokekparts3
12221 libsmokektexteditor3
12222 libsmokekutils3
12223 libsmokenepomuk3
12224 libsmokephonon3
12225 libsmokeplasma3
12226 libsmokeqtcore4-3
12227 libsmokeqtdbus4-3
12228 libsmokeqtgui4-3
12229 libsmokeqtnetwork4-3
12230 libsmokeqtopengl4-3
12231 libsmokeqtscript4-3
12232 libsmokeqtsql4-3
12233 libsmokeqtsvg4-3
12234 libsmokeqttest4-3
12235 libsmokeqtuitools4-3
12236 libsmokeqtwebkit4-3
12237 libsmokeqtxml4-3
12238 libsmokesolid3
12239 libsmokesoprano3
12240 libtaskmanager4a
12241 libtidy-0.99-0
12242 libweather-ion4a
12243 libxklavier16
12244 libxxf86misc1
12245 okteta
12246 oxygencursors
12247 plasma-dataengines-addons
12248 plasma-scriptengine-superkaramba
12249 plasma-widget-lancelot
12250 plasma-widgets-addons
12251 plasma-widgets-workspace
12252 polkit-kde-1
12253 ruby1.8
12254 systemsettings
12255 update-notifier-common
12256 &lt;/p&gt;&lt;/blockquote&gt;
12257
12258 &lt;p&gt;Running apt-get autoremove made the results using apt-get and
12259 aptitude a bit more similar, but there are still quite a lott of
12260 differences. I have no idea what packages should be installed after
12261 the upgrade, but hope those that do can have a look.&lt;/p&gt;
12262 </description>
12263 </item>
12264
12265 <item>
12266 <title>Migrating Xen virtual machines using LVM to KVM using disk images</title>
12267 <link>http://www.hungry.com/~pere/blog/Migrating_Xen_virtual_machines_using_LVM_to_KVM_using_disk_images.html</link>
12268 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Migrating_Xen_virtual_machines_using_LVM_to_KVM_using_disk_images.html</guid>
12269 <pubDate>Mon, 22 Nov 2010 11:20:00 +0100</pubDate>
12270 <description>&lt;p&gt;Most of the computers in use by the
12271 &lt;a href=&quot;http://www.skolelinux.org/&quot;&gt;Debian Edu/Skolelinux project&lt;/a&gt;
12272 are virtual machines. And they have been Xen machines running on a
12273 fairly old IBM eserver xseries 345 machine, and we wanted to migrate
12274 them to KVM on a newer Dell PowerEdge 2950 host machine. This was a
12275 bit harder that it could have been, because we set up the Xen virtual
12276 machines to get the virtual partitions from LVM, which as far as I
12277 know is not supported by KVM. So to migrate, we had to convert
12278 several LVM logical volumes to partitions on a virtual disk file.&lt;/p&gt;
12279
12280 &lt;p&gt;I found
12281 &lt;a href=&quot;http://searchnetworking.techtarget.com.au/articles/35011-Six-steps-for-migrating-Xen-virtual-machines-to-KVM&quot;&gt;a
12282 nice recipe&lt;/a&gt; to do this, and wrote the following script to do the
12283 migration. It uses qemu-img from the qemu package to make the disk
12284 image, parted to partition it, losetup and kpartx to present the disk
12285 image partions as devices, and dd to copy the data. I NFS mounted the
12286 new servers storage area on the old server to do the migration.&lt;/p&gt;
12287
12288 &lt;pre&gt;
12289 #!/bin/sh
12290
12291 # Based on
12292 # http://searchnetworking.techtarget.com.au/articles/35011-Six-steps-for-migrating-Xen-virtual-machines-to-KVM
12293
12294 set -e
12295 set -x
12296
12297 if [ -z &quot;$1&quot; ] ; then
12298 echo &quot;Usage: $0 &amp;lt;hostname&amp;gt;&quot;
12299 exit 1
12300 else
12301 host=&quot;$1&quot;
12302 fi
12303
12304 if [ ! -e /dev/vg_data/$host-disk ] ; then
12305 echo &quot;error: unable to find LVM volume for $host&quot;
12306 exit 1
12307 fi
12308
12309 # Partitions need to be a bit bigger than the LVM LVs. not sure why.
12310 disksize=$( lvs --units m | grep $host-disk | awk &#39;{sum = sum + $4} END { print int(sum * 1.05) }&#39;)
12311 swapsize=$( lvs --units m | grep $host-swap | awk &#39;{sum = sum + $4} END { print int(sum * 1.05) }&#39;)
12312 totalsize=$(( ( $disksize + $swapsize ) ))
12313
12314 img=$host.img
12315 #dd if=/dev/zero of=$img bs=1M count=$(( $disksize + $swapsize ))
12316 qemu-img create $img ${totalsize}MMaking room on the Debian Edu/Sqeeze DVD
12317
12318 parted $img mklabel msdos
12319 parted $img mkpart primary linux-swap 0 $disksize
12320 parted $img mkpart primary ext2 $disksize $totalsize
12321 parted $img set 1 boot on
12322
12323 modprobe dm-mod
12324 losetup /dev/loop0 $img
12325 kpartx -a /dev/loop0
12326
12327 dd if=/dev/vg_data/$host-disk of=/dev/mapper/loop0p1 bs=1M
12328 fsck.ext3 -f /dev/mapper/loop0p1 || true
12329 mkswap /dev/mapper/loop0p2
12330
12331 kpartx -d /dev/loop0
12332 losetup -d /dev/loop0
12333 &lt;/pre&gt;
12334
12335 &lt;p&gt;The script is perhaps so simple that it is not copyrightable, but
12336 if it is, it is licenced using GPL v2 or later at your discretion.&lt;/p&gt;
12337
12338 &lt;p&gt;After doing this, I booted a Debian CD in rescue mode in KVM with
12339 the new disk image attached, installed grub-pc and linux-image-686 and
12340 set up grub to boot from the disk image. After this, the KVM machines
12341 seem to work just fine.&lt;/p&gt;
12342 </description>
12343 </item>
12344
12345 <item>
12346 <title>Lenny-&gt;Squeeze upgrades, apt vs aptitude with the Gnome and KDE desktop</title>
12347 <link>http://www.hungry.com/~pere/blog/Lenny__Squeeze_upgrades__apt_vs_aptitude_with_the_Gnome_and_KDE_desktop.html</link>
12348 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Lenny__Squeeze_upgrades__apt_vs_aptitude_with_the_Gnome_and_KDE_desktop.html</guid>
12349 <pubDate>Sat, 20 Nov 2010 22:50:00 +0100</pubDate>
12350 <description>&lt;p&gt;I&#39;m still running upgrade testing of the
12351 &lt;a href=&quot;https://people.skolelinux.org/~pere/debian-upgrade-testing/&quot;&gt;Lenny
12352 Gnome and KDE Desktop&lt;/a&gt;, but have not had time to spend on reporting the
12353 status. Here is a short update based on a test I ran 20101118.&lt;/p&gt;
12354
12355 &lt;p&gt;I still do not know what a correct migration should look like, so I
12356 report any differences between apt and aptitude and hope someone else
12357 can see if anything should be changed.&lt;/p&gt;
12358
12359 &lt;p&gt;This is for Gnome:&lt;/p&gt;
12360
12361 &lt;p&gt;Installed using apt-get, missing with aptitude&lt;/p&gt;
12362
12363 &lt;blockquote&gt;&lt;p&gt;
12364 apache2.2-bin aptdaemon at-spi baobab binfmt-support
12365 browser-plugin-gnash cheese-common cli-common cpp-4.3 cups-pk-helper
12366 dmz-cursor-theme empathy empathy-common finger
12367 freedesktop-sound-theme freeglut3 gconf-defaults-service gdm-themes
12368 gedit-plugins geoclue geoclue-hostip geoclue-localnet geoclue-manual
12369 geoclue-yahoo gnash gnash-common gnome gnome-backgrounds
12370 gnome-cards-data gnome-codec-install gnome-core
12371 gnome-desktop-environment gnome-disk-utility gnome-screenshot
12372 gnome-search-tool gnome-session-canberra gnome-spell
12373 gnome-system-log gnome-themes-extras gnome-themes-more
12374 gnome-user-share gs-common gstreamer0.10-fluendo-mp3
12375 gstreamer0.10-tools gtk2-engines gtk2-engines-pixbuf
12376 gtk2-engines-smooth hal-info hamster-applet libapache2-mod-dnssd
12377 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap
12378 libart2.0-cil libatspi1.0-0 libboost-date-time1.42.0
12379 libboost-python1.42.0 libboost-thread1.42.0 libchamplain-0.4-0
12380 libchamplain-gtk-0.4-0 libcheese-gtk18 libclutter-gtk-0.10-0
12381 libcryptui0 libcupsys2 libdiscid0 libeel2-data libelf1 libepc-1.0-2
12382 libepc-common libepc-ui-1.0-2 libfreerdp-plugins-standard
12383 libfreerdp0 libgail-common libgconf2.0-cil libgdata-common libgdata7
12384 libgdl-1-common libgdu-gtk0 libgee2 libgeoclue0 libgexiv2-0 libgif4
12385 libglade2.0-cil libglib2.0-cil libgmime2.4-cil libgnome-vfs2.0-cil
12386 libgnome2.24-cil libgnomepanel2.24-cil libgnomeprint2.2-data
12387 libgnomeprintui2.2-common libgnomevfs2-bin libgpod-common libgpod4
12388 libgtk2.0-cil libgtkglext1 libgtksourceview-common
12389 libgtksourceview2.0-common libmono-addins-gui0.2-cil
12390 libmono-addins0.2-cil libmono-cairo2.0-cil libmono-corlib2.0-cil
12391 libmono-i18n-west2.0-cil libmono-posix2.0-cil
12392 libmono-security2.0-cil libmono-sharpzip2.84-cil
12393 libmono-system2.0-cil libmtp8 libmusicbrainz3-6
12394 libndesk-dbus-glib1.0-cil libndesk-dbus1.0-cil libopal3.6.8
12395 libpolkit-gtk-1-0 libpt-1.10.10-plugins-alsa
12396 libpt-1.10.10-plugins-v4l libpt2.6.7 libpython2.6 librpm1 librpmio1
12397 libsdl1.2debian libservlet2.4-java libsrtp0 libssh-4
12398 libtelepathy-farsight0 libtelepathy-glib0 libtidy-0.99-0
12399 libxalan2-java libxerces2-java media-player-info mesa-utils
12400 mono-2.0-gac mono-gac mono-runtime nautilus-sendto
12401 nautilus-sendto-empathy openoffice.org-writer2latex
12402 openssl-blacklist p7zip p7zip-full pkg-config python-4suite-xml
12403 python-aptdaemon python-aptdaemon-gtk python-axiom
12404 python-beautifulsoup python-bugbuddy python-clientform
12405 python-coherence python-configobj python-crypto python-cupshelpers
12406 python-cupsutils python-eggtrayicon python-elementtree
12407 python-epsilon python-evolution python-feedparser python-gdata
12408 python-gdbm python-gst0.10 python-gtkglext1 python-gtkmozembed
12409 python-gtksourceview2 python-httplib2 python-louie python-mako
12410 python-markupsafe python-mechanize python-nevow python-notify
12411 python-opengl python-openssl python-pam python-pkg-resources
12412 python-pyasn1 python-pysqlite2 python-rdflib python-serial
12413 python-tagpy python-twisted-bin python-twisted-conch
12414 python-twisted-core python-twisted-web python-utidylib python-webkit
12415 python-xdg python-zope.interface remmina remmina-plugin-data
12416 remmina-plugin-rdp remmina-plugin-vnc rhythmbox-plugin-cdrecorder
12417 rhythmbox-plugins rpm-common rpm2cpio seahorse-plugins shotwell
12418 software-center svgalibg1 system-config-printer-udev
12419 telepathy-gabble telepathy-mission-control-5 telepathy-salut tomboy
12420 totem totem-coherence totem-mozilla totem-plugins
12421 transmission-common xdg-user-dirs xdg-user-dirs-gtk xserver-xephyr
12422 zip
12423 &lt;/p&gt;&lt;/blockquote&gt;
12424
12425 Installed using apt-get, removed with aptitude
12426
12427 &lt;blockquote&gt;&lt;p&gt;
12428 arj bluez-utils cheese dhcdbd djvulibre-desktop ekiga eog
12429 epiphany-extensions epiphany-gecko evolution-exchange
12430 fast-user-switch-applet file-roller gcalctool gconf-editor gdm gedit
12431 gedit-common gnome-app-install gnome-games gnome-games-data
12432 gnome-nettool gnome-system-tools gnome-themes gnome-utils
12433 gnome-vfs-obexftp gnome-volume-manager gnuchess gucharmap
12434 guile-1.8-libs hal libavahi-compat-libdnssd1 libavahi-core5
12435 libavahi-ui0 libbind9-50 libbluetooth2 libcamel1.2-11 libcdio7
12436 libcucul0 libcurl3 libdirectfb-1.0-0 libdmx1 libdvdread3
12437 libedata-cal1.2-6 libedataserver1.2-9 libeel2-2.20 libepc-1.0-1
12438 libepc-ui-1.0-1 libexchange-storage1.2-3 libfaad0 libgadu3
12439 libgalago3 libgd2-noxpm libgda3-3 libgda3-common libggz2 libggzcore9
12440 libggzmod4 libgksu1.2-0 libgksuui1.0-1 libgmyth0 libgnome-desktop-2
12441 libgnome-pilot2 libgnomecups1.0-1 libgnomeprint2.2-0
12442 libgnomeprintui2.2-0 libgpod3 libgraphviz4 libgtk-vnc-1.0-0
12443 libgtkhtml2-0 libgtksourceview1.0-0 libgtksourceview2.0-0
12444 libgucharmap6 libhesiod0 libicu38 libisccc50 libisccfg50 libiw29
12445 libjaxp1.3-java-gcj libkpathsea4 liblircclient0 libltdl3 liblwres50
12446 libmagick++10 libmagick10 libmalaga7 libmozjs1d libmpfr1ldbl libmtp7
12447 libmysqlclient15off libnautilus-burn4 libneon27 libnm-glib0
12448 libnm-util0 libopal-2.2 libosp5 libparted1.8-10 libpisock9
12449 libpisync1 libpoppler-glib3 libpoppler3 libpt-1.10.10 libraw1394-8
12450 libsdl1.2debian-alsa libsensors3 libsexy2 libsmbios2 libsoup2.2-8
12451 libspeexdsp1 libssh2-1 libsuitesparse-3.1.0 libsvga1
12452 libswfdec-0.6-90 libtalloc1 libtotem-plparser10 libtrackerclient0
12453 libvoikko1 libxalan2-java-gcj libxerces2-java-gcj libxklavier12
12454 libxtrap6 libxxf86misc1 libzephyr3 mysql-common rhythmbox seahorse
12455 sound-juicer swfdec-gnome system-config-printer totem-common
12456 totem-gstreamer transmission-gtk vinagre vino w3c-dtd-xhtml wodim
12457 &lt;/p&gt;&lt;/blockquote&gt;
12458
12459 &lt;p&gt;Installed using aptitude, missing with apt-get&lt;/p&gt;
12460
12461 &lt;blockquote&gt;&lt;p&gt;
12462 gstreamer0.10-gnomevfs
12463 &lt;/p&gt;&lt;/blockquote&gt;
12464
12465 &lt;p&gt;Installed using aptitude, removed with apt-get&lt;/p&gt;
12466
12467 &lt;blockquote&gt;&lt;p&gt;
12468 [nothing]
12469 &lt;/p&gt;&lt;/blockquote&gt;
12470
12471 &lt;p&gt;This is for KDE:&lt;/p&gt;
12472
12473 &lt;p&gt;Installed using apt-get, missing with aptitude&lt;/p&gt;
12474
12475 &lt;blockquote&gt;&lt;p&gt;
12476 autopoint bomber bovo cantor cantor-backend-kalgebra cpp-4.3 dcoprss
12477 edict espeak espeak-data eyesapplet fifteenapplet finger gettext
12478 ghostscript-x git gnome-audio gnugo granatier gs-common
12479 gstreamer0.10-pulseaudio indi kaddressbook-plugins kalgebra
12480 kalzium-data kanjidic kapman kate-plugins kblocks kbreakout kbstate
12481 kde-icons-mono kdeaccessibility kdeaddons-kfile-plugins
12482 kdeadmin-kfile-plugins kdeartwork-misc kdeartwork-theme-window
12483 kdeedu kdeedu-data kdeedu-kvtml-data kdegames kdegames-card-data
12484 kdegames-mahjongg-data kdegraphics-kfile-plugins kdelirc
12485 kdemultimedia-kfile-plugins kdenetwork-kfile-plugins
12486 kdepim-kfile-plugins kdepim-kio-plugins kdessh kdetoys kdewebdev
12487 kdiamond kdnssd kfilereplace kfourinline kgeography-data kigo
12488 killbots kiriki klettres-data kmoon kmrml knewsticker-scripts
12489 kollision kpf krosspython ksirk ksmserver ksquares kstars-data
12490 ksudoku kubrick kweather libasound2-plugins libboost-python1.42.0
12491 libcfitsio3 libconvert-binhex-perl libcrypt-ssleay-perl libdb4.6++
12492 libdjvulibre-text libdotconf1.0 liberror-perl libespeak1
12493 libfinance-quote-perl libgail-common libgsl0ldbl libhtml-parser-perl
12494 libhtml-tableextract-perl libhtml-tagset-perl libhtml-tree-perl
12495 libio-stringy-perl libkdeedu4 libkdegames5 libkiten4 libkpathsea5
12496 libkrossui4 libmailtools-perl libmime-tools-perl
12497 libnews-nntpclient-perl libopenbabel3 libportaudio2 libpulse-browse0
12498 libservlet2.4-java libspeechd2 libtiff-tools libtimedate-perl
12499 libunistring0 liburi-perl libwww-perl libxalan2-java libxerces2-java
12500 lirc luatex marble networkstatus noatun-plugins
12501 openoffice.org-writer2latex palapeli palapeli-data parley
12502 parley-data poster psutils pulseaudio pulseaudio-esound-compat
12503 pulseaudio-module-x11 pulseaudio-utils quanta-data rocs rsync
12504 speech-dispatcher step svgalibg1 texlive-binaries texlive-luatex
12505 ttf-sazanami-gothic
12506 &lt;/p&gt;&lt;/blockquote&gt;
12507
12508 &lt;p&gt;Installed using apt-get, removed with aptitude&lt;/p&gt;
12509
12510 &lt;blockquote&gt;&lt;p&gt;
12511 amor artsbuilder atlantik atlantikdesigner blinken bluez-utils cvs
12512 dhcdbd djvulibre-desktop imlib-base imlib11 kalzium kanagram kandy
12513 kasteroids katomic kbackgammon kbattleship kblackbox kbounce kbruch
12514 kcron kdat kdemultimedia-kappfinder-data kdeprint kdict kdvi kedit
12515 keduca kenolaba kfax kfaxview kfouleggs kgeography kghostview
12516 kgoldrunner khangman khexedit kiconedit kig kimagemapeditor
12517 kitchensync kiten kjumpingcube klatin klettres klickety klines
12518 klinkstatus kmag kmahjongg kmailcvt kmenuedit kmid kmilo kmines
12519 kmousetool kmouth kmplot knetwalk kodo kolf kommander konquest kooka
12520 kpager kpat kpdf kpercentage kpilot kpoker kpovmodeler krec
12521 kregexpeditor kreversi ksame ksayit kshisen ksig ksim ksirc ksirtet
12522 ksmiletris ksnake ksokoban kspaceduel kstars ksvg ksysv kteatime
12523 ktip ktnef ktouch ktron kttsd ktuberling kturtle ktux kuickshow
12524 kverbos kview kviewshell kvoctrain kwifimanager kwin kwin4 kwordquiz
12525 kworldclock kxsldbg libakode2 libarts1-akode libarts1-audiofile
12526 libarts1-mpeglib libarts1-xine libavahi-compat-libdnssd1
12527 libavahi-core5 libavc1394-0 libbind9-50 libbluetooth2
12528 libboost-python1.34.1 libcucul0 libcurl3 libcvsservice0
12529 libdirectfb-1.0-0 libdjvulibre21 libdvdread3 libfaad0 libfreebob0
12530 libgd2-noxpm libgraphviz4 libgsmme1c2a libgtkhtml2-0 libicu38
12531 libiec61883-0 libindex0 libisccc50 libisccfg50 libiw29
12532 libjaxp1.3-java-gcj libk3b3 libkcal2b libkcddb1 libkdeedu3
12533 libkdegames1 libkdepim1a libkgantt0 libkleopatra1 libkmime2
12534 libkpathsea4 libkpimexchange1 libkpimidentities1 libkscan1
12535 libksieve0 libktnef1 liblockdev1 libltdl3 liblwres50 libmagick10
12536 libmimelib1c2a libmodplug0c2 libmozjs1d libmpcdec3 libmpfr1ldbl
12537 libneon27 libnm-util0 libopensync0 libpisock9 libpoppler-glib3
12538 libpoppler-qt2 libpoppler3 libraw1394-8 librss1 libsensors3
12539 libsmbios2 libssh2-1 libsuitesparse-3.1.0 libswfdec-0.6-90
12540 libtalloc1 libxalan2-java-gcj libxerces2-java-gcj libxtrap6 lskat
12541 mpeglib network-manager-kde noatun pmount tex-common texlive-base
12542 texlive-common texlive-doc-base texlive-fonts-recommended tidy
12543 ttf-dustin ttf-kochi-gothic ttf-sjfonts
12544 &lt;/p&gt;&lt;/blockquote&gt;
12545
12546 &lt;p&gt;Installed using aptitude, missing with apt-get&lt;/p&gt;
12547
12548 &lt;blockquote&gt;&lt;p&gt;
12549 dolphin kde-core kde-plasma-desktop kde-standard kde-window-manager
12550 kdeartwork kdebase kdebase-apps kdebase-workspace
12551 kdebase-workspace-bin kdebase-workspace-data kdeutils kscreensaver
12552 kscreensaver-xsavers libgle3 libkonq5 libkonq5-templates libnetpbm10
12553 netpbm plasma-widget-folderview plasma-widget-networkmanagement
12554 xscreensaver-data-extra xscreensaver-gl xscreensaver-gl-extra
12555 xscreensaver-screensaver-bsod
12556 &lt;/p&gt;&lt;/blockquote&gt;
12557
12558 &lt;p&gt;Installed using aptitude, removed with apt-get&lt;/p&gt;
12559
12560 &lt;blockquote&gt;&lt;p&gt;
12561 kdebase-bin konq-plugins konqueror
12562 &lt;/p&gt;&lt;/blockquote&gt;
12563 </description>
12564 </item>
12565
12566 <item>
12567 <title>Gnash buildbot slave and Debian kfreebsd</title>
12568 <link>http://www.hungry.com/~pere/blog/Gnash_buildbot_slave_and_Debian_kfreebsd.html</link>
12569 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Gnash_buildbot_slave_and_Debian_kfreebsd.html</guid>
12570 <pubDate>Sat, 20 Nov 2010 07:20:00 +0100</pubDate>
12571 <description>&lt;p&gt;Answering
12572 &lt;a href=&quot;http://www.listware.net/201011/gnash-dev/67431-gnash-dev-buildbot-looking-for-slaves.html&quot;&gt;the
12573 call from the Gnash project&lt;/a&gt; for
12574 &lt;a href=&quot;http://www.gnashdev.org:8010&quot;&gt;buildbot&lt;/a&gt; slaves to test the
12575 current source, I have set up a virtual KVM machine on the Debian
12576 Edu/Skolelinux virtualization host to test the git source on
12577 Debian/Squeeze. I hope this can help the developers in getting new
12578 releases out more often.&lt;/p&gt;
12579
12580 &lt;p&gt;As the developers want less main-stream build platforms tested to,
12581 I have considered setting up a &lt;a
12582 href=&quot;http://www.debian.org/ports/kfreebsd-gnu/&quot;&gt;Debian/kfreebsd&lt;/a&gt;
12583 machine as well. I have also considered using the kfreebsd
12584 architecture in Debian as a file server in NUUG to get access to the 5
12585 TB zfs volume we currently use to store DV video. Because of this, I
12586 finally got around to do a test installation of Debian/Squeeze with
12587 kfreebsd. Installation went fairly smooth, thought I noticed some
12588 visual glitches in the cdebconf dialogs (black cursor left on the
12589 screen at random locations). Have not gotten very far with the
12590 testing. Noticed cfdisk did not work, but fdisk did so it was not a
12591 fatal problem. Have to spend some more time on it to see if it is
12592 useful as a file server for NUUG. Will try to find time to set up a
12593 gnash buildbot slave on the Debian Edu/Skolelinux this weekend.&lt;/p&gt;
12594 </description>
12595 </item>
12596
12597 <item>
12598 <title>Debian in 3D</title>
12599 <link>http://www.hungry.com/~pere/blog/Debian_in_3D.html</link>
12600 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Debian_in_3D.html</guid>
12601 <pubDate>Tue, 9 Nov 2010 16:10:00 +0100</pubDate>
12602 <description>&lt;p&gt;&lt;img src=&quot;http://thingiverse-production.s3.amazonaws.com/renders/23/e0/c4/f9/2b/debswagtdose_preview_medium.jpg&quot;&gt;&lt;/p&gt;
12603
12604 &lt;p&gt;3D printing is just great. I just came across this Debian logo in
12605 3D linked in from
12606 &lt;a href=&quot;http://blog.thingiverse.com/2010/11/09/participatory-branding/&quot;&gt;the
12607 thingiverse blog&lt;/a&gt;.&lt;/p&gt;
12608 </description>
12609 </item>
12610
12611 <item>
12612 <title>Software updates 2010-10-24</title>
12613 <link>http://www.hungry.com/~pere/blog/Software_updates_2010_10_24.html</link>
12614 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Software_updates_2010_10_24.html</guid>
12615 <pubDate>Sun, 24 Oct 2010 22:45:00 +0200</pubDate>
12616 <description>&lt;p&gt;Some updates.&lt;/p&gt;
12617
12618 &lt;p&gt;My &lt;a href=&quot;http://pledgebank.com/gnash-avm2&quot;&gt;gnash pledge&lt;/a&gt; to
12619 raise money for the project is going well. The lower limit of 10
12620 signers was reached in 24 hours, and so far 13 people have signed it.
12621 More signers and more funding is most welcome, and I am really curious
12622 how far we can get before the time limit of December 24 is reached.
12623 :)&lt;/p&gt;
12624
12625 &lt;p&gt;On the #gnash IRC channel on irc.freenode.net, I was just tipped
12626 about what appear to be a great code coverage tool capable of
12627 generating code coverage stats without any changes to the source code.
12628 It is called
12629 &lt;a href=&quot;http://simonkagstrom.github.com/kcov/index.html&quot;&gt;kcov&lt;/a&gt;,
12630 and can be used using &lt;tt&gt;kcov &amp;lt;directory&amp;gt; &amp;lt;binary&amp;gt;&lt;/tt&gt;.
12631 It is missing in Debian, but the git source built just fine in Squeeze
12632 after I installed libelf-dev, libdwarf-dev, pkg-config and
12633 libglib2.0-dev. Failed to build in Lenny, but suspect that is
12634 solvable. I hope kcov make it into Debian soon.&lt;/p&gt;
12635
12636 &lt;p&gt;Finally found time to wrap up the release notes for &lt;a
12637 href=&quot;http://lists.debian.org/debian-edu-announce/2010/10/msg00002.html&quot;&gt;a
12638 new alpha release of Debian Edu&lt;/a&gt;, and just published the second
12639 alpha test release of the Squeeze based Debian Edu /
12640 &lt;a href=&quot;http://www.skolelinux.org/&quot;&gt;Skolelinux&lt;/a&gt;
12641 release. Give it a try if you need a complete linux solution for your
12642 school, including central infrastructure server, workstations, thin
12643 client servers and diskless workstations. A nice touch added
12644 yesterday is RDP support on the thin client servers, for windows
12645 clients to get a Linux desktop on request.&lt;/p&gt;
12646 </description>
12647 </item>
12648
12649 <item>
12650 <title>Some notes on Flash in Debian and Debian Edu</title>
12651 <link>http://www.hungry.com/~pere/blog/Some_notes_on_Flash_in_Debian_and_Debian_Edu.html</link>
12652 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Some_notes_on_Flash_in_Debian_and_Debian_Edu.html</guid>
12653 <pubDate>Sat, 4 Sep 2010 10:10:00 +0200</pubDate>
12654 <description>&lt;p&gt;In the &lt;a href=&quot;http://popcon.debian.org/unknown/by_vote&quot;&gt;Debian
12655 popularity-contest numbers&lt;/a&gt;, the adobe-flashplugin package the
12656 second most popular used package that is missing in Debian. The sixth
12657 most popular is flashplayer-mozilla. This is a clear indication that
12658 working flash is important for Debian users. Around 10 percent of the
12659 users submitting data to popcon.debian.org have this package
12660 installed.&lt;/p&gt;
12661
12662 &lt;p&gt;In the report written by Lars Risan in August 2008
12663&lt;a href=&quot;http://wiki.skolelinux.no/Dokumentasjon/Rapporter?action=AttachFile&amp;do=view&amp;target=Skolelinux_i_bruk_rapport_1.0.pdf&quot;&gt;Skolelinux
12664 i bruk – Rapport for Hurum kommune, Universitetet i Agder og
12665 stiftelsen SLX Debian Labs&lt;/a&gt;»), one of the most important problems
12666 schools experienced with &lt;a href=&quot;http://www.skolelinux.org/&quot;&gt;Debian
12667 Edu/Skolelinux&lt;/a&gt; was the lack of working Flash. A lot of educational
12668 web sites require Flash to work, and lacking working Flash support in
12669 the web browser and the problems with installing it was perceived as a
12670 good reason to stay with Windows.&lt;/p&gt;
12671
12672 &lt;p&gt;I once saw a funny and sad comment in a web forum, where Linux was
12673 said to be the retarded cousin that did not really understand
12674 everything you told him but could work fairly well. This was a
12675 comment regarding the problems Linux have with proprietary formats and
12676 non-standard web pages, and is sad because it exposes a fairly common
12677 understanding of whose fault it is if web pages that only work in for
12678 example Internet Explorer 6 fail to work on Firefox, and funny because
12679 it explain very well how annoying it is for users when Linux
12680 distributions do not work with the documents they receive or the web
12681 pages they want to visit.&lt;/p&gt;
12682
12683 &lt;p&gt;This is part of the reason why I believe it is important for Debian
12684 and Debian Edu to have a well working Flash implementation in the
12685 distribution, to get at least popular sites as Youtube and Google
12686 Video to working out of the box. For Squeeze, Debian have the chance
12687 to include the latest version of Gnash that will make this happen, as
12688 the new release 0.8.8 was published a few weeks ago and is resting in
12689 unstable. The new version work with more sites that version 0.8.7.
12690 The Gnash maintainers have asked for a freeze exception, but the
12691 release team have not had time to reply to it yet. I hope they agree
12692 with me that Flash is important for the Debian desktop users, and thus
12693 accept the new package into Squeeze.&lt;/p&gt;
12694 </description>
12695 </item>
12696
12697 <item>
12698 <title>Circular package dependencies harms apt recovery</title>
12699 <link>http://www.hungry.com/~pere/blog/Circular_package_dependencies_harms_apt_recovery.html</link>
12700 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Circular_package_dependencies_harms_apt_recovery.html</guid>
12701 <pubDate>Tue, 27 Jul 2010 23:50:00 +0200</pubDate>
12702 <description>&lt;p&gt;I discovered this while doing
12703 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Automatic_upgrade_testing_from_Lenny_to_Squeeze.html&quot;&gt;automated
12704 testing of upgrades from Debian Lenny to Squeeze&lt;/a&gt;. A few packages
12705 in Debian still got circular dependencies, and it is often claimed
12706 that apt and aptitude should be able to handle this just fine, but
12707 some times these dependency loops causes apt to fail.&lt;/p&gt;
12708
12709 &lt;p&gt;An example is from todays
12710 &lt;a href=&quot;https://people.skolelinux.org/~pere/debian-upgrade-testing//test-20100727-lenny-squeeze-kde-aptitude.txt&quot;&gt;upgrade
12711 of KDE using aptitude&lt;/a&gt;. In it, a bug in kdebase-workspace-data
12712 causes perl-modules to fail to upgrade. The cause is simple. If a
12713 package fail to unpack, then only part of packages with the circular
12714 dependency might end up being unpacked when unpacking aborts, and the
12715 ones already unpacked will fail to configure in the recovery phase
12716 because its dependencies are unavailable.&lt;/p&gt;
12717
12718 &lt;p&gt;In this log, the problem manifest itself with this error:&lt;/p&gt;
12719
12720 &lt;blockquote&gt;&lt;pre&gt;
12721 dpkg: dependency problems prevent configuration of perl-modules:
12722 perl-modules depends on perl (&gt;= 5.10.1-1); however:
12723 Version of perl on system is 5.10.0-19lenny2.
12724 dpkg: error processing perl-modules (--configure):
12725 dependency problems - leaving unconfigured
12726 &lt;/pre&gt;&lt;/blockquote&gt;
12727
12728 &lt;p&gt;The perl/perl-modules circular dependency is already
12729 &lt;a href=&quot;http://bugs.debian.org/527917&quot;&gt;reported as a bug&lt;/a&gt;, and will
12730 hopefully be solved as soon as possible, but it is not the only one,
12731 and each one of these loops in the dependency tree can cause similar
12732 failures. Of course, they only occur when there are bugs in other
12733 packages causing the unpacking to fail, but it is rather nasty when
12734 the failure of one package causes the problem to become worse because
12735 of dependency loops.&lt;/p&gt;
12736
12737 &lt;p&gt;Thanks to
12738 &lt;a href=&quot;http://lists.debian.org/debian-devel/2010/06/msg00116.html&quot;&gt;the
12739 tireless effort by Bill Allombert&lt;/a&gt;, the number of circular
12740 dependencies
12741 &lt;a href=&quot;http://debian.semistable.com/debgraph.out.html&quot;&gt;left in Debian
12742 is dropping&lt;/a&gt;, and perhaps it will reach zero one day. :)&lt;/p&gt;
12743
12744 &lt;p&gt;Todays testing also exposed a bug in
12745 &lt;a href=&quot;http://bugs.debian.org/590605&quot;&gt;update-notifier&lt;/a&gt; and
12746 &lt;a href=&quot;http://bugs.debian.org/590604&quot;&gt;different behaviour&lt;/a&gt; between
12747 apt-get and aptitude, the latter possibly caused by some circular
12748 dependency. Reported both to BTS to try to get someone to look at
12749 it.&lt;/p&gt;
12750 </description>
12751 </item>
12752
12753 <item>
12754 <title>What are they searching for - PowerDNS and ISC DHCP in LDAP</title>
12755 <link>http://www.hungry.com/~pere/blog/What_are_they_searching_for___PowerDNS_and_ISC_DHCP_in_LDAP.html</link>
12756 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/What_are_they_searching_for___PowerDNS_and_ISC_DHCP_in_LDAP.html</guid>
12757 <pubDate>Sat, 17 Jul 2010 21:00:00 +0200</pubDate>
12758 <description>&lt;p&gt;This is a
12759 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Time_for_new__LDAP_schemas_replacing_RFC_2307_.html&quot;&gt;followup&lt;/a&gt;
12760 on my
12761 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Idea_for_a_change_to_LDAP_schemas_allowing_DNS_and_DHCP_info_to_be_combined_into_one_object.html&quot;&gt;previous
12762 work&lt;/a&gt; on
12763 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Combining_PowerDNS_and_ISC_DHCP_LDAP_objects.html&quot;&gt;merging
12764 all&lt;/a&gt; the computer related LDAP objects in Debian Edu.&lt;/p&gt;
12765
12766 &lt;p&gt;As a step to try to see if it possible to merge the DNS and DHCP
12767 LDAP objects, I have had a look at how the packages pdns-backend-ldap
12768 and dhcp3-server-ldap in Debian use the LDAP server. The two
12769 implementations are quite different in how they use LDAP.&lt;/p&gt;
12770
12771 To get this information, I started slapd with debugging enabled and
12772 dumped the debug output to a file to get the LDAP searches performed
12773 on a Debian Edu main-server. Here is a summary.
12774
12775 &lt;p&gt;&lt;strong&gt;powerdns&lt;/strong&gt;&lt;/p&gt;
12776
12777 &lt;a href=&quot;http://www.linuxnetworks.de/doc/index.php/PowerDNS_LDAP_Backend&quot;&gt;Clues
12778 on how to&lt;/a&gt; set up PowerDNS to use a LDAP backend is available on
12779 the web.
12780
12781 &lt;p&gt;PowerDNS have two modes of operation using LDAP as its backend.
12782 One &quot;strict&quot; mode where the forward and reverse DNS lookups are done
12783 using the same LDAP objects, and a &quot;tree&quot; mode where the forward and
12784 reverse entries are in two different subtrees in LDAP with a structure
12785 based on the DNS names, as in tjener.intern and
12786 2.2.0.10.in-addr.arpa.&lt;/p&gt;
12787
12788 &lt;p&gt;In tree mode, the server is set up to use a LDAP subtree as its
12789 base, and uses a &quot;base&quot; scoped search for the DNS name by adding
12790 &quot;dc=tjener,dc=intern,&quot; to the base with a filter for
12791 &quot;(associateddomain=tjener.intern)&quot; for the forward entry and
12792 &quot;dc=2,dc=2,dc=0,dc=10,dc=in-addr,dc=arpa,&quot; with a filter for
12793 &quot;(associateddomain=2.2.0.10.in-addr.arpa)&quot; for the reverse entry. For
12794 forward entries, it is looking for attributes named dnsttl, arecord,
12795 nsrecord, cnamerecord, soarecord, ptrrecord, hinforecord, mxrecord,
12796 txtrecord, rprecord, afsdbrecord, keyrecord, aaaarecord, locrecord,
12797 srvrecord, naptrrecord, kxrecord, certrecord, dsrecord, sshfprecord,
12798 ipseckeyrecord, rrsigrecord, nsecrecord, dnskeyrecord, dhcidrecord,
12799 spfrecord and modifytimestamp. For reverse entries it is looking for
12800 the attributes dnsttl, arecord, nsrecord, cnamerecord, soarecord,
12801 ptrrecord, hinforecord, mxrecord, txtrecord, rprecord, aaaarecord,
12802 locrecord, srvrecord, naptrrecord and modifytimestamp. The equivalent
12803 ldapsearch commands could look like this:&lt;/p&gt;
12804
12805 &lt;blockquote&gt;&lt;pre&gt;
12806 ldapsearch -h ldap \
12807 -b dc=tjener,dc=intern,ou=hosts,dc=skole,dc=skolelinux,dc=no \
12808 -s base -x &#39;(associateddomain=tjener.intern)&#39; dNSTTL aRecord nSRecord \
12809 cNAMERecord sOARecord pTRRecord hInfoRecord mXRecord tXTRecord \
12810 rPRecord aFSDBRecord KeyRecord aAAARecord lOCRecord sRVRecord \
12811 nAPTRRecord kXRecord certRecord dSRecord sSHFPRecord iPSecKeyRecord \
12812 rRSIGRecord nSECRecord dNSKeyRecord dHCIDRecord sPFRecord modifyTimestamp
12813
12814 ldapsearch -h ldap \
12815 -b dc=2,dc=2,dc=0,dc=10,dc=in-addr,dc=arpa,ou=hosts,dc=skole,dc=skolelinux,dc=no \
12816 -s base -x &#39;(associateddomain=2.2.0.10.in-addr.arpa)&#39;
12817 dnsttl, arecord, nsrecord, cnamerecord soarecord ptrrecord \
12818 hinforecord mxrecord txtrecord rprecord aaaarecord locrecord \
12819 srvrecord naptrrecord modifytimestamp
12820 &lt;/pre&gt;&lt;/blockquote&gt;
12821
12822 &lt;p&gt;In Debian Edu/Lenny, the PowerDNS tree mode is used with
12823 ou=hosts,dc=skole,dc=skolelinux,dc=no as the base, and these are two
12824 example LDAP objects used there. In addition to these objects, the
12825 parent objects all th way up to ou=hosts,dc=skole,dc=skolelinux,dc=no
12826 also exist.&lt;/p&gt;
12827
12828 &lt;blockquote&gt;&lt;pre&gt;
12829 dn: dc=tjener,dc=intern,ou=hosts,dc=skole,dc=skolelinux,dc=no
12830 objectclass: top
12831 objectclass: dnsdomain
12832 objectclass: domainrelatedobject
12833 dc: tjener
12834 arecord: 10.0.2.2
12835 associateddomain: tjener.intern
12836
12837 dn: dc=2,dc=2,dc=0,dc=10,dc=in-addr,dc=arpa,ou=hosts,dc=skole,dc=skolelinux,dc=no
12838 objectclass: top
12839 objectclass: dnsdomain2
12840 objectclass: domainrelatedobject
12841 dc: 2
12842 ptrrecord: tjener.intern
12843 associateddomain: 2.2.0.10.in-addr.arpa
12844 &lt;/pre&gt;&lt;/blockquote&gt;
12845
12846 &lt;p&gt;In strict mode, the server behaves differently. When looking for
12847 forward DNS entries, it is doing a &quot;subtree&quot; scoped search with the
12848 same base as in the tree mode for a object with filter
12849 &quot;(associateddomain=tjener.intern)&quot; and requests the attributes dnsttl,
12850 arecord, nsrecord, cnamerecord, soarecord, ptrrecord, hinforecord,
12851 mxrecord, txtrecord, rprecord, aaaarecord, locrecord, srvrecord,
12852 naptrrecord and modifytimestamp. For reverse entires it also do a
12853 subtree scoped search but this time the filter is &quot;(arecord=10.0.2.2)&quot;
12854 and the requested attributes are associateddomain, dnsttl and
12855 modifytimestamp. In short, in strict mode the objects with ptrrecord
12856 go away, and the arecord attribute in the forward object is used
12857 instead.&lt;/p&gt;
12858
12859 &lt;p&gt;The forward and reverse searches can be simulated using ldapsearch
12860 like this:&lt;/p&gt;
12861
12862 &lt;blockquote&gt;&lt;pre&gt;
12863 ldapsearch -h ldap -b ou=hosts,dc=skole,dc=skolelinux,dc=no -s sub -x \
12864 &#39;(associateddomain=tjener.intern)&#39; dNSTTL aRecord nSRecord \
12865 cNAMERecord sOARecord pTRRecord hInfoRecord mXRecord tXTRecord \
12866 rPRecord aFSDBRecord KeyRecord aAAARecord lOCRecord sRVRecord \
12867 nAPTRRecord kXRecord certRecord dSRecord sSHFPRecord iPSecKeyRecord \
12868 rRSIGRecord nSECRecord dNSKeyRecord dHCIDRecord sPFRecord modifyTimestamp
12869
12870 ldapsearch -h ldap -b ou=hosts,dc=skole,dc=skolelinux,dc=no -s sub -x \
12871 &#39;(arecord=10.0.2.2)&#39; associateddomain dnsttl modifytimestamp
12872 &lt;/pre&gt;&lt;/blockquote&gt;
12873
12874 &lt;p&gt;In addition to the forward and reverse searches , there is also a
12875 search for SOA records, which behave similar to the forward and
12876 reverse lookups.&lt;/p&gt;
12877
12878 &lt;p&gt;A thing to note with the PowerDNS behaviour is that it do not
12879 specify any objectclass names, and instead look for the attributes it
12880 need to generate a DNS reply. This make it able to work with any
12881 objectclass that provide the needed attributes.&lt;/p&gt;
12882
12883 &lt;p&gt;The attributes are normally provided in the cosine (RFC 1274) and
12884 dnsdomain2 schemas. The latter is used for reverse entries like
12885 ptrrecord and recent DNS additions like aaaarecord and srvrecord.&lt;/p&gt;
12886
12887 &lt;p&gt;In Debian Edu, we have created DNS objects using the object classes
12888 dcobject (for dc), dnsdomain or dnsdomain2 (structural, for the DNS
12889 attributes) and domainrelatedobject (for associatedDomain). The use
12890 of structural object classes make it impossible to combine these
12891 classes with the object classes used by DHCP.&lt;/p&gt;
12892
12893 &lt;p&gt;There are other schemas that could be used too, for example the
12894 dnszone structural object class used by Gosa and bind-sdb for the DNS
12895 attributes combined with the domainrelatedobject object class, but in
12896 this case some unused attributes would have to be included as well
12897 (zonename and relativedomainname).&lt;/p&gt;
12898
12899 &lt;p&gt;My proposal for Debian Edu would be to switch PowerDNS to strict
12900 mode and not use any of the existing objectclasses (dnsdomain,
12901 dnsdomain2 and dnszone) when one want to combine the DNS information
12902 with DHCP information, and instead create a auxiliary object class
12903 defined something like this (using the attributes defined for
12904 dnsdomain and dnsdomain2 or dnszone):&lt;/p&gt;
12905
12906 &lt;blockquote&gt;&lt;pre&gt;
12907 objectclass ( some-oid NAME &#39;dnsDomainAux&#39;
12908 SUP top
12909 AUXILIARY
12910 MAY ( ARecord $ MDRecord $ MXRecord $ NSRecord $ SOARecord $ CNAMERecord $
12911 DNSTTL $ DNSClass $ PTRRecord $ HINFORecord $ MINFORecord $
12912 TXTRecord $ SIGRecord $ KEYRecord $ AAAARecord $ LOCRecord $
12913 NXTRecord $ SRVRecord $ NAPTRRecord $ KXRecord $ CERTRecord $
12914 A6Record $ DNAMERecord
12915 ))
12916 &lt;/pre&gt;&lt;/blockquote&gt;
12917
12918 &lt;p&gt;This will allow any object to become a DNS entry when combined with
12919 the domainrelatedobject object class, and allow any entity to include
12920 all the attributes PowerDNS wants. I&#39;ve sent an email to the PowerDNS
12921 developers asking for their view on this schema and if they are
12922 interested in providing such schema with PowerDNS, and I hope my
12923 message will be accepted into their mailing list soon.&lt;/p&gt;
12924
12925 &lt;p&gt;&lt;strong&gt;ISC dhcp&lt;/strong&gt;&lt;/p&gt;
12926
12927 &lt;p&gt;The DHCP server searches for specific objectclass and requests all
12928 the object attributes, and then uses the attributes it want. This
12929 make it harder to figure out exactly what attributes are used, but
12930 thanks to the working example in Debian Edu I can at least get an idea
12931 what is needed without having to read the source code.&lt;/p&gt;
12932
12933 &lt;p&gt;In the DHCP server configuration, the LDAP base to use and the
12934 search filter to use to locate the correct dhcpServer entity is
12935 stored. These are the relevant entries from
12936 /etc/dhcp3/dhcpd.conf:&lt;/p&gt;
12937
12938 &lt;blockquote&gt;&lt;pre&gt;
12939 ldap-base-dn &quot;dc=skole,dc=skolelinux,dc=no&quot;;
12940 ldap-dhcp-server-cn &quot;dhcp&quot;;
12941 &lt;/pre&gt;&lt;/blockquote&gt;
12942
12943 &lt;p&gt;The DHCP server uses this information to nest all the DHCP
12944 configuration it need. The cn &quot;dhcp&quot; is located using the given LDAP
12945 base and the filter &quot;(&amp;(objectClass=dhcpServer)(cn=dhcp))&quot;. The
12946 search result is this entry:&lt;/p&gt;
12947
12948 &lt;blockquote&gt;&lt;pre&gt;
12949 dn: cn=dhcp,dc=skole,dc=skolelinux,dc=no
12950 cn: dhcp
12951 objectClass: top
12952 objectClass: dhcpServer
12953 dhcpServiceDN: cn=DHCP Config,dc=skole,dc=skolelinux,dc=no
12954 &lt;/pre&gt;&lt;/blockquote&gt;
12955
12956 &lt;p&gt;The content of the dhcpServiceDN attribute is next used to locate the
12957 subtree with DHCP configuration. The DHCP configuration subtree base
12958 is located using a base scope search with base &quot;cn=DHCP
12959 Config,dc=skole,dc=skolelinux,dc=no&quot; and filter
12960 &quot;(&amp;(objectClass=dhcpService)(|(dhcpPrimaryDN=cn=dhcp,dc=skole,dc=skolelinux,dc=no)(dhcpSecondaryDN=cn=dhcp,dc=skole,dc=skolelinux,dc=no)))&quot;.
12961 The search result is this entry:&lt;/p&gt;
12962
12963 &lt;blockquote&gt;&lt;pre&gt;
12964 dn: cn=DHCP Config,dc=skole,dc=skolelinux,dc=no
12965 cn: DHCP Config
12966 objectClass: top
12967 objectClass: dhcpService
12968 objectClass: dhcpOptions
12969 dhcpPrimaryDN: cn=dhcp, dc=skole,dc=skolelinux,dc=no
12970 dhcpStatements: ddns-update-style none
12971 dhcpStatements: authoritative
12972 dhcpOption: smtp-server code 69 = array of ip-address
12973 dhcpOption: www-server code 72 = array of ip-address
12974 dhcpOption: wpad-url code 252 = text
12975 &lt;/pre&gt;&lt;/blockquote&gt;
12976
12977 &lt;p&gt;Next, the entire subtree is processed, one level at the time. When
12978 all the DHCP configuration is loaded, it is ready to receive requests.
12979 The subtree in Debian Edu contain objects with object classes
12980 top/dhcpService/dhcpOptions, top/dhcpSharedNetwork/dhcpOptions,
12981 top/dhcpSubnet, top/dhcpGroup and top/dhcpHost. These provide options
12982 and information about netmasks, dynamic range etc. Leaving out the
12983 details here because it is not relevant for the focus of my
12984 investigation, which is to see if it is possible to merge dns and dhcp
12985 related computer objects.&lt;/p&gt;
12986
12987 &lt;p&gt;When a DHCP request come in, LDAP is searched for the MAC address
12988 of the client (00:00:00:00:00:00 in this example), using a subtree
12989 scoped search with &quot;cn=DHCP Config,dc=skole,dc=skolelinux,dc=no&quot; as
12990 the base and &quot;(&amp;(objectClass=dhcpHost)(dhcpHWAddress=ethernet
12991 00:00:00:00:00:00))&quot; as the filter. This is what a host object look
12992 like:&lt;/p&gt;
12993
12994 &lt;blockquote&gt;&lt;pre&gt;
12995 dn: cn=hostname,cn=group1,cn=THINCLIENTS,cn=DHCP Config,dc=skole,dc=skolelinux,dc=no
12996 cn: hostname
12997 objectClass: top
12998 objectClass: dhcpHost
12999 dhcpHWAddress: ethernet 00:00:00:00:00:00
13000 dhcpStatements: fixed-address hostname
13001 &lt;/pre&gt;&lt;/blockquote&gt;
13002
13003 &lt;p&gt;There is less flexiblity in the way LDAP searches are done here.
13004 The object classes need to have fixed names, and the configuration
13005 need to be stored in a fairly specific LDAP structure. On the
13006 positive side, the invidiual dhcpHost entires can be anywhere without
13007 the DN pointed to by the dhcpServer entries. The latter should make
13008 it possible to group all host entries in a subtree next to the
13009 configuration entries, and this subtree can also be shared with the
13010 DNS server if the schema proposed above is combined with the dhcpHost
13011 structural object class.
13012
13013 &lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;
13014
13015 &lt;p&gt;The PowerDNS implementation seem to be very flexible when it come
13016 to which LDAP schemas to use. While its &quot;tree&quot; mode is rigid when it
13017 come to the the LDAP structure, the &quot;strict&quot; mode is very flexible,
13018 allowing DNS objects to be stored anywhere under the base cn specified
13019 in the configuration.&lt;/p&gt;
13020
13021 &lt;p&gt;The DHCP implementation on the other hand is very inflexible, both
13022 regarding which LDAP schemas to use and which LDAP structure to use.
13023 I guess one could implement ones own schema, as long as the
13024 objectclasses and attributes have the names used, but this do not
13025 really help when the DHCP subtree need to have a fairly fixed
13026 structure.&lt;/p&gt;
13027
13028 &lt;p&gt;Based on the observed behaviour, I suspect a LDAP structure like
13029 this might work for Debian Edu:&lt;/p&gt;
13030
13031 &lt;blockquote&gt;&lt;pre&gt;
13032 ou=services
13033 cn=machine-info (dhcpService) - dhcpServiceDN points here
13034 cn=dhcp (dhcpServer)
13035 cn=dhcp-internal (dhcpSharedNetwork/dhcpOptions)
13036 cn=10.0.2.0 (dhcpSubnet)
13037 cn=group1 (dhcpGroup/dhcpOptions)
13038 cn=dhcp-thinclients (dhcpSharedNetwork/dhcpOptions)
13039 cn=192.168.0.0 (dhcpSubnet)
13040 cn=group1 (dhcpGroup/dhcpOptions)
13041 ou=machines - PowerDNS base points here
13042 cn=hostname (dhcpHost/domainrelatedobject/dnsDomainAux)
13043 &lt;/pre&gt;&lt;/blockquote&gt;
13044
13045 &lt;P&gt;This is not tested yet. If the DHCP server require the dhcpHost
13046 entries to be in the dhcpGroup subtrees, the entries can be stored
13047 there instead of a common machines subtree, and the PowerDNS base
13048 would have to be moved one level up to the machine-info subtree.&lt;/p&gt;
13049
13050 &lt;p&gt;The combined object under the machines subtree would look something
13051 like this:&lt;/p&gt;
13052
13053 &lt;blockquote&gt;&lt;pre&gt;
13054 dn: dc=hostname,ou=machines,cn=machine-info,dc=skole,dc=skolelinux,dc=no
13055 dc: hostname
13056 objectClass: top
13057 objectClass: dhcpHost
13058 objectclass: domainrelatedobject
13059 objectclass: dnsDomainAux
13060 associateddomain: hostname.intern
13061 arecord: 10.11.12.13
13062 dhcpHWAddress: ethernet 00:00:00:00:00:00
13063 dhcpStatements: fixed-address hostname.intern
13064 &lt;/pre&gt;&lt;/blockquote&gt;
13065
13066 &lt;/p&gt;One could even add the LTSP configuration associated with a given
13067 machine, as long as the required attributes are available in a
13068 auxiliary object class.&lt;/p&gt;
13069 </description>
13070 </item>
13071
13072 <item>
13073 <title>Combining PowerDNS and ISC DHCP LDAP objects</title>
13074 <link>http://www.hungry.com/~pere/blog/Combining_PowerDNS_and_ISC_DHCP_LDAP_objects.html</link>
13075 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Combining_PowerDNS_and_ISC_DHCP_LDAP_objects.html</guid>
13076 <pubDate>Wed, 14 Jul 2010 23:45:00 +0200</pubDate>
13077 <description>&lt;p&gt;For a while now, I have wanted to find a way to change the DNS and
13078 DHCP services in Debian Edu to use the same LDAP objects for a given
13079 computer, to avoid the possibility of having a inconsistent state for
13080 a computer in LDAP (as in DHCP but no DNS entry or the other way
13081 around) and make it easier to add computers to LDAP.&lt;/p&gt;
13082
13083 &lt;p&gt;I&#39;ve looked at how powerdns and dhcpd is using LDAP, and using this
13084 information finally found a solution that seem to work.&lt;/p&gt;
13085
13086 &lt;p&gt;The old setup required three LDAP objects for a given computer.
13087 One forward DNS entry, one reverse DNS entry and one DHCP entry. If
13088 we switch powerdns to use its strict LDAP method (ldap-method=strict
13089 in pdns-debian-edu.conf), the forward and reverse DNS entries are
13090 merged into one while making it impossible to transfer the reverse map
13091 to a slave DNS server.&lt;/p&gt;
13092
13093 &lt;p&gt;If we also replace the object class used to get the DNS related
13094 attributes to one allowing these attributes to be combined with the
13095 dhcphost object class, we can merge the DNS and DHCP entries into one.
13096 I&#39;ve written such object class in the dnsdomainaux.schema file (need
13097 proper OIDs, but that is a minor issue), and tested the setup. It
13098 seem to work.&lt;/p&gt;
13099
13100 &lt;p&gt;With this test setup in place, we can get away with one LDAP object
13101 for both DNS and DHCP, and even the LTSP configuration I suggested in
13102 an earlier email. The combined LDAP object will look something like
13103 this:&lt;/p&gt;
13104
13105 &lt;blockquote&gt;&lt;pre&gt;
13106 dn: cn=hostname,cn=group1,cn=THINCLIENTS,cn=DHCP Config,dc=skole,dc=skolelinux,dc=no
13107 cn: hostname
13108 objectClass: dhcphost
13109 objectclass: domainrelatedobject
13110 objectclass: dnsdomainaux
13111 associateddomain: hostname.intern
13112 arecord: 10.11.12.13
13113 dhcphwaddress: ethernet 00:00:00:00:00:00
13114 dhcpstatements: fixed-address hostname
13115 ldapconfigsound: Y
13116 &lt;/pre&gt;&lt;/blockquote&gt;
13117
13118 &lt;p&gt;The DNS server uses the associateddomain and arecord entries, while
13119 the DHCP server uses the dhcphwaddress and dhcpstatements entries
13120 before asking DNS to resolve the fixed-adddress. LTSP will use
13121 dhcphwaddress or associateddomain and the ldapconfig* attributes.&lt;/p&gt;
13122
13123 &lt;p&gt;I am not yet sure if I can get the DHCP server to look for its
13124 dhcphost in a different location, to allow us to put the objects
13125 outside the &quot;DHCP Config&quot; subtree, but hope to figure out a way to do
13126 that. If I can&#39;t figure out a way to do that, we can still get rid of
13127 the hosts subtree and move all its content into the DHCP Config tree
13128 (which probably should be renamed to be more related to the new
13129 content. I suspect cn=dnsdhcp,ou=services or something like that
13130 might be a good place to put it.&lt;/p&gt;
13131
13132 &lt;p&gt;If you want to help out with implementing this for Debian Edu,
13133 please contact us on debian-edu@lists.debian.org.&lt;/p&gt;
13134 </description>
13135 </item>
13136
13137 <item>
13138 <title>Idea for storing LTSP configuration in LDAP</title>
13139 <link>http://www.hungry.com/~pere/blog/Idea_for_storing_LTSP_configuration_in_LDAP.html</link>
13140 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Idea_for_storing_LTSP_configuration_in_LDAP.html</guid>
13141 <pubDate>Sun, 11 Jul 2010 22:00:00 +0200</pubDate>
13142 <description>&lt;p&gt;Vagrant mentioned on IRC today that ltsp_config now support
13143 sourcing files from /usr/share/ltsp/ltsp_config.d/ on the thin
13144 clients, and that this can be used to fetch configuration from LDAP if
13145 Debian Edu choose to store configuration there.&lt;/p&gt;
13146
13147 &lt;p&gt;Armed with this information, I got inspired and wrote a test module
13148 to get configuration from LDAP. The idea is to look up the MAC
13149 address of the client in LDAP, and look for attributes on the form
13150 ltspconfigsetting=value, and use this to export SETTING=value to the
13151 LTSP clients.&lt;/p&gt;
13152
13153 &lt;p&gt;The goal is to be able to store the LTSP configuration attributes
13154 in a &quot;computer&quot; LDAP object used by both DNS and DHCP, and thus
13155 allowing us to store all information about a computer in one place.&lt;/p&gt;
13156
13157 &lt;p&gt;This is a untested draft implementation, and I welcome feedback on
13158 this approach. A real LDAP schema for the ltspClientAux objectclass
13159 need to be written. Comments, suggestions, etc?&lt;/p&gt;
13160
13161 &lt;blockquote&gt;&lt;pre&gt;
13162 # Store in /opt/ltsp/$arch/usr/share/ltsp/ltsp_config.d/ldap-config
13163 #
13164 # Fetch LTSP client settings from LDAP based on MAC address
13165 #
13166 # Uses ethernet address as stored in the dhcpHost objectclass using
13167 # the dhcpHWAddress attribute or ethernet address stored in the
13168 # ieee802Device objectclass with the macAddress attribute.
13169 #
13170 # This module is written to be schema agnostic, and only depend on the
13171 # existence of attribute names.
13172 #
13173 # The LTSP configuration variables are saved directly using a
13174 # ltspConfig prefix and uppercasing the rest of the attribute name.
13175 # To set the SERVER variable, set the ltspConfigServer attribute.
13176 #
13177 # Some LDAP schema should be created with all the relevant
13178 # configuration settings. Something like this should work:
13179 #
13180 # objectclass ( 1.1.2.2 NAME &#39;ltspClientAux&#39;
13181 # SUP top
13182 # AUXILIARY
13183 # MAY ( ltspConfigServer $ ltsConfigSound $ ... )
13184
13185 LDAPSERVER=$(debian-edu-ldapserver)
13186 if [ &quot;$LDAPSERVER&quot; ] ; then
13187 LDAPBASE=$(debian-edu-ldapserver -b)
13188 for MAC in $(LANG=C ifconfig |grep -i hwaddr| awk &#39;{print $5}&#39;|sort -u) ; do
13189 filter=&quot;(|(dhcpHWAddress=ethernet $MAC)(macAddress=$MAC))&quot;
13190 ldapsearch -h &quot;$LDAPSERVER&quot; -b &quot;$LDAPBASE&quot; -v -x &quot;$filter&quot; | \
13191 grep &#39;^ltspConfig&#39; | while read attr value ; do
13192 # Remove prefix and convert to upper case
13193 attr=$(echo $attr | sed &#39;s/^ltspConfig//i&#39; | tr a-z A-Z)
13194 # bass value on to clients
13195 eval &quot;$attr=$value; export $attr&quot;
13196 done
13197 done
13198 fi
13199 &lt;/pre&gt;&lt;/blockquote&gt;
13200
13201 &lt;p&gt;I&#39;m not sure this shell construction will work, because I suspect
13202 the while block might end up in a subshell causing the variables set
13203 there to not show up in ltsp-config, but if that is the case I am sure
13204 the code can be restructured to make sure the variables are passed on.
13205 I expect that can be solved with some testing. :)&lt;/p&gt;
13206
13207 &lt;p&gt;If you want to help out with implementing this for Debian Edu,
13208 please contact us on debian-edu@lists.debian.org.&lt;/p&gt;
13209
13210 &lt;p&gt;Update 2010-07-17: I am aware of another effort to store LTSP
13211 configuration in LDAP that was created around year 2000 by
13212 &lt;a href=&quot;http://www.pcxperience.com/thinclient/documentation/ldap.html&quot;&gt;PC
13213 Xperience, Inc., 2000&lt;/a&gt;. I found its
13214 &lt;a href=&quot;http://people.redhat.com/alikins/ltsp/ldap/&quot;&gt;files&lt;/a&gt; on a
13215 personal home page over at redhat.com.&lt;/p&gt;
13216 </description>
13217 </item>
13218
13219 <item>
13220 <title>jXplorer, a very nice LDAP GUI</title>
13221 <link>http://www.hungry.com/~pere/blog/jXplorer__a_very_nice_LDAP_GUI.html</link>
13222 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/jXplorer__a_very_nice_LDAP_GUI.html</guid>
13223 <pubDate>Fri, 9 Jul 2010 12:55:00 +0200</pubDate>
13224 <description>&lt;p&gt;Since
13225 &lt;a href=&quot;http://www.hungry.com/~pere/blog/LUMA__a_very_nice_LDAP_GUI.html&quot;&gt;my
13226 last post&lt;/a&gt; about available LDAP tools in Debian, I was told about a
13227 LDAP GUI that is even better than luma. The java application
13228 &lt;a href=&quot;http://jxplorer.org/&quot;&gt;jXplorer&lt;/a&gt; is claimed to be capable of
13229 moving LDAP objects and subtrees using drag-and-drop, and can
13230 authenticate using Kerberos. I have only tested the Kerberos
13231 authentication, but do not have a LDAP setup allowing me to rewrite
13232 LDAP with my test user yet. It is
13233 &lt;a href=&quot;http://packages.qa.debian.org/j/jxplorer.html&quot;&gt;available in
13234 Debian&lt;/a&gt; testing and unstable at the moment. The only problem I
13235 have with it is how it handle errors. If something go wrong, its
13236 non-intuitive behaviour require me to go through some query work list
13237 and remove the failing query. Nothing big, but very annoying.&lt;/p&gt;
13238 </description>
13239 </item>
13240
13241 <item>
13242 <title>Lenny-&gt;Squeeze upgrades, apt vs aptitude with the Gnome desktop</title>
13243 <link>http://www.hungry.com/~pere/blog/Lenny__Squeeze_upgrades__apt_vs_aptitude_with_the_Gnome_desktop.html</link>
13244 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Lenny__Squeeze_upgrades__apt_vs_aptitude_with_the_Gnome_desktop.html</guid>
13245 <pubDate>Sat, 3 Jul 2010 23:55:00 +0200</pubDate>
13246 <description>&lt;p&gt;Here is a short update on my &lt;a
13247 href=&quot;https://people.skolelinux.org/~pere/debian-upgrade-testing/&quot;&gt;my
13248 Debian Lenny-&gt;Squeeze upgrade testing&lt;/a&gt;. Here is a summary of the
13249 difference for Gnome when it is upgraded by apt-get and aptitude. I&#39;m
13250 not reporting the status for KDE, because the upgrade crashes when
13251 aptitude try because of missing conflicts
13252 (&lt;a href=&quot;http://bugs.debian.org/584861&quot;&gt;#584861&lt;/a&gt; and
13253 &lt;a href=&quot;http://bugs.debian.org/585716&quot;&gt;#585716&lt;/a&gt;).&lt;/p&gt;
13254
13255 &lt;p&gt;At the end of the upgrade test script, dpkg -l is executed to get a
13256 complete list of the installed packages. Based on this I see these
13257 differences when I did a test run today. As usual, I do not really
13258 know what the correct set of packages would be, but thought it best to
13259 publish the difference.&lt;/p&gt;
13260
13261 &lt;p&gt;Installed using apt-get, missing with aptitude&lt;/p&gt;
13262
13263 &lt;blockquote&gt;&lt;p&gt;
13264 at-spi cpp-4.3 finger gnome-spell gstreamer0.10-gnomevfs
13265 libatspi1.0-0 libcupsys2 libeel2-data libgail-common libgdl-1-common
13266 libgnomeprint2.2-data libgnomeprintui2.2-common libgnomevfs2-bin
13267 libgtksourceview-common libpt-1.10.10-plugins-alsa
13268 libpt-1.10.10-plugins-v4l libservlet2.4-java libxalan2-java
13269 libxerces2-java openoffice.org-writer2latex openssl-blacklist p7zip
13270 python-4suite-xml python-eggtrayicon python-gtkhtml2
13271 python-gtkmozembed svgalibg1 xserver-xephyr zip
13272 &lt;/p&gt;&lt;/blockquote&gt;
13273
13274 &lt;p&gt;Installed using apt-get, removed with aptitude&lt;/p&gt;
13275
13276 &lt;blockquote&gt;&lt;p&gt;
13277 bluez-utils dhcdbd djvulibre-desktop epiphany-gecko
13278 gnome-app-install gnome-mount gnome-vfs-obexftp gnome-volume-manager
13279 libao2 libavahi-compat-libdnssd1 libavahi-core5 libbind9-50
13280 libbluetooth2 libcamel1.2-11 libcdio7 libcucul0 libcurl3
13281 libdirectfb-1.0-0 libdvdread3 libedata-cal1.2-6 libedataserver1.2-9
13282 libeel2-2.20 libepc-1.0-1 libepc-ui-1.0-1 libexchange-storage1.2-3
13283 libfaad0 libgd2-noxpm libgda3-3 libgda3-common libggz2 libggzcore9
13284 libggzmod4 libgksu1.2-0 libgksuui1.0-1 libgmyth0 libgnome-desktop-2
13285 libgnome-pilot2 libgnomecups1.0-1 libgnomeprint2.2-0
13286 libgnomeprintui2.2-0 libgpod3 libgraphviz4 libgtkhtml2-0
13287 libgtksourceview1.0-0 libgucharmap6 libhesiod0 libicu38 libisccc50
13288 libisccfg50 libiw29 libkpathsea4 libltdl3 liblwres50 libmagick++10
13289 libmagick10 libmalaga7 libmtp7 libmysqlclient15off libnautilus-burn4
13290 libneon27 libnm-glib0 libnm-util0 libopal-2.2 libosp5
13291 libparted1.8-10 libpisock9 libpisync1 libpoppler-glib3 libpoppler3
13292 libpt-1.10.10 libraw1394-8 libsensors3 libsmbios2 libsoup2.2-8
13293 libssh2-1 libsuitesparse-3.1.0 libswfdec-0.6-90 libtalloc1
13294 libtotem-plparser10 libtrackerclient0 libvoikko1 libxalan2-java-gcj
13295 libxerces2-java-gcj libxklavier12 libxtrap6 libxxf86misc1 libzephyr3
13296 mysql-common swfdec-gnome totem-gstreamer wodim
13297 &lt;/p&gt;&lt;/blockquote&gt;
13298
13299 &lt;p&gt;Installed using aptitude, missing with apt-get&lt;/p&gt;
13300
13301 &lt;blockquote&gt;&lt;p&gt;
13302 gnome gnome-desktop-environment hamster-applet python-gnomeapplet
13303 python-gnomekeyring python-wnck rhythmbox-plugins xorg
13304 xserver-xorg-input-all xserver-xorg-input-evdev
13305 xserver-xorg-input-kbd xserver-xorg-input-mouse
13306 xserver-xorg-input-synaptics xserver-xorg-video-all
13307 xserver-xorg-video-apm xserver-xorg-video-ark xserver-xorg-video-ati
13308 xserver-xorg-video-chips xserver-xorg-video-cirrus
13309 xserver-xorg-video-dummy xserver-xorg-video-fbdev
13310 xserver-xorg-video-glint xserver-xorg-video-i128
13311 xserver-xorg-video-i740 xserver-xorg-video-mach64
13312 xserver-xorg-video-mga xserver-xorg-video-neomagic
13313 xserver-xorg-video-nouveau xserver-xorg-video-nv
13314 xserver-xorg-video-r128 xserver-xorg-video-radeon
13315 xserver-xorg-video-radeonhd xserver-xorg-video-rendition
13316 xserver-xorg-video-s3 xserver-xorg-video-s3virge
13317 xserver-xorg-video-savage xserver-xorg-video-siliconmotion
13318 xserver-xorg-video-sis xserver-xorg-video-sisusb
13319 xserver-xorg-video-tdfx xserver-xorg-video-tga
13320 xserver-xorg-video-trident xserver-xorg-video-tseng
13321 xserver-xorg-video-vesa xserver-xorg-video-vmware
13322 xserver-xorg-video-voodoo
13323 &lt;/p&gt;&lt;/blockquote&gt;
13324
13325 &lt;p&gt;Installed using aptitude, removed with apt-get&lt;/p&gt;
13326
13327 &lt;blockquote&gt;&lt;p&gt;
13328 deskbar-applet xserver-xorg xserver-xorg-core
13329 xserver-xorg-input-wacom xserver-xorg-video-intel
13330 xserver-xorg-video-openchrome
13331 &lt;/p&gt;&lt;/blockquote&gt;
13332
13333 &lt;p&gt;I was told on IRC that the xorg-xserver package was
13334 &lt;a href=&quot;http://git.debian.org/?p=pkg-xorg/xserver/xorg-server.git;a=commit;h=9c8080d06c457932d3bfec021c69ac000aa60120&quot;&gt;changed
13335 in git&lt;/a&gt; today to try to get apt-get to not remove xorg completely.
13336 No idea when it hits Squeeze, but when it does I hope it will reduce
13337 the difference somewhat.
13338 </description>
13339 </item>
13340
13341 <item>
13342 <title>LUMA, a very nice LDAP GUI</title>
13343 <link>http://www.hungry.com/~pere/blog/LUMA__a_very_nice_LDAP_GUI.html</link>
13344 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/LUMA__a_very_nice_LDAP_GUI.html</guid>
13345 <pubDate>Mon, 28 Jun 2010 00:30:00 +0200</pubDate>
13346 <description>&lt;p&gt;The last few days I have been looking into the status of the LDAP
13347 directory in Debian Edu, and in the process I started to miss a GUI
13348 tool to browse the LDAP tree. The only one I was able to find in
13349 Debian/Squeeze and Lenny is
13350 &lt;a href=&quot;http://luma.sourceforge.net/&quot;&gt;LUMA&lt;/a&gt;, which has proved to
13351 be a great tool to get a overview of the current LDAP directory
13352 populated by default in Skolelinux. Thanks to it, I have been able to
13353 find empty and obsolete subtrees, misplaced objects and duplicate
13354 objects. It will be installed by default in Debian/Squeeze. If you
13355 are working with LDAP, give it a go. :)&lt;/p&gt;
13356
13357 &lt;p&gt;I did notice one problem with it I have not had time to report to
13358 the BTS yet. There is no .desktop file in the package, so the tool do
13359 not show up in the Gnome and KDE menus, but only deep down in in the
13360 Debian submenu in KDE. I hope that can be fixed before Squeeze is
13361 released.&lt;/p&gt;
13362
13363 &lt;p&gt;I have not yet been able to get it to modify the tree yet. I would
13364 like to move objects and remove subtrees directly in the GUI, but have
13365 not found a way to do that with LUMA yet. So in the mean time, I use
13366 &lt;a href=&quot;http://www.lichteblau.com/ldapvi/&quot;&gt;ldapvi&lt;/a&gt; for that.&lt;/p&gt;
13367
13368 &lt;p&gt;If you have tips on other GUI tools for LDAP that might be useful
13369 in Debian Edu, please contact us on debian-edu@lists.debian.org.&lt;/p&gt;
13370
13371 &lt;p&gt;Update 2010-06-29: Ross Reedstrom tipped us about the
13372 &lt;a href=&quot;http://packages.qa.debian.org/g/gq.html&quot;&gt;gq&lt;/a&gt; package as a
13373 useful GUI alternative. It seem like a good tool, but is unmaintained
13374 in Debian and got a RC bug keeping it out of Squeeze. Unless that
13375 changes, it will not be an option for Debian Edu based on Squeeze.&lt;/p&gt;
13376 </description>
13377 </item>
13378
13379 <item>
13380 <title>Idea for a change to LDAP schemas allowing DNS and DHCP info to be combined into one object</title>
13381 <link>http://www.hungry.com/~pere/blog/Idea_for_a_change_to_LDAP_schemas_allowing_DNS_and_DHCP_info_to_be_combined_into_one_object.html</link>
13382 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Idea_for_a_change_to_LDAP_schemas_allowing_DNS_and_DHCP_info_to_be_combined_into_one_object.html</guid>
13383 <pubDate>Thu, 24 Jun 2010 00:35:00 +0200</pubDate>
13384 <description>&lt;p&gt;A while back, I
13385 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Time_for_new__LDAP_schemas_replacing_RFC_2307_.html&quot;&gt;complained
13386 about the fact&lt;/a&gt; that it is not possible with the provided schemas
13387 for storing DNS and DHCP information in LDAP to combine the two sets
13388 of information into one LDAP object representing a computer.&lt;/p&gt;
13389
13390 &lt;p&gt;In the mean time, I discovered that a simple fix would be to make
13391 the dhcpHost object class auxiliary, to allow it to be combined with
13392 the dNSDomain object class, and thus forming one object for one
13393 computer when storing both DHCP and DNS information in LDAP.&lt;/p&gt;
13394
13395 &lt;p&gt;If I understand this correctly, it is not safe to do this change
13396 without also changing the assigned number for the object class, and I
13397 do not know enough about LDAP schema design to do that properly for
13398 Debian Edu.&lt;/p&gt;
13399
13400 &lt;p&gt;Anyway, for future reference, this is how I believe we could change
13401 the
13402 &lt;a href=&quot;http://tools.ietf.org/html/draft-ietf-dhc-ldap-schema-00&quot;&gt;DHCP
13403 schema&lt;/a&gt; to solve at least part of the problem with the LDAP schemas
13404 available today from IETF.&lt;/p&gt;
13405
13406 &lt;pre&gt;
13407 --- dhcp.schema (revision 65192)
13408 +++ dhcp.schema (working copy)
13409 @@ -376,7 +376,7 @@
13410 objectclass ( 2.16.840.1.113719.1.203.6.6
13411 NAME &#39;dhcpHost&#39;
13412 DESC &#39;This represents information about a particular client&#39;
13413 - SUP top
13414 + SUP top AUXILIARY
13415 MUST cn
13416 MAY (dhcpLeaseDN $ dhcpHWAddress $ dhcpOptionsDN $ dhcpStatements $ dhcpComments $ dhcpOption)
13417 X-NDS_CONTAINMENT (&#39;dhcpService&#39; &#39;dhcpSubnet&#39; &#39;dhcpGroup&#39;) )
13418 &lt;/pre&gt;
13419
13420 &lt;p&gt;I very much welcome clues on how to do this properly for Debian
13421 Edu/Squeeze. We provide the DHCP schema in our debian-edu-config
13422 package, and should thus be free to rewrite it as we see fit.&lt;/p&gt;
13423
13424 &lt;p&gt;If you want to help out with implementing this for Debian Edu,
13425 please contact us on debian-edu@lists.debian.org.&lt;/p&gt;
13426 </description>
13427 </item>
13428
13429 <item>
13430 <title>Calling tasksel like the installer, while still getting useful output</title>
13431 <link>http://www.hungry.com/~pere/blog/Calling_tasksel_like_the_installer__while_still_getting_useful_output.html</link>
13432 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Calling_tasksel_like_the_installer__while_still_getting_useful_output.html</guid>
13433 <pubDate>Wed, 16 Jun 2010 14:55:00 +0200</pubDate>
13434 <description>&lt;p&gt;A few times I have had the need to simulate the way tasksel
13435 installs packages during the normal debian-installer run. Until now,
13436 I have ended up letting tasksel do the work, with the annoying problem
13437 of not getting any feedback at all when something fails (like a
13438 conffile question from dpkg or a download that fails), using code like
13439 this:
13440
13441 &lt;blockquote&gt;&lt;pre&gt;
13442 export DEBIAN_FRONTEND=noninteractive
13443 tasksel --new-install
13444 &lt;/pre&gt;&lt;/blockquote&gt;
13445
13446 This would invoke tasksel, let its automatic task selection pick the
13447 tasks to install, and continue to install the requested tasks without
13448 any output what so ever.
13449
13450 Recently I revisited this problem while working on the automatic
13451 package upgrade testing, because tasksel would some times hang without
13452 any useful feedback, and I want to see what is going on when it
13453 happen. Then it occured to me, I can parse the output from tasksel
13454 when asked to run in test mode, and use that aptitude command line
13455 printed by tasksel then to simulate the tasksel run. I ended up using
13456 code like this:
13457
13458 &lt;blockquote&gt;&lt;pre&gt;
13459 export DEBIAN_FRONTEND=noninteractive
13460 cmd=&quot;$(in_target tasksel -t --new-install | sed &#39;s/debconf-apt-progress -- //&#39;)&quot;
13461 $cmd
13462 &lt;/pre&gt;&lt;/blockquote&gt;
13463
13464 &lt;p&gt;The content of $cmd is typically something like &quot;&lt;tt&gt;aptitude -q
13465 --without-recommends -o APT::Install-Recommends=no -y install
13466 ~t^desktop$ ~t^gnome-desktop$ ~t^laptop$ ~pstandard ~prequired
13467 ~pimportant&lt;/tt&gt;&quot;, which will install the gnome desktop task, the
13468 laptop task and all packages with priority standard , required and
13469 important, just like tasksel would have done it during
13470 installation.&lt;/p&gt;
13471
13472 &lt;p&gt;A better approach is probably to extend tasksel to be able to
13473 install packages without using debconf-apt-progress, for use cases
13474 like this.&lt;/p&gt;
13475 </description>
13476 </item>
13477
13478 <item>
13479 <title>Lenny-&gt;Squeeze upgrades, removals by apt and aptitude</title>
13480 <link>http://www.hungry.com/~pere/blog/Lenny__Squeeze_upgrades__removals_by_apt_and_aptitude.html</link>
13481 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Lenny__Squeeze_upgrades__removals_by_apt_and_aptitude.html</guid>
13482 <pubDate>Sun, 13 Jun 2010 09:05:00 +0200</pubDate>
13483 <description>&lt;p&gt;My
13484 &lt;a href=&quot;http://www.hungry.com/~pere/blog/Automatic_upgrade_testing_from_Lenny_to_Squeeze.html&quot;&gt;testing
13485 of Debian upgrades&lt;/a&gt; from Lenny to Squeeze continues, and I&#39;ve
13486 finally made the upgrade logs available from
13487 &lt;a href=&quot;http://www.hungry.com/~pere/debian-upgrade-testing/&quot;&gt;http://www.hungry.com/~pere/debian-upgrade-testing/&lt;/a&gt;.
13488 I am now testing dist-upgrade of Gnome and KDE in a chroot using both
13489 apt and aptitude, and found their differences interesting. This time
13490 I will only focus on their removal plans.&lt;/p&gt;
13491
13492 &lt;p&gt;After installing a Gnome desktop and the laptop task, apt-get wants
13493 to remove 72 packages when dist-upgrading from Lenny to Squeeze. The
13494 surprising part is that it want to remove xorg and all
13495 xserver-xorg-video* drivers. Clearly not a good choice, but I am not
13496 sure why. When asking aptitude to do the same, it want to remove 129
13497 packages, but most of them are library packages I suspect are no
13498 longer needed. Both of them want to remove bluetooth packages, which
13499 I do not know. Perhaps these bluetooth packages are obsolete?&lt;/p&gt;
13500
13501 &lt;p&gt;For KDE, apt-get want to remove 82 packages, among them kdebase
13502 which seem like a bad idea and xorg the same way as with Gnome. Asking
13503 aptitude for the same, it wants to remove 192 packages, none which are
13504 too surprising.&lt;/p&gt;
13505
13506 &lt;p&gt;I guess the removal of xorg during upgrades should be investigated
13507 and avoided, and perhaps others as well. Here are the complete list
13508 of planned removals. The complete logs is available from the URL
13509 above. Note if you want to repeat these tests, that the upgrade test
13510 for kde+apt-get hung in the tasksel setup because of dpkg asking
13511 conffile questions. No idea why. I worked around it by using
13512 &#39;&lt;tt&gt;echo &gt;&gt; /proc/&lt;em&gt;pidofdpkg&lt;/em&gt;/fd/0&lt;/tt&gt;&#39; to tell dpkg to
13513 continue.&lt;/p&gt;
13514
13515 &lt;p&gt;&lt;b&gt;apt-get gnome 72&lt;/b&gt;
13516 &lt;br&gt;bluez-gnome cupsddk-drivers deskbar-applet gnome
13517 gnome-desktop-environment gnome-network-admin gtkhtml3.14
13518 iceweasel-gnome-support libavcodec51 libdatrie0 libgdl-1-0
13519 libgnomekbd2 libgnomekbdui2 libmetacity0 libslab0 libxcb-xlib0
13520 nautilus-cd-burner python-gnome2-desktop python-gnome2-extras
13521 serpentine swfdec-mozilla update-manager xorg xserver-xorg
13522 xserver-xorg-core xserver-xorg-input-all xserver-xorg-input-evdev
13523 xserver-xorg-input-kbd xserver-xorg-input-mouse
13524 xserver-xorg-input-synaptics xserver-xorg-input-wacom
13525 xserver-xorg-video-all xserver-xorg-video-apm xserver-xorg-video-ark
13526 xserver-xorg-video-ati xserver-xorg-video-chips
13527 xserver-xorg-video-cirrus xserver-xorg-video-cyrix
13528 xserver-xorg-video-dummy xserver-xorg-video-fbdev
13529 xserver-xorg-video-glint xserver-xorg-video-i128
13530 xserver-xorg-video-i740 xserver-xorg-video-imstt
13531 xserver-xorg-video-intel xserver-xorg-video-mach64
13532 xserver-xorg-video-mga xserver-xorg-video-neomagic
13533 xserver-xorg-video-nsc xserver-xorg-video-nv
13534 xserver-xorg-video-openchrome xserver-xorg-video-r128
13535 xserver-xorg-video-radeon xserver-xorg-video-radeonhd
13536 xserver-xorg-video-rendition xserver-xorg-video-s3
13537 xserver-xorg-video-s3virge xserver-xorg-video-savage
13538 xserver-xorg-video-siliconmotion xserver-xorg-video-sis
13539 xserver-xorg-video-sisusb xserver-xorg-video-tdfx
13540 xserver-xorg-video-tga xserver-xorg-video-trident
13541 xserver-xorg-video-tseng xserver-xorg-video-v4l
13542 xserver-xorg-video-vesa xserver-xorg-video-vga
13543 xserver-xorg-video-vmware xserver-xorg-video-voodoo xulrunner-1.9
13544 xulrunner-1.9-gnome-support&lt;/p&gt;
13545
13546 &lt;p&gt;&lt;b&gt;aptitude gnome 129&lt;/b&gt;
13547
13548 &lt;br&gt;bluez-gnome bluez-utils cpp-4.3 cupsddk-drivers dhcdbd
13549 djvulibre-desktop finger gnome-app-install gnome-mount
13550 gnome-network-admin gnome-spell gnome-vfs-obexftp
13551 gnome-volume-manager gstreamer0.10-gnomevfs gtkhtml3.14 libao2
13552 libavahi-compat-libdnssd1 libavahi-core5 libavcodec51 libbluetooth2
13553 libcamel1.2-11 libcdio7 libcucul0 libcupsys2 libcurl3 libdatrie0
13554 libdirectfb-1.0-0 libdvdread3 libedataserver1.2-9 libeel2-2.20
13555 libeel2-data libepc-1.0-1 libepc-ui-1.0-1 libfaad0 libgail-common
13556 libgd2-noxpm libgda3-3 libgda3-common libgdl-1-0 libgdl-1-common
13557 libggz2 libggzcore9 libggzmod4 libgksu1.2-0 libgksuui1.0-1 libgmyth0
13558 libgnomecups1.0-1 libgnomekbd2 libgnomekbdui2 libgnomeprint2.2-0
13559 libgnomeprint2.2-data libgnomeprintui2.2-0 libgnomeprintui2.2-common
13560 libgnomevfs2-bin libgpod3 libgraphviz4 libgtkhtml2-0
13561 libgtksourceview-common libgtksourceview1.0-0 libgucharmap6
13562 libhesiod0 libicu38 libiw29 libkpathsea4 libltdl3 libmagick++10
13563 libmagick10 libmalaga7 libmetacity0 libmtp7 libmysqlclient15off
13564 libnautilus-burn4 libneon27 libnm-glib0 libnm-util0 libopal-2.2
13565 libosp5 libparted1.8-10 libpoppler-glib3 libpoppler3 libpt-1.10.10
13566 libpt-1.10.10-plugins-alsa libpt-1.10.10-plugins-v4l libraw1394-8
13567 libsensors3 libslab0 libsmbios2 libsoup2.2-8 libssh2-1
13568 libsuitesparse-3.1.0 libswfdec-0.6-90 libtalloc1 libtotem-plparser10
13569 libtrackerclient0 libxalan2-java libxalan2-java-gcj libxcb-xlib0
13570 libxerces2-java libxerces2-java-gcj libxklavier12 libxtrap6
13571 libxxf86misc1 libzephyr3 mysql-common nautilus-cd-burner
13572 openoffice.org-writer2latex openssl-blacklist p7zip
13573 python-4suite-xml python-eggtrayicon python-gnome2-desktop
13574 python-gnome2-extras python-gtkhtml2 python-gtkmozembed
13575 python-numeric python-sexy serpentine svgalibg1 swfdec-gnome
13576 swfdec-mozilla totem-gstreamer update-manager wodim
13577 xserver-xorg-video-cyrix xserver-xorg-video-imstt
13578 xserver-xorg-video-nsc xserver-xorg-video-v4l xserver-xorg-video-vga
13579 zip&lt;/p&gt;
13580
13581 &lt;p&gt;&lt;b&gt;apt-get kde 82&lt;/b&gt;
13582
13583 &lt;br&gt;cupsddk-drivers karm kaudiocreator kcoloredit kcontrol kde kde-core
13584 kdeaddons kdeartwork kdebase kdebase-bin kdebase-bin-kde3
13585 kdebase-kio-plugins kdesktop kdeutils khelpcenter kicker
13586 kicker-applets knewsticker kolourpaint konq-plugins konqueror korn
13587 kpersonalizer kscreensaver ksplash libavcodec51 libdatrie0 libkiten1
13588 libxcb-xlib0 quanta superkaramba texlive-base-bin xorg xserver-xorg
13589 xserver-xorg-core xserver-xorg-input-all xserver-xorg-input-evdev
13590 xserver-xorg-input-kbd xserver-xorg-input-mouse
13591 xserver-xorg-input-synaptics xserver-xorg-input-wacom
13592 xserver-xorg-video-all xserver-xorg-video-apm xserver-xorg-video-ark
13593 xserver-xorg-video-ati xserver-xorg-video-chips
13594 xserver-xorg-video-cirrus xserver-xorg-video-cyrix
13595 xserver-xorg-video-dummy xserver-xorg-video-fbdev
13596 xserver-xorg-video-glint xserver-xorg-video-i128
13597 xserver-xorg-video-i740 xserver-xorg-video-imstt
13598 xserver-xorg-video-intel xserver-xorg-video-mach64
13599 xserver-xorg-video-mga xserver-xorg-video-neomagic
13600 xserver-xorg-video-nsc xserver-xorg-video-nv
13601 xserver-xorg-video-openchrome xserver-xorg-video-r128
13602 xserver-xorg-video-radeon xserver-xorg-video-radeonhd
13603 xserver-xorg-video-rendition xserver-xorg-video-s3
13604 xserver-xorg-video-s3virge xserver-xorg-video-savage
13605 xserver-xorg-video-siliconmotion xserver-xorg-video-sis
13606 xserver-xorg-video-sisusb xserver-xorg-video-tdfx
13607 xserver-xorg-video-tga xserver-xorg-video-trident
13608 xserver-xorg-video-tseng xserver-xorg-video-v4l
13609 xserver-xorg-video-vesa xserver-xorg-video-vga
13610 xserver-xorg-video-vmware xserver-xorg-video-voodoo xulrunner-1.9&lt;/p&gt;
13611
13612 &lt;p&gt;&lt;b&gt;aptitude kde 192&lt;/b&gt;
13613 &lt;br&gt;bluez-utils cpp-4.3 cupsddk-drivers cvs dcoprss dhcdbd
13614 djvulibre-desktop dosfstools eyesapplet fifteenapplet finger gettext
13615 ghostscript-x imlib-base imlib11 indi kandy karm kasteroids
13616 kaudiocreator kbackgammon kbstate kcoloredit kcontrol kcron kdat
13617 kdeadmin-kfile-plugins kdeartwork-misc kdeartwork-theme-window
13618 kdebase-bin-kde3 kdebase-kio-plugins kdeedu-data
13619 kdegraphics-kfile-plugins kdelirc kdemultimedia-kappfinder-data
13620 kdemultimedia-kfile-plugins kdenetwork-kfile-plugins
13621 kdepim-kfile-plugins kdepim-kio-plugins kdeprint kdesktop kdessh
13622 kdict kdnssd kdvi kedit keduca kenolaba kfax kfaxview kfouleggs
13623 kghostview khelpcenter khexedit kiconedit kitchensync klatin
13624 klickety kmailcvt kmenuedit kmid kmilo kmoon kmrml kodo kolourpaint
13625 kooka korn kpager kpdf kpercentage kpf kpilot kpoker kpovmodeler
13626 krec kregexpeditor ksayit ksim ksirc ksirtet ksmiletris ksmserver
13627 ksnake ksokoban ksplash ksvg ksysv ktip ktnef kuickshow kverbos
13628 kview kviewshell kvoctrain kwifimanager kwin kwin4 kworldclock
13629 kxsldbg libakode2 libao2 libarts1-akode libarts1-audiofile
13630 libarts1-mpeglib libarts1-xine libavahi-compat-libdnssd1
13631 libavahi-core5 libavc1394-0 libavcodec51 libbluetooth2
13632 libboost-python1.34.1 libcucul0 libcurl3 libcvsservice0 libdatrie0
13633 libdirectfb-1.0-0 libdjvulibre21 libdvdread3 libfaad0 libfreebob0
13634 libgail-common libgd2-noxpm libgraphviz4 libgsmme1c2a libgtkhtml2-0
13635 libicu38 libiec61883-0 libindex0 libiw29 libk3b3 libkcal2b libkcddb1
13636 libkdeedu3 libkdepim1a libkgantt0 libkiten1 libkleopatra1 libkmime2
13637 libkpathsea4 libkpimexchange1 libkpimidentities1 libkscan1
13638 libksieve0 libktnef1 liblockdev1 libltdl3 libmagick10 libmimelib1c2a
13639 libmozjs1d libmpcdec3 libneon27 libnm-util0 libopensync0 libpisock9
13640 libpoppler-glib3 libpoppler-qt2 libpoppler3 libraw1394-8 libsmbios2
13641 libssh2-1 libsuitesparse-3.1.0 libtalloc1 libtiff-tools
13642 libxalan2-java libxalan2-java-gcj libxcb-xlib0 libxerces2-java
13643 libxerces2-java-gcj libxtrap6 mpeglib networkstatus
13644 openoffice.org-writer2latex pmount poster psutils quanta quanta-data
13645 superkaramba svgalibg1 tex-common texlive-base texlive-base-bin
13646 texlive-common texlive-doc-base texlive-fonts-recommended
13647 xserver-xorg-video-cyrix xserver-xorg-video-imstt
13648 xserver-xorg-video-nsc xserver-xorg-video-v4l xserver-xorg-video-vga
13649 xulrunner-1.9&lt;/p&gt;
13650
13651 </description>
13652 </item>
13653
13654 <item>
13655 <title>Automatic upgrade testing from Lenny to Squeeze</title>
13656 <link>http://www.hungry.com/~pere/blog/Automatic_upgrade_testing_from_Lenny_to_Squeeze.html</link>
13657 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Automatic_upgrade_testing_from_Lenny_to_Squeeze.html</guid>
13658 <pubDate>Fri, 11 Jun 2010 22:50:00 +0200</pubDate>
13659 <description>&lt;p&gt;The last few days I have done some upgrade testing in Debian, to
13660 see if the upgrade from Lenny to Squeeze will go smoothly. A few bugs
13661 have been discovered and reported in the process
13662 (&lt;a href=&quot;http://bugs.debian.org/585410&quot;&gt;#585410&lt;/a&gt; in nagios3-cgi,
13663 &lt;a href=&quot;http://bugs.debian.org/584879&quot;&gt;#584879&lt;/a&gt; already fixed in
13664 enscript and &lt;a href=&quot;http://bugs.debian.org/584861&quot;&gt;#584861&lt;/a&gt; in
13665 kdebase-workspace-data), and to get a more regular testing going on, I
13666 am working on a script to automate the test.&lt;/p&gt;
13667
13668 &lt;p&gt;The idea is to create a Lenny chroot and use tasksel to install a
13669 Gnome or KDE desktop installation inside the chroot before upgrading
13670 it. To ensure no services are started in the chroot, a policy-rc.d
13671 script is inserted. To make sure tasksel believe it is to install a
13672 desktop on a laptop, the tasksel tests are replaced in the chroot
13673 (only acceptable because this is a throw-away chroot).&lt;/p&gt;
13674
13675 &lt;p&gt;A naive upgrade from Lenny to Squeeze using aptitude dist-upgrade
13676 currently always fail because udev refuses to upgrade with the kernel
13677 in Lenny, so to avoid that problem the file /etc/udev/kernel-upgrade
13678 is created. The bug report
13679 &lt;a href=&quot;http://bugs.debian.org/566000&quot;&gt;#566000&lt;/a&gt; make me suspect
13680 this problem do not trigger in a chroot, but I touch the file anyway
13681 to make sure the upgrade go well. Testing on virtual and real
13682 hardware have failed me because of udev so far, and creating this file
13683 do the trick in such settings anyway. This is a
13684 &lt;a href=&quot;http://www.linuxquestions.org/questions/debian-26/failed-dist-upgrade-due-to-udev-config_sysfs_deprecated-nonsense-804130/&quot;&gt;known
13685 issue&lt;/a&gt; and the current udev behaviour is intended by the udev
13686 maintainer because he lack the resources to rewrite udev to keep
13687 working with old kernels or something like that. I really wish the
13688 udev upstream would keep udev backwards compatible, to avoid such
13689 upgrade problem, but given that they fail to do so, I guess
13690 documenting the way out of this mess is the best option we got for
13691 Debian Squeeze.&lt;/p&gt;
13692
13693 &lt;p&gt;Anyway, back to the task at hand, testing upgrades. This test
13694 script, which I call &lt;tt&gt;upgrade-test&lt;/tt&gt; for now, is doing the
13695 trick:&lt;/p&gt;
13696
13697 &lt;blockquote&gt;&lt;pre&gt;
13698 #!/bin/sh
13699 set -ex
13700
13701 if [ &quot;$1&quot; ] ; then
13702 desktop=$1
13703 else
13704 desktop=gnome
13705 fi
13706
13707 from=lenny
13708 to=squeeze
13709
13710 exec &amp;lt; /dev/null
13711 unset LANG
13712 mirror=http://ftp.skolelinux.org/debian
13713 tmpdir=chroot-$from-upgrade-$to-$desktop
13714 fuser -mv .
13715 debootstrap $from $tmpdir $mirror
13716 chroot $tmpdir aptitude update
13717 cat &gt; $tmpdir/usr/sbin/policy-rc.d &amp;lt;&amp;lt;EOF
13718 #!/bin/sh
13719 exit 101
13720 EOF
13721 chmod a+rx $tmpdir/usr/sbin/policy-rc.d
13722 exit_cleanup() {
13723 umount $tmpdir/proc
13724 }
13725 mount -t proc proc $tmpdir/proc
13726 # Make sure proc is unmounted also on failure
13727 trap exit_cleanup EXIT INT
13728
13729 chroot $tmpdir aptitude -y install debconf-utils
13730
13731 # Make sure tasksel autoselection trigger. It need the test scripts
13732 # to return the correct answers.
13733 echo tasksel tasksel/desktop multiselect $desktop | \
13734 chroot $tmpdir debconf-set-selections
13735
13736 # Include the desktop and laptop task
13737 for test in desktop laptop ; do
13738 echo &gt; $tmpdir/usr/lib/tasksel/tests/$test &amp;lt;&amp;lt;EOF
13739 #!/bin/sh
13740 exit 2
13741 EOF
13742 chmod a+rx $tmpdir/usr/lib/tasksel/tests/$test
13743 done
13744
13745 DEBIAN_FRONTEND=noninteractive
13746 DEBIAN_PRIORITY=critical
13747 export DEBIAN_FRONTEND DEBIAN_PRIORITY
13748 chroot $tmpdir tasksel --new-install
13749
13750 echo deb $mirror $to main &gt; $tmpdir/etc/apt/sources.list
13751 chroot $tmpdir aptitude update
13752 touch $tmpdir/etc/udev/kernel-upgrade
13753 chroot $tmpdir aptitude -y dist-upgrade
13754 fuser -mv
13755 &lt;/pre&gt;&lt;/blockquote&gt;
13756
13757 &lt;p&gt;I suspect it would be useful to test upgrades with both apt-get and
13758 with aptitude, but I have not had time to look at how they behave
13759 differently so far. I hope to get a cron job running to do the test
13760 regularly and post the result on the web. The Gnome upgrade currently
13761 work, while the KDE upgrade fail because of the bug in
13762 kdebase-workspace-data&lt;/p&gt;
13763
13764 &lt;p&gt;I am not quite sure what kind of extract from the huge upgrade logs
13765 (KDE 167 KiB, Gnome 516 KiB) it make sense to include in this blog
13766 post, so I will refrain from trying. I can report that for Gnome,
13767 aptitude report 760 packages upgraded, 448 newly installed, 129 to
13768 remove and 1 not upgraded and 1024MB need to be downloaded while for
13769 KDE the same numbers are 702 packages upgraded, 507 newly installed,
13770 193 to remove and 0 not upgraded and 1117MB need to be downloaded&lt;/p&gt;
13771
13772 &lt;p&gt;I am very happy to notice that the Gnome desktop + laptop upgrade
13773 is able to migrate to dependency based boot sequencing and parallel
13774 booting without a hitch. Was unsure if there were still bugs with
13775 packages failing to clean up their obsolete init.d script during
13776 upgrades, and no such problem seem to affect the Gnome desktop+laptop
13777 packages.&lt;/p&gt;
13778 </description>
13779 </item>
13780
13781 <item>
13782 <title>Upstart or sysvinit - as init.d scripts see it</title>
13783 <link>http://www.hungry.com/~pere/blog/Upstart_or_sysvinit___as_init_d_scripts_see_it.html</link>
13784 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Upstart_or_sysvinit___as_init_d_scripts_see_it.html</guid>
13785 <pubDate>Sun, 6 Jun 2010 23:55:00 +0200</pubDate>
13786 <description>&lt;p&gt;If Debian is to migrate to upstart on Linux, I expect some init.d
13787 scripts to migrate (some of) their operations to upstart job while
13788 keeping the init.d for hurd and kfreebsd. The packages with such
13789 needs will need a way to get their init.d scripts to behave
13790 differently when used with sysvinit and with upstart. Because of
13791 this, I had a look at the environment variables set when a init.d
13792 script is running under upstart, and when it is not.&lt;/p&gt;
13793
13794 &lt;p&gt;With upstart, I notice these environment variables are set when a
13795 script is started from rcS.d/ (ignoring some irrelevant ones like
13796 COLUMNS):&lt;/p&gt;
13797
13798 &lt;blockquote&gt;&lt;pre&gt;
13799 DEFAULT_RUNLEVEL=2
13800 previous=N
13801 PREVLEVEL=
13802 RUNLEVEL=
13803 runlevel=S
13804 UPSTART_EVENTS=startup
13805 UPSTART_INSTANCE=
13806 UPSTART_JOB=rc-sysinit
13807 &lt;/pre&gt;&lt;/blockquote&gt;
13808
13809 &lt;p&gt;With sysvinit, these environment variables are set for the same
13810 script.&lt;/p&gt;
13811
13812 &lt;blockquote&gt;&lt;pre&gt;
13813 INIT_VERSION=sysvinit-2.88
13814 previous=N
13815 PREVLEVEL=N
13816 RUNLEVEL=S
13817 runlevel=S
13818 &lt;/pre&gt;&lt;/blockquote&gt;
13819
13820 &lt;p&gt;The RUNLEVEL and PREVLEVEL environment variables passed on from
13821 sysvinit are not set by upstart. Not sure if it is intentional or not
13822 to not be compatible with sysvinit in this regard.&lt;/p&gt;
13823
13824 &lt;p&gt;For scripts needing to behave differently when upstart is used,
13825 looking for the UPSTART_JOB environment variable seem to be a good
13826 choice.&lt;/p&gt;
13827 </description>
13828 </item>
13829
13830 <item>
13831 <title>A manual for standards wars...</title>
13832 <link>http://www.hungry.com/~pere/blog/A_manual_for_standards_wars___.html</link>
13833 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/A_manual_for_standards_wars___.html</guid>
13834 <pubDate>Sun, 6 Jun 2010 14:15:00 +0200</pubDate>
13835 <description>&lt;p&gt;Via the
13836 &lt;a href=&quot;http://feedproxy.google.com/~r/robweir/antic-atom/~3/QzU4RgoAGMg/weekly-links-10.html&quot;&gt;blog
13837 of Rob Weir&lt;/a&gt; I came across the very interesting essay named
13838 &lt;a href=&quot;http://faculty.haas.berkeley.edu/shapiro/wars.pdf&quot;&gt;The Art of
13839 Standards Wars&lt;/a&gt; (PDF 25 pages). I recommend it for everyone
13840 following the standards wars of today.&lt;/p&gt;
13841 </description>
13842 </item>
13843
13844 <item>
13845 <title>Sitesummary tip: Listing computer hardware models used at site</title>
13846 <link>http://www.hungry.com/~pere/blog/Sitesummary_tip__Listing_computer_hardware_models_used_at_site.html</link>
13847 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Sitesummary_tip__Listing_computer_hardware_models_used_at_site.html</guid>
13848 <pubDate>Thu, 3 Jun 2010 12:05:00 +0200</pubDate>
13849 <description>&lt;p&gt;When using sitesummary at a site to track machines, it is possible
13850 to get a list of the machine types in use thanks to the DMI
13851 information extracted from each machine. The script to do so is
13852 included in the sitesummary package, and here is example output from
13853 the Skolelinux build servers:&lt;/p&gt;
13854
13855 &lt;blockquote&gt;&lt;pre&gt;
13856 maintainer:~# /usr/lib/sitesummary/hardware-model-summary
13857 vendor count
13858 Dell Computer Corporation 1
13859 PowerEdge 1750 1
13860 IBM 1
13861 eserver xSeries 345 -[8670M1X]- 1
13862 Intel 2
13863 [no-dmi-info] 3
13864 maintainer:~#
13865 &lt;/pre&gt;&lt;/blockquote&gt;
13866
13867 &lt;p&gt;The quality of the report depend on the quality of the DMI tables
13868 provided in each machine. Here there are Intel machines without model
13869 information listed with Intel as vendor and no model, and virtual Xen
13870 machines listed as [no-dmi-info]. One can add -l as a command line
13871 option to list the individual machines.&lt;/p&gt;
13872
13873 &lt;p&gt;A larger list is
13874 &lt;a href=&quot;http://narvikskolen.no/sitesummary/&quot;&gt;available from the the
13875 city of Narvik&lt;/a&gt;, which uses Skolelinux on all their shools and also
13876 provide the basic sitesummary report publicly. In their report there
13877 are ~1400 machines. I know they use both Ubuntu and Skolelinux on
13878 their machines, and as sitesummary is available in both distributions,
13879 it is trivial to get all of them to report to the same central
13880 collector.&lt;/p&gt;
13881 </description>
13882 </item>
13883
13884 <item>
13885 <title>KDM fail at boot with NVidia cards - and no one try to fix it?</title>
13886 <link>http://www.hungry.com/~pere/blog/KDM_fail_at_boot_with_NVidia_cards___and_no_one_try_to_fix_it_.html</link>
13887 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/KDM_fail_at_boot_with_NVidia_cards___and_no_one_try_to_fix_it_.html</guid>
13888 <pubDate>Tue, 1 Jun 2010 17:05:00 +0200</pubDate>
13889 <description>&lt;p&gt;It is strange to watch how a bug in Debian causing KDM to fail to
13890 start at boot when an NVidia video card is used is handled. The
13891 problem seem to be that the nvidia X.org driver uses a long time to
13892 initialize, and this duration is longer than kdm is configured to
13893 wait.&lt;/p&gt;
13894
13895 &lt;p&gt;I came across two bugs related to this issue,
13896 &lt;a href=&quot;http://bugs.debian.org/583312&quot;&gt;#583312&lt;/a&gt; initially filed
13897 against initscripts and passed on to nvidia-glx when it became obvious
13898 that the nvidia drivers were involved, and
13899 &lt;a href=&quot;http://bugs.debian.org/524751&quot;&gt;#524751&lt;/a&gt; initially filed against
13900 kdm and passed on to src:nvidia-graphics-drivers for unknown reasons.&lt;/p&gt;
13901
13902 &lt;p&gt;To me, it seem that no-one is interested in actually solving the
13903 problem nvidia video card owners experience and make sure the Debian
13904 distribution work out of the box for these users. The nvidia driver
13905 maintainers expect kdm to be set up to wait longer, while kdm expect
13906 the nvidia driver maintainers to fix the driver to start faster, and
13907 while they wait for each other I guess the users end up switching to a
13908 distribution that work for them. I have no idea what the solution is,
13909 but I am pretty sure that waiting for each other is not it.&lt;/p&gt;
13910
13911 &lt;p&gt;I wonder why we end up handling bugs this way.&lt;/p&gt;
13912 </description>
13913 </item>
13914
13915 <item>
13916 <title>Parallellized boot seem to hold up well in Debian/testing</title>
13917 <link>http://www.hungry.com/~pere/blog/Parallellized_boot_seem_to_hold_up_well_in_Debian_testing.html</link>
13918 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Parallellized_boot_seem_to_hold_up_well_in_Debian_testing.html</guid>
13919 <pubDate>Thu, 27 May 2010 23:55:00 +0200</pubDate>
13920 <description>&lt;p&gt;A few days ago, parallel booting was enabled in Debian/testing.
13921 The feature seem to hold up pretty well, but three fairly serious
13922 issues are known and should be solved:
13923
13924 &lt;p&gt;&lt;ul&gt;
13925
13926 &lt;li&gt;The wicd package seen to
13927 &lt;a href=&quot;http://bugs.debian.org/508289&quot;&gt;break NFS mounting&lt;/a&gt; and
13928 &lt;a href=&quot;http://bugs.debian.org/581586&quot;&gt;network setup&lt;/a&gt; when
13929 parallel booting is enabled. No idea why, but the wicd maintainer
13930 seem to be on the case.&lt;/li&gt;
13931
13932 &lt;li&gt;The nvidia X driver seem to
13933 &lt;a href=&quot;http://bugs.debian.org/583312&quot;&gt;have a race condition&lt;/a&gt;
13934 triggered more easily when parallel booting is in effect. The
13935 maintainer is on the case.&lt;/li&gt;
13936
13937 &lt;li&gt;The sysv-rc package fail to properly enable dependency based boot
13938 sequencing (the shutdown is broken) when old file-rc users
13939 &lt;a href=&quot;http://bugs.debian.org/575080&quot;&gt;try to switch back&lt;/a&gt; to
13940 sysv-rc. One way to solve it would be for file-rc to create
13941 /etc/init.d/.legacy-bootordering, and another is to try to make
13942 sysv-rc more robust. Will investigate some more and probably upload a
13943 workaround in sysv-rc to help those trying to move from file-rc to
13944 sysv-rc get a working shutdown.&lt;/li&gt;
13945
13946 &lt;/ul&gt;&lt;/p&gt;
13947
13948 &lt;p&gt;All in all not many surprising issues, and all of them seem
13949 solvable before Squeeze is released. In addition to these there are
13950 some packages with bugs in their dependencies and run level settings,
13951 which I expect will be fixed in a reasonable time span.&lt;/p&gt;
13952
13953 &lt;p&gt;If you report any problems with dependencies in init.d scripts to
13954 the BTS, please usertag the report to get it to show up at
13955 &lt;a href=&quot;http://bugs.debian.org/cgi-bin/pkgreport.cgi?users=initscripts-ng-devel@lists.alioth.debian.org&quot;&gt;the
13956 list of usertagged bugs related to this&lt;/a&gt;.&lt;/p&gt;
13957
13958 &lt;p&gt;Update: Correct bug number to file-rc issue.&lt;/p&gt;
13959 </description>
13960 </item>
13961
13962 <item>
13963 <title>More flexible firmware handling in debian-installer</title>
13964 <link>http://www.hungry.com/~pere/blog/More_flexible_firmware_handling_in_debian_installer.html</link>
13965 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/More_flexible_firmware_handling_in_debian_installer.html</guid>
13966 <pubDate>Sat, 22 May 2010 21:30:00 +0200</pubDate>
13967 <description>&lt;p&gt;After a long break from debian-installer development, I finally
13968 found time today to return to the project. Having to spend less time
13969 working dependency based boot in debian, as it is almost complete now,
13970 definitely helped freeing some time.&lt;/p&gt;
13971
13972 &lt;p&gt;A while back, I ran into a problem while working on Debian Edu. We
13973 include some firmware packages on the Debian Edu CDs, those needed to
13974 get disk and network controllers working. Without having these
13975 firmware packages available during installation, it is impossible to
13976 install Debian Edu on the given machine, and because our target group
13977 are non-technical people, asking them to provide firmware packages on
13978 an external medium is a support pain. Initially, I expected it to be
13979 enough to include the firmware packages on the CD to get
13980 debian-installer to find and use them. This proved to be wrong.
13981 Next, I hoped it was enough to symlink the relevant firmware packages
13982 to some useful location on the CD (tried /cdrom/ and
13983 /cdrom/firmware/). This also proved to not work, and at this point I
13984 found time to look at the debian-installer code to figure out what was
13985 going to work.&lt;/p&gt;
13986
13987 &lt;p&gt;The firmware loading code is in the hw-detect package, and a closer
13988 look revealed that it would only look for firmware packages outside
13989 the installation media, so the CD was never checked for firmware
13990 packages. It would only check USB sticks, floppies and other
13991 &quot;external&quot; media devices. Today I changed it to also look in the
13992 /cdrom/firmware/ directory on the mounted CD or DVD, which should
13993 solve the problem I ran into with Debian edu. I also changed it to
13994 look in /firmware/, to make sure the installer also find firmware
13995 provided in the initrd when booting the installer via PXE, to allow us
13996 to provide the same feature in the PXE setup included in Debian
13997 Edu.&lt;/p&gt;
13998
13999 &lt;p&gt;To make sure firmware deb packages with a license questions are not
14000 activated without asking if the license is accepted, I extended
14001 hw-detect to look for preinst scripts in the firmware packages, and
14002 run these before activating the firmware during installation. The
14003 license question is asked using debconf in the preinst, so this should
14004 solve the issue for the firmware packages I have looked at so far.&lt;/p&gt;
14005
14006 &lt;p&gt;If you want to discuss the details of these features, please
14007 contact us on debian-boot@lists.debian.org.&lt;/p&gt;
14008 </description>
14009 </item>
14010
14011 <item>
14012 <title>Parallellized boot is now the default in Debian/unstable</title>
14013 <link>http://www.hungry.com/~pere/blog/Parallellized_boot_is_now_the_default_in_Debian_unstable.html</link>
14014 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Parallellized_boot_is_now_the_default_in_Debian_unstable.html</guid>
14015 <pubDate>Fri, 14 May 2010 22:40:00 +0200</pubDate>
14016 <description>&lt;p&gt;Since this evening, parallel booting is the default in
14017 Debian/unstable for machines using dependency based boot sequencing.
14018 Apparently the testing of concurrent booting has been wider than
14019 expected, if I am to believe the
14020 &lt;a href=&quot;http://lists.debian.org/debian-devel/2010/05/msg00122.html&quot;&gt;input
14021 on debian-devel@&lt;/a&gt;, and I concluded a few days ago to move forward
14022 with the feature this weekend, to give us some time to detect any
14023 remaining problems before Squeeze is frozen. If serious problems are
14024 detected, it is simple to change the default back to sequential boot.
14025 The upload of the new sysvinit package also activate a new upstream
14026 version.&lt;/p&gt;
14027
14028 More information about
14029 &lt;a href=&quot;http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot&quot;&gt;dependency
14030 based boot sequencing&lt;/a&gt; is available from the Debian wiki. It is
14031 currently possible to disable parallel booting when one run into
14032 problems caused by it, by adding this line to /etc/default/rcS:&lt;/p&gt;
14033
14034 &lt;blockquote&gt;&lt;pre&gt;
14035 CONCURRENCY=none
14036 &lt;/pre&gt;&lt;/blockquote&gt;
14037
14038 &lt;p&gt;If you report any problems with dependencies in init.d scripts to
14039 the BTS, please usertag the report to get it to show up at
14040 &lt;a href=&quot;http://bugs.debian.org/cgi-bin/pkgreport.cgi?users=initscripts-ng-devel@lists.alioth.debian.org&quot;&gt;the
14041 list of usertagged bugs related to this&lt;/a&gt;.&lt;/p&gt;
14042 </description>
14043 </item>
14044
14045 <item>
14046 <title>Sitesummary tip: Listing MAC address of all clients</title>
14047 <link>http://www.hungry.com/~pere/blog/Sitesummary_tip__Listing_MAC_address_of_all_clients.html</link>
14048 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Sitesummary_tip__Listing_MAC_address_of_all_clients.html</guid>
14049 <pubDate>Fri, 14 May 2010 21:10:00 +0200</pubDate>
14050 <description>&lt;p&gt;In the recent Debian Edu versions, the
14051 &lt;a href=&quot;http://wiki.debian.org/DebianEdu/HowTo/SiteSummary&quot;&gt;sitesummary
14052 system&lt;/a&gt; is used to keep track of the machines in the school
14053 network. Each machine will automatically report its status to the
14054 central server after boot and once per night. The network setup is
14055 also reported, and using this information it is possible to get the
14056 MAC address of all network interfaces in the machines. This is useful
14057 to update the DHCP configuration.&lt;/p&gt;
14058
14059 &lt;p&gt;To give some idea how to use sitesummary, here is a one-liner to
14060 ist all MAC addresses of all machines reporting to sitesummary. Run
14061 this on the collector host:&lt;/p&gt;
14062
14063 &lt;blockquote&gt;&lt;pre&gt;
14064 perl -MSiteSummary -e &#39;for_all_hosts(sub { print join(&quot; &quot;, get_macaddresses(shift)), &quot;\n&quot;; });&#39;
14065 &lt;/pre&gt;&lt;/blockquote&gt;
14066
14067 &lt;p&gt;This will list all MAC addresses assosiated with all machine, one
14068 line per machine and with space between the MAC addresses.&lt;/p&gt;
14069
14070 &lt;p&gt;To allow system administrators easier job at adding static DHCP
14071 addresses for hosts, it would be possible to extend this to fetch
14072 machine information from sitesummary and update the DHCP and DNS
14073 tables in LDAP using this information. Such tool is unfortunately not
14074 written yet.&lt;/p&gt;
14075 </description>
14076 </item>
14077
14078 <item>
14079 <title>systemd, an interesting alternative to upstart</title>
14080 <link>http://www.hungry.com/~pere/blog/systemd__an_interesting_alternative_to_upstart.html</link>
14081 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/systemd__an_interesting_alternative_to_upstart.html</guid>
14082 <pubDate>Thu, 13 May 2010 22:20:00 +0200</pubDate>
14083 <description>&lt;p&gt;The last few days a new boot system called
14084 &lt;a href=&quot;http://www.freedesktop.org/wiki/Software/systemd&quot;&gt;systemd&lt;/a&gt;
14085 has been
14086 &lt;a href=&quot;http://0pointer.de/blog/projects/systemd.html&quot;&gt;introduced&lt;/a&gt;
14087
14088 to the free software world. I have not yet had time to play around
14089 with it, but it seem to be a very interesting alternative to
14090 &lt;a href=&quot;http://upstart.ubuntu.com/&quot;&gt;upstart&lt;/a&gt;, and might prove to be
14091 a good alternative for Debian when we are able to switch to an event
14092 based boot system. Tollef is
14093 &lt;a href=&quot;http://bugs.debian.org/580814&quot;&gt;in the process&lt;/a&gt; of getting
14094 systemd into Debian, and I look forward to seeing how well it work. I
14095 like the fact that systemd handles init.d scripts with dependency
14096 information natively, allowing them to run in parallel where upstart
14097 at the moment do not.&lt;/p&gt;
14098
14099 &lt;p&gt;Unfortunately do systemd have the same problem as upstart regarding
14100 platform support. It only work on recent Linux kernels, and also need
14101 some new kernel features enabled to function properly. This means
14102 kFreeBSD and Hurd ports of Debian will need a port or a different boot
14103 system. Not sure how that will be handled if systemd proves to be the
14104 way forward.&lt;/p&gt;
14105
14106 &lt;p&gt;In the mean time, based on the
14107 &lt;a href=&quot;http://lists.debian.org/debian-devel/2010/05/msg00122.html&quot;&gt;input
14108 on debian-devel@&lt;/a&gt; regarding parallel booting in Debian, I have
14109 decided to enable full parallel booting as the default in Debian as
14110 soon as possible (probably this weekend or early next week), to see if
14111 there are any remaining serious bugs in the init.d dependencies. A
14112 new version of the sysvinit package implementing this change is
14113 already in experimental. If all go well, Squeeze will be released
14114 with parallel booting enabled by default.&lt;/p&gt;
14115 </description>
14116 </item>
14117
14118 <item>
14119 <title>Parallellizing the boot in Debian Squeeze - ready for wider testing</title>
14120 <link>http://www.hungry.com/~pere/blog/Parallellizing_the_boot_in_Debian_Squeeze___ready_for_wider_testing.html</link>
14121 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Parallellizing_the_boot_in_Debian_Squeeze___ready_for_wider_testing.html</guid>
14122 <pubDate>Thu, 6 May 2010 23:25:00 +0200</pubDate>
14123 <description>&lt;p&gt;These days, the init.d script dependencies in Squeeze are quite
14124 complete, so complete that it is actually possible to run all the
14125 init.d scripts in parallell based on these dependencies. If you want
14126 to test your Squeeze system, make sure
14127 &lt;a href=&quot;http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot&quot;&gt;dependency
14128 based boot sequencing&lt;/a&gt; is enabled, and add this line to
14129 /etc/default/rcS:&lt;/p&gt;
14130
14131 &lt;blockquote&gt;&lt;pre&gt;
14132 CONCURRENCY=makefile
14133 &lt;/pre&gt;&lt;/blockquote&gt;
14134
14135 &lt;p&gt;That is it. It will cause sysv-rc to use the startpar tool to run
14136 scripts in parallel using the dependency information stored in
14137 /etc/init.d/.depend.boot, /etc/init.d/.depend.start and
14138 /etc/init.d/.depend.stop to order the scripts. Startpar is configured
14139 to try to start the kdm and gdm scripts as early as possible, and will
14140 start the facilities required by kdm or gdm as early as possible to
14141 make this happen.&lt;/p&gt;
14142
14143 &lt;p&gt;Give it a try, and see if you like the result. If some services
14144 fail to start properly, it is most likely because they have incomplete
14145 init.d script dependencies in their startup script (or some of their
14146 dependent scripts have incomplete dependencies). Report bugs and get
14147 the package maintainers to fix it. :)&lt;/p&gt;
14148
14149 &lt;p&gt;Running scripts in parallel could be the default in Debian when we
14150 manage to get the init.d script dependencies complete and correct. I
14151 expect we will get there in Squeeze+1, if we get manage to test and
14152 fix the remaining issues.&lt;/p&gt;
14153
14154 &lt;p&gt;If you report any problems with dependencies in init.d scripts to
14155 the BTS, please usertag the report to get it to show up at
14156 &lt;a href=&quot;http://bugs.debian.org/cgi-bin/pkgreport.cgi?users=initscripts-ng-devel@lists.alioth.debian.org&quot;&gt;the
14157 list of usertagged bugs related to this&lt;/a&gt;.&lt;/p&gt;
14158 </description>
14159 </item>
14160
14161 <item>
14162 <title>Debian has switched to dependency based boot sequencing</title>
14163 <link>http://www.hungry.com/~pere/blog/Debian_has_switched_to_dependency_based_boot_sequencing.html</link>
14164 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Debian_has_switched_to_dependency_based_boot_sequencing.html</guid>
14165 <pubDate>Mon, 27 Jul 2009 23:50:00 +0200</pubDate>
14166 <description>&lt;p&gt;Since this evening, with the upload of sysvinit version 2.87dsf-2,
14167 and the upload of insserv version 1.12.0-10 yesterday, Debian unstable
14168 have been migrated to using dependency based boot sequencing. This
14169 conclude work me and others have been doing for the last three days.
14170 It feels great to see this finally part of the default Debian
14171 installation. Now we just need to weed out the last few problems that
14172 are bound to show up, to get everything ready for Squeeze.&lt;/p&gt;
14173
14174 &lt;p&gt;The next step is migrating /sbin/init from sysvinit to upstart, and
14175 fixing the more fundamental problem of handing the event based
14176 non-predictable kernel in the early boot.&lt;/p&gt;
14177 </description>
14178 </item>
14179
14180 <item>
14181 <title>Taking over sysvinit development</title>
14182 <link>http://www.hungry.com/~pere/blog/Taking_over_sysvinit_development.html</link>
14183 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Taking_over_sysvinit_development.html</guid>
14184 <pubDate>Wed, 22 Jul 2009 23:00:00 +0200</pubDate>
14185 <description>&lt;p&gt;After several years of frustration with the lack of activity from
14186 the existing sysvinit upstream developer, I decided a few weeks ago to
14187 take over the package and become the new upstream. The number of
14188 patches to track for the Debian package was becoming a burden, and the
14189 lack of synchronization between the distribution made it hard to keep
14190 the package up to date.&lt;/p&gt;
14191
14192 &lt;p&gt;On the new sysvinit team is the SuSe maintainer Dr. Werner Fink,
14193 and my Debian co-maintainer Kel Modderman. About 10 days ago, I made
14194 a new upstream tarball with version number 2.87dsf (for Debian, SuSe
14195 and Fedora), based on the patches currently in use in these
14196 distributions. We Debian maintainers plan to move to this tarball as
14197 the new upstream as soon as we find time to do the merge. Since the
14198 new tarball was created, we agreed with Werner at SuSe to make a new
14199 upstream project at &lt;a href=&quot;http://savannah.nongnu.org/&quot;&gt;Savannah&lt;/a&gt;, and continue
14200 development there. The project is registered and currently waiting
14201 for approval by the Savannah administrators, and as soon as it is
14202 approved, we will import the old versions from svn and continue
14203 working on the future release.&lt;/p&gt;
14204
14205 &lt;p&gt;It is a bit ironic that this is done now, when some of the involved
14206 distributions are moving to upstart as a syvinit replacement.&lt;/p&gt;
14207 </description>
14208 </item>
14209
14210 <item>
14211 <title>Debian boots quicker and quicker</title>
14212 <link>http://www.hungry.com/~pere/blog/Debian_boots_quicker_and_quicker.html</link>
14213 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Debian_boots_quicker_and_quicker.html</guid>
14214 <pubDate>Wed, 24 Jun 2009 21:40:00 +0200</pubDate>
14215 <description>&lt;p&gt;I spent Monday and tuesday this week in London with a lot of the
14216 people involved in the boot system on Debian and Ubuntu, to see if we
14217 could find more ways to speed up the boot system. This was an Ubuntu
14218 funded
14219 &lt;a href=&quot;https://wiki.ubuntu.com/FoundationsTeam/BootPerformance/DebianUbuntuSprint&quot;&gt;developer
14220 gathering&lt;/a&gt;. It was quite productive. We also discussed the future
14221 of boot systems, and ways to handle the increasing number of boot
14222 issues introduced by the Linux kernel becoming more and more
14223 asynchronous and event base. The Ubuntu approach using udev and
14224 upstart might be a good way forward. Time will show.&lt;/p&gt;
14225
14226 &lt;p&gt;Anyway, there are a few ways at the moment to speed up the boot
14227 process in Debian. All of these should be applied to get a quick
14228 boot:&lt;/p&gt;
14229
14230 &lt;ul&gt;
14231
14232 &lt;li&gt;Use dash as /bin/sh.&lt;/li&gt;
14233
14234 &lt;li&gt;Disable the init.d/hwclock*.sh scripts and make sure the hardware
14235 clock is in UTC.&lt;/li&gt;
14236
14237 &lt;li&gt;Install and activate the insserv package to enable
14238 &lt;a href=&quot;http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot&quot;&gt;dependency
14239 based boot sequencing&lt;/a&gt;, and enable concurrent booting.&lt;/li&gt;
14240
14241 &lt;/ul&gt;
14242
14243 These points are based on the Google summer of code work done by
14244 &lt;a href=&quot;http://initscripts-ng.alioth.debian.org/soc2006-bootsystem/&quot;&gt;Carlos
14245 Villegas&lt;/a&gt;.
14246
14247 &lt;p&gt;Support for makefile-style concurrency during boot was uploaded to
14248 unstable yesterday. When we tested it, we were able to cut 6 seconds
14249 from the boot sequence. It depend on very correct dependency
14250 declaration in all init.d scripts, so I expect us to find edge cases
14251 where the dependences in some scripts are slightly wrong when we start
14252 using this.&lt;/p&gt;
14253
14254 &lt;p&gt;On our IRC channel for this effort, #pkg-sysvinit, a new idea was
14255 introduced by Raphael Geissert today, one that could affect the
14256 startup speed as well. Instead of starting some scripts concurrently
14257 from rcS.d/ and another set of scripts from rc2.d/, it would be
14258 possible to run a of them in the same process. A quick way to test
14259 this would be to enable insserv and run &#39;mv /etc/rc2.d/S* /etc/rcS.d/;
14260 insserv&#39;. Will need to test if that work. :)&lt;/p&gt;
14261 </description>
14262 </item>
14263
14264 <item>
14265 <title>BSAs påstander om piratkopiering møter motstand</title>
14266 <link>http://www.hungry.com/~pere/blog/BSAs_p_stander_om_piratkopiering_m_ter_motstand.html</link>
14267 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/BSAs_p_stander_om_piratkopiering_m_ter_motstand.html</guid>
14268 <pubDate>Sun, 17 May 2009 23:05:00 +0200</pubDate>
14269 <description>&lt;p&gt;Hvert år de siste årene har BSA, lobbyfronten til de store
14270 programvareselskapene som Microsoft og Apple, publisert en rapport der
14271 de gjetter på hvor mye piratkopiering påfører i tapte inntekter i
14272 ulike land rundt om i verden. Resultatene er tendensiøse. For noen
14273 dager siden kom
14274 &lt;a href=&quot;http://global.bsa.org/globalpiracy2008/studies/globalpiracy2008.pdf&quot;&gt;siste
14275 rapport&lt;/a&gt;, og det er flere kritiske kommentarer publisert de siste
14276 dagene. Et spesielt interessant kommentar fra Sverige,
14277 &lt;a href=&quot;http://www.idg.se/2.1085/1.229795/bsa-hoftade-sverigesiffror&quot;&gt;BSA
14278 höftade Sverigesiffror&lt;/a&gt;, oppsummeres slik:&lt;/p&gt;
14279
14280 &lt;blockquote&gt;
14281 I sin senaste rapport slår BSA fast att 25 procent av all mjukvara i
14282 Sverige är piratkopierad. Det utan att ha pratat med ett enda svenskt
14283 företag. &quot;Man bör nog kanske inte se de här siffrorna som helt
14284 exakta&quot;, säger BSAs Sverigechef John Hugosson.
14285 &lt;/blockquote&gt;
14286
14287 &lt;p&gt;Mon tro om de er like metodiske når de gjetter på andelen piratkopiering i Norge? To andre kommentarer er &lt;a
14288 href=&quot;http://www.vnunet.com/vnunet/comment/2242134/bsa-piracy-figures-shot-reality&quot;&gt;BSA
14289 piracy figures need a shot of reality&lt;/a&gt; og &lt;a
14290 href=&quot;http://www.michaelgeist.ca/content/view/3958/125/&quot;&gt;Does The WIPO
14291 Copyright Treaty Work?&lt;/a&gt;&lt;/p&gt;
14292
14293 &lt;p&gt;Fant lenkene via &lt;a
14294 href=&quot;http://tech.slashdot.org/article.pl?sid=09/05/17/1632242&quot;&gt;oppslag
14295 på Slashdot&lt;/a&gt;.&lt;/p&gt;
14296 </description>
14297 </item>
14298
14299 <item>
14300 <title>IDG mener linux i servermarkedet vil vokse med 21% i 2009</title>
14301 <link>http://www.hungry.com/~pere/blog/IDG_mener_linux_i_servermarkedet_vil_vokse_med_21__i_2009.html</link>
14302 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/IDG_mener_linux_i_servermarkedet_vil_vokse_med_21__i_2009.html</guid>
14303 <pubDate>Thu, 7 May 2009 22:30:00 +0200</pubDate>
14304 <description>&lt;p&gt;Kom over
14305 &lt;a href=&quot;http://news.cnet.com/8301-13505_3-10216873-16.html&quot;&gt;interessante
14306 tall&lt;/a&gt; fra IDG om utviklingen av linuxservermarkedet. Fikk meg til
14307 å tenke på antall tjenermaskiner ved Universitetet i Oslo der jeg
14308 jobber til daglig. En rask opptelling forteller meg at vi har 490
14309 (61%) fysiske unix-tjener (mest linux men også noen solaris) og 196
14310 (25%) windowstjenere, samt 112 (14%) virtuelle unix-tjenere. Med den
14311 bakgrunnskunnskapen kan jeg godt tro at IDG er inne på noe.&lt;/p&gt;
14312 </description>
14313 </item>
14314
14315 <item>
14316 <title>Kryptert harddisk - naturligvis</title>
14317 <link>http://www.hungry.com/~pere/blog/Kryptert_harddisk___naturligvis.html</link>
14318 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Kryptert_harddisk___naturligvis.html</guid>
14319 <pubDate>Sat, 2 May 2009 15:30:00 +0200</pubDate>
14320 <description>&lt;p&gt;&lt;a href=&quot;http://www.dagensit.no/trender/article1658676.ece&quot;&gt;Dagens
14321 IT melder&lt;/a&gt; at Intel hevder at det er dyrt å miste en datamaskin,
14322 når en tar tap av arbeidstid, fortrolige dokumenter,
14323 personopplysninger og alt annet det innebærer. Det er ingen tvil om
14324 at det er en kostbar affære å miste sin datamaskin, og det er årsaken
14325 til at jeg har kryptert harddisken på både kontormaskinen og min
14326 bærbare. Begge inneholder personopplysninger jeg ikke ønsker skal
14327 komme på avveie, den første informasjon relatert til jobben min ved
14328 Universitetet i Oslo, og den andre relatert til blant annet
14329 foreningsarbeide. Kryptering av diskene gjør at det er lite
14330 sannsynlig at dophoder som kan finne på å rappe maskinene får noe ut
14331 av dem. Maskinene låses automatisk etter noen minutter uten bruk,
14332 og en reboot vil gjøre at de ber om passord før de vil starte opp.
14333 Jeg bruker Debian på begge maskinene, og installasjonssystemet der
14334 gjør det trivielt å sette opp krypterte disker. Jeg har LVM på toppen
14335 av krypterte partisjoner, slik at alt av datapartisjoner er kryptert.
14336 Jeg anbefaler alle å kryptere diskene på sine bærbare. Kostnaden når
14337 det er gjort slik jeg gjør det er minimale, og gevinstene er
14338 betydelige. En bør dog passe på passordet. Hvis det går tapt, må
14339 maskinen reinstalleres og alt er tapt.&lt;/p&gt;
14340
14341 &lt;p&gt;Krypteringen vil ikke stoppe kompetente angripere som f.eks. kjøler
14342 ned minnebrikkene før maskinen rebootes med programvare for å hente ut
14343 krypteringsnøklene. Kostnaden med å forsvare seg mot slike angripere
14344 er for min del høyere enn gevinsten. Jeg tror oddsene for at
14345 f.eks. etteretningsorganisasjoner har glede av å titte på mine
14346 maskiner er minimale, og ulempene jeg ville oppnå ved å forsøke å
14347 gjøre det vanskeligere for angripere med kompetanse og ressurser er
14348 betydelige.&lt;/p&gt;
14349 </description>
14350 </item>
14351
14352 <item>
14353 <title>Two projects that have improved the quality of free software a lot</title>
14354 <link>http://www.hungry.com/~pere/blog/Two_projects_that_have_improved_the_quality_of_free_software_a_lot.html</link>
14355 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Two_projects_that_have_improved_the_quality_of_free_software_a_lot.html</guid>
14356 <pubDate>Sat, 2 May 2009 15:00:00 +0200</pubDate>
14357 <description>&lt;p&gt;There are two software projects that have had huge influence on the
14358 quality of free software, and I wanted to mention both in case someone
14359 do not yet know them.&lt;/p&gt;
14360
14361 &lt;p&gt;The first one is &lt;a href=&quot;http://valgrind.org/&quot;&gt;valgrind&lt;/a&gt;, a
14362 tool to detect and expose errors in the memory handling of programs.
14363 It is easy to use, all one need to do is to run &#39;valgrind program&#39;,
14364 and it will report any problems on stdout. It is even better if the
14365 program include debug information. With debug information, it is able
14366 to report the source file name and line number where the problem
14367 occurs. It can report things like &#39;reading past memory block in file
14368 X line N, the memory block was allocated in file Y, line M&#39;, and
14369 &#39;using uninitialised value in control logic&#39;. This tool has made it
14370 trivial to investigate reproducible crash bugs in programs, and have
14371 reduced the number of this kind of bugs in free software a lot.
14372
14373 &lt;p&gt;The second one is
14374 &lt;a href=&quot;http://en.wikipedia.org/wiki/Coverity&quot;&gt;Coverity&lt;/a&gt; which is
14375 a source code checker. It is able to process the source of a program
14376 and find problems in the logic without running the program. It
14377 started out as the Stanford Checker and became well known when it was
14378 used to find bugs in the Linux kernel. It is now a commercial tool
14379 and the company behind it is running
14380 &lt;a href=&quot;http://www.scan.coverity.com/&quot;&gt;a community service&lt;/a&gt; for the
14381 free software community, where a lot of free software projects get
14382 their source checked for free. Several thousand defects have been
14383 found and fixed so far. It can find errors like &#39;lock L taken in file
14384 X line N is never released if exiting in line M&#39;, or &#39;the code in file
14385 Y lines O to P can never be executed&#39;. The projects included in the
14386 community service project have managed to get rid of a lot of
14387 reliability problems thanks to Coverity.&lt;/p&gt;
14388
14389 &lt;p&gt;I believe tools like this, that are able to automatically find
14390 errors in the source, are vital to improve the quality of software and
14391 make sure we can get rid of the crashing and failing software we are
14392 surrounded by today.&lt;/p&gt;
14393 </description>
14394 </item>
14395
14396 <item>
14397 <title>No patch is not better than a useless patch</title>
14398 <link>http://www.hungry.com/~pere/blog/No_patch_is_not_better_than_a_useless_patch.html</link>
14399 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/No_patch_is_not_better_than_a_useless_patch.html</guid>
14400 <pubDate>Tue, 28 Apr 2009 09:30:00 +0200</pubDate>
14401 <description>&lt;p&gt;Julien Blache
14402 &lt;a href=&quot;http://blog.technologeek.org/2009/04/12/214&quot;&gt;claim that no
14403 patch is better than a useless patch&lt;/a&gt;. I completely disagree, as a
14404 patch allow one to discuss a concrete and proposed solution, and also
14405 prove that the issue at hand is important enough for someone to spent
14406 time on fixing it. No patch do not provide any of these positive
14407 properties.&lt;/p&gt;
14408 </description>
14409 </item>
14410
14411 <item>
14412 <title>Standardize on protocols and formats, not vendors and applications</title>
14413 <link>http://www.hungry.com/~pere/blog/Standardize_on_protocols_and_formats__not_vendors_and_applications.html</link>
14414 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Standardize_on_protocols_and_formats__not_vendors_and_applications.html</guid>
14415 <pubDate>Mon, 30 Mar 2009 11:50:00 +0200</pubDate>
14416 <description>&lt;p&gt;Where I work at the University of Oslo, one decision stand out as a
14417 very good one to form a long lived computer infrastructure. It is the
14418 simple one, lost by many in todays computer industry: Standardize on
14419 open network protocols and open exchange/storage formats, not applications.
14420 Applications come and go, while protocols and files tend to stay, and
14421 thus one want to make it easy to change application and vendor, while
14422 avoiding conversion costs and locking users to a specific platform or
14423 application.&lt;/p&gt;
14424
14425 &lt;p&gt;This approach make it possible to replace the client applications
14426 independently of the server applications. One can even allow users to
14427 use several different applications as long as they handle the selected
14428 protocol and format. In the normal case, only one client application
14429 is recommended and users only get help if they choose to use this
14430 application, but those that want to deviate from the easy path are not
14431 blocked from doing so.&lt;/p&gt;
14432
14433 &lt;p&gt;It also allow us to replace the server side without forcing the
14434 users to replace their applications, and thus allow us to select the
14435 best server implementation at any moment, when scale and resouce
14436 requirements change.&lt;/p&gt;
14437
14438 &lt;p&gt;I strongly recommend standardizing - on open network protocols and
14439 open formats, but I would never recommend standardizing on a single
14440 application that do not use open network protocol or open formats.&lt;/p&gt;
14441 </description>
14442 </item>
14443
14444 <item>
14445 <title>Returning from Skolelinux developer gathering</title>
14446 <link>http://www.hungry.com/~pere/blog/Returning_from_Skolelinux_developer_gathering.html</link>
14447 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Returning_from_Skolelinux_developer_gathering.html</guid>
14448 <pubDate>Sun, 29 Mar 2009 21:00:00 +0200</pubDate>
14449 <description>&lt;p&gt;I&#39;m sitting on the train going home from this weekends Debian
14450 Edu/Skolelinux development gathering. I got a bit done tuning the
14451 desktop, and looked into the dynamic service location protocol
14452 implementation avahi. It look like it could be useful for us. Almost
14453 30 people participated, and I believe it was a great environment to
14454 get to know the Skolelinux system. Walter Bender, involved in the
14455 development of the Sugar educational platform, presented his stuff and
14456 also helped me improve my OLPC installation. He also showed me that
14457 his Turtle Art application can be used in standalone mode, and we
14458 agreed that I would help getting it packaged for Debian. As a
14459 standalone application it would be great for Debian Edu. We also
14460 tried to get the video conferencing working with two OLPCs, but that
14461 proved to be too hard for us. The application seem to need more work
14462 before it is ready for me. I look forward to getting home and relax
14463 now. :)&lt;/p&gt;
14464 </description>
14465 </item>
14466
14467 <item>
14468 <title>Time for new LDAP schemas replacing RFC 2307?</title>
14469 <link>http://www.hungry.com/~pere/blog/Time_for_new__LDAP_schemas_replacing_RFC_2307_.html</link>
14470 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Time_for_new__LDAP_schemas_replacing_RFC_2307_.html</guid>
14471 <pubDate>Sun, 29 Mar 2009 20:30:00 +0200</pubDate>
14472 <description>&lt;p&gt;The state of standardized LDAP schemas on Linux is far from
14473 optimal. There is RFC 2307 documenting one way to store NIS maps in
14474 LDAP, and a modified version of this normally called RFC 2307bis, with
14475 some modifications to be compatible with Active Directory. The RFC
14476 specification handle the content of a lot of system databases, but do
14477 not handle DNS zones and DHCP configuration.&lt;/p&gt;
14478
14479 &lt;p&gt;In &lt;a href=&quot;http://www.skolelinux.org/&quot;&gt;Debian Edu/Skolelinux&lt;/a&gt;,
14480 we would like to store information about users, SMB clients/hosts,
14481 filegroups, netgroups (users and hosts), DHCP and DNS configuration,
14482 and LTSP configuration in LDAP. These objects have a lot in common,
14483 but with the current LDAP schemas it is not possible to have one
14484 object per entity. For example, one need to have at least three LDAP
14485 objects for a given computer, one with the SMB related stuff, one with
14486 DNS information and another with DHCP information. The schemas
14487 provided for DNS and DHCP are impossible to combine into one LDAP
14488 object. In addition, it is impossible to implement quick queries for
14489 netgroup membership, because of the way NIS triples are implemented.
14490 It just do not scale. I believe it is time for a few RFC
14491 specifications to cleam up this mess.&lt;/p&gt;
14492
14493 &lt;p&gt;I would like to have one LDAP object representing each computer in
14494 the network, and this object can then keep the SMB (ie host key), DHCP
14495 (mac address/name) and DNS (name/IP address) settings in one place.
14496 It need to be efficently stored to make sure it scale well.&lt;/p&gt;
14497
14498 &lt;p&gt;I would also like to have a quick way to map from a user or
14499 computer and to the net group this user or computer is a member.&lt;/p&gt;
14500
14501 &lt;p&gt;Active Directory have done a better job than unix heads like myself
14502 in this regard, and the unix side need to catch up. Time to start a
14503 new IETF work group?&lt;/p&gt;
14504 </description>
14505 </item>
14506
14507 <item>
14508 <title>Endelig er Debian Lenny gitt ut</title>
14509 <link>http://www.hungry.com/~pere/blog/Endelig_er_Debian_Lenny_gitt_ut.html</link>
14510 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Endelig_er_Debian_Lenny_gitt_ut.html</guid>
14511 <pubDate>Sun, 15 Feb 2009 11:50:00 +0100</pubDate>
14512 <description>&lt;p&gt;Endelig er &lt;a href=&quot;http://www.debian.org/&quot;&gt;Debian&lt;/a&gt;
14513 &lt;a href=&quot;http://www.debian.org/News/2009/20090214&quot;&gt;Lenny&lt;/a&gt; gitt ut.
14514 Et langt steg videre for Debian-prosjektet, og en rekke nye
14515 programpakker blir nå tilgjengelig for de av oss som bruker den
14516 stabile utgaven av Debian. Neste steg er nå å få
14517 &lt;a href=&quot;http://www.skolelinux.org/&quot;&gt;Skolelinux&lt;/a&gt; /
14518 &lt;a href=&quot;http://wiki.debian.org/DebianEdu/&quot;&gt;Debian Edu&lt;/a&gt; ferdig
14519 oppdatert for den nye utgaven, slik at en oppdatert versjon kan
14520 slippes løs på skolene. Takk til alle debian-utviklerne som har
14521 gjort dette mulig. Endelig er f.eks. fungerende avhengighetsstyrt
14522 bootsekvens tilgjengelig i stabil utgave, vha pakken
14523 &lt;tt&gt;insserv&lt;/tt&gt;.&lt;/p&gt;
14524 </description>
14525 </item>
14526
14527 <item>
14528 <title>Devcamp brought us closer to the Lenny based Debian Edu release</title>
14529 <link>http://www.hungry.com/~pere/blog/Devcamp_brought_us_closer_to_the_Lenny_based_Debian_Edu_release.html</link>
14530 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/Devcamp_brought_us_closer_to_the_Lenny_based_Debian_Edu_release.html</guid>
14531 <pubDate>Sun, 7 Dec 2008 12:00:00 +0100</pubDate>
14532 <description>&lt;p&gt;This weekend we had a small developer gathering for Debian Edu in
14533 Oslo. Most of Saturday was used for the general assemly for the
14534 member organization, but the rest of the weekend I used to tune the
14535 LTSP installation. LTSP now work out of the box on the 10-network.
14536 Acer Aspire One proved to be a very nice thin client, with both
14537 screen, mouse and keybard in a small box. Was working on getting the
14538 diskless workstation setup configured out of the box, but did not
14539 finish it before the weekend was up.&lt;/p&gt;
14540
14541 &lt;p&gt;Did not find time to look at the 4 VGA cards in one box we got from
14542 the Brazilian group, so that will have to wait for the next
14543 development gathering. Would love to have the Debian Edu installer
14544 automatically detect and configure a multiseat setup when it find one
14545 of these cards.&lt;/p&gt;
14546 </description>
14547 </item>
14548
14549 <item>
14550 <title>The sorry state of multimedia browser plugins in Debian</title>
14551 <link>http://www.hungry.com/~pere/blog/The_sorry_state_of_multimedia_browser_plugins_in_Debian.html</link>
14552 <guid isPermaLink="true">http://www.hungry.com/~pere/blog/The_sorry_state_of_multimedia_browser_plugins_in_Debian.html</guid>
14553 <pubDate>Tue, 25 Nov 2008 00:10:00 +0100</pubDate>
14554 <description>&lt;p&gt;Recently I have spent some time evaluating the multimedia browser
14555 plugins available in Debian Lenny, to see which one we should use by
14556 default in Debian Edu. We need an embedded video playing plugin with
14557 control buttons to pause or stop the video, and capable of streaming
14558 all the multimedia content available on the web. The test results and
14559 notes are available on
14560 &lt;a href=&quot;http://wiki.debian.org/DebianEdu/BrowserMultimedia&quot;&gt;the
14561 Debian wiki&lt;/a&gt;. I was surprised how few of the plugins are able to
14562 fill this need. My personal video player favorite, VLC, has a really
14563 bad plugin which fail on a lot of the test pages. A lot of the MIME
14564 types I would expect to work with any free software player (like
14565 video/ogg), just do not work. And simple formats like the
14566 audio/x-mplegurl format (m3u playlists), just isn&#39;t supported by the
14567 totem and vlc plugins. I hope the situation will improve soon. No
14568 wonder sites use the proprietary Adobe flash to play video.&lt;/p&gt;
14569
14570 &lt;p&gt;For Lenny, we seem to end up with the mplayer plugin. It seem to
14571 be the only one fitting our needs. :/&lt;/p&gt;
14572 </description>
14573 </item>
14574
14575 </channel>
14576 </rss>