]> pere.pagekite.me Git - homepage.git/blob - blog/tags/debian/index.html
20139b05bffc575bd65fc0e99f849f9304e58986
[homepage.git] / blog / tags / debian / index.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
4 <head>
5 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
6 <title>Petter Reinholdtsen: Entries Tagged debian</title>
7 <link rel="stylesheet" type="text/css" media="screen" href="http://www.hungry.com/~pere/blog/style.css" />
8 <link rel="stylesheet" type="text/css" media="screen" href="http://www.hungry.com/~pere/blog/vim.css" />
9 <link rel="alternate" title="RSS Feed" href="debian.rss" type="application/rss+xml" />
10 </head>
11 <body>
12 <div class="title">
13 <h1>
14 <a href="http://www.hungry.com/~pere/blog/">Petter Reinholdtsen</a>
15
16 </h1>
17
18 </div>
19
20
21 <h3>Entries tagged "debian".</h3>
22
23 <div class="entry">
24 <div class="title">
25 <a href="http://www.hungry.com/~pere/blog/What_is_the_most_supported_MIME_type_in_Debian_in_2025_.html">What is the most supported MIME type in Debian in 2025?</a>
26 </div>
27 <div class="date">
28 18th January 2025
29 </div>
30 <div class="body">
31 <p><a href="http://www.hungry.com/~pere/blog/What_is_the_most_supported_MIME_type_in_Debian_in_2018_.html">Seven</a>
32 and
33 <a href="http://www.hungry.com/~pere/blog/What_is_the_most_supported_MIME_type_in_Debian_.html">twelve</a>
34 years ago, I measured what the most supported MIME type in Debian
35 was</a>, first by analysing the desktop files in all packages in the
36 archive, then by analysing the DEP-11 AppStream data set. I guess it
37 is time to repeat the measurement, only for unstable as last time:</p>
38
39 <p><strong>Debian Unstable:</strong></p>
40
41 <pre>
42 count MIME type
43 ----- -----------------------
44 63 image/png
45 63 image/jpeg
46 57 image/tiff
47 54 image/gif
48 51 image/bmp
49 50 audio/mpeg
50 48 text/plain
51 42 audio/x-mp3
52 40 application/ogg
53 39 audio/x-wav
54 39 audio/x-flac
55 36 audio/x-vorbis+ogg
56 35 audio/x-mpeg
57 34 audio/x-mpegurl
58 34 audio/ogg
59 33 application/x-ogg
60 32 audio/mp4
61 31 audio/x-scpls
62 31 application/pdf
63 29 audio/x-ms-wma
64 </pre>
65
66 <p>The list was created like this using a sid chroot:</p>
67
68 <pre>
69 cat /var/lib/apt/lists/*sid*_dep11_Components-amd64.yml.gz | \
70 zcat | awk '/^ - \S+\/\S+$/ {print $2 }' | sort | \
71 uniq -c | sort -nr | head -20
72 </pre>
73
74 <p>It is nice to see that the same number of packages now support PNG
75 and JPEG. Last time JPEG had more support than PNG. Most of the MIME
76 types are known to me, but the 'audio/x-scpls' one I have no idea what
77 represent, except it being an audio format. To find the packages
78 claiming support for this format, the appstreamcli command from the
79 appstream package can be used:
80
81 <pre>
82 % appstreamcli what-provides mediatype audio/x-scpls | grep Package: | sort -u
83 Package: alsaplayer-common
84 Package: amarok
85 Package: audacious
86 Package: brasero
87 Package: celluloid
88 Package: clapper
89 Package: clementine
90 Package: cynthiune.app
91 Package: elisa
92 Package: gtranscribe
93 Package: kaffeine
94 Package: kmplayer
95 Package: kylin-burner
96 Package: lollypop
97 Package: mediaconch-gui
98 Package: mediainfo-gui
99 Package: mplayer-gui
100 Package: mpv
101 Package: mystiq
102 Package: parlatype
103 Package: parole
104 Package: pragha
105 Package: qmmp
106 Package: rhythmbox
107 Package: sayonara
108 Package: shotcut
109 Package: smplayer
110 Package: soundconverter
111 Package: strawberry
112 Package: syncplay
113 Package: vlc
114 %
115 </pre>
116
117 <p>Look like several video and auto tools understand the format.
118 Similarly one can check out the number of packages supporting the STL
119 format commonly used for 3D printing:</p>
120
121 <pre>
122 % appstreamcli what-provides mediatype model/stl | grep Package: | sort -u
123 Package: cura
124 Package: freecad
125 Package: open3d-viewer
126 %
127 </pre>
128
129 <p>How strange the
130 <a href="https://tracker.debian.org/pkg/slic3r">slic3r</a> and
131 <a href="https://tracker.debian.org/pkg/slic3r-prusa">prusa-slicer</a>
132 packages do not support STL. Perhaps just missing package metadata?
133 Luckily the amount of package metadata in Debian is getting better,
134 and hopefully this way of locating relevant packages for any file
135 format will be the preferred one soon.
136
137 <p>As usual, if you use Bitcoin and want to show your support of my
138 activities, please send Bitcoin donations to my address
139 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
140
141 </div>
142 <div class="tags">
143
144
145 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/isenkram">isenkram</a>.
146
147
148 </div>
149 </div>
150 <div class="padding"></div>
151
152 <div class="entry">
153 <div class="title">
154 <a href="http://www.hungry.com/~pere/blog/The_2025_LinuxCNC_Norwegian_developer_gathering.html">The 2025 LinuxCNC Norwegian developer gathering</a>
155 </div>
156 <div class="date">
157 11th January 2025
158 </div>
159 <div class="body">
160 <p><a href="https://linuxcnc.org/">The LinuxCNC project</a> is
161 trotting along. And I believe this great software system for
162 numerical control of machines such as milling machines, lathes, plasma
163 cutters, routers, cutting machines, robots and hexapods, would do even
164 better with more in-person developer gatherings, so we plan to
165 organise such gathering this summer too.</p>
166
167 <p>This year we would like to invite to a small LinuxCNC and free
168 software fabrication workshop/gathering in Norway this summer for the
169 weekend starting July 4th 2025. New this year is the slightly larger
170 scope, and we invite people also outside the LinuxCNC community to
171 join. As earlier, we suggest to organize it as an
172 <a href="https://en.wikipedia.org/wiki/Unconference">unconference</a>,
173 where the participants create the program upon arrival.</p>
174
175 <p>The location is a metal workshop 15 minutes drive away from to the
176 Gardermoen airport (OSL), where there is a lot of space and a hotel only
177 5 minutes away by car. We plan to fire up the barbeque in the evenings.</p>
178
179 <p>Please let us know if you would like to join. We track the list of
180 participants on <a href="https://pad.efn.no/p/linuxcnc-2025-norway">a
181 simple pad</a>, please add yourself there if you are interested in joining.</p>
182
183 <p><a href="https://www.nuugfoundation.no/">The NUUG Foundation</a> has on
184 our request offered to handle any money involved with this gathering,
185 in other words holding any sponsor funds and paying any bills.
186 NUUG Foundation is a spinnoff from the NUUG member organisation here
187 in Norway with long ties to the free software and open standards
188 communities.</p>
189
190 <p>As usual we hope to find sponsors to pay for food, lodging and travel.</p>
191
192 <p>As usual, if you use Bitcoin and want to show your support of my
193 activities, please send Bitcoin donations to my address
194 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
195
196 </div>
197 <div class="tags">
198
199
200 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/linuxcnc">linuxcnc</a>.
201
202
203 </div>
204 </div>
205 <div class="padding"></div>
206
207 <div class="entry">
208 <div class="title">
209 <a href="http://www.hungry.com/~pere/blog/New_lsdvd_release_0_18_after_ten_years.html">New lsdvd release 0.18 after ten years</a>
210 </div>
211 <div class="date">
212 21st December 2024
213 </div>
214 <div class="body">
215 <p>The rumors of the death of
216 <a href="https://sourceforge.net/projects/lsdvd/">the lsdvd project</a>
217 is slightly exaggerated. And the last few months, we have been
218 working on fixing and improving it, culminating in a new release last
219 night. This is the list of changes in the new 0.18 release, as
220 <a href="https://sourceforge.net/p/lsdvd/mailman/message/59108028/">announced
221 on the project mailing list</a>:</p>
222
223 <ul>
224
225 <li>Simplified autoconf setup, dropped --enable-debug option.</li>
226 <li>Improved video resolution reporting (<a href="https://sourceforge.net/p/lsdvd/patches/8/">Fixes #8</a>).</li>
227 <li>Applied patches fetched from BSDs (<a href="https://sourceforge.net/p/lsdvd/patches/7/">Fixes #7</a>).</li>
228 <li>Corrected Perl output (<a href="https://sourceforge.net/p/lsdvd/patches/1/">Fixes #1</a>).</li>
229 <li>Adjusted Pan and Scan entries to produce valid XML.</li>
230 <li>Changed --help output from stderr to stdout.</li>
231 <li>Corrected aspect ratio and audio format formatting.</li>
232 <li>Avoid segfault when hitting a NULL pointer in the IFO structure.</li>
233 <li>Change build rules to supress compiler flags, to make it easier to
234 spot warnings.</li>
235 <li>Set default DVD device based on OS (Linux, *BSD, Darwin)</li>
236 <li>Added libdvdread DVDDiscID to output.</li>
237 <li>Corrected typo in longest track value in XML format.</li>
238 <li>Switched XML output to use libxml to avoid string encoding issues.</li>
239 <li>Added simple build time test suite.</li>
240 <li>Cleaned up language code handling and adding missing mapping for
241 language codes 'nb' and 'nn'.</li>
242 <li>Added JSON output support using -Oj.</li>
243 </ul>
244
245 <p>The most exciting news to me is easy access to the DVDDiscID, which
246 make it a lot easier to identify DVD duplicates across a large
247 collection of DVDs. During testing it has proved to be very effective
248 ad identifying when DVDs in a DVD box (say all Star Wars movies) is
249 identical to DVDs sold individually (like the same Star Wars movies
250 packaged individually).</p>
251
252 <p>Because none of the current developers got access to do tarball
253 releases on Sourceforge any more, the release is only available as
254 <a href="https://sourceforge.net/p/lsdvd/git/ci/0.18/tree/">a git
255 tag</a> in the repository. Lets hope it do not take ten years for the
256 next release. The project are discussing to move away from
257 Sourceforge, but it has not yet concluded.</p>
258
259 <p>As usual, if you use Bitcoin and want to show your support of my
260 activities, please send Bitcoin donations to my address
261 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
262
263 </div>
264 <div class="tags">
265
266
267 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
268
269
270 </div>
271 </div>
272 <div class="padding"></div>
273
274 <div class="entry">
275 <div class="title">
276 <a href="http://www.hungry.com/~pere/blog/More_than_200_orphaned_Debian_packages_moved_to_git__216_to_go.html">More than 200 orphaned Debian packages moved to git, 216 to go</a>
277 </div>
278 <div class="date">
279 11th July 2024
280 </div>
281 <div class="body">
282 <p><a href="http://www.hungry.com/~pere/blog/Time_to_move_orphaned_Debian_packages_to_git.html">In
283 April</a>, I started migrating orphaned Debian packages without any
284 version control system listed in debian/control to git. This morning,
285 my Debian QA page finally reached 200 QA packages migrated. In
286 reality there are a few more, as the packages uploaded by someone else
287 after my initial upload have disappeared from my QA uploads list. As
288 I am running out of steam and will most likely focus on other parts of
289 Debian moving forward, I hope someone else will find time to continue
290 the migration to bring the number of orphaned packages without any
291 version control system down to zero. Here is the updated recipe if
292 someone want to help out.</p>
293
294 <p>To locate packages to work on, the following one-liner can be used:</p>
295
296 <blockquote><pre>
297 PGPASSWORD="udd-mirror" psql --port=5432 --host=udd-mirror.debian.net \
298 --username=udd-mirror udd -c "select source from sources \
299 where release = 'sid' and (vcs_url ilike '%anonscm.debian.org%' \
300 OR vcs_browser ilike '%anonscm.debian.org%' or vcs_url IS NULL \
301 OR vcs_browser IS NULL) AND maintainer ilike '%packages@qa.debian.org%' \
302 order by random() limit 10;"
303 </pre></blockquote>
304
305 <p>Pick a random package from the list and run the latest edition of
306 the script
307 <tt><a href="http://www.hungry.com/~pere/blog/images/2024-07-11-debian-snap-to-salsa.sh">debian-snap-to-salsa</a></tt>
308 with the package name as the argument to prepare a git repository with
309 the existing packaging. This will download old Debian packages from
310 <tt>snapshot.debian.org</tt>. Note that very recent uploads will not
311 be included, so check out the package on <tt>tracker.debian.org</tt>.
312 Next, run <tt>gbp buildpackage --git-ignore-new</tt> to verify that
313 the package build as it should, and then visit
314 <a href="https://salsa.debian.org/debian/">https://salsa.debian.org/debian/</a>
315 and make sure there is not already a git repository for the package
316 there. I also did <tt>git log -p debian/control</tt> and look for vcs
317 entries to check if the package used to have a git repository on
318 Alioth, and see if it can be a useful starting point moving forward.
319 If all this check out, I created a new gitlab project below the Debian
320 group on salsa, push the package source there and upload a new version.
321 I tend to also ensure build hardening is enabled, if it prove to be
322 easy, and check if I can easily fix any lintian issues or bug reports.
323 If the process took more than 20 minutes, I dropped it and moved on to
324 another package.</p>
325
326 <p>If I found patches in debian/patches/ that were not yet passed
327 upstream, I would send an email to make sure upstream know about them.
328 This has proved to be a valuable step, and caused several new releases
329 for software that initially appeared abandoned. :)</p>
330
331 <p>As usual, if you use Bitcoin and want to show your support of my
332 activities, please send Bitcoin donations to my address
333 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
334
335 </div>
336 <div class="tags">
337
338
339 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
340
341
342 </div>
343 </div>
344 <div class="padding"></div>
345
346 <div class="entry">
347 <div class="title">
348 <a href="http://www.hungry.com/~pere/blog/Some_notes_from_the_2024_LinuxCNC_Norwegian_developer_gathering.html">Some notes from the 2024 LinuxCNC Norwegian developer gathering</a>
349 </div>
350 <div class="date">
351 10th July 2024
352 </div>
353 <div class="body">
354 <p>The Norwegian <a href="https://linuxcnc.org/">The LinuxCNC</a>
355 developer gathering 2024 is over. It was a great and productive
356 weekend, and I am sad that it is over.</p>
357
358 <p>Regular readers probably still remember what LinuxCNC is, but her
359 is a quick summary for those that forgot? LinuxCNC is a free software
360 system for numerical control of machines such as milling machines,
361 lathes, plasma cutters, routers, cutting machines, robots and
362 hexapods. It eats G-code and produce motor movement and other changes
363 to the physical world, while reading sensor input.</p>
364
365 <p>I am not quite sure about the total head count, as not all people
366 were present at the gathering the entire weekend, but I believe it was
367 close to 10 people showing their faces at the gathering. The "hard
368 core" of the group, who stayed the entire weekend, were two from
369 Norway, two from Germany and one from England. I am happy with the
370 outcome from the gathering. We managed to wrap up a new stable
371 LinuxCNC release 2.9.3 and even tested it on real hardware within
372 minutes of the release. The release notes for 2.9.3 are still being
373 written, but should show up on on the project site in the next few
374 days. We managed to go through around twenty pull requests and merge
375 then into either the stable release (2.9) or the development branch
376 (master). There are still around thirty pull requests left to
377 process, so we are not out of work yet. We even managed to
378 fix/improve a slightly worn lathe, and experiment with running a
379 mechanical clock using G-code.</p>
380
381 <p>The evening barbeque worked well both on Saturday and Sunday. It
382 is quite fun to light up a charcoal grill using compressed air. Sadly
383 the weather was not the best, so we stayed indoors most of the
384 time.</p>
385
386 <p>This gathering was made possible partly with sponsoring from both
387 <a href="https://www.redpill-linpro.com/">Redpill Linpro</a>,
388 <a href="https://debian.org/">Debian</a> and
389 <a href="https://nuugfoundation.no/">NUUG Foundation</a>, and we are
390 most grateful for the support. I would also like to thank the local
391 school for lending us some furniture, and of course the rest of the
392 members of the organizers team, Asle and Bosse, for their countless
393 contributions. The gathering was such success that we want to do it
394 again next year.</p>
395
396 <p>We plan to organize the next Norwegian LinuxCNC developer gathering
397 at the end of June next year, the weekend Friday 27th to Sunday 29th
398 of June 2025. I recommend you reserve the dates on your calendar
399 today. Other related communities are also welcome to join in, for
400 example those working on systems like FreeCAD and opencamlib, as I am
401 sure we have much in common and sharing experiences would be very
402 useful to all involved. We are of course looking for sponsors for
403 this gathering already. The total budget for this gathering was
404 around NOK 25.000 (around EUR 2.300), so our needs are quite modest.
405 Perhaps a machine or tools company would like to help out the free
406 software manufacturing community by sponsoring food, lodging and
407 transport for such gathering?</p>
408
409 </div>
410 <div class="tags">
411
412
413 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/linuxcnc">linuxcnc</a>.
414
415
416 </div>
417 </div>
418 <div class="padding"></div>
419
420 <div class="entry">
421 <div class="title">
422 <a href="http://www.hungry.com/~pere/blog/The_2024_LinuxCNC_Norwegian_developer_gathering.html">The 2024 LinuxCNC Norwegian developer gathering</a>
423 </div>
424 <div class="date">
425 31st May 2024
426 </div>
427 <div class="body">
428 <p><a href="https://linuxcnc.org/">The LinuxCNC project</a> is still
429 going strong. And I believe this great software system for numerical control of
430 machines such as milling machines, lathes, plasma cutters, routers,
431 cutting machines, robots and hexapods, would do even better with more
432 in-person developer gatherings, so we plan to organise such gathering
433 this summer too.</p>
434
435 <p>The Norwegian LinuxCNC developer gathering take place the weekend
436 Friday July 5th to 7th this year, and is open for everyone interested
437 in contributing to LinuxCNC and free software manufacturing. Up to
438 date information about the gathering can be found in
439 <a href="https://sourceforge.net/p/emc/mailman/emc-developers/thread/123eaae0-f3b9-4170-a251-b7d608f1e974%40bofh.no/">the
440 developer mailing list thread</a> where the gathering was announced.
441 Thanks to the good people at
442
443 <a href="https://www.debian.org/">Debian</a> as well as leftover money
444 from last years gathering from
445 <a href="https://www.redpill-linpro.com/">Redpill-Linpro</a> and
446 <a href="https://www.nuugfoundation.no/no/">NUUG Foundation</a>, we
447 have enough sponsor funds to pay for food, and probably also shelter
448 for the people traveling from afar to join us. If you would like to
449 join the gathering, get in touch and add your details on
450 <a href="https://pad.efn.no/p/linuxcnc-2024-norway">the pad</a>.</p>
451
452 <p>As usual, if you use Bitcoin and want to show your support of my
453 activities, please send Bitcoin donations to my address
454 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
455
456 </div>
457 <div class="tags">
458
459
460 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/linuxcnc">linuxcnc</a>.
461
462
463 </div>
464 </div>
465 <div class="padding"></div>
466
467 <div class="entry">
468 <div class="title">
469 <a href="http://www.hungry.com/~pere/blog/45_orphaned_Debian_packages_moved_to_git__391_to_go.html">45 orphaned Debian packages moved to git, 391 to go</a>
470 </div>
471 <div class="date">
472 25th April 2024
473 </div>
474 <div class="body">
475 <p>Nine days ago, I started migrating orphaned Debian packages with no
476 version control system listed in debian/control of the source to git.
477 At the time there were 438 such packages. Now there are 391,
478 according to the UDD. In reality it is slightly less, as there is a
479 delay between uploads and UDD updates. In the nine days since, I have
480 thus been able to work my way through ten percent of the packages. I
481 am starting to run out of steam, and hope someone else will also help
482 brushing some dust of these packages. Here is a recipe how to do it.
483
484 I start by picking a random package by querying the UDD for a list of
485 10 random packages from the set of remaining packages:
486
487 <blockquote><pre>
488 PGPASSWORD="udd-mirror" psql --port=5432 --host=udd-mirror.debian.net \
489 --username=udd-mirror udd -c "select source from sources \
490 where release = 'sid' and (vcs_url ilike '%anonscm.debian.org%' \
491 OR vcs_browser ilike '%anonscm.debian.org%' or vcs_url IS NULL \
492 OR vcs_browser IS NULL) AND maintainer ilike '%packages@qa.debian.org%' \
493 order by random() limit 10;"
494 </pre></blockquote>
495
496 <p>Next, I visit http://salsa.debian.org/debian and search for the
497 package name, to ensure no git repository already exist. If it does,
498 I clone it and try to get it to an uploadable state, and add the Vcs-*
499 entries in d/control to make the repository more widely known. These
500 packages are a minority, so I will not cover that use case here.</p>
501
502 <p>For packages without an existing git repository, I run the
503 following script <tt>debian-snap-to-salsa</tt> to prepare a git
504 repository with the existing packaging.</p>
505
506 <blockquote><pre>
507 #!/bin/sh
508 #
509 # See also https://bugs.debian.org/804722#31
510
511 set -e
512
513 # Move to this Standards-Version.
514 SV_LATEST=4.7.0
515
516 PKG="$1"
517
518 if [ -z "$PKG" ]; then
519 echo "usage: $0 <pkgname>"
520 exit 1
521 fi
522
523 if [ -e "${PKG}-salsa" ]; then
524 echo "error: ${PKG}-salsa already exist, aborting."
525 exit 1
526 fi
527
528 if [ -z "ALLOWFAILURE" ] ; then
529 ALLOWFAILURE=false
530 fi
531
532 # Fetch every snapshotted source package. Manually loop until all
533 # transfers succeed, as 'gbp import-dscs --debsnap' do not fail on
534 # download failures.
535 until debsnap --force -v $PKG || $ALLOWFAILURE ; do sleep 1; done
536 mkdir ${PKG}-salsa; cd ${PKG}-salsa
537 git init
538
539 # Specify branches to override any debian/gbp.conf file present in the
540 # source package.
541 gbp import-dscs --debian-branch=master --upstream-branch=upstream \
542 --pristine-tar ../source-$PKG/*.dsc
543
544 # Add Vcs pointing to Salsa Debian project (must be manually created
545 # and pushed to).
546 if ! grep -q ^Vcs- debian/control ; then
547 awk "BEGIN { s=1 } /^\$/ { if (s==1) { print \"Vcs-Browser: https://salsa.debian.org/debian/$PKG\"; print \"Vcs-Git: https://salsa.debian.org/debian/$PKG.git\" }; s=0 } { print }" < debian/control > debian/control.new && mv debian/control.new debian/control
548 git commit -m "Updated vcs in d/control to Salsa." debian/control
549 fi
550
551 # Tell gbp to enforce the use of pristine-tar.
552 inifile +inifile debian/gbp.conf +create +section DEFAULT +key pristine-tar +value True
553 git add debian/gbp.conf
554 git commit -m "Added d/gbp.conf to enforce the use of pristine-tar." debian/gbp.conf
555
556 # Update to latest Standards-Version.
557 SV="$(grep ^Standards-Version: debian/control|awk '{print $2}')"
558 if [ $SV_LATEST != $SV ]; then
559 sed -i "s/\(Standards-Version: \)\(.*\)/\1$SV_LATEST/" debian/control
560 git commit -m "Updated Standards-Version from $SV to $SV_LATEST." debian/control
561 fi
562
563 if grep -q pkg-config debian/control; then
564 sed -i s/pkg-config/pkgconf/ debian/control
565 git commit -m "Replaced obsolete pkg-config build dependency with pkgconf." debian/control
566 fi
567
568 if grep -q libncurses5-dev debian/control; then
569 sed -i s/libncurses5-dev/libncurses-dev/ debian/control
570 git commit -m "Replaced obsolete libncurses5-dev build dependency with libncurses-dev." debian/control
571 fi
572 </pre></blockquote>
573
574 Some times the debsnap script fail to download some of the versions.
575 In those cases I investigate, and if I decide the failing versions
576 will not be missed, I call it using ALLOWFAILURE=true to ignore the
577 problem and create the git repository anyway.</p>
578
579 <p>With the git repository in place, I do a test build (gbp
580 buildpackage) to ensure the build is actually working. If it does not
581 I pick a different package, or if the build failure is trivial to fix,
582 I fix it before continuing. At this stage I revisit
583 http://salsa.debian.org/debian and create the project under this group
584 for the package. I then follow the instructions to publish the local
585 git repository. Here is from a recent example:</p>
586
587 <blockquote><pre>
588 git remote add origin git@salsa.debian.org:debian/perl-byacc.git
589 git push --set-upstream origin master upstream pristine-tar
590 git push --tags
591 </pre></blockquote>
592
593 <p>With a working build, I have a look at the build rules if I want to
594 remove some more dust. I normally try to move to debhelper compat
595 level 13, which involves removing debian/compat and modifying
596 debian/control to build depend on debhelper-compat (=13). I also test
597 with 'Rules-Requires-Root: no' in debian/control and verify in
598 debian/rules that hardening is enabled, and include all of these if
599 the package still build. If it fail to build with level 13, I try
600 with 12, 11, 10 and so on until I find a level where it build, as I do
601 not want to spend a lot of time fixing build issues.</p>
602
603 <p>Some times, when I feel inspired, I make sure debian/copyright is
604 converted to the machine readable format, often by starting with
605 'debhelper -cc' and then cleaning up the autogenerated content until
606 it matches realities. If I feel like it, I might also clean up
607 non-dh-based debian/rules files to use the short style dh build
608 rules.</p>
609
610 <p>Once I have removed all the dust I care to process for the package,
611 I run 'gbp dch' to generate a debian/changelog entry based on the
612 commits done so far, run 'dch -r' to switch from 'UNRELEASED' to
613 'unstable' and get an editor to make sure the 'QA upload' marker is in
614 place and that all long commit descriptions are wrapped into sensible
615 lengths, run 'debcommit --release -a' to commit and tag the new
616 debian/changelog entry, run 'debuild -S' to build a source only
617 package, and 'dput ../perl-byacc_2.0-10_source.changes' to do the
618 upload. During the entire process, and many times per step, I run
619 'debuild' to verify the changes done still work. I also some times
620 verify the set of built files using 'find debian' to see if I can spot
621 any problems (like no file in usr/bin any more or empty package). I
622 also try to fix all lintian issues reported at the end of each
623 'debuild' run.</p>
624
625 <p>If I find Debian specific patches, I try to ensure their metadata
626 is fairly up to date and some times I even try to reach out to
627 upstream, to make the upstream project aware of the patches. Most of
628 my emails bounce, so the success rate is low. For projects with no
629 Homepage entry in debian/control I try to track down one, and for
630 packages with no debian/watch file I try to create one. But at least
631 for some of the packages I have been unable to find a functioning
632 upstream, and must skip both of these.</p>
633
634 <p>If I could handle ten percent in nine days, twenty people could
635 complete the rest in less then five days. I use approximately twenty
636 minutes per package, when I have twenty minutes spare time to spend.
637 Perhaps you got twenty minutes to spare too?</p>
638
639 <p>As usual, if you use Bitcoin and want to show your support of my
640 activities, please send Bitcoin donations to my address
641 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
642
643 <p><strong>Update 2024-05-04:</strong> There is
644 <a href="http://www.hungry.com/~pere/blog/images/2024-05-04-debian-snap-to-salsa.sh">an
645 updated edition of my migration script</a>, last updated
646 2024-05-04.</p>
647
648 </div>
649 <div class="tags">
650
651
652 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
653
654
655 </div>
656 </div>
657 <div class="padding"></div>
658
659 <div class="entry">
660 <div class="title">
661 <a href="http://www.hungry.com/~pere/blog/Time_to_move_orphaned_Debian_packages_to_git.html">Time to move orphaned Debian packages to git</a>
662 </div>
663 <div class="date">
664 14th April 2024
665 </div>
666 <div class="body">
667 <p>There are several packages in Debian without a associated git
668 repository with the packaging history. This is unfortunate and it
669 would be nice if more of these would do so. Quote a lot of these are
670 without a maintainer, ie listed as maintained by the
671 '<a href="https://qa.debian.org/developer.php?email=packages%40qa.debian.org">Debian
672 QA Group</a>' place holder. In fact, 438 packages have this property
673 according to UDD (<tt>SELECT source FROM sources WHERE release = 'sid'
674 AND (vcs_url ilike '%anonscm.debian.org%' OR vcs_browser ilike
675 '%anonscm.debian.org%' or vcs_url IS NULL OR vcs_browser IS NULL) AND
676 maintainer ilike '%packages@qa.debian.org%';</tt>). Such packages can
677 be updated without much coordination by any Debian developer, as they
678 are considered orphaned.</p>
679
680 <p>To try to improve the situation and reduce the number of packages
681 without associated git repository, I started a few days ago to search
682 out candiates and provide them with a git repository under the
683 'debian' collaborative Salsa project. I started with the packages
684 pointing to obsolete Alioth git repositories, and am now working my
685 way across the ones completely without git references. In addition to
686 updating the Vcs-* debian/control fields, I try to update
687 Standards-Version, debhelper compat level, simplify d/rules, switch to
688 Rules-Requires-Root: no and fix lintian issues reported. I only
689 implement those that are trivial to fix, to avoid spending too much
690 time on each orphaned package. So far my experience is that it take
691 aproximately 20 minutes to convert a package without any git
692 references, and a lot more for packages with existing git repositories
693 incompatible with git-buildpackages.</p>
694
695 <p>So far I have converted 10 packages, and I will keep going until I
696 run out of steam. As should be clear from the numbers, there is
697 enough packages remaining for more people to do the same without
698 stepping on each others toes. I find it useful to start by searching
699 for a git repo already on salsa, as I find that some times a git repo
700 has already been created, but no new version is uploaded to Debian
701 yet. In those cases I start with the existing git repository. I
702 convert to the git-buildpackage+pristine-tar workflow, and ensure a
703 debian/gbp.conf file with "pristine-tar=True" is added early, to avoid
704 uploading a orig.tar.gz with the wrong checksum by mistake. Did that
705 three times in the begin before I remembered my mistake.</p>
706
707 <p>So, if you are a Debian Developer and got some spare time, perhaps
708 considering migrating some orphaned packages to git?</p>
709
710 <p>As usual, if you use Bitcoin and want to show your support of my
711 activities, please send Bitcoin donations to my address
712 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
713
714 </div>
715 <div class="tags">
716
717
718 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
719
720
721 </div>
722 </div>
723 <div class="padding"></div>
724
725 <div class="entry">
726 <div class="title">
727 <a href="http://www.hungry.com/~pere/blog/New_and_improved_sqlcipher_in_Debian_for_accessing_Signal_database.html">New and improved sqlcipher in Debian for accessing Signal database</a>
728 </div>
729 <div class="date">
730 12th November 2023
731 </div>
732 <div class="body">
733 <p>For a while now I wanted to have direct access to the
734 <a href="https://signal.org/">Signal</a> database of messages and
735 channels of my Desktop edition of Signal. I prefer the enforced end
736 to end encryption of Signal these days for my communication with
737 friends and family, to increase the level of safety and privacy as
738 well as raising the cost of the mass surveillance government and
739 non-government entities practice these days. In August I came across
740 a nice
741 <a href="https://www.yoranbrondsema.com/post/the-guide-to-extracting-statistics-from-your-signal-conversations/">recipe
742 on how to use sqlcipher to extract statistics from the Signal
743 database</a> explaining how to do this. Unfortunately this did not
744 work with the version of sqlcipher in Debian. The
745 <a href="http://tracker.debian.org/sqlcipher/">sqlcipher</a>
746 package is a "fork" of the sqlite package with added support for
747 encrypted databases. Sadly the current Debian maintainer
748 <a href="https://bugs.debian.org/961598">announced more than three
749 years ago that he did not have time to maintain sqlcipher</a>, so it
750 seemed unlikely to be upgraded by the maintainer. I was reluctant to
751 take on the job myself, as I have very limited experience maintaining
752 shared libraries in Debian. After waiting and hoping for a few
753 months, I gave up the last week, and set out to update the package. In
754 the process I orphaned it to make it more obvious for the next person
755 looking at it that the package need proper maintenance.</p>
756
757 <p>The version in Debian was around five years old, and quite a lot of
758 changes had taken place upstream into the Debian maintenance git
759 repository. After spending a few days importing the new upstream
760 versions, realising that upstream did not care much for SONAME
761 versioning as I saw library symbols being both added and removed with
762 minor version number changes to the project, I concluded that I had to
763 do a SONAME bump of the library package to avoid surprising the
764 reverse dependencies. I even added a simple
765 autopkgtest script to ensure the package work as intended. Dug deep
766 into the hole of learning shared library maintenance, I set out a few
767 days ago to upload the new version to Debian experimental to see what
768 the quality assurance framework in Debian had to say about the result.
769 The feedback told me the pacakge was not too shabby, and yesterday I
770 uploaded the latest version to Debian unstable. It should enter
771 testing today or tomorrow, perhaps delayed by
772 <a href="https://bugs.debian.org/1055812">a small library
773 transition</a>.</p>
774
775 <p>Armed with a new version of sqlcipher, I can now have a look at the
776 SQL database in ~/.config/Signal/sql/db.sqlite. First, one need to
777 fetch the encryption key from the Signal configuration using this
778 simple JSON extraction command:</p>
779
780 <pre>/usr/bin/jq -r '."key"' ~/.config/Signal/config.json</pre>
781
782 <p>Assuming the result from that command is 'secretkey', which is a
783 hexadecimal number representing the key used to encrypt the database.
784 Next, one can now connect to the database and inject the encryption
785 key for access via SQL to fetch information from the database. Here
786 is an example dumping the database structure:</p>
787
788 <pre>
789 % sqlcipher ~/.config/Signal/sql/db.sqlite
790 sqlite> PRAGMA key = "x'secretkey'";
791 sqlite> .schema
792 CREATE TABLE sqlite_stat1(tbl,idx,stat);
793 CREATE TABLE conversations(
794 id STRING PRIMARY KEY ASC,
795 json TEXT,
796
797 active_at INTEGER,
798 type STRING,
799 members TEXT,
800 name TEXT,
801 profileName TEXT
802 , profileFamilyName TEXT, profileFullName TEXT, e164 TEXT, serviceId TEXT, groupId TEXT, profileLastFetchedAt INTEGER);
803 CREATE TABLE identityKeys(
804 id STRING PRIMARY KEY ASC,
805 json TEXT
806 );
807 CREATE TABLE items(
808 id STRING PRIMARY KEY ASC,
809 json TEXT
810 );
811 CREATE TABLE sessions(
812 id TEXT PRIMARY KEY,
813 conversationId TEXT,
814 json TEXT
815 , ourServiceId STRING, serviceId STRING);
816 CREATE TABLE attachment_downloads(
817 id STRING primary key,
818 timestamp INTEGER,
819 pending INTEGER,
820 json TEXT
821 );
822 CREATE TABLE sticker_packs(
823 id TEXT PRIMARY KEY,
824 key TEXT NOT NULL,
825
826 author STRING,
827 coverStickerId INTEGER,
828 createdAt INTEGER,
829 downloadAttempts INTEGER,
830 installedAt INTEGER,
831 lastUsed INTEGER,
832 status STRING,
833 stickerCount INTEGER,
834 title STRING
835 , attemptedStatus STRING, position INTEGER DEFAULT 0 NOT NULL, storageID STRING, storageVersion INTEGER, storageUnknownFields BLOB, storageNeedsSync
836 INTEGER DEFAULT 0 NOT NULL);
837 CREATE TABLE stickers(
838 id INTEGER NOT NULL,
839 packId TEXT NOT NULL,
840
841 emoji STRING,
842 height INTEGER,
843 isCoverOnly INTEGER,
844 lastUsed INTEGER,
845 path STRING,
846 width INTEGER,
847
848 PRIMARY KEY (id, packId),
849 CONSTRAINT stickers_fk
850 FOREIGN KEY (packId)
851 REFERENCES sticker_packs(id)
852 ON DELETE CASCADE
853 );
854 CREATE TABLE sticker_references(
855 messageId STRING,
856 packId TEXT,
857 CONSTRAINT sticker_references_fk
858 FOREIGN KEY(packId)
859 REFERENCES sticker_packs(id)
860 ON DELETE CASCADE
861 );
862 CREATE TABLE emojis(
863 shortName TEXT PRIMARY KEY,
864 lastUsage INTEGER
865 );
866 CREATE TABLE messages(
867 rowid INTEGER PRIMARY KEY ASC,
868 id STRING UNIQUE,
869 json TEXT,
870 readStatus INTEGER,
871 expires_at INTEGER,
872 sent_at INTEGER,
873 schemaVersion INTEGER,
874 conversationId STRING,
875 received_at INTEGER,
876 source STRING,
877 hasAttachments INTEGER,
878 hasFileAttachments INTEGER,
879 hasVisualMediaAttachments INTEGER,
880 expireTimer INTEGER,
881 expirationStartTimestamp INTEGER,
882 type STRING,
883 body TEXT,
884 messageTimer INTEGER,
885 messageTimerStart INTEGER,
886 messageTimerExpiresAt INTEGER,
887 isErased INTEGER,
888 isViewOnce INTEGER,
889 sourceServiceId TEXT, serverGuid STRING NULL, sourceDevice INTEGER, storyId STRING, isStory INTEGER
890 GENERATED ALWAYS AS (type IS 'story'), isChangeCreatedByUs INTEGER NOT NULL DEFAULT 0, isTimerChangeFromSync INTEGER
891 GENERATED ALWAYS AS (
892 json_extract(json, '$.expirationTimerUpdate.fromSync') IS 1
893 ), seenStatus NUMBER default 0, storyDistributionListId STRING, expiresAt INT
894 GENERATED ALWAYS
895 AS (ifnull(
896 expirationStartTimestamp + (expireTimer * 1000),
897 9007199254740991
898 )), shouldAffectActivity INTEGER
899 GENERATED ALWAYS AS (
900 type IS NULL
901 OR
902 type NOT IN (
903 'change-number-notification',
904 'contact-removed-notification',
905 'conversation-merge',
906 'group-v1-migration',
907 'keychange',
908 'message-history-unsynced',
909 'profile-change',
910 'story',
911 'universal-timer-notification',
912 'verified-change'
913 )
914 ), shouldAffectPreview INTEGER
915 GENERATED ALWAYS AS (
916 type IS NULL
917 OR
918 type NOT IN (
919 'change-number-notification',
920 'contact-removed-notification',
921 'conversation-merge',
922 'group-v1-migration',
923 'keychange',
924 'message-history-unsynced',
925 'profile-change',
926 'story',
927 'universal-timer-notification',
928 'verified-change'
929 )
930 ), isUserInitiatedMessage INTEGER
931 GENERATED ALWAYS AS (
932 type IS NULL
933 OR
934 type NOT IN (
935 'change-number-notification',
936 'contact-removed-notification',
937 'conversation-merge',
938 'group-v1-migration',
939 'group-v2-change',
940 'keychange',
941 'message-history-unsynced',
942 'profile-change',
943 'story',
944 'universal-timer-notification',
945 'verified-change'
946 )
947 ), mentionsMe INTEGER NOT NULL DEFAULT 0, isGroupLeaveEvent INTEGER
948 GENERATED ALWAYS AS (
949 type IS 'group-v2-change' AND
950 json_array_length(json_extract(json, '$.groupV2Change.details')) IS 1 AND
951 json_extract(json, '$.groupV2Change.details[0].type') IS 'member-remove' AND
952 json_extract(json, '$.groupV2Change.from') IS NOT NULL AND
953 json_extract(json, '$.groupV2Change.from') IS json_extract(json, '$.groupV2Change.details[0].aci')
954 ), isGroupLeaveEventFromOther INTEGER
955 GENERATED ALWAYS AS (
956 isGroupLeaveEvent IS 1
957 AND
958 isChangeCreatedByUs IS 0
959 ), callId TEXT
960 GENERATED ALWAYS AS (
961 json_extract(json, '$.callId')
962 ));
963 CREATE TABLE sqlite_stat4(tbl,idx,neq,nlt,ndlt,sample);
964 CREATE TABLE jobs(
965 id TEXT PRIMARY KEY,
966 queueType TEXT STRING NOT NULL,
967 timestamp INTEGER NOT NULL,
968 data STRING TEXT
969 );
970 CREATE TABLE reactions(
971 conversationId STRING,
972 emoji STRING,
973 fromId STRING,
974 messageReceivedAt INTEGER,
975 targetAuthorAci STRING,
976 targetTimestamp INTEGER,
977 unread INTEGER
978 , messageId STRING);
979 CREATE TABLE senderKeys(
980 id TEXT PRIMARY KEY NOT NULL,
981 senderId TEXT NOT NULL,
982 distributionId TEXT NOT NULL,
983 data BLOB NOT NULL,
984 lastUpdatedDate NUMBER NOT NULL
985 );
986 CREATE TABLE unprocessed(
987 id STRING PRIMARY KEY ASC,
988 timestamp INTEGER,
989 version INTEGER,
990 attempts INTEGER,
991 envelope TEXT,
992 decrypted TEXT,
993 source TEXT,
994 serverTimestamp INTEGER,
995 sourceServiceId STRING
996 , serverGuid STRING NULL, sourceDevice INTEGER, receivedAtCounter INTEGER, urgent INTEGER, story INTEGER);
997 CREATE TABLE sendLogPayloads(
998 id INTEGER PRIMARY KEY ASC,
999
1000 timestamp INTEGER NOT NULL,
1001 contentHint INTEGER NOT NULL,
1002 proto BLOB NOT NULL
1003 , urgent INTEGER, hasPniSignatureMessage INTEGER DEFAULT 0 NOT NULL);
1004 CREATE TABLE sendLogRecipients(
1005 payloadId INTEGER NOT NULL,
1006
1007 recipientServiceId STRING NOT NULL,
1008 deviceId INTEGER NOT NULL,
1009
1010 PRIMARY KEY (payloadId, recipientServiceId, deviceId),
1011
1012 CONSTRAINT sendLogRecipientsForeignKey
1013 FOREIGN KEY (payloadId)
1014 REFERENCES sendLogPayloads(id)
1015 ON DELETE CASCADE
1016 );
1017 CREATE TABLE sendLogMessageIds(
1018 payloadId INTEGER NOT NULL,
1019
1020 messageId STRING NOT NULL,
1021
1022 PRIMARY KEY (payloadId, messageId),
1023
1024 CONSTRAINT sendLogMessageIdsForeignKey
1025 FOREIGN KEY (payloadId)
1026 REFERENCES sendLogPayloads(id)
1027 ON DELETE CASCADE
1028 );
1029 CREATE TABLE preKeys(
1030 id STRING PRIMARY KEY ASC,
1031 json TEXT
1032 , ourServiceId NUMBER
1033 GENERATED ALWAYS AS (json_extract(json, '$.ourServiceId')));
1034 CREATE TABLE signedPreKeys(
1035 id STRING PRIMARY KEY ASC,
1036 json TEXT
1037 , ourServiceId NUMBER
1038 GENERATED ALWAYS AS (json_extract(json, '$.ourServiceId')));
1039 CREATE TABLE badges(
1040 id TEXT PRIMARY KEY,
1041 category TEXT NOT NULL,
1042 name TEXT NOT NULL,
1043 descriptionTemplate TEXT NOT NULL
1044 );
1045 CREATE TABLE badgeImageFiles(
1046 badgeId TEXT REFERENCES badges(id)
1047 ON DELETE CASCADE
1048 ON UPDATE CASCADE,
1049 'order' INTEGER NOT NULL,
1050 url TEXT NOT NULL,
1051 localPath TEXT,
1052 theme TEXT NOT NULL
1053 );
1054 CREATE TABLE storyReads (
1055 authorId STRING NOT NULL,
1056 conversationId STRING NOT NULL,
1057 storyId STRING NOT NULL,
1058 storyReadDate NUMBER NOT NULL,
1059
1060 PRIMARY KEY (authorId, storyId)
1061 );
1062 CREATE TABLE storyDistributions(
1063 id STRING PRIMARY KEY NOT NULL,
1064 name TEXT,
1065
1066 senderKeyInfoJson STRING
1067 , deletedAtTimestamp INTEGER, allowsReplies INTEGER, isBlockList INTEGER, storageID STRING, storageVersion INTEGER, storageUnknownFields BLOB, storageNeedsSync INTEGER);
1068 CREATE TABLE storyDistributionMembers(
1069 listId STRING NOT NULL REFERENCES storyDistributions(id)
1070 ON DELETE CASCADE
1071 ON UPDATE CASCADE,
1072 serviceId STRING NOT NULL,
1073
1074 PRIMARY KEY (listId, serviceId)
1075 );
1076 CREATE TABLE uninstalled_sticker_packs (
1077 id STRING NOT NULL PRIMARY KEY,
1078 uninstalledAt NUMBER NOT NULL,
1079 storageID STRING,
1080 storageVersion NUMBER,
1081 storageUnknownFields BLOB,
1082 storageNeedsSync INTEGER NOT NULL
1083 );
1084 CREATE TABLE groupCallRingCancellations(
1085 ringId INTEGER PRIMARY KEY,
1086 createdAt INTEGER NOT NULL
1087 );
1088 CREATE TABLE IF NOT EXISTS 'messages_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
1089 CREATE TABLE IF NOT EXISTS 'messages_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
1090 CREATE TABLE IF NOT EXISTS 'messages_fts_content'(id INTEGER PRIMARY KEY, c0);
1091 CREATE TABLE IF NOT EXISTS 'messages_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
1092 CREATE TABLE IF NOT EXISTS 'messages_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
1093 CREATE TABLE edited_messages(
1094 messageId STRING REFERENCES messages(id)
1095 ON DELETE CASCADE,
1096 sentAt INTEGER,
1097 readStatus INTEGER
1098 , conversationId STRING);
1099 CREATE TABLE mentions (
1100 messageId REFERENCES messages(id) ON DELETE CASCADE,
1101 mentionAci STRING,
1102 start INTEGER,
1103 length INTEGER
1104 );
1105 CREATE TABLE kyberPreKeys(
1106 id STRING PRIMARY KEY NOT NULL,
1107 json TEXT NOT NULL, ourServiceId NUMBER
1108 GENERATED ALWAYS AS (json_extract(json, '$.ourServiceId')));
1109 CREATE TABLE callsHistory (
1110 callId TEXT PRIMARY KEY,
1111 peerId TEXT NOT NULL, -- conversation id (legacy) | uuid | groupId | roomId
1112 ringerId TEXT DEFAULT NULL, -- ringer uuid
1113 mode TEXT NOT NULL, -- enum "Direct" | "Group"
1114 type TEXT NOT NULL, -- enum "Audio" | "Video" | "Group"
1115 direction TEXT NOT NULL, -- enum "Incoming" | "Outgoing
1116 -- Direct: enum "Pending" | "Missed" | "Accepted" | "Deleted"
1117 -- Group: enum "GenericGroupCall" | "OutgoingRing" | "Ringing" | "Joined" | "Missed" | "Declined" | "Accepted" | "Deleted"
1118 status TEXT NOT NULL,
1119 timestamp INTEGER NOT NULL,
1120 UNIQUE (callId, peerId) ON CONFLICT FAIL
1121 );
1122 [ dropped all indexes to save space in this blog post ]
1123 CREATE TRIGGER messages_on_view_once_update AFTER UPDATE ON messages
1124 WHEN
1125 new.body IS NOT NULL AND new.isViewOnce = 1
1126 BEGIN
1127 DELETE FROM messages_fts WHERE rowid = old.rowid;
1128 END;
1129 CREATE TRIGGER messages_on_insert AFTER INSERT ON messages
1130 WHEN new.isViewOnce IS NOT 1 AND new.storyId IS NULL
1131 BEGIN
1132 INSERT INTO messages_fts
1133 (rowid, body)
1134 VALUES
1135 (new.rowid, new.body);
1136 END;
1137 CREATE TRIGGER messages_on_delete AFTER DELETE ON messages BEGIN
1138 DELETE FROM messages_fts WHERE rowid = old.rowid;
1139 DELETE FROM sendLogPayloads WHERE id IN (
1140 SELECT payloadId FROM sendLogMessageIds
1141 WHERE messageId = old.id
1142 );
1143 DELETE FROM reactions WHERE rowid IN (
1144 SELECT rowid FROM reactions
1145 WHERE messageId = old.id
1146 );
1147 DELETE FROM storyReads WHERE storyId = old.storyId;
1148 END;
1149 CREATE VIRTUAL TABLE messages_fts USING fts5(
1150 body,
1151 tokenize = 'signal_tokenizer'
1152 );
1153 CREATE TRIGGER messages_on_update AFTER UPDATE ON messages
1154 WHEN
1155 (new.body IS NULL OR old.body IS NOT new.body) AND
1156 new.isViewOnce IS NOT 1 AND new.storyId IS NULL
1157 BEGIN
1158 DELETE FROM messages_fts WHERE rowid = old.rowid;
1159 INSERT INTO messages_fts
1160 (rowid, body)
1161 VALUES
1162 (new.rowid, new.body);
1163 END;
1164 CREATE TRIGGER messages_on_insert_insert_mentions AFTER INSERT ON messages
1165 BEGIN
1166 INSERT INTO mentions (messageId, mentionAci, start, length)
1167
1168 SELECT messages.id, bodyRanges.value ->> 'mentionAci' as mentionAci,
1169 bodyRanges.value ->> 'start' as start,
1170 bodyRanges.value ->> 'length' as length
1171 FROM messages, json_each(messages.json ->> 'bodyRanges') as bodyRanges
1172 WHERE bodyRanges.value ->> 'mentionAci' IS NOT NULL
1173
1174 AND messages.id = new.id;
1175 END;
1176 CREATE TRIGGER messages_on_update_update_mentions AFTER UPDATE ON messages
1177 BEGIN
1178 DELETE FROM mentions WHERE messageId = new.id;
1179 INSERT INTO mentions (messageId, mentionAci, start, length)
1180
1181 SELECT messages.id, bodyRanges.value ->> 'mentionAci' as mentionAci,
1182 bodyRanges.value ->> 'start' as start,
1183 bodyRanges.value ->> 'length' as length
1184 FROM messages, json_each(messages.json ->> 'bodyRanges') as bodyRanges
1185 WHERE bodyRanges.value ->> 'mentionAci' IS NOT NULL
1186
1187 AND messages.id = new.id;
1188 END;
1189 sqlite>
1190 </pre>
1191
1192 <p>Finally I have the tool needed to inspect and process Signal
1193 messages that I need, without using the vendor provided client. Now
1194 on to transforming it to a more useful format.</p>
1195
1196 <p>As usual, if you use Bitcoin and want to show your support of my
1197 activities, please send Bitcoin donations to my address
1198 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
1199
1200 </div>
1201 <div class="tags">
1202
1203
1204 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/sikkerhet">sikkerhet</a>, <a href="http://www.hungry.com/~pere/blog/tags/surveillance">surveillance</a>.
1205
1206
1207 </div>
1208 </div>
1209 <div class="padding"></div>
1210
1211 <div class="entry">
1212 <div class="title">
1213 <a href="http://www.hungry.com/~pere/blog/New_chrpath_release_0_17.html">New chrpath release 0.17</a>
1214 </div>
1215 <div class="date">
1216 10th November 2023
1217 </div>
1218 <div class="body">
1219 <p>The chrpath package provide a simple command line tool to remove or
1220 modify the rpath or runpath of compiled ELF program. It is almost 10
1221 years since I updated the code base, but I stumbled over the tool
1222 today, and decided it was time to move the code base from Subversion
1223 to git and find a new home for it, as the previous one (Debian Alioth)
1224 has been shut down. I decided to go with
1225 <a href="https://codeberg.org/">Codeberg</a> this time, as it is my git
1226 service of choice these days, did a quick and dirty migration to git
1227 and updated the code with a few patches I found in the Debian bug
1228 tracker. These are the release notes:</p>
1229
1230 <p>New in 0.17 released 2023-11-10:</p>
1231
1232 <ul>
1233 <li>Moved project to Codeberg, as Alioth is shut down.</li>
1234 <li>Add Solaris support (use &lt;sys/byteorder.h> instead of &lt;byteswap.h>).
1235 Patch from Rainer Orth.</li>
1236 <li>Added missing newline from printf() line. Patch from Frank Dana.</li>
1237 <li>Corrected handling of multiple ELF sections. Patch from Frank Dana.</li>
1238 <li>Updated build rules for .deb. Partly based on patch from djcj.</li>
1239 </ul>
1240
1241 <p>The latest edition is tagged and available from
1242 <a href="https://codeberg.org/pere/chrpath">https://codeberg.org/pere/chrpath</a>.
1243
1244 <p>As usual, if you use Bitcoin and want to show your support of my
1245 activities, please send Bitcoin donations to my address
1246 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
1247
1248 </div>
1249 <div class="tags">
1250
1251
1252 Tags: <a href="http://www.hungry.com/~pere/blog/tags/chrpath">chrpath</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
1253
1254
1255 </div>
1256 </div>
1257 <div class="padding"></div>
1258
1259 <div class="entry">
1260 <div class="title">
1261 <a href="http://www.hungry.com/~pere/blog/Test_framework_for_DocBook_processors___formatters.html">Test framework for DocBook processors / formatters</a>
1262 </div>
1263 <div class="date">
1264 5th November 2023
1265 </div>
1266 <div class="body">
1267 <p>All the books I have published so far has been using
1268 <a href="https://docbook.org/">DocBook</a> somewhere in the process.
1269 For the first book, the source format was DocBook, while for every
1270 later book it was an intermediate format used as the stepping stone to
1271 be able to present the same manuscript in several formats, on paper,
1272 as ebook in ePub format, as a HTML page and as a PDF file either for
1273 paper production or for Internet consumption. This is made possible
1274 with a wide variety of free software tools with DocBook support in
1275 Debian. The source format of later books have been docx via rst,
1276 Markdown, Filemaker and Asciidoc, and for all of these I was able to
1277 generate a suitable DocBook file for further processing using
1278 <a href="https://tracker.debian.org/pkg/pandoc">pandoc</a>,
1279 <a href="https://tracker.debian.org/pkg/asciidoc">a2x</a> and
1280 <a href="https://tracker.debian.org/pkg/asciidoctor">asciidoctor</a>,
1281 as well as rendering using
1282 <a href="https://tracker.debian.org/pkg/xmlto">xmlto</a>,
1283 <a href="https://tracker.debian.org/pkg/dbtoepub">dbtoepub</a>,
1284 <a href="https://tracker.debian.org/pkg/dblatex">dblatex</a>,
1285 <a href="https://tracker.debian.org/pkg/docbook-xsl">docbook-xsl</a> and
1286 <a href="https://tracker.debian.org/pkg/fop">fop</a>.</p>
1287
1288 <p>Most of the <a href="http://www.hungry.com/~pere/publisher/">books I
1289 have published</a> are translated books, with English as the source
1290 language. The use of
1291 <a href="https://tracker.debian.org/pkg/po4a">po4a</a> to
1292 handle translations using the gettext PO format has been a blessing,
1293 but publishing translated books had triggered the need to ensure the
1294 DocBook tools handle relevant languages correctly. For every new
1295 language I have published, I had to submit patches dblatex, dbtoepub
1296 and docbook-xsl fixing incorrect language and country specific issues
1297 in the framework themselves. Typically this has been missing keywords
1298 like 'figure' or sort ordering of index entries. After a while it
1299 became tiresome to only discover issues like this by accident, and I
1300 decided to write a DocBook "test framework" exercising various
1301 features of DocBook and allowing me to see all features exercised for
1302 a given language. It consist of a set of DocBook files, a version 4
1303 book, a version 5 book, a v4 book set, a v4 selection of problematic
1304 tables, one v4 testing sidefloat and finally one v4 testing a book of
1305 articles. The DocBook files are accompanied with a set of build rules
1306 for building PDF using dblatex and docbook-xsl/fop, HTML using xmlto
1307 or docbook-xsl and epub using dbtoepub. The result is a set of files
1308 visualizing footnotes, indexes, table of content list, figures,
1309 formulas and other DocBook features, allowing for a quick review on
1310 the completeness of the given locale settings. To build with a
1311 different language setting, all one need to do is edit the lang= value
1312 in the .xml file to pick a different ISO 639 code value and run
1313 'make'.</p>
1314
1315 <p>The <a href="https://codeberg.org/pere/docbook-example/">test framework
1316 source code</a> is available from Codeberg, and a generated set of
1317 presentations of the various examples is available as Codeberg static
1318 web pages at
1319 <a href="https://pere.codeberg.page/docbook-example/">https://pere.codeberg.page/docbook-example/</a>.
1320 Using this test framework I have been able to discover and report
1321 several bugs and missing features in various tools, and got a lot of
1322 them fixed. For example I got Northern Sami keywords added to both
1323 docbook-xsl and dblatex, fixed several typos in Norwegian bokmål and
1324 Norwegian Nynorsk, support for non-ascii title IDs added to pandoc,
1325 Norwegian index sorting support fixed in xindy and initial Norwegian
1326 Bokmål support added to dblatex. Some issues still remains, though.
1327 Default index sorting rules are still broken in several tools, so the
1328 Norwegian letters æ, ø and å are more often than not sorted properly
1329 in the book index.</p>
1330
1331 <p>The test framework recently received some more polish, as part of
1332 publishing my latest book. This book contained a lot of fairly
1333 complex tables, which exposed bugs in some of the tools. This made me
1334 add a new test file with various tables, as well as spend some time to
1335 brush up the build rules. My goal is for the test framework to
1336 exercise all DocBook features to make it easier to see which features
1337 work with different processors, and hopefully get them all to support
1338 the full set of DocBook features. Feel free to send patches to extend
1339 the test set, and test it with your favorite DocBook processor.
1340 Please visit these two URLs to learn more:</p>
1341
1342 <ul>
1343 <li><a href="https://codeberg.org/pere/docbook-example/">https://codeberg.org/pere/docbook-example/</a></li>
1344 <li><a href="https://pere.codeberg.page/docbook-example/">https://pere.codeberg.page/docbook-example/</a></li>
1345 </ul>
1346
1347 <p>If you want to learn more on Docbook and translations, I recommend
1348 having a look at the <a href="https://docbook.org/">the DocBook
1349 web site</a>,
1350 <a href="https://doccookbook.sourceforge.net/html/en/">the DoCookBook
1351 site<a/> and my earlier blog post on
1352 <a href="http://www.hungry.com/~pere/blog/From_English_wiki_to_translated_PDF_and_epub_via_Docbook.html">how
1353 the Skolelinux project process and translate documentation</a>, a talk I gave earlier this year on
1354 <a href="https://www.nuug.no/aktiviteter/20230314-oversetting-og-publisering-av-b%c3%b8ker-med-fri-programvare/">how
1355 to translate and publish books using free software</a> (Norwegian
1356 only).</p>
1357
1358 <!--
1359
1360 https://github.com/docbook/xslt10-stylesheets/issues/205 (docbook-xsl: sme support)
1361 https://bugs.debian.org/968437 (xindy: index sorting rules for nb/nn)
1362 https://bugs.debian.org/856123 (pandoc: markdown to docbook with non-english titles)
1363 https://bugs.debian.org/864813 (dblatex: missing nb words)
1364 https://bugs.debian.org/756386 (dblatex: index sorting rules for nb/nn)
1365 https://bugs.debian.org/796871 (dbtoepub: index sorting rules for nb/nn)
1366 https://bugs.debian.org/792616 (dblatex: PDF metadata)
1367 https://bugs.debian.org/686908 (docbook-xsl: index sorting rules for nb/nn)
1368 https://sourceforge.net/tracker/?func=detail&atid=373747&aid=3556630&group_id=21935 (docbook-xsl: nb/nn support)
1369 https://bugs.debian.org/684391 (dblatex: initial nb support)
1370
1371 -->
1372
1373 <p>As usual, if you use Bitcoin and want to show your support of my
1374 activities, please send Bitcoin donations to my address
1375 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
1376
1377 </div>
1378 <div class="tags">
1379
1380
1381 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/docbook">docbook</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
1382
1383
1384 </div>
1385 </div>
1386 <div class="padding"></div>
1387
1388 <div class="entry">
1389 <div class="title">
1390 <a href="http://www.hungry.com/~pere/blog/What_did_I_learn_from_OpenSnitch_this_summer_.html">What did I learn from OpenSnitch this summer?</a>
1391 </div>
1392 <div class="date">
1393 11th June 2023
1394 </div>
1395 <div class="body">
1396 <p>With yesterdays
1397 <a href="https://www.debian.org/News/2023/20230610">release of Debian
1398 12 Bookworm</a>, I am happy to know the
1399 <a href="https://tracker.debian.org/pkg/opensnitch">the interactive
1400 application firewall OpenSnitch</a> is available for a wider audience.
1401 I have been running it for a few weeks now, and have been surprised
1402 about some of the programs connecting to the Internet. Some programs
1403 are obviously calling out from my machine, like the NTP network based
1404 clock adjusting system and Tor to reach other Tor clients, but others
1405 were more dubious. For example, the KDE Window manager try to look up
1406 the host name in DNS, for no apparent reason, but if this lookup is
1407 blocked the KDE desktop get periodically stuck when I use it. Another
1408 surprise was how much Firefox call home directly to mozilla.com,
1409 mozilla.net and googleapis.com, to mention a few, when I visit other
1410 web pages. This direct connection happen even if I told Firefox to
1411 always use a proxy, and the proxy setting is ignored for this traffic.
1412 Other surprising connections come from audacity and dirmngr (I do not
1413 use Gnome). It took some trial and error to get a good default set of
1414 permissions. Without it, I would get popups asking for permissions at
1415 any time, also the most inconvenient ones where I am in the middle of
1416 a time sensitive gaming session.</p>
1417
1418 <p>I suspect some application developers should rethink when then need
1419 to use network connections or DNS lookups, and recommend testing
1420 OpenSnitch (only <tt>apt install opensnitch</tt> away in Debian
1421 Bookworm) to locate and report any surprising Internet connections on
1422 your desktop machine.</p>
1423
1424 <p>At the moment the upstream developer and Debian package maintainer
1425 is working on making the system more reliable in Debian, by enabling
1426 the eBPF kernel module to track processes and connections instead of
1427 depending in content in /proc/. This should enter unstable fairly
1428 soon.</p>
1429
1430 <p>As usual, if you use Bitcoin and want to show your support of my
1431 activities, please send Bitcoin donations to my address
1432 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
1433
1434 <p><strong>Update 2023-06-12</strong>: I got a tip about
1435 <a href="https://wiki.debian.org/PrivacyIssues">a list of privacy
1436 issues in Free Software</a> and the
1437 <a href="irc://irc.debian.org/%23debian-privacy">#debian-privacy IRC
1438 channel</a> discussing these topics.</p>
1439
1440
1441 </div>
1442 <div class="tags">
1443
1444
1445 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/opensnitch">opensnitch</a>.
1446
1447
1448 </div>
1449 </div>
1450 <div class="padding"></div>
1451
1452 <div class="entry">
1453 <div class="title">
1454 <a href="http://www.hungry.com/~pere/blog/wmbusmeters__parse_data_from_your_utility_meter___nice_free_software.html">wmbusmeters, parse data from your utility meter - nice free software</a>
1455 </div>
1456 <div class="date">
1457 19th May 2023
1458 </div>
1459 <div class="body">
1460 <p>There is a European standard for reading utility meters like water,
1461 gas, electricity or heat distribution meters. The
1462 <a href="https://en.wikipedia.org/wiki/Meter-Bus">Meter-Bus standard
1463 (EN 13757-2, EN 13757-3 and EN 13757–4)</a> provide a cross vendor way
1464 to talk to and collect meter data. I ran into this standard when I
1465 wanted to monitor some heat distribution meters, and managed to find
1466 free software that could do the job. The meters in question broadcast
1467 encrypted messages with meter information via radio, and the hardest
1468 part was to track down the encryption keys from the vendor. With this
1469 in place I could set up a MQTT gateway to submit the meter data for
1470 graphing.</p>
1471
1472 <p>The free software systems in question,
1473 <a href="https://tracker.debian.org/pkg/rtl-wmbus">rtl-wmbus</a> to
1474 read the messages from a software defined radio, and
1475 <a href="https://tracker.debian.org/pkg/wmbusmeters">wmbusmeters</a> to
1476 decrypt and decode the content of the messages, is working very well
1477 and allowe me to get frequent updates from my meters. I got in touch
1478 with upstream last year to see if there was any interest in publishing
1479 the packages via Debian. I was very happy to learn that Fredrik
1480 Öhrström volunteered to maintain the packages, and I have since
1481 assisted him in getting Debian package build rules in place as well as
1482 sponsoring the packages into the Debian archive. Sadly we completed
1483 it too late for them to become part of the next stable Debian release
1484 (Bookworm). The wmbusmeters package just cleared the NEW queue. It
1485 will need some work to fix a built problem, but I expect Fredrik will
1486 find a solution soon.</p>
1487
1488 <p>If you got a infrastructure meter supporting the Meter Bus
1489 standard, I strongly recommend having a look at these nice
1490 packages.</p>
1491
1492 <p>As usual, if you use Bitcoin and want to show your support of my
1493 activities, please send Bitcoin donations to my address
1494 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
1495
1496 </div>
1497 <div class="tags">
1498
1499
1500 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nice free software">nice free software</a>.
1501
1502
1503 </div>
1504 </div>
1505 <div class="padding"></div>
1506
1507 <div class="entry">
1508 <div class="title">
1509 <a href="http://www.hungry.com/~pere/blog/The_2023_LinuxCNC_Norwegian_developer_gathering.html">The 2023 LinuxCNC Norwegian developer gathering</a>
1510 </div>
1511 <div class="date">
1512 14th May 2023
1513 </div>
1514 <div class="body">
1515 <p>The LinuxCNC project is making headway these days. A lot of
1516 patches and issues have seen activity on
1517 <a href="https://github.com/LinuxCNC/linuxcnc/">the project github
1518 pages</a> recently. A few weeks ago there was a developer gathering
1519 over at the <a href="https://tormach.com/">Tormach</a> headquarter in
1520 Wisconsin, and now we are planning a new gathering in Norway. If you
1521 wonder what LinuxCNC is, lets quote Wikipedia:</p>
1522
1523 <blockquote>
1524 "LinuxCNC is a software system for numerical control of
1525 machines such as milling machines, lathes, plasma cutters, routers,
1526 cutting machines, robots and hexapods. It can control up to 9 axes or
1527 joints of a CNC machine using G-code (RS-274NGC) as input. It has
1528 several GUIs suited to specific kinds of usage (touch screen,
1529 interactive development)."
1530 </blockquote>
1531
1532 <p>The Norwegian developer gathering take place the weekend June 16th
1533 to 18th this year, and is open for everyone interested in contributing
1534 to LinuxCNC. Up to date information about the gathering can be found
1535 in
1536 <a href="https://sourceforge.net/p/emc/mailman/emc-developers/thread/sa64jp06nob.fsf%40hjemme.reinholdtsen.name/#msg37837251">the
1537 developer mailing list thread</a> where the gathering was announced.
1538 Thanks to the good people at
1539 <a href="https://www.debian.org/">Debian</a>,
1540 <a href="https://www.redpill-linpro.com/">Redpill-Linpro</a> and
1541 <a href="https://www.nuugfoundation.no/no/">NUUG Foundation</a>, we
1542 have enough sponsor funds to pay for food, and shelter for the people
1543 traveling from afar to join us. If you would like to join the
1544 gathering, get in touch.</p>
1545
1546 <p>As usual, if you use Bitcoin and want to show your support of my
1547 activities, please send Bitcoin donations to my address
1548 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
1549
1550 </div>
1551 <div class="tags">
1552
1553
1554 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/linuxcnc">linuxcnc</a>.
1555
1556
1557 </div>
1558 </div>
1559 <div class="padding"></div>
1560
1561 <div class="entry">
1562 <div class="title">
1563 <a href="http://www.hungry.com/~pere/blog/OpenSnitch_in_Debian_ready_for_prime_time.html">OpenSnitch in Debian ready for prime time</a>
1564 </div>
1565 <div class="date">
1566 13th May 2023
1567 </div>
1568 <div class="body">
1569 <p>A bit delayed,
1570 <a href="https://tracker.debian.org/pkg/opensnitch">the interactive
1571 application firewall OpenSnitch</a> package in Debian now got the
1572 latest fixes ready for Debian Bookworm. Because it depend on a
1573 package missing on some architectures, the autopkgtest check of the
1574 testing migration script did not understand that the tests were
1575 actually working, so the migration was delayed. A bug in the package
1576 dependencies is also fixed, so those installing the firewall package
1577 (opensnitch) now also get the GUI admin tool (python3-opensnitch-ui)
1578 installed by default. I am very grateful to Gustavo Iñiguez Goya for
1579 his work on getting the package ready for Debian Bookworm.</p>
1580
1581 <p>Armed with this package I have discovered some surprising
1582 connections from programs I believed were able to work completly
1583 offline, and it has already proven its worth, at least to me. If you
1584 too want to get more familiar with the kind of programs using
1585 Internett connections on your machine, I recommend testing <tt>apt
1586 install opensnitch</tt> in Bookworm and see what you think.</p>
1587
1588 <p>The package is still not able to build its eBPF module within
1589 Debian. Not sure how much work it would be to get it working, but
1590 suspect some kernel related packages need to be extended with more
1591 header files to get it working.</p>
1592
1593 <p>As usual, if you use Bitcoin and want to show your support of my
1594 activities, please send Bitcoin donations to my address
1595 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
1596
1597 </div>
1598 <div class="tags">
1599
1600
1601 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/opensnitch">opensnitch</a>.
1602
1603
1604 </div>
1605 </div>
1606 <div class="padding"></div>
1607
1608 <div class="entry">
1609 <div class="title">
1610 <a href="http://www.hungry.com/~pere/blog/Speech_to_text__she_APTly_whispered__how_hard_can_it_be_.html">Speech to text, she APTly whispered, how hard can it be?</a>
1611 </div>
1612 <div class="date">
1613 23rd April 2023
1614 </div>
1615 <div class="body">
1616 <p>While visiting a convention during Easter, it occurred to me that
1617 it would be great if I could have a digital Dictaphone with
1618 transcribing capabilities, providing me with texts to cut-n-paste into
1619 stuff I need to write. The background is that long drives often bring
1620 up the urge to write on texts I am working on, which of course is out
1621 of the question while driving. With the release of
1622 <a href="https://github.com/openai/whisper/">OpenAI Whisper</a>, this
1623 seem to be within reach with Free Software, so I decided to give it a
1624 go. OpenAI Whisper is a Linux based neural network system to read in
1625 audio files and provide text representation of the speech in that
1626 audio recording. It handle multiple languages and according to its
1627 creators even can translate into a different language than the spoken
1628 one. I have not tested the latter feature. It can either use the CPU
1629 or a GPU with CUDA support. As far as I can tell, CUDA in practice
1630 limit that feature to NVidia graphics cards. I have few of those, as
1631 they do not work great with free software drivers, and have not tested
1632 the GPU option. While looking into the matter, I did discover some
1633 work to provide CUDA support on non-NVidia GPUs, and some work with
1634 the library used by Whisper to port it to other GPUs, but have not
1635 spent much time looking into GPU support yet. I've so far used an old
1636 X220 laptop as my test machine, and only transcribed using its
1637 CPU.</p>
1638
1639 <p>As it from a privacy standpoint is unthinkable to use computers
1640 under control of someone else (aka a "cloud" service) to transcribe
1641 ones thoughts and personal notes, I want to run the transcribing
1642 system locally on my own computers. The only sensible approach to me
1643 is to make the effort I put into this available for any Linux user and
1644 to upload the needed packages into Debian. Looking at Debian Bookworm, I
1645 discovered that only three packages were missing,
1646 <a href="https://bugs.debian.org/1034307">tiktoken</a>,
1647 <a href="https://bugs.debian.org/1034144">triton</a>, and
1648 <a href="https://bugs.debian.org/1034091">openai-whisper</a>. For a while
1649 I also believed
1650 <a href="https://bugs.debian.org/1034286">ffmpeg-python</a> was
1651 needed, but as its
1652 <a href="https://github.com/kkroening/ffmpeg-python/issues/760">upstream
1653 seem to have vanished</a> I found it safer
1654 <a href="https://github.com/openai/whisper/pull/1242">to rewrite
1655 whisper</a> to stop depending on in than to introduce ffmpeg-python
1656 into Debian. I decided to place these packages under the umbrella of
1657 <a href="https://salsa.debian.org/deeplearning-team">the Debian Deep
1658 Learning Team</a>, which seem like the best team to look after such
1659 packages. Discussing the topic within the group also made me aware
1660 that the triton package was already a future dependency of newer
1661 versions of the torch package being planned, and would be needed after
1662 Bookworm is released.</p>
1663
1664 <p>All required code packages have been now waiting in
1665 <a href="https://ftp-master.debian.org/new.html">the Debian NEW
1666 queue</a> since Wednesday, heading for Debian Experimental until
1667 Bookworm is released. An unsolved issue is how to handle the neural
1668 network models used by Whisper. The default behaviour of Whisper is
1669 to require Internet connectivity and download the model requested to
1670 <tt>~/.cache/whisper/</tt> on first invocation. This obviously would
1671 fail <a href="https://people.debian.org/~bap/dfsg-faq.html">the
1672 deserted island test of free software</a> as the Debian packages would
1673 be unusable for someone stranded with only the Debian archive and solar
1674 powered computer on a deserted island.</p>
1675
1676 <p>Because of this, I would love to include the models in the Debian
1677 mirror system. This is problematic, as the models are very large
1678 files, which would put a heavy strain on the Debian mirror
1679 infrastructure around the globe. The strain would be even higher if
1680 the models change often, which luckily as far as I can tell they do
1681 not. The small model, which according to its creator is most useful
1682 for English and in my experience is not doing a great job there
1683 either, is 462 MiB (deb is 414 MiB). The medium model, which to me
1684 seem to handle English speech fairly well is 1.5 GiB (deb is 1.3 GiB)
1685 and the large model is 2.9 GiB (deb is 2.6 GiB). I would assume
1686 everyone with enough resources would prefer to use the large model for
1687 highest quality. I believe the models themselves would have to go
1688 into the non-free part of the Debian archive, as they are not really
1689 including any useful source code for updating the models. The
1690 "source", aka the model training set, according to the creators
1691 consist of "680,000 hours of multilingual and multitask supervised
1692 data collected from the web", which to me reads material with both
1693 unknown copyright terms, unavailable to the general public. In other
1694 words, the source is not available according to the Debian Free
1695 Software Guidelines and the model should be considered non-free.</p>
1696
1697 <p>I asked the Debian FTP masters for advice regarding uploading a
1698 model package on their IRC channel, and based on the feedback there it
1699 is still unclear to me if such package would be accepted into the
1700 archive. In any case I wrote build rules for a
1701 <a href="https://salsa.debian.org/deeplearning-team/openai-whisper-model">OpenAI
1702 Whisper model package</a> and
1703 <a href="https://github.com/openai/whisper/pull/1257">modified the
1704 Whisper code base</a> to prefer shared files under <tt>/usr/</tt> and
1705 <tt>/var/</tt> over user specific files in <tt>~/.cache/whisper/</tt>
1706 to be able to use these model packages, to prepare for such
1707 possibility. One solution might be to include only one of the models
1708 (small or medium, I guess) in the Debian archive, and ask people to
1709 download the others from the Internet. Not quite sure what to do
1710 here, and advice is most welcome (use the debian-ai mailing list).</p>
1711
1712 <p>To make it easier to test the new packages while I wait for them to
1713 clear the NEW queue, I created an APT source targeting bookworm. I
1714 selected Bookworm instead of Bullseye, even though I know the latter
1715 would reach more users, is that some of the required dependencies are
1716 missing from Bullseye and I during this phase of testing did not want
1717 to backport a lot of packages just to get up and running.</p>
1718
1719 <p>Here is a recipe to run as user root if you want to test OpenAI
1720 Whisper using Debian packages on your Debian Bookworm installation,
1721 first adding the APT repository GPG key to the list of trusted keys,
1722 then setting up the APT repository and finally installing the packages
1723 and one of the models:</p>
1724
1725 <p><pre>
1726 curl https://geekbay.nuug.no/~pere/openai-whisper/D78F5C4796F353D211B119E28200D9B589641240.asc \
1727 -o /etc/apt/trusted.gpg.d/pere-whisper.asc
1728 mkdir -p /etc/apt/sources.list.d
1729 cat > /etc/apt/sources.list.d/pere-whisper.list &lt;&lt;EOF
1730 deb https://geekbay.nuug.no/~pere/openai-whisper/ bookworm main
1731 deb-src https://geekbay.nuug.no/~pere/openai-whisper/ bookworm main
1732 EOF
1733 apt update
1734 apt install openai-whisper
1735 </pre></p>
1736
1737 <p>The package work for me, but have not yet been tested on any other
1738 computer than my own. With it, I have been able to (badly) transcribe
1739 a 2 minute 40 second Norwegian audio clip to test using the small
1740 model. This took 11 minutes and around 2.2 GiB of RAM. Transcribing
1741 the same file with the medium model gave a accurate text in 77 minutes
1742 using around 5.2 GiB of RAM. My test machine had too little memory to
1743 test the large model, which I believe require 11 GiB of RAM. In
1744 short, this now work for me using Debian packages, and I hope it will
1745 for you and everyone else once the packages enter Debian.</p>
1746
1747 <p>Now I can start on the audio recording part of this project.</p>
1748
1749 <p>As usual, if you use Bitcoin and want to show your support of my
1750 activities, please send Bitcoin donations to my address
1751 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
1752
1753 </div>
1754 <div class="tags">
1755
1756
1757 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/multimedia">multimedia</a>, <a href="http://www.hungry.com/~pere/blog/tags/video">video</a>.
1758
1759
1760 </div>
1761 </div>
1762 <div class="padding"></div>
1763
1764 <div class="entry">
1765 <div class="title">
1766 <a href="http://www.hungry.com/~pere/blog/rtlsdr_scanner__software_defined_radio_frequency_scanner_for_Linux____nice_free_software.html">rtlsdr-scanner, software defined radio frequency scanner for Linux - nice free software</a>
1767 </div>
1768 <div class="date">
1769 7th April 2023
1770 </div>
1771 <div class="body">
1772 <p>Today I finally found time to track down a useful radio frequency
1773 scanner for my software defined radio. Just for fun I tried to locate
1774 the radios used in the areas, and a good start would be to scan all
1775 the frequencies to see what is in use. I've tried to find a useful
1776 program earlier, but ran out of time before I managed to find a useful
1777 tool. This time I was more successful, and after a few false leads I
1778 found a description of
1779 <a href="https://www.kali.org/tools/rtlsdr-scanner/">rtlsdr-scanner
1780 over at the Kali site</a>, and was able to track down
1781 <a href="https://gitlab.com/kalilinux/packages/rtlsdr-scanner.git">the
1782 Kali package git repository</a> to build a deb package for the
1783 scanner. Sadly the package is missing from the Debian project itself,
1784 at least in Debian Bullseye. Two runtime dependencies,
1785 <a href="https://gitlab.com/kalilinux/packages/python-visvis.git">python-visvis</a>
1786 and
1787 <a href="https://gitlab.com/kalilinux/packages/python-rtlsdr.git">python-rtlsdr</a>
1788 had to be built and installed separately. Luckily '<tt>gbp
1789 buildpackage</tt>' handled them just fine and no further packages had
1790 to be manually built. The end result worked out of the box after
1791 installation.</p>
1792
1793 <p>My initial scans for FM channels worked just fine, so I knew the
1794 scanner was functioning. But when I tried to scan every frequency
1795 from 100 to 1000 MHz, the program stopped unexpectedly near the
1796 completion. After some debugging I discovered USB software radio I
1797 used rejected frequencies above 948 MHz, triggering a unreported
1798 exception breaking the scan. Changing the scan to end at 957 worked
1799 better. I similarly found the lower limit to be around 15, and ended
1800 up with the following full scan:</p>
1801
1802 <p><a href="http://www.hungry.com/~pere/blog/images/2023-04-07-radio-freq-scanning.png"><img src="http://www.hungry.com/~pere/blog/images/2023-04-07-radio-freq-scanning.png" width="100%"></a></p>
1803
1804 <p>Saving the scan did not work, but exporting it as a CSV file worked
1805 just fine. I ended up with around 477k CVS lines with dB level for
1806 the given frequency.</p>
1807
1808 <p>The save failure seem to be a missing UTF-8 encoding issue in the
1809 python code. Will see if I can find time to send a patch
1810 <a href="https://github.com/CdeMills/RTLSDR-Scanner/">upstream</a>
1811 later to fix this exception:</p>
1812
1813 <pre>
1814 Traceback (most recent call last):
1815 File "/usr/lib/python3/dist-packages/rtlsdr_scanner/main_window.py", line 485, in __on_save
1816 save_plot(fullName, self.scanInfo, self.spectrum, self.locations)
1817 File "/usr/lib/python3/dist-packages/rtlsdr_scanner/file.py", line 408, in save_plot
1818 handle.write(json.dumps(data, indent=4))
1819 TypeError: a bytes-like object is required, not 'str'
1820 Traceback (most recent call last):
1821 File "/usr/lib/python3/dist-packages/rtlsdr_scanner/main_window.py", line 485, in __on_save
1822 save_plot(fullName, self.scanInfo, self.spectrum, self.locations)
1823 File "/usr/lib/python3/dist-packages/rtlsdr_scanner/file.py", line 408, in save_plot
1824 handle.write(json.dumps(data, indent=4))
1825 TypeError: a bytes-like object is required, not 'str'
1826 </pre>
1827
1828 <p>As usual, if you use Bitcoin and want to show your support of my
1829 activities, please send Bitcoin donations to my address
1830 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
1831
1832 </div>
1833 <div class="tags">
1834
1835
1836 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nice free software">nice free software</a>.
1837
1838
1839 </div>
1840 </div>
1841 <div class="padding"></div>
1842
1843 <div class="entry">
1844 <div class="title">
1845 <a href="http://www.hungry.com/~pere/blog/OpenSnitch_available_in_Debian_Sid_and_Bookworm.html">OpenSnitch available in Debian Sid and Bookworm</a>
1846 </div>
1847 <div class="date">
1848 25th February 2023
1849 </div>
1850 <div class="body">
1851 <p>Thanks to the efforts of the OpenSnitch lead developer Gustavo
1852 Iñiguez Goya allowing me to sponsor the upload,
1853 <a href="https://tracker.debian.org/pkg/opensnitch">the interactive
1854 application firewall OpenSnitch</a> is now available in Debian
1855 Testing, soon to become the next stable release of Debian.</p>
1856
1857 <p>This is a package which set up a network firewall on one or more
1858 machines, which is controlled by a graphical user interface that will
1859 ask the user if a program should be allowed to connect to the local
1860 network or the Internet. If some background daemon is trying to dial
1861 home, it can be blocked from doing so with a simple mouse click, or by
1862 default simply by not doing anything when the GUI question dialog pop
1863 up. A list of all programs discovered using the network is provided
1864 in the GUI, giving the user an overview of how the machine(s) programs
1865 use the network.</p>
1866
1867 <p>OpenSnitch was uploaded for NEW processing about a month ago, and I
1868 had little hope of it getting accepted and shaping up in time for the
1869 package freeze, but the Debian ftpmasters proved to be amazingly quick
1870 at checking out the package and it was accepted into the archive about
1871 week after the first upload. It is now team maintained under the Go
1872 language team umbrella. A few fixes to the default setup is only in
1873 Sid, and should migrate to Testing/Bookworm in a week.</p>
1874
1875 <p>During testing I ran into an
1876 <a href="https://github.com/evilsocket/opensnitch/issues/813">issue
1877 with Minecraft server broadcasts disappearing</a>, which was quickly
1878 resolved by the developer with a patch and a proposed configuration
1879 change. I've been told this was caused by the Debian packages default
1880 use if /proc/ information to track down kernel status, instead of the
1881 newer eBPF module that can be used. The reason is simply that
1882 upstream and I have failed to find a way to build the eBPF modules for
1883 OpenSnitch without a complete configured Linux kernel source tree,
1884 which as far as we can tell is unavailable as a build dependency in
1885 Debian. We tried unsuccessfully so far to use the kernel-headers
1886 package. It would be great if someone could provide some clues how to
1887 build eBPF modules on build daemons in Debian, possibly without the full
1888 kernel source.</p>
1889
1890 <p>As usual, if you use Bitcoin and want to show your support of my
1891 activities, please send Bitcoin donations to my address
1892 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
1893
1894 </div>
1895 <div class="tags">
1896
1897
1898 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/opensnitch">opensnitch</a>.
1899
1900
1901 </div>
1902 </div>
1903 <div class="padding"></div>
1904
1905 <div class="entry">
1906 <div class="title">
1907 <a href="http://www.hungry.com/~pere/blog/Is_the_desktop_recommending_your_program_for_opening_its_files_.html">Is the desktop recommending your program for opening its files?</a>
1908 </div>
1909 <div class="date">
1910 29th January 2023
1911 </div>
1912 <div class="body">
1913 <p>Linux desktop systems
1914 <a href="https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html">have
1915 standardized</a> how programs present themselves to the desktop
1916 system. If a package include a .desktop file in
1917 /usr/share/applications/, Gnome, KDE, LXDE, Xfce and the other desktop
1918 environments will pick up the file and use its content to generate the
1919 menu of available programs in the system. A lesser known fact is that
1920 a package can also explain to the desktop system how to recognize the
1921 files created by the program in question, and use it to open these
1922 files on request, for example via a GUI file browser.</p>
1923
1924 <p>A while back I ran into a package that did not tell the desktop
1925 system how to recognize its files and was not used to open its files
1926 in the file browser and fixed it. In the process I wrote a simple
1927 debian/tests/ script to ensure the setup keep working. It might be
1928 useful for other packages too, to ensure any future version of the
1929 package keep handling its own files.</p>
1930
1931 <p>For this to work the file format need a useful MIME type that can
1932 be used to identify the format. If the file format do not yet have a
1933 MIME type, it should define one and preferably also
1934 <a href="https://www.iana.org/assignments/media-types/media-types.xhtml">register
1935 it with IANA</a> to ensure the MIME type string is reserved.</p>
1936
1937 <p>The script uses the <tt>xdg-mime</tt> program from xdg-utils to
1938 query the database of standardized package information and ensure it
1939 return sensible values. It also need the location of an example file
1940 for xdg-mime to guess the format of.</p>
1941
1942 <pre>
1943 #!/bin/sh
1944 #
1945 # Author: Petter Reinholdtsen
1946 # License: GPL v2 or later at your choice.
1947 #
1948 # Validate the MIME setup, making sure motor types have
1949 # application/vnd.openmotor+yaml associated with them and is connected
1950 # to the openmotor desktop file.
1951
1952 retval=0
1953
1954 mimetype="application/vnd.openmotor+yaml"
1955 testfile="test/data/real/o3100/motor.ric"
1956 mydesktopfile="openmotor.desktop"
1957
1958 filemime="$(xdg-mime query filetype "$testfile")"
1959
1960 if [ "$mimetype" != "$filemime" ] ; then
1961 retval=1
1962 echo "error: xdg-mime claim motor file MIME type is $filemine, not $mimetype"
1963 else
1964 echo "success: xdg-mime report correct mime type $mimetype for motor file"
1965 fi
1966
1967 desktop=$(xdg-mime query default "$mimetype")
1968
1969 if [ "$mydesktopfile" != "$desktop" ]; then
1970 retval=1
1971 echo "error: xdg-mime claim motor file should be handled by $desktop, not $mydesktopfile"
1972 else
1973 echo "success: xdg-mime agree motor file should be handled by $mydesktopfile"
1974 fi
1975
1976 exit $retval
1977 </pre>
1978
1979 <p>It is a simple way to ensure your users are not very surprised when
1980 they try to open one of your file formats in their file browser.</p>
1981
1982 <p>As usual, if you use Bitcoin and want to show your support of my
1983 activities, please send Bitcoin donations to my address
1984 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
1985
1986 </div>
1987 <div class="tags">
1988
1989
1990 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
1991
1992
1993 </div>
1994 </div>
1995 <div class="padding"></div>
1996
1997 <div class="entry">
1998 <div class="title">
1999 <a href="http://www.hungry.com/~pere/blog/Opensnitch__the_application_level_interactive_firewall__heading_into_the_Debian_archive.html">Opensnitch, the application level interactive firewall, heading into the Debian archive</a>
2000 </div>
2001 <div class="date">
2002 22nd January 2023
2003 </div>
2004 <div class="body">
2005 <p>While reading a
2006 <a href="https://sneak.berlin/20230115/macos-scans-your-local-files-now/">blog
2007 post claiming MacOS X recently started scanning local files and
2008 reporting information about them to Apple</a>, even on a machine where
2009 all such callback features had been disabled, I came across a
2010 description of the Little Snitch application for MacOS X. It seemed
2011 like a very nice tool to have in the tool box, and I decided to see if
2012 something similar was available for Linux.</p>
2013
2014 <p>It did not take long to find
2015 <a href="https://github.com/evilsocket/opensnitch">the OpenSnitch
2016 package</a>, which has been in development since 2017, and now is in
2017 version 1.5.0. It has had a
2018 <a href="https://bugs.debian.org/909567">request for Debian
2019 packaging</a> since 2018, but no-one completed the job so far. Just
2020 for fun, I decided to see if I could help, and I was very happy to
2021 discover that
2022 <a href="https://github.com/evilsocket/opensnitch/issues/304">upstream
2023 want a Debian package too</a>.</p>
2024
2025 <p>After struggling a bit with getting the program to run, figuring
2026 out building Go programs (and a little failed detour to look at eBPF
2027 builds too - help needed), I am very happy to report that I am
2028 sponsoring upstream to maintain the package in Debian, and it has
2029 since this morning been waiting in NEW for the ftpmasters to have a
2030 look. Perhaps it can get into the archive in time for the Bookworm
2031 release?</p>
2032
2033 <p>As usual, if you use Bitcoin and want to show your support of my
2034 activities, please send Bitcoin donations to my address
2035 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
2036
2037 </div>
2038 <div class="tags">
2039
2040
2041 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/opensnitch">opensnitch</a>.
2042
2043
2044 </div>
2045 </div>
2046 <div class="padding"></div>
2047
2048 <div class="entry">
2049 <div class="title">
2050 <a href="http://www.hungry.com/~pere/blog/LinuxCNC_MQTT_publisher_component.html">LinuxCNC MQTT publisher component</a>
2051 </div>
2052 <div class="date">
2053 8th January 2023
2054 </div>
2055 <div class="body">
2056 <p>I watched <a href="https://yewtu.be/watch?v=jmKUV3aNLjk">a 2015
2057 video from Andreas Schiffler</a> the other day, where he set up
2058 <a href="https://linuxcnc.org/">LinuxCNC</a> to send status
2059 information to the MQTT broker IBM Bluemix. As I also use MQTT for
2060 graphing, it occured to me that a generic MQTT LinuxCNC component
2061 would be useful and I set out to implement it. Today I got the first
2062 draft limping along and submitted as
2063 <a href="https://github.com/LinuxCNC/linuxcnc/pull/2253">a patch to the
2064 LinuxCNC project</a>.</p>
2065
2066 <p>The simple part was setting up the MQTT publishing code in Python.
2067 I already have set up other parts submitting data to my Mosquito MQTT
2068 broker, so I could reuse that code. Writing a LinuxCNC component in
2069 Python as new to me, but using existing examples in the code
2070 repository and the extensive documentation, this was fairly straight
2071 forward. The hardest part was creating a automated test for the
2072 component to ensure it was working. Testing it in a simulated
2073 LinuxCNC machine proved very useful, as I discovered features I needed
2074 that I had not thought of yet, and adjusted the code quite a bit to
2075 make it easier to test without a operational MQTT broker
2076 available.</p>
2077
2078 <p>The draft is ready and working, but I am unsure which LinuxCNC HAL
2079 pins I should collect and publish by default (in other words, the
2080 default set of information pieces published), and how to get the
2081 machine name from the LinuxCNC INI file. The latter is a minor
2082 detail, but I expect it would be useful in a setup with several
2083 machines available. I am hoping for feedback from the experienced
2084 LinuxCNC developers and users, to make the component even better
2085 before it can go into the mainland LinuxCNC code base.</p>
2086
2087 <p>Since I started on the MQTT component, I came across
2088 <a href="https://yewtu.be/watch?v=Bqa2grG0XtA">another video from Kent
2089 VanderVelden</a> where he combine LinuxCNC with a set of screen glasses
2090 controlled by a Raspberry Pi, and it occured to me that it would
2091 be useful for such use cases if LinuxCNC also provided a REST API for
2092 querying its status. I hope to start on such component once the MQTT
2093 component is working well.</p>
2094
2095 <p>As usual, if you use Bitcoin and want to show your support of my
2096 activities, please send Bitcoin donations to my address
2097 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
2098
2099 </div>
2100 <div class="tags">
2101
2102
2103 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/linuxcnc">linuxcnc</a>, <a href="http://www.hungry.com/~pere/blog/tags/robot">robot</a>.
2104
2105
2106 </div>
2107 </div>
2108 <div class="padding"></div>
2109
2110 <div class="entry">
2111 <div class="title">
2112 <a href="http://www.hungry.com/~pere/blog/ONVIF_IP_camera_management_tool_finally_in_Debian.html">ONVIF IP camera management tool finally in Debian</a>
2113 </div>
2114 <div class="date">
2115 24th December 2022
2116 </div>
2117 <div class="body">
2118 <p>Merry Christmas to you all. Here is a small gift to all those with
2119 IP cameras following the <a href="https://www.onvif.org/">ONVIF
2120 specification</a>. There is finally a nice command line and GUI tool
2121 in Debian to manage ONVIF IP cameras. After working with upstream for
2122 a few months and sponsoring the upload, I am very happy to report that
2123 the <a href="https://tracker.debian.org/libonvif">libonvif package</a>
2124 entered Debian Sid last night.</p>
2125
2126 <p>The package provide a C library to communicate with such cameras, a
2127 command line tool to locate and update settings of (like password) the
2128 cameras and a GUI tool to configure and control the units as well as
2129 preview the video from the camera. Libonvif is available on Both
2130 Linux and Windows and the GUI tool uses the Qt library. The main
2131 competitors are non-free software, while libonvif is GNU GPL licensed.
2132 I am very glad Debian users in the future can control their cameras
2133 using a free software system provided by Debian. But the ONVIF world
2134 is full of slightly broken firmware, where the cameras pretend to
2135 follow the ONVIF specification but fail to set some configuration
2136 values or refuse to provide video to more than one recipient at the
2137 time, and the onvif project is quite young and might take a while
2138 before it completely work with your camera. Upstream seem eager to
2139 improve the library, so handling any broken camera might be just <a
2140 href="https://github.com/sr99622/libonvif/">a bug report away</a>.</p>
2141
2142 <p>The package just cleared NEW, and need a new source only upload
2143 before it can enter testing. This will happen in the next few
2144 days.</p>
2145
2146 <p>As usual, if you use Bitcoin and want to show your support of my
2147 activities, please send Bitcoin donations to my address
2148 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
2149
2150 </div>
2151 <div class="tags">
2152
2153
2154 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/multimedia">multimedia</a>, <a href="http://www.hungry.com/~pere/blog/tags/standard">standard</a>, <a href="http://www.hungry.com/~pere/blog/tags/surveillance">surveillance</a>.
2155
2156
2157 </div>
2158 </div>
2159 <div class="padding"></div>
2160
2161 <div class="entry">
2162 <div class="title">
2163 <a href="http://www.hungry.com/~pere/blog/Managing_and_using_ONVIF_IP_cameras_with_Linux.html">Managing and using ONVIF IP cameras with Linux</a>
2164 </div>
2165 <div class="date">
2166 19th October 2022
2167 </div>
2168 <div class="body">
2169 <p>Recently I have been looking at how to control and collect data
2170 from a handful IP cameras using Linux. I both wanted to change their
2171 settings and to make their imagery available via a free software
2172 service under my control. Here is a summary of the tools I found.</p>
2173
2174 <p>First I had to identify the cameras and their protocols. As far as
2175 I could tell, they were using some SOAP looking protocol and their
2176 internal web server seem to only work with Microsoft Internet Explorer
2177 with some proprietary binary plugin, which in these days of course is
2178 a security disaster and also made it impossible for me to use the
2179 camera web interface. Luckily I discovered that the SOAP looking
2180 protocol is actually following <a href="https://www.onvif.org/">the
2181 ONVIF specification</a>, which seem to be supported by a lot of IP
2182 cameras these days.</p>
2183
2184 <p>Once the protocol was identified, I was able to find what appear to
2185 be the most popular way to configure ONVIF cameras, the free software
2186 Windows tool named
2187 <a href="https://sourceforge.net/projects/onvifdm/">ONVIF Device
2188 Manager</a>. Lacking any other options at the time, I tried
2189 unsuccessfully to get it running using Wine, but was missing a dotnet
2190 40 library and I found no way around it to run it on Linux.</p>
2191
2192 <p>The next tool I found to configure the cameras were a non-free Linux Qt
2193 client <a href="https://www.lingodigit.com/onvif_nvcdemo.html">ONVIF
2194 Device Tool</a>. I did not like its terms of use, so did not spend
2195 much time on it.</p>
2196
2197 <p>To collect the video and make it available in a web interface, I
2198 found the Zoneminder tool in Debian. A recent version was able to
2199 automatically detect and configure ONVIF devices, so I could use it to
2200 set up motion detection in and collection of the camera output. I had
2201 initial problems getting the ONVIF autodetection to work, as both
2202 Firefox and Chromium <a href="https://bugs.debian.org/1001188">refused
2203 the inter-tab communication</a> being used by the Zoneminder web
2204 pages, but managed to get konqueror to work. Apparently the "Enhanced
2205 Tracking Protection" in Firefox cause the problem. I ended up
2206 upgrading to the Bookworm edition of Zoneminder in the process to try
2207 to fix the issue, and believe the problem might be solved now.</p>
2208
2209 <p>In the process I came across the nice Linux GUI tool
2210 <a href="https://gitlab.com/caspermeijn/onvifviewer/">ONVIF Viewer</a>
2211 allowing me to preview the camera output and validate the login
2212 passwords required. Sadly its author has grown tired of maintaining
2213 the software, so it might not see any future updates. Which is sad,
2214 as the viewer is sightly unstable and the picture tend to lock up.
2215 Note, this lockup might be due to limitations in the cameras and not
2216 the viewer implementation. I suspect the camera is only able to
2217 provide pictures to one client at the time, and the Zoneminder feed
2218 might interfere with the GUI viewer. I have
2219 <a href="https://bugs.debian.org/1000820">asked for the tool to be
2220 included in Debian</a>.</p>
2221
2222 <p>Finally, I found what appear to be very nice Linux free software
2223 replacement for the Windows tool, named
2224 <a href="https://github.com/sr99622/libonvif/">libonvif</a>. It
2225 provide a C library to talk to ONVIF devices as well as a command line
2226 and GUI tool using the library. Using the GUI tool I was able to change
2227 the admin passwords and update other settings of the cameras. I have
2228 <a href="https://bugs.debian.org/1021980">asked for the package to be
2229 included in Debian</a>.</p>
2230
2231 <p>As usual, if you use Bitcoin and want to show your support of my
2232 activities, please send Bitcoin donations to my address
2233 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
2234
2235 <p><strong>Update 2022-10-20</strong>: Since my initial publication of
2236 this text, I got several suggestions for more free software Linux
2237 tools. There is <a href="https://github.com/quatanium/python-onvif">a
2238 ONVIF python library</a> (already
2239 <a href="https://bugs.debian.org/824240">requested into Debian</a>) and
2240 <a href="https://github.com/FalkTannhaeuser/python-onvif-zeep">a python 3
2241 fork</a> using a different SOAP dependency. There is also
2242 <a href="https://www.home-assistant.io/integrations/onvif/">support for
2243 ONVIF in Home Assistant</a>, and there is an alternative to Zoneminder
2244 called <a href="https://www.shinobi.video/">Shinobi</a>. The latter
2245 two are not included in Debian either. I have not tested any of these
2246 so far.</p>
2247
2248 </div>
2249 <div class="tags">
2250
2251
2252 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/multimedia">multimedia</a>, <a href="http://www.hungry.com/~pere/blog/tags/standard">standard</a>, <a href="http://www.hungry.com/~pere/blog/tags/surveillance">surveillance</a>.
2253
2254
2255 </div>
2256 </div>
2257 <div class="padding"></div>
2258
2259 <div class="entry">
2260 <div class="title">
2261 <a href="http://www.hungry.com/~pere/blog/Time_to_translate_the_Bullseye_edition_of_the_Debian_Administrator_s_Handbook.html">Time to translate the Bullseye edition of the Debian Administrator's Handbook</a>
2262 </div>
2263 <div class="date">
2264 12th September 2022
2265 </div>
2266 <div class="body">
2267 <p align="center"><img align="center" src="http://www.hungry.com/~pere/blog/images/2020-10-20-debian-handbook-nb-testprint.jpeg" width="60%"/></p>
2268
2269 <p>(The picture is of the previous edition.)</p>
2270
2271 <p>Almost two years after the previous Norwegian Bokmål translation of
2272 the "<a href="https://debian-handbook.info/">The Debian Administrator's
2273 Handbook</a>" was published, a new edition is finally being prepared. The
2274 english text is updated, and it is time to start working on the
2275 translations. Around 37 percent of the strings have been updated, one
2276 way or another, and the translations starting from a complete Debian Buster
2277 edition now need to bring their translation up from 63% to 100%. The
2278 complete book is licensed using a Creative Commons license, and has
2279 been published in several languages over the years. The translations
2280 are done by volunteers to bring Linux in their native tongue. The
2281 last time I checked, it complete text was available in English,
2282 Norwegian Bokmål, German, Indonesian, Brazil Portuguese and Spanish.
2283 In addition, work has been started for Arabic (Morocco), Catalan,
2284 Chinese (Simplified), Chinese (Traditional), Croatian, Czech, Danish,
2285 Dutch, French, Greek, Italian, Japanese, Korean, Persian, Polish,
2286 Romanian, Russian, Swedish, Turkish and Vietnamese.</p>
2287
2288 <p>The translation is conducted on
2289 <a href="https://hosted.weblate.org/projects/debian-handbook/">the
2290 hosted weblate project page</a>. Prospective translators are
2291 recommeded to subscribe to
2292 <a href="http://lists.alioth.debian.org/mailman/listinfo/debian-handbook-translators">the
2293 translators mailing list</a> and should also check out
2294 <a href="https://debian-handbook.info/contribute/">the instructions for
2295 contributors</a>.</p>
2296
2297 <p>I am one of the Norwegian Bokmål translators of this book, and we
2298 have just started. Your contribution is most welcome.</p>
2299
2300 <p>As usual, if you use Bitcoin and want to show your support of my
2301 activities, please send Bitcoin donations to my address
2302 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
2303
2304 </div>
2305 <div class="tags">
2306
2307
2308 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian-handbook">debian-handbook</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
2309
2310
2311 </div>
2312 </div>
2313 <div class="padding"></div>
2314
2315 <div class="entry">
2316 <div class="title">
2317 <a href="http://www.hungry.com/~pere/blog/Automatic_LinuxCNC_servo_PID_tuning_.html">Automatic LinuxCNC servo PID tuning?</a>
2318 </div>
2319 <div class="date">
2320 16th July 2022
2321 </div>
2322 <div class="body">
2323 <p>While working on a CNC with servo motors controlled by the
2324 <a href="https://en.wikipedia.org/wiki/LinuxCNC">LinuxCNC</a>
2325 <a href="https://en.wikipedia.org/wiki/PID_controller">PID
2326 controller</a>, I recently had to learn how to tune the collection of values
2327 that control such mathematical machinery that a PID controller is. It
2328 proved to be a lot harder than I hoped, and I still have not succeeded
2329 in getting the Z PID controller to successfully defy gravity, nor X
2330 and Y to move accurately and reliably. But while climbing up this
2331 rather steep learning curve, I discovered that some motor control
2332 systems are able to tune their PID controllers. I got the impression
2333 from the documentation that LinuxCNC were not. This proved to be not
2334 true.</p>
2335
2336 <p>The LinuxCNC
2337 <a href="http://linuxcnc.org/docs/html/man/man9/pid.9.html">pid
2338 component</a> is the recommended PID controller to use. It uses eight
2339 constants <tt>Pgain</tt>, <tt>Igain</tt>, <tt>Dgain</tt>,
2340 <tt>bias</tt>, <tt>FF0</tt>, <tt>FF1</tt>, <tt>FF2</tt> and
2341 <tt>FF3</tt> to calculate the output value based on current and wanted
2342 state, and all of these need to have a sensible value for the
2343 controller to behave properly. Note, there are even more values
2344 involved, theser are just the most important ones. In my case I need
2345 the X, Y and Z axes to follow the requested path with little error.
2346 This has proved quite a challenge for someone who have never tuned a
2347 PID controller before, but there is at least some help to be found.
2348
2349 <p>I discovered that included in LinuxCNC was this old PID component
2350 at_pid claiming to have auto tuning capabilities. Sadly it had been
2351 neglected since 2011, and could not be used as a plug in replacement
2352 for the default pid component. One would have to rewriting the
2353 LinuxCNC HAL setup to test at_pid. This was rather sad, when I wanted
2354 to quickly test auto tuning to see if it did a better job than me at
2355 figuring out good P, I and D values to use.</p>
2356
2357 <p>I decided to have a look if the situation could be improved. This
2358 involved trying to understand the code and history of the pid and
2359 at_pid components. Apparently they had a common ancestor, as code
2360 structure, comments and variable names were quite close to each other.
2361 Sadly this was not reflected in the git history, making it hard to
2362 figure out what really happened. My guess is that the author of
2363 <a href="https://github.com/LinuxCNC/linuxcnc/blob/master/src/hal/components/at_pid.c">at_pid.c</a>
2364 took a version of
2365 <a href="https://github.com/LinuxCNC/linuxcnc/blob/master/src/hal/components/pid.c">pid.c</a>,
2366 rewrote it to follow the structure he wished pid.c to have, then added
2367 support for auto tuning and finally got it included into the LinuxCNC
2368 repository. The restructuring and lack of early history made it
2369 harder to figure out which part of the code were relevant to the auto
2370 tuning, and which part of the code needed to be updated to work the
2371 same way as the current pid.c implementation. I started by trying to
2372 isolate relevant changes in pid.c, and applying them to at_pid.c. My
2373 aim was to make sure the at_pid component could replace the pid
2374 component with a simple change in the HAL setup loadrt line, without
2375 having to "rewire" the rest of the HAL configuration. After a few
2376 hours following this approach, I had learned quite a lot about the
2377 code structure of both components, while concluding I was heading down
2378 the wrong rabbit hole, and should get back to the surface and find a
2379 different path.</p>
2380
2381 <p>For the second attempt, I decided to throw away all the PID control
2382 related part of the original at_pid.c, and instead isolate and lift
2383 the auto tuning part of the code and inject it into a copy of pid.c.
2384 This ensured compatibility with the current pid component, while
2385 adding auto tuning as a run time option. To make it easier to identify
2386 the relevant parts in the future, I wrapped all the auto tuning code
2387 with '#ifdef AUTO_TUNER'. The end result behave just like the current
2388 pid component by default, as that part of the code is identical. The
2389 <a href="https://github.com/LinuxCNC/linuxcnc/pull/1820">end result
2390 entered the LinuxCNC master branch</a> a few days ago.</p>
2391
2392 <p>To enable auto tuning, one need to set a few HAL pins in the PID
2393 component. The most important ones are <tt>tune-effort</tt>,
2394 <tt>tune-mode</tt> and <tt>tune-start</tt>. But lets take a step
2395 back, and see what the auto tuning code will do. I do not know the
2396 mathematical foundation of the at_pid algorithm, but from observation
2397 I can tell that the algorithm will, when enabled, produce a square
2398 wave pattern centered around the <tt>bias</tt> value on the output pin
2399 of the PID controller. This can be seen using the HAL Scope provided
2400 by LinuxCNC. In my case, this is translated into voltage (+-10V) sent
2401 to the motor controller, which in turn is translated into motor speed.
2402 So at_pid will ask the motor to move the axis back and forth. The
2403 number of cycles in the pattern is controlled by the
2404 <tt>tune-cycles</tt> pin, and the extremes of the wave pattern is
2405 controlled by the <tt>tune-effort</tt> pin. Of course, trying to
2406 change the direction of a physical object instantly (as in going
2407 directly from a positive voltage to the equivalent negative voltage)
2408 do not change velocity instantly, and it take some time for the object
2409 to slow down and move in the opposite direction. This result in a
2410 more smooth movement wave form, as the axis in question were vibrating
2411 back and forth. When the axis reached the target speed in the
2412 opposing direction, the auto tuner change direction again. After
2413 several of these changes, the average time delay between the 'peaks'
2414 and 'valleys' of this movement graph is then used to calculate
2415 proposed values for Pgain, Igain and Dgain, and insert them into the
2416 HAL model to use by the pid controller. The auto tuned settings are
2417 not great, but htye work a lot better than the values I had been able
2418 to cook up on my own, at least for the horizontal X and Y axis. But I
2419 had to use very small <tt>tune-effort<tt> values, as my motor
2420 controllers error out if the voltage change too quickly. I've been
2421 less lucky with the Z axis, which is moving a heavy object up and
2422 down, and seem to confuse the algorithm. The Z axis movement became a
2423 lot better when I introduced a <tt>bias</tt> value to counter the
2424 gravitational drag, but I will have to work a lot more on the Z axis
2425 PID values.</p>
2426
2427 <p>Armed with this knowledge, it is time to look at how to do the
2428 tuning. Lets say the HAL configuration in question load the PID
2429 component for X, Y and Z like this:</p>
2430
2431 <blockquote><pre>
2432 loadrt pid names=pid.x,pid.y,pid.z
2433 </pre></blockquote>
2434
2435 <p>Armed with the new and improved at_pid component, the new line will
2436 look like this:</p>
2437
2438 <blockquote><pre>
2439 loadrt at_pid names=pid.x,pid.y,pid.z
2440 </pre></blockquote>
2441
2442 <p>The rest of the HAL setup can stay the same. This work because the
2443 components are referenced by name. If the component had used count=3
2444 instead, all use of pid.# had to be changed to at_pid.#.</p>
2445
2446 <p>To start tuning the X axis, move the axis to the middle of its
2447 range, to make sure it do not hit anything when it start moving back
2448 and forth. Next, set the <tt>tune-effort</tt> to a low number in the
2449 output range. I used 0.1 as my initial value. Next, assign 1 to the
2450 <tt>tune-mode</tt> value. Note, this will disable the pid controlling
2451 part and feed 0 to the output pin, which in my case initially caused a
2452 lot of drift. In my case it proved to be a good idea with X and Y to
2453 tune the motor driver to make sure 0 voltage stopped the motor
2454 rotation. On the other hand, for the Z axis this proved to be a bad
2455 idea, so it will depend on your setup. It might help to set the
2456 <tt>bias</tt> value to a output value that reduce or eliminate the
2457 axis drift. Finally, after setting <tt>tune-mode</tt>, set
2458 <tt>tune-start</tt> to 1 to activate the auto tuning. If all go well,
2459 your axis will vibrate for a few seconds and when it is done, new
2460 values for Pgain, Igain and Dgain will be active. To test them,
2461 change <tt>tune-mode</tt> back to 0. Note that this might cause the
2462 machine to suddenly jerk as it bring the axis back to its commanded
2463 position, which it might have drifted away from during tuning. To
2464 summarize with some halcmd lines:</p>
2465
2466 <blockquote><pre>
2467 setp pid.x.tune-effort 0.1
2468 setp pid.x.tune-mode 1
2469 setp pid.x.tune-start 1
2470 # wait for the tuning to complete
2471 setp pid.x.tune-mode 0
2472 </pre></blockquote>
2473
2474 <p>After doing this task quite a few times while trying to figure out
2475 how to properly tune the PID controllers on the machine in, I decided
2476 to figure out if this process could be automated, and wrote a script
2477 to do the entire tuning process from power on. The end result will
2478 ensure the machine is powered on and ready to run, home all axis if it
2479 is not already done, check that the extra tuning pins are available,
2480 move the axis to its mid point, run the auto tuning and re-enable the
2481 pid controller when it is done. It can be run several times. Check
2482 out the
2483 <a href="https://github.com/SebKuzminsky/MazakVQC1540/blob/bon-dev/scripts/run-auto-pid-tuner">run-auto-pid-tuner</a>
2484 script on github if you want to learn how it is done.</p>
2485
2486 <p>My hope is that this little adventure can inspire someone who know
2487 more about motor PID controller tuning can implement even better
2488 algorithms for automatic PID tuning in LinuxCNC, making life easier
2489 for both me and all the others that want to use LinuxCNC but lack the
2490 in depth knowledge needed to tune PID controllers well.</p>
2491
2492 <p>As usual, if you use Bitcoin and want to show your support of my
2493 activities, please send Bitcoin donations to my address
2494 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
2495
2496 </div>
2497 <div class="tags">
2498
2499
2500 Tags: <a href="http://www.hungry.com/~pere/blog/tags/3d-printer">3d-printer</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/linuxcnc">linuxcnc</a>, <a href="http://www.hungry.com/~pere/blog/tags/robot">robot</a>.
2501
2502
2503 </div>
2504 </div>
2505 <div class="padding"></div>
2506
2507 <div class="entry">
2508 <div class="title">
2509 <a href="http://www.hungry.com/~pere/blog/LinuxCNC_translators_life_just_got_a_bit_easier.html">LinuxCNC translators life just got a bit easier</a>
2510 </div>
2511 <div class="date">
2512 3rd June 2022
2513 </div>
2514 <div class="body">
2515 <p>Back in oktober last year, when I started looking at the
2516 <a href="https://en.wikipedia.org/wiki/LinuxCNC">LinuxCNC</a> system, I
2517 proposed to change the documentation build system make life easier for
2518 translators. The original system consisted of independently written
2519 documentation files for each language, with no automated way to track
2520 changes done in other translations and no help for the translators to
2521 know how much was left to translated. By using
2522 <a href="https://po4a.org/">the po4a system</a> to generate POT and PO
2523 files from the English documentation, this can be improved. A small
2524 team of LinuxCNC contributors got together and today our labour
2525 finally payed off. Since a few hours ago, it is now possible to
2526 translate <a href="https://hosted.weblate.org/projects/linuxcnc/">the
2527 LinuxCNC documentation on Weblate</a>, alongside the program itself.</p>
2528
2529 <p>The effort to migrate the documentation to use po4a has been both
2530 slow and frustrating. I am very happy we finally made it.</p>
2531
2532 <p>As usual, if you use Bitcoin and want to show your support of my
2533 activities, please send Bitcoin donations to my address
2534 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
2535
2536 </div>
2537 <div class="tags">
2538
2539
2540 Tags: <a href="http://www.hungry.com/~pere/blog/tags/3d-printer">3d-printer</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/linuxcnc">linuxcnc</a>, <a href="http://www.hungry.com/~pere/blog/tags/robot">robot</a>.
2541
2542
2543 </div>
2544 </div>
2545 <div class="padding"></div>
2546
2547 <div class="entry">
2548 <div class="title">
2549 <a href="http://www.hungry.com/~pere/blog/geteltorito_make_CD_firmware_upgrades_a_breeze.html">geteltorito make CD firmware upgrades a breeze</a>
2550 </div>
2551 <div class="date">
2552 20th April 2022
2553 </div>
2554 <div class="body">
2555 <p>Recently I wanted to upgrade the firmware of my thinkpad, and
2556 located the firmware download page from Lenovo (which annoyingly do
2557 not allow access via Tor, forcing me to hand them more personal
2558 information that I would like). The
2559 <a href="https://support.lenovo.com/no/en/search?query=thinkpad firmware bios upgrade iso&SearchType=Customer search&searchLocation=Masthead">download
2560 from Lenovo</a> is a bootable ISO image, which is a bit of a problem
2561 when all I got available is a USB memory stick. I tried booting the
2562 ISO as a USB stick, but this did not work. But genisoimage came to
2563 the rescue.</p>
2564
2565 <P>The geteltorito program in
2566 <a href="http://tracker.debian.org/cdrkit">the genisoimage binary
2567 package</a> is able to convert the bootable ISO image to a bootable
2568 USB stick using a simple command line recipe, which I then can write
2569 to the most recently inserted USB stick:</p>
2570
2571 <blockquote><pre>
2572 geteltorito -o usbstick.img lenovo-firmware.iso
2573 sudo dd bs=10M if=usbstick.img of=$(ls -tr /dev/sd?|tail -1)
2574 </pre></blockquote>
2575
2576 <p>This USB stick booted the firmware upgrader just fine, and in a few
2577 minutes my machine had the latest and greatest BIOS firmware in place.</p>
2578
2579 </div>
2580 <div class="tags">
2581
2582
2583 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
2584
2585
2586 </div>
2587 </div>
2588 <div class="padding"></div>
2589
2590 <div class="entry">
2591 <div class="title">
2592 <a href="http://www.hungry.com/~pere/blog/Run_your_industrial_metal_working_machine_using_Debian_.html">Run your industrial metal working machine using Debian?</a>
2593 </div>
2594 <div class="date">
2595 2nd March 2022
2596 </div>
2597 <div class="body">
2598 <p>After many months of hard work by the good people involved in
2599 <a href="https://en.wikipedia.org/wiki/LinuxCNC">LinuxCNC</a>, the
2600 system was accepted Sunday
2601 <a href="https://tracker.debian.org/pkg/linuxcnc">into Debian</a>.
2602 Once it was available from Debian, I was surprised to discover from
2603 <a href="https://qa.debian.org/popcon.php?package=linuxcnc">its
2604 popularity-contest numbers</a> that people have been reporting its use
2605 since 2012. <a href="http://linuxcnc.org/">Its project site</a> might
2606 be a good place to check out, but sadly is not working when visiting
2607 via Tor.</p>
2608
2609 <p>But what is LinuxCNC, you are probably wondering? Perhaps a
2610 Wikipedia quote is in place?</p>
2611
2612 <blockquote>
2613 "LinuxCNC is a software system for numerical control of
2614 machines such as milling machines, lathes, plasma cutters, routers,
2615 cutting machines, robots and hexapods. It can control up to 9 axes or
2616 joints of a CNC machine using G-code (RS-274NGC) as input. It has
2617 several GUIs suited to specific kinds of usage (touch screen,
2618 interactive development)."
2619 </blockquote>
2620
2621 <p>It can even control 3D printers. And even though the Wikipedia
2622 page indicate that it can only work with hard real time kernel
2623 features, it can also work with the user space soft real time features
2624 provided by the Debian kernel.
2625 <a href="https://github.com/linuxcnc/linuxcnc">The source code</a> is
2626 available from Github. The last few months I've been involved in the
2627 translation setup for the program and documentation. Translators are
2628 most welcome to
2629 <a href="https://hosted.weblate.org/engage/linuxcnc/">join the
2630 effort</a> using Weblate.</p>
2631
2632 <p>As usual, if you use Bitcoin and want to show your support of my
2633 activities, please send Bitcoin donations to my address
2634 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
2635
2636 </div>
2637 <div class="tags">
2638
2639
2640 Tags: <a href="http://www.hungry.com/~pere/blog/tags/3d-printer">3d-printer</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/linuxcnc">linuxcnc</a>, <a href="http://www.hungry.com/~pere/blog/tags/robot">robot</a>.
2641
2642
2643 </div>
2644 </div>
2645 <div class="padding"></div>
2646
2647 <div class="entry">
2648 <div class="title">
2649 <a href="http://www.hungry.com/~pere/blog/Debian_still_an_excellent_choice_for_Lego_builders.html">Debian still an excellent choice for Lego builders</a>
2650 </div>
2651 <div class="date">
2652 24th October 2021
2653 </div>
2654 <div class="body">
2655 <p>The Debian Lego team saw a lot of activity the last few weeks. All
2656 the packages under the team umbrella has been updated to fix
2657 packaging, lintian issues and BTS reports. In addition, a new and
2658 inspiring team member appeared on both the
2659 <a href="https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/debian-lego-team">debian-lego-team
2660 Team mailing list</a> and
2661 <a href="irc://irc.debian.org/%23debian-lego">IRC channel
2662 #debian-lego</a>. If you are interested in Lego CAD design and LEGO
2663 Mindstorms programming, check out the
2664 <a href="http://wiki.debian.org/LegoDesigners">team wiki page</a> to
2665 see what Debian can offer the Lego enthusiast.</p>
2666
2667 <p>Patches has been sent upstream, causing new upstream releases, one
2668 even the first one in more than ten years, and old upstreams was
2669 released with new ones. There are still a lot of work left, and the
2670 team welcome more members to help us make sure Debian is the Linux
2671 distribution of choice for Lego builders. If you want to contribute,
2672 join us in the IRC channel and become part of
2673 <a href="https://salsa.debian.org/debian-lego-team/">the team on
2674 Salsa</a>.</p>
2675
2676 <p>As usual, if you use Bitcoin and want to show your support of my
2677 activities, please send Bitcoin donations to my address
2678 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
2679
2680 </div>
2681 <div class="tags">
2682
2683
2684 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/lego">lego</a>, <a href="http://www.hungry.com/~pere/blog/tags/robot">robot</a>.
2685
2686
2687 </div>
2688 </div>
2689 <div class="padding"></div>
2690
2691 <div class="entry">
2692 <div class="title">
2693 <a href="http://www.hungry.com/~pere/blog/Six_complete_translations_of_The_Debian_Administrator_s_Handbook_for_Buster.html">Six complete translations of The Debian Administrator's Handbook for Buster</a>
2694 </div>
2695 <div class="date">
2696 5th July 2021
2697 </div>
2698 <div class="body">
2699 <p>I am happy observe that the <a href="https://debian-handbook.info/">The
2700 Debian Administrator's Handbook</a> is available in six languages now.
2701 I am not sure which one of these are completely proof read, but the
2702 complete book is available in these languages:
2703
2704 <ul>
2705
2706 <li>English</li>
2707 <li>Norwegian Bokmål</li>
2708 <li>German</li>
2709 <li>Indonesian</li>
2710 <li>Brazil Portuguese</li>
2711 <li>Spanish</li>
2712
2713 </ul>
2714
2715 <p>This is the list of languages more than 70% complete, in other
2716 words with not too much left to do:</p>
2717
2718 <ul>
2719
2720 <li>Chinese (Simplified) - 90%</li>
2721 <li>French - 79%</li>
2722 <li>Italian - 79%</li>
2723 <li>Japanese - 77%</li>
2724 <li>Arabic (Morocco) - 75%</li>
2725 <li>Persian - 71%</li>
2726
2727 </ul>
2728
2729 <p>I wonder how long it will take to bring these to 100%.</p>
2730
2731 <p>Then there is the list of languages about halfway done:</p>
2732
2733 <ul>
2734
2735 <li>Russian - 63%</li>
2736 <li>Swedish - 53%</li>
2737 <li>Chinese (Traditional) - 46%</li>
2738 <li>Catalan - 45%</li>
2739
2740 </ul>
2741
2742 <p>Several are on to a good start:</p>
2743
2744 <ul>
2745
2746 <li>Dutch - 26%</li>
2747 <li>Vietnamese - 25%</li>
2748 <li>Polish - 23%</li>
2749 <li>Czech - 22%</li>
2750 <li>Turkish - 18%</li>
2751
2752 </ul>
2753
2754 <p>Finally, there are the ones just getting started:</p>
2755
2756 <ul>
2757
2758 <li>Korean - 4%</li>
2759 <li>Croatian - 2%</li>
2760 <li>Greek - 2%</li>
2761 <li>Danish - 1%</li>
2762 <li>Romanian - 1%</li>
2763
2764 </ul>
2765
2766 <p>If you want to help provide a Debian instruction book in your own
2767 language, visit
2768 <a href="https://hosted.weblate.org/projects/debian-handbook/#languages">Weblate</a>
2769 to contribute to the translations.</p>
2770
2771 <p>As usual, if you use Bitcoin and want to show your support of my
2772 activities, please send Bitcoin donations to my address
2773 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
2774
2775 </div>
2776 <div class="tags">
2777
2778
2779 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian-handbook">debian-handbook</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
2780
2781
2782 </div>
2783 </div>
2784 <div class="padding"></div>
2785
2786 <div class="entry">
2787 <div class="title">
2788 <a href="http://www.hungry.com/~pere/blog/Latest_Jami_back_in_Debian_Testing__and_scriptable_using_dbus.html">Latest Jami back in Debian Testing, and scriptable using dbus</a>
2789 </div>
2790 <div class="date">
2791 12th January 2021
2792 </div>
2793 <div class="body">
2794 <p>After a lot of hard work by its maintainer Alexandre Viau and
2795 others, the decentralized communication platform
2796 <a href="https://en.wikipedia.org/wiki/Jami_(software)">Jami</a>
2797 (earlier known as Ring), managed to get
2798 <a href="https://tracker.debian.org/pkg/ring">its latest version</a>
2799 into Debian Testing. Several of its dependencies has caused build and
2800 propagation problems, which all seem to be solved now.</p>
2801
2802 <p>In addition to the fact that Jami is decentralized, similar to how
2803 bittorrent is decentralized, I first of all like how it is not
2804 connected to external IDs like phone numbers. This allow me to set up
2805 computers to send me notifications using Jami without having to find
2806 get a phone number for each computer. Automatic notification via Jami
2807 is also made trivial thanks to the provided client side API (as a DBus
2808 service). Here is my bourne shell script demonstrating how to let any
2809 system send a message to any Jami address. It will create a new
2810 identity before sending the message, if no Jami identity exist
2811 already:</p>
2812
2813 <p><pre>
2814 #!/bin/sh
2815 #
2816 # Usage: $0 <jami-address> <message>
2817 #
2818 # Send <message> to <jami-address>, create local jami account if
2819 # missing.
2820 #
2821 # License: GPL v2 or later at your choice
2822 # Author: Petter Reinholdtsen
2823
2824
2825 if [ -z "$HOME" ] ; then
2826 echo "error: missing \$HOME, required for dbus to work"
2827 exit 1
2828 fi
2829
2830 # First, get dbus running if not already running
2831 DBUSLAUNCH=/usr/bin/dbus-launch
2832 PIDFILE=/run/asterisk/dbus-session.pid
2833 if [ -e $PIDFILE ] ; then
2834 . $PIDFILE
2835 if ! kill -0 $DBUS_SESSION_BUS_PID 2>/dev/null ; then
2836 unset DBUS_SESSION_BUS_ADDRESS
2837 fi
2838 fi
2839 if [ -z "$DBUS_SESSION_BUS_ADDRESS" ] && [ -x "$DBUSLAUNCH" ]; then
2840 DBUS_SESSION_BUS_ADDRESS="unix:path=$HOME/.dbus"
2841 dbus-daemon --session --address="$DBUS_SESSION_BUS_ADDRESS" --nofork --nopidfile --syslog-only < /dev/null > /dev/null 2>&1 3>&1 &
2842 DBUS_SESSION_BUS_PID=$!
2843 (
2844 echo DBUS_SESSION_BUS_PID=$DBUS_SESSION_BUS_PID
2845 echo DBUS_SESSION_BUS_ADDRESS=\""$DBUS_SESSION_BUS_ADDRESS"\"
2846 echo export DBUS_SESSION_BUS_ADDRESS
2847 ) > $PIDFILE
2848 . $PIDFILE
2849 fi &
2850
2851 dringop() {
2852 part="$1"; shift
2853 op="$1"; shift
2854 dbus-send --session \
2855 --dest="cx.ring.Ring" /cx/ring/Ring/$part cx.ring.Ring.$part.$op $*
2856 }
2857
2858 dringopreply() {
2859 part="$1"; shift
2860 op="$1"; shift
2861 dbus-send --session --print-reply \
2862 --dest="cx.ring.Ring" /cx/ring/Ring/$part cx.ring.Ring.$part.$op $*
2863 }
2864
2865 firstaccount() {
2866 dringopreply ConfigurationManager getAccountList | \
2867 grep string | awk -F'"' '{print $2}' | head -n 1
2868 }
2869
2870 account=$(firstaccount)
2871
2872 if [ -z "$account" ] ; then
2873 echo "Missing local account, trying to create it"
2874 dringop ConfigurationManager addAccount \
2875 dict:string:string:"Account.type","RING","Account.videoEnabled","false"
2876 account=$(firstaccount)
2877 if [ -z "$account" ] ; then
2878 echo "unable to create local account"
2879 exit 1
2880 fi
2881 fi
2882
2883 # Not using dringopreply to ensure $2 can contain spaces
2884 dbus-send --print-reply --session \
2885 --dest=cx.ring.Ring \
2886 /cx/ring/Ring/ConfigurationManager \
2887 cx.ring.Ring.ConfigurationManager.sendTextMessage \
2888 string:"$account" string:"$1" \
2889 dict:string:string:"text/plain","$2"
2890 </pre></p>
2891
2892 <p>If you want to check it out yourself, visit the
2893 <a href="https://jami.net/">the Jami system project page</a> to learn
2894 more, and install the latest Jami client from Debian Unstable or
2895 Testing.</p>
2896
2897 <p>As usual, if you use Bitcoin and want to show your support of my
2898 activities, please send Bitcoin donations to my address
2899 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
2900
2901 </div>
2902 <div class="tags">
2903
2904
2905 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/sikkerhet">sikkerhet</a>, <a href="http://www.hungry.com/~pere/blog/tags/surveillance">surveillance</a>.
2906
2907
2908 </div>
2909 </div>
2910 <div class="padding"></div>
2911
2912 <div class="entry">
2913 <div class="title">
2914 <a href="http://www.hungry.com/~pere/blog/Buster_based_Bokm_l_edition_of_Debian_Administrator_s_Handbook.html">Buster based Bokmål edition of Debian Administrator's Handbook</a>
2915 </div>
2916 <div class="date">
2917 20th October 2020
2918 </div>
2919 <div class="body">
2920 <p align="center"><img align="center" src="http://www.hungry.com/~pere/blog/images/2020-10-20-debian-handbook-nb-testprint.jpeg" width="60%"/></p>
2921
2922 <p>I am happy to report that we finally made it! Norwegian Bokmål
2923 became the first translation published on paper of the new Buster
2924 based edition of "<a href="https://debian-handbook.info/">The Debian
2925 Administrator's Handbook</a>". The print proof reading copy arrived
2926 some days ago, and it looked good, so now the book is approved for
2927 general distribution. This updated paperback edition <a
2928 href="https://debian-handbook.info/get/#norwegian">is available from
2929 lulu.com</a>. The book is also available for download in electronic
2930 form as PDF, EPUB and Mobipocket, and can also be
2931 <a href="https://debian-handbook.info/browse/nb-NO/stable/">read online</a>.</p>
2932
2933 <p>I am very happy to wrap up this Creative Common licensed project,
2934 which concludes several months of work by several volunteers. The
2935 number of Linux related books published in Norwegian are few, and I
2936 really hope this one will gain many readers, as it is packed with deep
2937 knowledge on Linux and the Debian ecosystem. The book will be
2938 available for various Internet book stores like Amazon and Barnes &
2939 Noble soon, but I recommend buying
2940 "<a href="https://www.lulu.com/en/us/shop/roland-mas-and-rapha%C3%ABl-hertzog/h%C3%A5ndbok-for-debian-administratoren/paperback/product-9j7qwq.html">HÃ¥ndbok
2941 for Debian-administratoren</a>" directly from the source at Lulu.
2942
2943 <p>As usual, if you use Bitcoin and want to show your support of my
2944 activities, please send Bitcoin donations to my address
2945 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
2946
2947 </div>
2948 <div class="tags">
2949
2950
2951 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian-handbook">debian-handbook</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
2952
2953
2954 </div>
2955 </div>
2956 <div class="padding"></div>
2957
2958 <div class="entry">
2959 <div class="title">
2960 <a href="http://www.hungry.com/~pere/blog/Buster_update_of_Norwegian_Bokm_l_edition_of_Debian_Administrator_s_Handbook_almost_done.html">Buster update of Norwegian Bokmål edition of Debian Administrator's Handbook almost done</a>
2961 </div>
2962 <div class="date">
2963 11th September 2020
2964 </div>
2965 <div class="body">
2966 <p>Thanks to the good work of several volunteers, the updated edition
2967 of the Norwegian translation for
2968 "<a href="https://debian-handbook.info/">The Debian Administrator's
2969 Handbook</a>" is now almost completed. After many months of proof
2970 reading, I consider the proof reading complete enough for us to move
2971 to the next step, and have asked for the print version to be prepared
2972 and sent of to the print on demand service lulu.com. While it is
2973 still not to late if you find any incorrect translations on
2974 <a href="https://hosted.weblate.org/languages/nb_NO/debian-handbook/">the
2975 hosted Weblate service</a>, but it will be soon. :) You can check out
2976 <a href=" https://debian-handbook.info/browse/nb-NO/stable/">the Buster
2977 edition on the web</a> until the print edition is ready.</p>
2978
2979 <p>The book will be for sale on lulu.com and various web book stores,
2980 with links available from the web site for the book linked to above.
2981 I hope a lot of readers find it useful.</p>
2982
2983 <p>As usual, if you use Bitcoin and want to show your support of my
2984 activities, please send Bitcoin donations to my address
2985 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
2986
2987 </div>
2988 <div class="tags">
2989
2990
2991 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian-handbook">debian-handbook</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
2992
2993
2994 </div>
2995 </div>
2996 <div class="padding"></div>
2997
2998 <div class="entry">
2999 <div class="title">
3000 <a href="http://www.hungry.com/~pere/blog/Working_on_updated_Norwegian_Bokm_l_edition_of_Debian_Administrator_s_Handbook.html">Working on updated Norwegian Bokmål edition of Debian Administrator's Handbook</a>
3001 </div>
3002 <div class="date">
3003 4th July 2020
3004 </div>
3005 <div class="body">
3006 <p>Three years ago, the first Norwegian Bokmål edition of
3007 "<a href="https://debian-handbook.info/">The Debian Administrator's
3008 Handbook</a>" was published. This was based on Debian Jessie. Now a
3009 new and updated version based on Buster is getting ready. Work on the
3010 updated Norwegian Bokmål edition has been going on for a few months
3011 now, and yesterday, we reached the first mile stone, with 100% of the
3012 texts being translated. A lot of proof reading remains, of course,
3013 but a major step towards a new edition has been taken.</p>
3014
3015 <p>The book is translated by volunteers, and we would love to get some
3016 help with the proof reading. The translation uses
3017 <a href="https://hosted.weblate.org/languages/nb_NO/debian-handbook/">the
3018 hosted Weblate service</a>, and we welcome everyone to have a look and
3019 submit improvements and suggestions. There is also a proof readers
3020 PDF available on request, get in touch if you want to help out that
3021 way.</p>
3022
3023 <p>As usual, if you use Bitcoin and want to show your support of my
3024 activities, please send Bitcoin donations to my address
3025 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
3026
3027 </div>
3028 <div class="tags">
3029
3030
3031 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian-handbook">debian-handbook</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
3032
3033
3034 </div>
3035 </div>
3036 <div class="padding"></div>
3037
3038 <div class="entry">
3039 <div class="title">
3040 <a href="http://www.hungry.com/~pere/blog/Secure_Socket_API___a_simple_and_powerful_approach_for_TLS_support_in_software.html">Secure Socket API - a simple and powerful approach for TLS support in software</a>
3041 </div>
3042 <div class="date">
3043 6th June 2020
3044 </div>
3045 <div class="body">
3046 <p>As a member of the <a href="https://www.nuug.no/">Norwegian Unix
3047 User Group</a>, I have the pleasure of receiving the
3048 <a href="https://www.usenix.org/">USENIX</a> magazine
3049 <a href="https://www.usenix.org/publications/login/">;login:</a>
3050 several times a year. I rarely have time to read all the articles,
3051 but try to at least skim through them all as there is a lot of nice
3052 knowledge passed on there. I even carry the latest issue with me most
3053 of the time to try to get through all the articles when I have a few
3054 spare minutes.</p>
3055
3056 <p>The other day I came across a nice article titled
3057 "<a href="https://www.usenix.org/publications/login/winter2018/oneill">The
3058 Secure Socket API: TLS as an Operating System Service</a>" with a
3059 marvellous idea I hope can make it all the way into the POSIX standard.
3060 The idea is as simple as it is powerful. By introducing a new
3061 socket() option IPPROTO_TLS to use TLS, and a system wide service to
3062 handle setting up TLS connections, one both make it trivial to add TLS
3063 support to any program currently using the POSIX socket API, and gain
3064 system wide control over certificates, TLS versions and encryption
3065 systems used. Instead of doing this:</p>
3066
3067 <p><blockquote><pre>
3068 int socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
3069 </pre></blockquote></p>
3070
3071 <p>the program code would be doing this:<p>
3072
3073 <p><blockquote><pre>
3074 int socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TLS);
3075 </pre></blockquote></p>
3076
3077 <p>According to the ;login: article, converting a C program to use TLS
3078 would normally modify only 5-10 lines in the code, which is amazing
3079 when compared to using for example the OpenSSL API.</p>
3080
3081 <p>The project has set up the
3082 <a href="https://securesocketapi.org/">https://securesocketapi.org/</a>
3083 web site to spread the idea, and the code for a kernel module and the
3084 associated system daemon is available from two github repositories:
3085 <a href="https://github.com/markoneill/ssa">ssa</a> and
3086 <a href="https://github.com/markoneill/ssa-daemon">ssa-daemon</a>.
3087 Unfortunately there is no explicit license information with the code,
3088 so its copyright status is unclear. A
3089 <a href="https://github.com/markoneill/ssa/issues/2">request to solve
3090 this</a> about it has been unsolved since 2018-08-17.</p>
3091
3092 <p>I love the idea of extending socket() to gain TLS support, and
3093 understand why it is an advantage to implement this as a kernel module
3094 and system wide service daemon, but can not help to think that it
3095 would be a lot easier to get projects to move to this way of setting
3096 up TLS if it was done with a user space approach where programs
3097 wanting to use this API approach could just link with a wrapper
3098 library.</p>
3099
3100 <p>I recommend you check out this simple and powerful approach to more
3101 secure network connections. :)</p>
3102
3103 <p>As usual, if you use Bitcoin and want to show your support of my
3104 activities, please send Bitcoin donations to my address
3105 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
3106
3107 </div>
3108 <div class="tags">
3109
3110
3111 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/sikkerhet">sikkerhet</a>, <a href="http://www.hungry.com/~pere/blog/tags/sysadmin">sysadmin</a>.
3112
3113
3114 </div>
3115 </div>
3116 <div class="padding"></div>
3117
3118 <div class="entry">
3119 <div class="title">
3120 <a href="http://www.hungry.com/~pere/blog/Jami_as_a_Zoom_client__a_trick_for_password_protected_rooms___.html">Jami as a Zoom client, a trick for password protected rooms...</a>
3121 </div>
3122 <div class="date">
3123 8th May 2020
3124 </div>
3125 <div class="body">
3126 <p>Half a year ago,
3127 <a href="http://www.hungry.com/~pere/blog/Jami_Ring__finally_functioning_peer_to_peer_communication_client.html">I
3128 wrote</a> about <a href="https://jami.net/">the Jami communication
3129 client</a>, capable of peer-to-peer encrypted communication. It
3130 handle both messages, audio and video. It uses distributed hash
3131 tables instead of central infrastructure to connect its users to each
3132 other, which in my book is a plus. I mentioned briefly that it could
3133 also work as a SIP client, which came in handy when the higher
3134 educational sector in Norway started to promote Zoom as its video
3135 conferencing solution. I am reluctant to use the official Zoom client
3136 software, due to their <a href="https://zoom.us/terms">copyright
3137 license clauses</a> prohibiting users to reverse engineer (for example
3138 to check the security) and benchmark it, and thus prefer to connect to
3139 Zoom meetings with free software clients.</p>
3140
3141 <p>Jami worked OK as a SIP client to Zoom as long as there was no
3142 password set on the room. The Jami daemon leak memory like crazy
3143 (approximately 1 GiB a minute) when I am connected to the video
3144 conference, so I had to restart the client every 7-10 minutes, which
3145 is not great. I tried to get other SIP Linux clients to work
3146 without success, so I decided I would have to live with this wart
3147 until someone managed to fix the leak in the dring code base. But
3148 another problem showed up once the rooms were password protected. I
3149 could not get my dial tone signaling through from Jami to Zoom, and
3150 dial tone signaling is used to enter the password when connecting to
3151 Zoom. I tried a lot of different permutations with my Jami and
3152 Asterisk setup to try to figure out why the signaling did not get
3153 through, only to finally discover that the fundamental problem seem to
3154 be that Zoom is simply not able to receive dial tone signaling when
3155 connecting via SIP. There seem to be nothing wrong with the Jami and
3156 Asterisk end, it is simply broken in the Zoom end. I got help from a
3157 very skilled VoIP engineer figuring out this last part. And being a
3158 very skilled engineer, he was also able to locate a solution for me.
3159 Or to be exact, a workaround that solve my initial problem of
3160 connecting to password protected Zoom rooms using Jami.</p>
3161
3162 <p>So, how do you do this, I am sure you are wondering by now. The
3163 trick is already
3164 <a href="https://support.zoom.us/hc/en-us/articles/202405539-H-323-SIP-Room-Connector-Dial-Strings#sip">documented
3165 from Zoom</a>, and it is to modify the SIP address to include the room
3166 password. What is most surprising about this is that the
3167 automatically generated email from Zoom with instructions on how to
3168 connect via SIP do not mention this. The SIP address to use normally
3169 consist of the room ID (a number), an @ character and the IP address
3170 of the Zoom SIP gateway. But Zoom understand a lot more than just the
3171 room ID in front of the at sign. The format is "<tt>[Meeting
3172 ID].[Password].[Layout].[Host Key]</tt>", and you can here see how you
3173 can both enter password, control the layout (full screen, active
3174 presence and gallery) and specify the host key to start the meeting.
3175 The full SIP address entered into Jami to provide the password will
3176 then look like this (all using made up numbers):</p>
3177
3178 <p><blockquote>
3179 <tt>sip:657837644.522827@192.168.169.170</tt>
3180 </blockquote></p>
3181
3182 <p>Now if only jami would reduce its memory usage, I could even
3183 recommend this setup to others. :)</p>
3184
3185 <p>As usual, if you use Bitcoin and want to show your support of my
3186 activities, please send Bitcoin donations to my address
3187 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
3188
3189 </div>
3190 <div class="tags">
3191
3192
3193 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/sikkerhet">sikkerhet</a>, <a href="http://www.hungry.com/~pere/blog/tags/surveillance">surveillance</a>.
3194
3195
3196 </div>
3197 </div>
3198 <div class="padding"></div>
3199
3200 <div class="entry">
3201 <div class="title">
3202 <a href="http://www.hungry.com/~pere/blog/GnuCOBOL__a_free_platform_to_learn_and_use_COBOL___nice_free_software.html">GnuCOBOL, a free platform to learn and use COBOL - nice free software</a>
3203 </div>
3204 <div class="date">
3205 29th April 2020
3206 </div>
3207 <div class="body">
3208 <p>The curiosity got the better of me when
3209 <a href="https://developers.slashdot.org/story/20/04/06/1424246/new-jersey-desperately-needs-cobol-programmers">Slashdot
3210 reported</a> that New Jersey was desperately looking for
3211 <a href="https://en.wikipedia.org/wiki/COBOL">COBOL</a> programmers,
3212 and a few days later it was reported that
3213 <a href="https://onezero.medium.com/ibm-rallies-cobol-engineers-to-save-overloaded-unemployment-systems-eeadf13eddce">IBM
3214 tried to locate COBOL programmers</a>.</p>
3215
3216 <p>I thus decided to have a look at free software alternatives to
3217 learn COBOL, and had the pleasure to find
3218 <a href="https://sourceforge.net/projects/open-cobol/">GnuCOBOL</a> was
3219 already <a href="https://tracker.debian.org/pkg/gnucobol">in
3220 Debian</a>. It used to be called Open Cobol, and is a "compiler"
3221 transforming COBOL code to C or C++ before giving it to GCC or Visual
3222 Studio to build binaries.</p>
3223
3224 <p>I managed to get in touch with upstream, and was impressed with the
3225 quick response, and also was happy to see a new Debian maintainer
3226 taking over when the original one recently asked to be replaced. A
3227 new Debian upload was done as recently as yesterday.</p>
3228
3229 <p>Using the Debian package, I was able to follow a simple COBOL
3230 introduction and make and run simple COBOL programs. It was fun to
3231 learn a new programming language. If you want to test for yourself,
3232 <a href="https://en.wikipedia.org/wiki/GnuCOBOL">the GnuCOBOL Wikipedia
3233 page</a> have a few simple examples to get you startet.</p>
3234
3235 <p>As I do not have much experience with COBOL, I do not know how
3236 standard compliant it is, but it claim to pass most tests from COBOL
3237 test suite, which sound good to me. It is nice to know it is possible
3238 to learn COBOL using software without any usage restrictions, and I am
3239 very happy such nice free software project as this is available. If
3240 you as me is curious about COBOL, check it out.</p>
3241
3242 <p>As usual, if you use Bitcoin and want to show your support of my
3243 activities, please send Bitcoin donations to my address
3244 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
3245
3246 </div>
3247 <div class="tags">
3248
3249
3250 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nice free software">nice free software</a>.
3251
3252
3253 </div>
3254 </div>
3255 <div class="padding"></div>
3256
3257 <div class="entry">
3258 <div class="title">
3259 <a href="http://www.hungry.com/~pere/blog/Jami_Ring__finally_functioning_peer_to_peer_communication_client.html">Jami/Ring, finally functioning peer to peer communication client</a>
3260 </div>
3261 <div class="date">
3262 19th June 2019
3263 </div>
3264 <div class="body">
3265 <p>Some years ago, in 2016, I
3266 <a href="http://www.hungry.com/~pere/blog/Experience_and_updated_recipe_for_using_the_Signal_app_without_a_mobile_phone.html">wrote
3267 for the first time about</a> the Ring peer to peer messaging system.
3268 It would provide messaging without any central server coordinating the
3269 system and without requiring all users to register a phone number or
3270 own a mobile phone. Back then, I could not get it to work, and put it
3271 aside until it had seen more development. A few days ago I decided to
3272 give it another try, and am happy to report that this time I am able
3273 to not only send and receive messages, but also place audio and video
3274 calls. But only if UDP is not blocked into your network.</p>
3275
3276 <p>The Ring system changed name earlier this year to
3277 <a href="https://en.wikipedia.org/wiki/Jami_(software)">Jami</a>. I
3278 tried doing web search for 'ring' when I discovered it for the first
3279 time, and can only applaud this change as it is impossible to find
3280 something called Ring among the noise of other uses of that word. Now
3281 you can search for 'jami' and this client and
3282 <a href="https://jami.net/">the Jami system</a> is the first hit at
3283 least on duckduckgo.</p>
3284
3285 <p>Jami will by default encrypt messages as well as audio and video
3286 calls, and try to send them directly between the communicating parties
3287 if possible. If this proves impossible (for example if both ends are
3288 behind NAT), it will use a central SIP TURN server maintained by the
3289 Jami project. Jami can also be a normal SIP client. If the SIP
3290 server is unencrypted, the audio and video calls will also be
3291 unencrypted. This is as far as I know the only case where Jami will
3292 do anything without encryption.</p>
3293
3294 <p>Jami is available for several platforms: Linux, Windows, MacOSX,
3295 Android, iOS, and Android TV. It is included in Debian already. Jami
3296 also work for those using F-Droid without any Google connections,
3297 while Signal do not.
3298 <a href="https://git.jami.net/savoirfairelinux/ring-project/wikis/technical/Protocol">The
3299 protocol</a> is described in the Ring project wiki. The system uses a
3300 distributed hash table (DHT) system (similar to BitTorrent) running
3301 over UDP. On one of the networks I use, I discovered Jami failed to
3302 work. I tracked this down to the fact that incoming UDP packages
3303 going to ports 1-49999 were blocked, and the DHT would pick a random
3304 port and end up in the low range most of the time. After talking to
3305 the developers, I solved this by enabling the dhtproxy in the
3306 settings, thus using TCP to talk to a central DHT proxy instead of
3307
3308 peering directly with others. I've been told the developers are
3309 working on allowing DHT to use TCP to avoid this problem. I also ran
3310 into a problem when trying to talk to the version of Ring included in
3311 Debian Stable (Stretch). Apparently the protocol changed between
3312 beta2 and the current version, making these clients incompatible.
3313 Hopefully the protocol will not be made incompatible in the
3314 future.</p>
3315
3316 <p>It is worth noting that while looking at Jami and its features, I
3317 came across another communication platform I have not tested yet. The
3318 <a href="https://en.wikipedia.org/wiki/Tox_(protocol)">Tox protocol</a>
3319 and <a href="https://tox.chat/">family of Tox clients</a>. It might
3320 become the topic of a future blog post.</p>
3321
3322 <p>As usual, if you use Bitcoin and want to show your support of my
3323 activities, please send Bitcoin donations to my address
3324 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
3325
3326 </div>
3327 <div class="tags">
3328
3329
3330 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/sikkerhet">sikkerhet</a>, <a href="http://www.hungry.com/~pere/blog/tags/surveillance">surveillance</a>.
3331
3332
3333 </div>
3334 </div>
3335 <div class="padding"></div>
3336
3337 <div class="entry">
3338 <div class="title">
3339 <a href="http://www.hungry.com/~pere/blog/Strategispillet_Unknown_Horizons_n__tilgjengelig_p__bokm_l.html">Strategispillet Unknown Horizons nå tilgjengelig på bokmål</a>
3340 </div>
3341 <div class="date">
3342 23rd January 2019
3343 </div>
3344 <div class="body">
3345 <p>I høst ble jeg inspirert til å bidra til oversettelsen av
3346 <a href="http://unknown-horizons.org/">strategispillet Unknown
3347 Horizons</a>, og oversatte de nesten 200 strengene i prosjektet til
3348 bokmål. Deretter har jeg gått å ventet på at det kom en ny utgave som
3349 inneholdt disse oversettelsene. NÃ¥ er endelig ventetiden over. Den
3350 nye versjonen kom på nyåret, og ble
3351 <a href="https://tracker.debian.org/pkg/unknown-horizons">lastet opp i
3352 Debian</a> for noen få dager siden. I går kveld fikk jeg testet det ut, og
3353 må innrømme at oversettelsene fungerer fint. Fant noen få tekster som
3354 måtte justeres, men ikke noe alvorlig. Har oppdatert
3355 <a href="https://hosted.weblate.org/projects/uh/">oversettelsen på
3356 Weblate</a>, slik at neste utgave vil være enda bedre. :)</p>
3357
3358 <p>Spillet er et ressursstyringsspill ala Civilization, og er morsomt
3359 å spille for oss som liker slikt. :)</p>
3360
3361 <p>Som vanlig, hvis du bruker Bitcoin og ønsker å vise din støtte til
3362 det jeg driver med, setter jeg pris på om du sender Bitcoin-donasjoner
3363 til min adresse
3364 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.
3365 Merk, betaling med bitcoin er ikke anonymt. :)</p>
3366
3367 </div>
3368 <div class="tags">
3369
3370
3371 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/norsk">norsk</a>.
3372
3373
3374 </div>
3375 </div>
3376 <div class="padding"></div>
3377
3378 <div class="entry">
3379 <div class="title">
3380 <a href="http://www.hungry.com/~pere/blog/Debian_now_got_everything_you_need_to_program_Micro_bit.html">Debian now got everything you need to program Micro:bit</a>
3381 </div>
3382 <div class="date">
3383 22nd January 2019
3384 </div>
3385 <div class="body">
3386 <p>I am amazed and very pleased to discover that since a few days ago,
3387 everything you need to program the <a href="https://microbit.org/">BBC
3388 micro:bit</a> is available from the Debian archive. All this is
3389 thanks to the hard work of Nick Morrott and the Debian python
3390 packaging team. The micro:bit project recommend the mu-editor to
3391 program the microcomputer, as this editor will take care of all the
3392 machinery required to injekt/flash micropython alongside the program
3393 into the micro:bit, as long as the pieces are available.</p>
3394
3395 <p>There are three main pieces involved. The first to enter Debian
3396 was
3397 <a href="https://tracker.debian.org/pkg/python-uflash">python-uflash</a>,
3398 which was accepted into the archive 2019-01-12. The next one was
3399 <a href="https://tracker.debian.org/pkg/mu-editor">mu-editor</a>, which
3400 showed up 2019-01-13. The final and hardest part to to into the
3401 archive was
3402 <a href="https://tracker.debian.org/pkg/firmware-microbit-micropython">firmware-microbit-micropython</a>,
3403 which needed to get its build system and dependencies into Debian
3404 before it was accepted 2019-01-20. The last one is already in Debian
3405 Unstable and should enter Debian Testing / Buster in three days. This
3406 all allow any user of the micro:bit to get going by simply running
3407 'apt install mu-editor' when using Testing or Unstable, and once
3408 Buster is released as stable, all the users of Debian stable will be
3409 catered for.</p>
3410
3411 <p>As a minor final touch, I added rules to
3412 <a href="https://tracker.debian.org/pkg/isenkram">the isenkram
3413 package</a> for recognizing micro:bit and recommend the mu-editor
3414 package. This make sure any user of the isenkram desktop daemon will
3415 get a popup suggesting to install mu-editor then the USB cable from
3416 the micro:bit is inserted for the first time.</p>
3417
3418 <p>This should make it easier to have fun.</p>
3419
3420 <p>As usual, if you use Bitcoin and want to show your support of my
3421 activities, please send Bitcoin donations to my address
3422 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
3423
3424 </div>
3425 <div class="tags">
3426
3427
3428 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/robot">robot</a>.
3429
3430
3431 </div>
3432 </div>
3433 <div class="padding"></div>
3434
3435 <div class="entry">
3436 <div class="title">
3437 <a href="http://www.hungry.com/~pere/blog/Learn_to_program_with_Minetest_on_Debian.html">Learn to program with Minetest on Debian</a>
3438 </div>
3439 <div class="date">
3440 15th December 2018
3441 </div>
3442 <div class="body">
3443 <p>A fun way to learn how to program
3444 <a href="https://www.python.org/">Python</a> is to follow the
3445 instructions in the book
3446 "<a href="https://nostarch.com/programwithminecraft">Learn to program
3447 with Minecraft</a>", which introduces programming in Python to people
3448 who like to play with Minecraft. The book uses a Python library to
3449 talk to a TCP/IP socket with an API accepting build instructions and
3450 providing information about the current players in a Minecraft world.
3451 The TCP/IP API was first created for the Minecraft implementation for
3452 Raspberry Pi, and has since been ported to some server versions of
3453 Minecraft. The book contain recipes for those using Windows, MacOSX
3454 and Raspian. But a little known fact is that you can follow the same
3455 recipes using the free software construction game
3456 <a href="https://minetest.net/">Minetest</a>.</p>
3457
3458 <p>There is <a href="https://github.com/sprintingkiwi/pycraft_mod">a
3459 Minetest module implementing the same API</a>, making it possible to
3460 use the Python programs coded to talk to Minecraft with Minetest too.
3461 I
3462 <a href="https://ftp-master.debian.org/new/minetest-mod-pycraft_0.20%2Bgit20180331.0376a0a%2Bdfsg-1.html">uploaded
3463 this module</a> to Debian two weeks ago, and as soon as it clears the
3464 FTP masters NEW queue, learning to program Python with Minetest on
3465 Debian will be a simple 'apt install' away. The Debian package is
3466 maintained as part of the Debian Games team, and
3467 <a href="https://salsa.debian.org/games-team/unfinished/minetest-mod-pycraft">the
3468 packaging rules</a> are currently located under 'unfinished' on
3469 Salsa.</p>
3470
3471 <p>You will most likely need to install several of the Minetest
3472 modules in Debian for the examples included with the library to work
3473 well, as there are several blocks used by the example scripts that are
3474 provided via modules in Minetest. Without the required blocks, a
3475 simple stone block is used instead. My initial testing with a analog
3476 clock did not get gold arms as instructed in the python library, but
3477 instead used stone arms.</p>
3478
3479 <p>I tried to find a way to add the API to the desktop version of
3480 Minecraft, but were unable to find any working recipes. The
3481 <a href="https://www.epiphanydigest.com/tag/minecraft-python-api/">recipes</a>
3482 I <a href="https://github.com/kbsriram/mcpiapi">found</a> are only
3483 working with a standalone Minecraft server setup. Are there any
3484 options to use with the normal desktop version?</p>
3485
3486 <p>As usual, if you use Bitcoin and want to show your support of my
3487 activities, please send Bitcoin donations to my address
3488 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
3489
3490 </div>
3491 <div class="tags">
3492
3493
3494 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
3495
3496
3497 </div>
3498 </div>
3499 <div class="padding"></div>
3500
3501 <div class="entry">
3502 <div class="title">
3503 <a href="http://www.hungry.com/~pere/blog/Time_for_an_official_MIME_type_for_patches_.html">Time for an official MIME type for patches?</a>
3504 </div>
3505 <div class="date">
3506 1st November 2018
3507 </div>
3508 <div class="body">
3509 <p>As part of my involvement in
3510 <a href="https://gitlab.com/OsloMet-ABI/nikita-noark5-core">the Nikita
3511 archive API project</a>, I've been importing a fairly large lump of
3512 emails into a test instance of the archive to see how well this would
3513 go. I picked a subset of <a href="https://notmuchmail.org/">my
3514 notmuch email database</a>, all public emails sent to me via
3515 @lists.debian.org, giving me a set of around 216 000 emails to import.
3516 In the process, I had a look at the various attachments included in
3517 these emails, to figure out what to do with attachments, and noticed
3518 that one of the most common attachment formats do not have
3519 <a href="https://www.iana.org/assignments/media-types/media-types.xhtml">an
3520 official MIME type</a> registered with IANA/IETF. The output from
3521 diff, ie the input for patch, is on the top 10 list of formats
3522 included in these emails. At the moment people seem to use either
3523 text/x-patch or text/x-diff, but neither is officially registered. It
3524 would be better if one official MIME type were registered and used
3525 everywhere.</p>
3526
3527 <p>To try to get one official MIME type for these files, I've brought
3528 up the topic on
3529 <a href="https://www.ietf.org/mailman/listinfo/media-types">the
3530 media-types mailing list</a>. If you are interested in discussion
3531 which MIME type to use as the official for patch files, or involved in
3532 making software using a MIME type for patches, perhaps you would like
3533 to join the discussion?</p>
3534
3535 <p>As usual, if you use Bitcoin and want to show your support of my
3536 activities, please send Bitcoin donations to my address
3537 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
3538
3539 </div>
3540 <div class="tags">
3541
3542
3543 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/noark5">noark5</a>, <a href="http://www.hungry.com/~pere/blog/tags/standard">standard</a>.
3544
3545
3546 </div>
3547 </div>
3548 <div class="padding"></div>
3549
3550 <div class="entry">
3551 <div class="title">
3552 <a href="http://www.hungry.com/~pere/blog/Automatic_Google_Drive_sync_using_grive_in_Debian.html">Automatic Google Drive sync using grive in Debian</a>
3553 </div>
3554 <div class="date">
3555 4th October 2018
3556 </div>
3557 <div class="body">
3558 <p>A few days, I rescued a Windows victim over to Debian. To try to
3559 rescue the remains, I helped set up automatic sync with Google Drive.
3560 I did not find any sensible Debian package handling this
3561 automatically, so I rebuild the grive2 source from
3562 <a href="http://www.webupd8.org/">the Ubuntu UPD8 PPA</a> to do the
3563 task and added a autostart desktop entry and a small shell script to
3564 run in the background while the user is logged in to do the sync.
3565 Here is a sketch of the setup for future reference.</p>
3566
3567 <p>I first created <tt>~/googledrive</tt>, entered the directory and
3568 ran '<tt>grive -a</tt>' to authenticate the machine/user. Next, I
3569 created a autostart hook in <tt>~/.config/autostart/grive.desktop</tt>
3570 to start the sync when the user log in:</p>
3571
3572 <p><blockquote><pre>
3573 [Desktop Entry]
3574 Name=Google drive autosync
3575 Type=Application
3576 Exec=/home/user/bin/grive-sync
3577 </pre></blockquote></p>
3578
3579 <p>Finally, I wrote the <tt>~/bin/grive-sync</tt> script to sync
3580 ~/googledrive/ with the files in Google Drive.</p>
3581
3582 <p><blockquote><pre>
3583 #!/bin/sh
3584 set -e
3585 cd ~/
3586 cleanup() {
3587 if [ "$syncpid" ] ; then
3588 kill $syncpid
3589 fi
3590 }
3591 trap cleanup EXIT INT QUIT
3592 /usr/lib/grive/grive-sync.sh listen googledrive 2>&1 | sed "s%^%$0:%" &
3593 syncpdi=$!
3594 while true; do
3595 if ! xhost >/dev/null 2>&1 ; then
3596 echo "no DISPLAY, exiting as the user probably logged out"
3597 exit 1
3598 fi
3599 if [ ! -e /run/user/1000/grive-sync.sh_googledrive ] ; then
3600 /usr/lib/grive/grive-sync.sh sync googledrive
3601 fi
3602 sleep 300
3603 done 2>&1 | sed "s%^%$0:%"
3604 </pre></blockquote></p>
3605
3606 <p>Feel free to use the setup if you want. It can be assumed to be
3607 GNU GPL v2 licensed (or any later version, at your leisure), but I
3608 doubt this code is possible to claim copyright on.</p>
3609
3610 <p>As usual, if you use Bitcoin and want to show your support of my
3611 activities, please send Bitcoin donations to my address
3612 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
3613
3614 </div>
3615 <div class="tags">
3616
3617
3618 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
3619
3620
3621 </div>
3622 </div>
3623 <div class="padding"></div>
3624
3625 <div class="entry">
3626 <div class="title">
3627 <a href="http://www.hungry.com/~pere/blog/Using_the_Kodi_API_to_play_Youtube_videos.html">Using the Kodi API to play Youtube videos</a>
3628 </div>
3629 <div class="date">
3630 2nd September 2018
3631 </div>
3632 <div class="body">
3633 <p>I continue to explore my Kodi installation, and today I wanted to
3634 tell it to play a youtube URL I received in a chat, without having to
3635 insert search terms using the on-screen keyboard. After searching the
3636 web for API access to the Youtube plugin and testing a bit, I managed
3637 to find a recipe that worked. If you got a kodi instance with its API
3638 available from http://kodihost/jsonrpc, you can try the following to
3639 have check out a nice cover band.</p>
3640
3641 <p><blockquote><pre>curl --silent --header 'Content-Type: application/json' \
3642 --data-binary '{ "id": 1, "jsonrpc": "2.0", "method": "Player.Open",
3643 "params": {"item": { "file":
3644 "plugin://plugin.video.youtube/play/?video_id=LuRGVM9O0qg" } } }' \
3645 http://projector.local/jsonrpc</pre></blockquote></p>
3646
3647 <p>I've extended kodi-stream program to take a video source as its
3648 first argument. It can now handle direct video links, youtube links
3649 and 'desktop' to stream my desktop to Kodi. It is almost like a
3650 Chromecast. :)</p>
3651
3652 <p>As usual, if you use Bitcoin and want to show your support of my
3653 activities, please send Bitcoin donations to my address
3654 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
3655
3656 </div>
3657 <div class="tags">
3658
3659
3660 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/kodi">kodi</a>, <a href="http://www.hungry.com/~pere/blog/tags/video">video</a>.
3661
3662
3663 </div>
3664 </div>
3665 <div class="padding"></div>
3666
3667 <div class="entry">
3668 <div class="title">
3669 <a href="http://www.hungry.com/~pere/blog/Sharing_images_with_friends_and_family_using_RSS_and_EXIF_XMP_metadata.html">Sharing images with friends and family using RSS and EXIF/XMP metadata</a>
3670 </div>
3671 <div class="date">
3672 31st July 2018
3673 </div>
3674 <div class="body">
3675 <p>For a while now, I have looked for a sensible way to share images
3676 with my family using a self hosted solution, as it is unacceptable to
3677 place images from my personal life under the control of strangers
3678 working for data hoarders like Google or Dropbox. The last few days I
3679 have drafted an approach that might work out, and I would like to
3680 share it with you. I would like to publish images on a server under
3681 my control, and point some Internet connected display units using some
3682 free and open standard to the images I published. As my primary
3683 language is not limited to ASCII, I need to store metadata using
3684 UTF-8. Many years ago, I hoped to find a digital photo frame capable
3685 of reading a RSS feed with image references (aka using the
3686 &lt;enclosure&gt; RSS tag), but was unable to find a current supplier
3687 of such frames. In the end I gave up that approach.</p>
3688
3689 <p>Some months ago, I discovered that
3690 <a href="https://www.jwz.org/xscreensaver/">XScreensaver</a> is able to
3691 read images from a RSS feed, and used it to set up a screen saver on
3692 my home info screen, showing images from the Daily images feed from
3693 NASA. This proved to work well. More recently I discovered that
3694 <a href="https://kodi.tv">Kodi</a> (both using
3695 <a href="https://www.openelec.tv/">OpenELEC</a> and
3696 <a href="https://libreelec.tv">LibreELEC</a>) provide the
3697 <a href="https://github.com/grinsted/script.screensaver.feedreader">Feedreader</a>
3698 screen saver capable of reading a RSS feed with images and news. For
3699 fun, I used it this summer to test Kodi on my parents TV by hooking up
3700 a Raspberry PI unit with LibreELEC, and wanted to provide them with a
3701 screen saver showing selected pictures from my selection.</p>
3702
3703 <p>Armed with motivation and a test photo frame, I set out to generate
3704 a RSS feed for the Kodi instance. I adjusted my <a
3705 href="https://freedombox.org/">Freedombox</a> instance, created
3706 /var/www/html/privatepictures/, wrote a small Perl script to extract
3707 title and description metadata from the photo files and generate the
3708 RSS file. I ended up using Perl instead of python, as the
3709 libimage-exiftool-perl Debian package seemed to handle the EXIF/XMP
3710 tags I ended up using, while python3-exif did not. The relevant EXIF
3711 tags only support ASCII, so I had to find better alternatives. XMP
3712 seem to have the support I need.</p>
3713
3714 <p>I am a bit unsure which EXIF/XMP tags to use, as I would like to
3715 use tags that can be easily added/updated using normal free software
3716 photo managing software. I ended up using the tags set using this
3717 exiftool command, as these tags can also be set using digiKam:</p>
3718
3719 <blockquote><pre>
3720 exiftool -headline='The RSS image title' \
3721 -description='The RSS image description.' \
3722 -subject+=for-family photo.jpeg
3723 </pre></blockquote>
3724
3725 <p>I initially tried the "-title" and "keyword" tags, but they were
3726 invisible in digiKam, so I changed to "-headline" and "-subject". I
3727 use the keyword/subject 'for-family' to flag that the photo should be
3728 shared with my family. Images with this keyword set are located and
3729 copied into my Freedombox for the RSS generating script to find.</p>
3730
3731 <p>Are there better ways to do this? Get in touch if you have better
3732 suggestions.</p>
3733
3734 <p>As usual, if you use Bitcoin and want to show your support of my
3735 activities, please send Bitcoin donations to my address
3736 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
3737
3738 </div>
3739 <div class="tags">
3740
3741
3742 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
3743
3744
3745 </div>
3746 </div>
3747 <div class="padding"></div>
3748
3749 <div class="entry">
3750 <div class="title">
3751 <a href="http://www.hungry.com/~pere/blog/Simple_streaming_the_Linux_desktop_to_Kodi_using_GStreamer_and_RTP.html">Simple streaming the Linux desktop to Kodi using GStreamer and RTP</a>
3752 </div>
3753 <div class="date">
3754 12th July 2018
3755 </div>
3756 <div class="body">
3757 <p>Last night, I wrote
3758 <a href="http://www.hungry.com/~pere/blog/Streaming_the_Linux_desktop_to_Kodi_using_VLC_and_RTSP.html">a
3759 recipe to stream a Linux desktop using VLC to a instance of Kodi</a>.
3760 During the day I received valuable feedback, and thanks to the
3761 suggestions I have been able to rewrite the recipe into a much simpler
3762 approach requiring no setup at all. It is a single script that take
3763 care of it all.</p>
3764
3765 <p>This new script uses GStreamer instead of VLC to capture the
3766 desktop and stream it to Kodi. This fixed the video quality issue I
3767 saw initially. It further removes the need to add a m3u file on the
3768 Kodi machine, as it instead connects to
3769 <a href="https://kodi.wiki/view/JSON-RPC_API/v8">the JSON-RPC API in
3770 Kodi</a> and simply ask Kodi to play from the stream created using
3771 GStreamer. Streaming the desktop to Kodi now become trivial. Copy
3772 the script below, run it with the DNS name or IP address of the kodi
3773 server to stream to as the only argument, and watch your screen show
3774 up on the Kodi screen. Note, it depend on multicast on the local
3775 network, so if you need to stream outside the local network, the
3776 script must be modified. Also note, I have no idea if audio work, as
3777 I only care about the picture part.</p>
3778
3779 <blockquote><pre>
3780 #!/bin/sh
3781 #
3782 # Stream the Linux desktop view to Kodi. See
3783 # http://www.hungry.com/~pere/blog/Streaming_the_Linux_desktop_to_Kodi_using_VLC_and_RTSP.html
3784 # for backgorund information.
3785
3786 # Make sure the stream is stopped in Kodi and the gstreamer process is
3787 # killed if something go wrong (for example if curl is unable to find the
3788 # kodi server). Do the same when interrupting this script.
3789 kodicmd() {
3790 host="$1"
3791 cmd="$2"
3792 params="$3"
3793 curl --silent --header 'Content-Type: application/json' \
3794 --data-binary "{ \"id\": 1, \"jsonrpc\": \"2.0\", \"method\": \"$cmd\", \"params\": $params }" \
3795 "http://$host/jsonrpc"
3796 }
3797 cleanup() {
3798 if [ -n "$kodihost" ] ; then
3799 # Stop the playing when we end
3800 playerid=$(kodicmd "$kodihost" Player.GetActivePlayers "{}" |
3801 jq .result[].playerid)
3802 kodicmd "$kodihost" Player.Stop "{ \"playerid\" : $playerid }" > /dev/null
3803 fi
3804 if [ "$gstpid" ] && kill -0 "$gstpid" >/dev/null 2>&1; then
3805 kill "$gstpid"
3806 fi
3807 }
3808 trap cleanup EXIT INT
3809
3810 if [ -n "$1" ]; then
3811 kodihost=$1
3812 shift
3813 else
3814 kodihost=kodi.local
3815 fi
3816
3817 mcast=239.255.0.1
3818 mcastport=1234
3819 mcastttl=1
3820
3821 pasrc=$(pactl list | grep -A2 'Source #' | grep 'Name: .*\.monitor$' | \
3822 cut -d" " -f2|head -1)
3823 gst-launch-1.0 ximagesrc use-damage=0 ! video/x-raw,framerate=30/1 ! \
3824 videoconvert ! queue2 ! \
3825 x264enc bitrate=8000 speed-preset=superfast tune=zerolatency qp-min=30 \
3826 key-int-max=15 bframes=2 ! video/x-h264,profile=high ! queue2 ! \
3827 mpegtsmux alignment=7 name=mux ! rndbuffersize max=1316 min=1316 ! \
3828 udpsink host=$mcast port=$mcastport ttl-mc=$mcastttl auto-multicast=1 sync=0 \
3829 pulsesrc device=$pasrc ! audioconvert ! queue2 ! avenc_aac ! queue2 ! mux. \
3830 > /dev/null 2>&1 &
3831 gstpid=$!
3832
3833 # Give stream a second to get going
3834 sleep 1
3835
3836 # Ask kodi to start streaming using its JSON-RPC API
3837 kodicmd "$kodihost" Player.Open \
3838 "{\"item\": { \"file\": \"udp://@$mcast:$mcastport\" } }" > /dev/null
3839
3840 # wait for gst to end
3841 wait "$gstpid"
3842 </pre></blockquote>
3843
3844 <p>I hope you find the approach useful. I know I do.</p>
3845
3846 <p>As usual, if you use Bitcoin and want to show your support of my
3847 activities, please send Bitcoin donations to my address
3848 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
3849
3850 </div>
3851 <div class="tags">
3852
3853
3854 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/kodi">kodi</a>, <a href="http://www.hungry.com/~pere/blog/tags/video">video</a>.
3855
3856
3857 </div>
3858 </div>
3859 <div class="padding"></div>
3860
3861 <div class="entry">
3862 <div class="title">
3863 <a href="http://www.hungry.com/~pere/blog/Streaming_the_Linux_desktop_to_Kodi_using_VLC_and_RTSP.html">Streaming the Linux desktop to Kodi using VLC and RTSP</a>
3864 </div>
3865 <div class="date">
3866 12th July 2018
3867 </div>
3868 <div class="body">
3869 <p>PS: See
3870 <ahref="http://www.hungry.com/~pere/blog/Simple_streaming_the_Linux_desktop_to_Kodi_using_GStreamer_and_RTP.html">the
3871 followup post</a> for a even better approach.</p>
3872
3873 <p>A while back, I was asked by a friend how to stream the desktop to
3874 my projector connected to Kodi. I sadly had to admit that I had no
3875 idea, as it was a task I never had tried. Since then, I have been
3876 looking for a way to do so, preferable without much extra software to
3877 install on either side. Today I found a way that seem to kind of
3878 work. Not great, but it is a start.</p>
3879
3880 <p>I had a look at several approaches, for example
3881 <a href="https://github.com/mfoetsch/dlna_live_streaming">using uPnP
3882 DLNA as described in 2011</a>, but it required a uPnP server, fuse and
3883 local storage enough to store the stream locally. This is not going
3884 to work well for me, lacking enough free space, and it would
3885 impossible for my friend to get working.</p>
3886
3887 <p>Next, it occurred to me that perhaps I could use VLC to create a
3888 video stream that Kodi could play. Preferably using
3889 broadcast/multicast, to avoid having to change any setup on the Kodi
3890 side when starting such stream. Unfortunately, the only recipe I
3891 could find using multicast used the rtp protocol, and this protocol
3892 seem to not be supported by Kodi.</p>
3893
3894 <p>On the other hand, the rtsp protocol is working! Unfortunately I
3895 have to specify the IP address of the streaming machine in both the
3896 sending command and the file on the Kodi server. But it is showing my
3897 desktop, and thus allow us to have a shared look on the big screen at
3898 the programs I work on.</p>
3899
3900 <p>I did not spend much time investigating codeces. I combined the
3901 rtp and rtsp recipes from
3902 <a href="https://wiki.videolan.org/Documentation:Streaming_HowTo/Command_Line_Examples/">the
3903 VLC Streaming HowTo/Command Line Examples</a>, and was able to get
3904 this working on the desktop/streaming end.</p>
3905
3906 <blockquote><pre>
3907 vlc screen:// --sout \
3908 '#transcode{vcodec=mp4v,acodec=mpga,vb=800,ab=128}:rtp{dst=projector.local,port=1234,sdp=rtsp://192.168.11.4:8080/test.sdp}'
3909 </pre></blockquote>
3910
3911 <p>I ssh-ed into my Kodi box and created a file like this with the
3912 same IP address:</p>
3913
3914 <blockquote><pre>
3915 echo rtsp://192.168.11.4:8080/test.sdp \
3916 > /storage/videos/screenstream.m3u
3917 </pre></blockquote>
3918
3919 <p>Note the 192.168.11.4 IP address is my desktops IP address. As far
3920 as I can tell the IP must be hardcoded for this to work. In other
3921 words, if someone elses machine is going to do the steaming, you have
3922 to update screenstream.m3u on the Kodi machine and adjust the vlc
3923 recipe. To get started, locate the file in Kodi and select the m3u
3924 file while the VLC stream is running. The desktop then show up in my
3925 big screen. :)</p>
3926
3927 <p>When using the same technique to stream a video file with audio,
3928 the audio quality is really bad. No idea if the problem is package
3929 loss or bad parameters for the transcode. I do not know VLC nor Kodi
3930 enough to tell.</p>
3931
3932 <p><strong>Update 2018-07-12</strong>: Johannes Schauer send me a few
3933 succestions and reminded me about an important step. The "screen:"
3934 input source is only available once the vlc-plugin-access-extra
3935 package is installed on Debian. Without it, you will see this error
3936 message: "VLC is unable to open the MRL 'screen://'. Check the log
3937 for details." He further found that it is possible to drop some parts
3938 of the VLC command line to reduce the amount of hardcoded information.
3939 It is also useful to consider using cvlc to avoid having the VLC
3940 window in the desktop view. In sum, this give us this command line on
3941 the source end
3942
3943 <blockquote><pre>
3944 cvlc screen:// --sout \
3945 '#transcode{vcodec=mp4v,acodec=mpga,vb=800,ab=128}:rtp{sdp=rtsp://:8080/}'
3946 </pre></blockquote>
3947
3948 <p>and this on the Kodi end<p>
3949
3950 <blockquote><pre>
3951 echo rtsp://192.168.11.4:8080/ \
3952 > /storage/videos/screenstream.m3u
3953 </pre></blockquote>
3954
3955 <p>Still bad image quality, though. But I did discover that streaming
3956 a DVD using dvdsimple:///dev/dvd as the source had excellent video and
3957 audio quality, so I guess the issue is in the input or transcoding
3958 parts, not the rtsp part. I've tried to change the vb and ab
3959 parameters to use more bandwidth, but it did not make a
3960 difference.</p>
3961
3962 <p>I further received a suggestion from Einar Haraldseid to try using
3963 gstreamer instead of VLC, and this proved to work great! He also
3964 provided me with the trick to get Kodi to use a multicast stream as
3965 its source. By using this monstrous oneliner, I can stream my desktop
3966 with good video quality in reasonable framerate to the 239.255.0.1
3967 multicast address on port 1234:
3968
3969 <blockquote><pre>
3970 gst-launch-1.0 ximagesrc use-damage=0 ! video/x-raw,framerate=30/1 ! \
3971 videoconvert ! queue2 ! \
3972 x264enc bitrate=8000 speed-preset=superfast tune=zerolatency qp-min=30 \
3973 key-int-max=15 bframes=2 ! video/x-h264,profile=high ! queue2 ! \
3974 mpegtsmux alignment=7 name=mux ! rndbuffersize max=1316 min=1316 ! \
3975 udpsink host=239.255.0.1 port=1234 ttl-mc=1 auto-multicast=1 sync=0 \
3976 pulsesrc device=$(pactl list | grep -A2 'Source #' | \
3977 grep 'Name: .*\.monitor$' | cut -d" " -f2|head -1) ! \
3978 audioconvert ! queue2 ! avenc_aac ! queue2 ! mux.
3979 </pre></blockquote>
3980
3981 <p>and this on the Kodi end<p>
3982
3983 <blockquote><pre>
3984 echo udp://@239.255.0.1:1234 \
3985 > /storage/videos/screenstream.m3u
3986 </pre></blockquote>
3987
3988 <p>Note the trick to pick a valid pulseaudio source. It might not
3989 pick the one you need. This approach will of course lead to trouble
3990 if more than one source uses the same multicast port and address.
3991 Note the ttl-mc=1 setting, which limit the multicast packages to the
3992 local network. If the value is increased, your screen will be
3993 broadcasted further, one network "hop" for each increase (read up on
3994 multicast to learn more. :)!</p>
3995
3996 <p>Having cracked how to get Kodi to receive multicast streams, I
3997 could use this VLC command to stream to the same multicast address.
3998 The image quality is way better than the rtsp approach, but gstreamer
3999 seem to be doing a better job.</p>
4000
4001 <blockquote><pre>
4002 cvlc screen:// --sout '#transcode{vcodec=mp4v,acodec=mpga,vb=800,ab=128}:rtp{mux=ts,dst=239.255.0.1,port=1234,sdp=sap}'
4003 </pre></blockquote>
4004
4005 <p>As usual, if you use Bitcoin and want to show your support of my
4006 activities, please send Bitcoin donations to my address
4007 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
4008
4009 </div>
4010 <div class="tags">
4011
4012
4013 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/kodi">kodi</a>, <a href="http://www.hungry.com/~pere/blog/tags/video">video</a>.
4014
4015
4016 </div>
4017 </div>
4018 <div class="padding"></div>
4019
4020 <div class="entry">
4021 <div class="title">
4022 <a href="http://www.hungry.com/~pere/blog/What_is_the_most_supported_MIME_type_in_Debian_in_2018_.html">What is the most supported MIME type in Debian in 2018?</a>
4023 </div>
4024 <div class="date">
4025 9th July 2018
4026 </div>
4027 <div class="body">
4028 <p>Five years ago,
4029 <a href="http://www.hungry.com/~pere/blog/What_is_the_most_supported_MIME_type_in_Debian_.html">I
4030 measured what the most supported MIME type in Debian was</a>, by
4031 analysing the desktop files in all packages in the archive. Since
4032 then, the DEP-11 AppStream system has been put into production, making
4033 the task a lot easier. This made me want to repeat the measurement,
4034 to see how much things changed. Here are the new numbers, for
4035 unstable only this time:
4036
4037 <p><strong>Debian Unstable:</strong></p>
4038
4039 <pre>
4040 count MIME type
4041 ----- -----------------------
4042 56 image/jpeg
4043 55 image/png
4044 49 image/tiff
4045 48 image/gif
4046 39 image/bmp
4047 38 text/plain
4048 37 audio/mpeg
4049 34 application/ogg
4050 33 audio/x-flac
4051 32 audio/x-mp3
4052 30 audio/x-wav
4053 30 audio/x-vorbis+ogg
4054 29 image/x-portable-pixmap
4055 27 inode/directory
4056 27 image/x-portable-bitmap
4057 27 audio/x-mpeg
4058 26 application/x-ogg
4059 25 audio/x-mpegurl
4060 25 audio/ogg
4061 24 text/html
4062 </pre>
4063
4064 <p>The list was created like this using a sid chroot: "cat
4065 /var/lib/apt/lists/*sid*_dep11_Components-amd64.yml.gz| zcat | awk '/^
4066 - \S+\/\S+$/ {print $2 }' | sort | uniq -c | sort -nr | head -20"</p>
4067
4068 <p>It is interesting to see how image formats have passed text/plain
4069 as the most announced supported MIME type. These days, thanks to the
4070 AppStream system, if you run into a file format you do not know, and
4071 want to figure out which packages support the format, you can find the
4072 MIME type of the file using "file --mime &lt;filename&gt;", and then
4073 look up all packages announcing support for this format in their
4074 AppStream metadata (XML or .desktop file) using "appstreamcli
4075 what-provides mimetype &lt;mime-type&gt;. For example if you, like
4076 me, want to know which packages support inode/directory, you can get a
4077 list like this:</p>
4078
4079 <p><blockquote><pre>
4080 % appstreamcli what-provides mimetype inode/directory | grep Package: | sort
4081 Package: anjuta
4082 Package: audacious
4083 Package: baobab
4084 Package: cervisia
4085 Package: chirp
4086 Package: dolphin
4087 Package: doublecmd-common
4088 Package: easytag
4089 Package: enlightenment
4090 Package: ephoto
4091 Package: filelight
4092 Package: gwenview
4093 Package: k4dirstat
4094 Package: kaffeine
4095 Package: kdesvn
4096 Package: kid3
4097 Package: kid3-qt
4098 Package: nautilus
4099 Package: nemo
4100 Package: pcmanfm
4101 Package: pcmanfm-qt
4102 Package: qweborf
4103 Package: ranger
4104 Package: sirikali
4105 Package: spacefm
4106 Package: spacefm
4107 Package: vifm
4108 %
4109 </pre></blockquote></p>
4110
4111 <p>Using the same method, I can quickly discover that the Sketchup file
4112 format is not yet supported by any package in Debian:</p>
4113
4114 <p><blockquote><pre>
4115 % appstreamcli what-provides mimetype application/vnd.sketchup.skp
4116 Could not find component providing 'mimetype::application/vnd.sketchup.skp'.
4117 %
4118 </pre></blockquote></p>
4119
4120 <p>Yesterday I used it to figure out which packages support the STL 3D
4121 format:</p>
4122
4123 <p><blockquote><pre>
4124 % appstreamcli what-provides mimetype application/sla|grep Package
4125 Package: cura
4126 Package: meshlab
4127 Package: printrun
4128 %
4129 </pre></blockquote></p>
4130
4131 <p>PS: A new version of Cura was uploaded to Debian yesterday.</p>
4132
4133 <p>As usual, if you use Bitcoin and want to show your support of my
4134 activities, please send Bitcoin donations to my address
4135 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
4136
4137 </div>
4138 <div class="tags">
4139
4140
4141 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/isenkram">isenkram</a>.
4142
4143
4144 </div>
4145 </div>
4146 <div class="padding"></div>
4147
4148 <div class="entry">
4149 <div class="title">
4150 <a href="http://www.hungry.com/~pere/blog/Debian_APT_upgrade_without_enough_free_space_on_the_disk___.html">Debian APT upgrade without enough free space on the disk...</a>
4151 </div>
4152 <div class="date">
4153 8th July 2018
4154 </div>
4155 <div class="body">
4156 <p>Quite regularly, I let my Debian Sid/Unstable chroot stay untouch
4157 for a while, and when I need to update it there is not enough free
4158 space on the disk for apt to do a normal 'apt upgrade'. I normally
4159 would resolve the issue by doing 'apt install &lt;somepackages&gt;' to
4160 upgrade only some of the packages in one batch, until the amount of
4161 packages to download fall below the amount of free space available.
4162 Today, I had about 500 packages to upgrade, and after a while I got
4163 tired of trying to install chunks of packages manually. I concluded
4164 that I did not have the spare hours required to complete the task, and
4165 decided to see if I could automate it. I came up with this small
4166 script which I call 'apt-in-chunks':</p>
4167
4168 <p><blockquote><pre>
4169 #!/bin/sh
4170 #
4171 # Upgrade packages when the disk is too full to upgrade every
4172 # upgradable package in one lump. Fetching packages to upgrade using
4173 # apt, and then installing using dpkg, to avoid changing the package
4174 # flag for manual/automatic.
4175
4176 set -e
4177
4178 ignore() {
4179 if [ "$1" ]; then
4180 grep -v "$1"
4181 else
4182 cat
4183 fi
4184 }
4185
4186 for p in $(apt list --upgradable | ignore "$@" |cut -d/ -f1 | grep -v '^Listing...'); do
4187 echo "Upgrading $p"
4188 apt clean
4189 apt install --download-only -y $p
4190 for f in /var/cache/apt/archives/*.deb; do
4191 if [ -e "$f" ]; then
4192 dpkg -i /var/cache/apt/archives/*.deb
4193 break
4194 fi
4195 done
4196 done
4197 </pre></blockquote></p>
4198
4199 <p>The script will extract the list of packages to upgrade, try to
4200 download the packages needed to upgrade one package, install the
4201 downloaded packages using dpkg. The idea is to upgrade packages
4202 without changing the APT mark for the package (ie the one recording of
4203 the package was manually requested or pulled in as a dependency). To
4204 use it, simply run it as root from the command line. If it fail, try
4205 'apt install -f' to clean up the mess and run the script again. This
4206 might happen if the new packages conflict with one of the old
4207 packages. dpkg is unable to remove, while apt can do this.</p>
4208
4209 <p>It take one option, a package to ignore in the list of packages to
4210 upgrade. The option to ignore a package is there to be able to skip
4211 the packages that are simply too large to unpack. Today this was
4212 'ghc', but I have run into other large packages causing similar
4213 problems earlier (like TeX).</p>
4214
4215 <p>Update 2018-07-08: Thanks to Paul Wise, I am aware of two
4216 alternative ways to handle this. The "unattended-upgrades
4217 --minimal-upgrade-steps" option will try to calculate upgrade sets for
4218 each package to upgrade, and then upgrade them in order, smallest set
4219 first. It might be a better option than my above mentioned script.
4220 Also, "aptutude upgrade" can upgrade single packages, thus avoiding
4221 the need for using "dpkg -i" in the script above.</p>
4222
4223 <p>As usual, if you use Bitcoin and want to show your support of my
4224 activities, please send Bitcoin donations to my address
4225 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
4226
4227 </div>
4228 <div class="tags">
4229
4230
4231 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
4232
4233
4234 </div>
4235 </div>
4236 <div class="padding"></div>
4237
4238 <div class="entry">
4239 <div class="title">
4240 <a href="http://www.hungry.com/~pere/blog/Version_3_1_of_Cura__the_3D_print_slicer__is_now_in_Debian.html">Version 3.1 of Cura, the 3D print slicer, is now in Debian</a>
4241 </div>
4242 <div class="date">
4243 13th February 2018
4244 </div>
4245 <div class="body">
4246 <p>A new version of the
4247 <a href="https://tracker.debian.org/pkg/cura">3D printer slicer
4248 software Cura</a>, version 3.1.0, is now available in Debian Testing
4249 (aka Buster) and Debian Unstable (aka Sid). I hope you find it
4250 useful. It was uploaded the last few days, and the last update will
4251 enter testing tomorrow. See the
4252 <a href="https://ultimaker.com/en/products/cura-software/release-notes">release
4253 notes</a> for the list of bug fixes and new features. Version 3.2
4254 was announced 6 days ago. We will try to get it into Debian as
4255 well.</p>
4256
4257 <p>More information related to 3D printing is available on the
4258 <a href="https://wiki.debian.org/3DPrinting">3D printing</a> and
4259 <a href="https://wiki.debian.org/3D-printer">3D printer</a> wiki pages
4260 in Debian.</p>
4261
4262 <p>As usual, if you use Bitcoin and want to show your support of my
4263 activities, please send Bitcoin donations to my address
4264 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
4265
4266 </div>
4267 <div class="tags">
4268
4269
4270 Tags: <a href="http://www.hungry.com/~pere/blog/tags/3d-printer">3d-printer</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
4271
4272
4273 </div>
4274 </div>
4275 <div class="padding"></div>
4276
4277 <div class="entry">
4278 <div class="title">
4279 <a href="http://www.hungry.com/~pere/blog/Cura__the_nice_3D_print_slicer__is_now_in_Debian_Unstable.html">Cura, the nice 3D print slicer, is now in Debian Unstable</a>
4280 </div>
4281 <div class="date">
4282 17th December 2017
4283 </div>
4284 <div class="body">
4285 <p>After several months of working and waiting, I am happy to report
4286 that the nice and user friendly 3D printer slicer software Cura just
4287 entered Debian Unstable. It consist of five packages,
4288 <a href="https://tracker.debian.org/pkg/cura">cura</a>,
4289 <a href="https://tracker.debian.org/pkg/cura-engine">cura-engine</a>,
4290 <a href="https://tracker.debian.org/pkg/libarcus">libarcus</a>,
4291 <a href="https://tracker.debian.org/pkg/fdm-materials">fdm-materials</a>,
4292 <a href="https://tracker.debian.org/pkg/libsavitar">libsavitar</a> and
4293 <a href="https://tracker.debian.org/pkg/uranium">uranium</a>. The last
4294 two, uranium and cura, entered Unstable yesterday. This should make
4295 it easier for Debian users to print on at least the Ultimaker class of
4296 3D printers. My nearest 3D printer is an Ultimaker 2+, so it will
4297 make life easier for at least me. :)</p>
4298
4299 <p>The work to make this happen was done by Gregor Riepl, and I was
4300 happy to assist him in sponsoring the packages. With the introduction
4301 of Cura, Debian is up to three 3D printer slicers at your service,
4302 Cura, Slic3r and Slic3r Prusa. If you own or have access to a 3D
4303 printer, give it a go. :)</p>
4304
4305 <p>The 3D printer software is maintained by the 3D printer Debian
4306 team, flocking together on the
4307 <a href="http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/3dprinter-general">3dprinter-general</a>
4308 mailing list and the
4309 <a href="irc://irc.debian.org/#debian-3dprinting">#debian-3dprinting</a>
4310 IRC channel.</p>
4311
4312 <p>The next step for Cura in Debian is to update the cura package to
4313 version 3.0.3 and then update the entire set of packages to version
4314 3.1.0 which showed up the last few days.</p>
4315
4316 </div>
4317 <div class="tags">
4318
4319
4320 Tags: <a href="http://www.hungry.com/~pere/blog/tags/3d-printer">3d-printer</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
4321
4322
4323 </div>
4324 </div>
4325 <div class="padding"></div>
4326
4327 <div class="entry">
4328 <div class="title">
4329 <a href="http://www.hungry.com/~pere/blog/Generating_3D_prints_in_Debian_using_Cura_and_Slic3r__prusa_.html">Generating 3D prints in Debian using Cura and Slic3r(-prusa)</a>
4330 </div>
4331 <div class="date">
4332 9th October 2017
4333 </div>
4334 <div class="body">
4335 <p>At my nearby maker space,
4336 <a href="http://sonen.ifi.uio.no/">Sonen</a>, I heard the story that it
4337 was easier to generate gcode files for theyr 3D printers (Ultimake 2+)
4338 on Windows and MacOS X than Linux, because the software involved had
4339 to be manually compiled and set up on Linux while premade packages
4340 worked out of the box on Windows and MacOS X. I found this annoying,
4341 as the software involved,
4342 <a href="https://github.com/Ultimaker/Cura">Cura</a>, is free software
4343 and should be trivial to get up and running on Linux if someone took
4344 the time to package it for the relevant distributions. I even found
4345 <a href="https://bugs.debian.org/706656">a request for adding into
4346 Debian</a> from 2013, which had seem some activity over the years but
4347 never resulted in the software showing up in Debian. So a few days
4348 ago I offered my help to try to improve the situation.</p>
4349
4350 <p>Now I am very happy to see that all the packages required by a
4351 working Cura in Debian are uploaded into Debian and waiting in the NEW
4352 queue for the ftpmasters to have a look. You can track the progress
4353 on
4354 <a href="https://qa.debian.org/developer.php?email=3dprinter-general%40lists.alioth.debian.org">the
4355 status page for the 3D printer team</a>.</p>
4356
4357 <p>The uploaded packages are a bit behind upstream, and was uploaded
4358 now to get slots in <a href="https://ftp-master.debian.org/new.html">the NEW
4359 queue</a> while we work up updating the packages to the latest
4360 upstream version.</p>
4361
4362 <p>On a related note, two competitors for Cura, which I found harder
4363 to use and was unable to configure correctly for Ultimaker 2+ in the
4364 short time I spent on it, are already in Debian. If you are looking
4365 for 3D printer "slicers" and want something already available in
4366 Debian, check out
4367 <a href="https://tracker.debian.org/pkg/slic3r">slic3r</a> and
4368 <a href="https://tracker.debian.org/pkg/slic3r-prusa">slic3r-prusa</a>.
4369 The latter is a fork of the former.</p>
4370
4371 <p>As usual, if you use Bitcoin and want to show your support of my
4372 activities, please send Bitcoin donations to my address
4373 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
4374
4375 </div>
4376 <div class="tags">
4377
4378
4379 Tags: <a href="http://www.hungry.com/~pere/blog/tags/3d-printer">3d-printer</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
4380
4381
4382 </div>
4383 </div>
4384 <div class="padding"></div>
4385
4386 <div class="entry">
4387 <div class="title">
4388 <a href="http://www.hungry.com/~pere/blog/Visualizing_GSM_radio_chatter_using_gr_gsm_and_Hopglass.html">Visualizing GSM radio chatter using gr-gsm and Hopglass</a>
4389 </div>
4390 <div class="date">
4391 29th September 2017
4392 </div>
4393 <div class="body">
4394 <p>Every mobile phone announce its existence over radio to the nearby
4395 mobile cell towers. And this radio chatter is available for anyone
4396 with a radio receiver capable of receiving them. Details about the
4397 mobile phones with very good accuracy is of course collected by the
4398 phone companies, but this is not the topic of this blog post. The
4399 mobile phone radio chatter make it possible to figure out when a cell
4400 phone is nearby, as it include the SIM card ID (IMSI). By paying
4401 attention over time, one can see when a phone arrive and when it leave
4402 an area. I believe it would be nice to make this information more
4403 available to the general public, to make more people aware of how
4404 their phones are announcing their whereabouts to anyone that care to
4405 listen.</p>
4406
4407 <p>I am very happy to report that we managed to get something
4408 visualizing this information up and running for
4409 <a href="http://norwaymakers.org/osf17">Oslo Skaperfestival 2017</a>
4410 (Oslo Makers Festival) taking place today and tomorrow at Deichmanske
4411 library. The solution is based on the
4412 <a href="http://www.hungry.com/~pere/blog/Easier_recipe_to_observe_the_cell_phones_around_you.html">simple
4413 recipe for listening to GSM chatter</a> I posted a few days ago, and
4414 will show up at the stand of <a href="http://sonen.ifi.uio.no/">Ã…pen
4415 Sone from the Computer Science department of the University of
4416 Oslo</a>. The presentation will show the nearby mobile phones (aka
4417 IMSIs) as dots in a web browser graph, with lines to the dot
4418 representing mobile base station it is talking to. It was working in
4419 the lab yesterday, and was moved into place this morning.</p>
4420
4421 <p>We set up a fairly powerful desktop machine using Debian
4422 Buster/Testing with several (five, I believe) RTL2838 DVB-T receivers
4423 connected and visualize the visible cell phone towers using an
4424 <a href="https://github.com/marlow925/hopglass">English version of
4425 Hopglass</a>. A fairly powerfull machine is needed as the
4426 grgsm_livemon_headless processes from
4427 <a href="https://tracker.debian.org/pkg/gr-gsm">gr-gsm</a> converting
4428 the radio signal to data packages is quite CPU intensive.</p>
4429
4430 <p>The frequencies to listen to, are identified using a slightly
4431 patched scan-and-livemon (to set the --args values for each receiver),
4432 and the Hopglass data is generated using the
4433 <a href="https://github.com/petterreinholdtsen/IMSI-catcher/tree/meshviewer-output">patches
4434 in my meshviewer-output branch</a>. For some reason we could not get
4435 more than four SDRs working. There is also a geographical map trying
4436 to show the location of the base stations, but I believe their
4437 coordinates are hardcoded to some random location in Germany, I
4438 believe. The code should be replaced with code to look up location in
4439 a text file, a sqlite database or one of the online databases
4440 mentioned in
4441 <a href="https://github.com/Oros42/IMSI-catcher/issues/14">the github
4442 issue for the topic</a>.
4443
4444 <p>If this sound interesting, visit the stand at the festival!</p>
4445
4446 </div>
4447 <div class="tags">
4448
4449
4450 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/personvern">personvern</a>, <a href="http://www.hungry.com/~pere/blog/tags/surveillance">surveillance</a>.
4451
4452
4453 </div>
4454 </div>
4455 <div class="padding"></div>
4456
4457 <div class="entry">
4458 <div class="title">
4459 <a href="http://www.hungry.com/~pere/blog/Easier_recipe_to_observe_the_cell_phones_around_you.html">Easier recipe to observe the cell phones around you</a>
4460 </div>
4461 <div class="date">
4462 24th September 2017
4463 </div>
4464 <div class="body">
4465 <p>A little more than a month ago I wrote
4466 <a href="http://www.hungry.com/~pere/blog/Simpler_recipe_on_how_to_make_a_simple__7_IMSI_Catcher_using_Debian.html">how
4467 to observe the SIM card ID (aka IMSI number) of mobile phones talking
4468 to nearby mobile phone base stations using Debian GNU/Linux and a
4469 cheap USB software defined radio</a>, and thus being able to pinpoint
4470 the location of people and equipment (like cars and trains) with an
4471 accuracy of a few kilometer. Since then we have worked to make the
4472 procedure even simpler, and it is now possible to do this without any
4473 manual frequency tuning and without building your own packages.</p>
4474
4475 <p>The <a href="https://tracker.debian.org/pkg/gr-gsm">gr-gsm</a>
4476 package is now included in Debian testing and unstable, and the
4477 IMSI-catcher code no longer require root access to fetch and decode
4478 the GSM data collected using gr-gsm.</p>
4479
4480 <p>Here is an updated recipe, using packages built by Debian and a git
4481 clone of two python scripts:</p>
4482
4483 <ol>
4484
4485 <li>Start with a Debian machine running the Buster version (aka
4486 testing).</li>
4487
4488 <li>Run '<tt>apt install gr-gsm python-numpy python-scipy
4489 python-scapy</tt>' as root to install required packages.</li>
4490
4491 <li>Fetch the code decoding GSM packages using '<tt>git clone
4492 github.com/Oros42/IMSI-catcher.git</tt>'.</li>
4493
4494 <li>Insert USB software defined radio supported by GNU Radio.</li>
4495
4496 <li>Enter the IMSI-catcher directory and run '<tt>python
4497 scan-and-livemon</tt>' to locate the frequency of nearby base
4498 stations and start listening for GSM packages on one of them.</li>
4499
4500 <li>Enter the IMSI-catcher directory and run '<tt>python
4501 simple_IMSI-catcher.py</tt>' to display the collected information.</li>
4502
4503 </ol>
4504
4505 <p>Note, due to a bug somewhere the scan-and-livemon program (actually
4506 <a href="https://github.com/ptrkrysik/gr-gsm/issues/336">its underlying
4507 program grgsm_scanner</a>) do not work with the HackRF radio. It does
4508 work with RTL 8232 and other similar USB radio receivers you can get
4509 very cheaply
4510 (<a href="https://www.ebay.com/sch/items/?_nkw=rtl+2832">for example
4511 from ebay</a>), so for now the solution is to scan using the RTL radio
4512 and only use HackRF for fetching GSM data.</p>
4513
4514 <p>As far as I can tell, a cell phone only show up on one of the
4515 frequencies at the time, so if you are going to track and count every
4516 cell phone around you, you need to listen to all the frequencies used.
4517 To listen to several frequencies, use the --numrecv argument to
4518 scan-and-livemon to use several receivers. Further, I am not sure if
4519 phones using 3G or 4G will show as talking GSM to base stations, so
4520 this approach might not see all phones around you. I typically see
4521 0-400 IMSI numbers an hour when looking around where I live.</p>
4522
4523 <p>I've tried to run the scanner on a
4524 <a href="https://wiki.debian.org/RaspberryPi">Raspberry Pi 2 and 3
4525 running Debian Buster</a>, but the grgsm_livemon_headless process seem
4526 to be too CPU intensive to keep up. When GNU Radio print 'O' to
4527 stdout, I am told there it is caused by a buffer overflow between the
4528 radio and GNU Radio, caused by the program being unable to read the
4529 GSM data fast enough. If you see a stream of 'O's from the terminal
4530 where you started scan-and-livemon, you need a give the process more
4531 CPU power. Perhaps someone are able to optimize the code to a point
4532 where it become possible to set up RPi3 based GSM sniffers? I tried
4533 using Raspbian instead of Debian, but there seem to be something wrong
4534 with GNU Radio on raspbian, causing glibc to abort().</p>
4535
4536 </div>
4537 <div class="tags">
4538
4539
4540 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/personvern">personvern</a>, <a href="http://www.hungry.com/~pere/blog/tags/surveillance">surveillance</a>.
4541
4542
4543 </div>
4544 </div>
4545 <div class="padding"></div>
4546
4547 <div class="entry">
4548 <div class="title">
4549 <a href="http://www.hungry.com/~pere/blog/Simpler_recipe_on_how_to_make_a_simple__7_IMSI_Catcher_using_Debian.html">Simpler recipe on how to make a simple $7 IMSI Catcher using Debian</a>
4550 </div>
4551 <div class="date">
4552 9th August 2017
4553 </div>
4554 <div class="body">
4555 <p>On friday, I came across an interesting article in the Norwegian
4556 web based ICT news magazine digi.no on
4557 <a href="https://www.digi.no/artikler/sikkerhetsforsker-lagde-enkel-imsi-catcher-for-60-kroner-na-kan-mobiler-kartlegges-av-alle/398588">how
4558 to collect the IMSI numbers of nearby cell phones</a> using the cheap
4559 DVB-T software defined radios. The article refered to instructions
4560 and <a href="https://www.youtube.com/watch?v=UjwgNd_as30">a recipe by
4561 Keld Norman on Youtube on how to make a simple $7 IMSI Catcher</a>, and I decided to test them out.</p>
4562
4563 <p>The instructions said to use Ubuntu, install pip using apt (to
4564 bypass apt), use pip to install pybombs (to bypass both apt and pip),
4565 and the ask pybombs to fetch and build everything you need from
4566 scratch. I wanted to see if I could do the same on the most recent
4567 Debian packages, but this did not work because pybombs tried to build
4568 stuff that no longer build with the most recent openssl library or
4569 some other version skew problem. While trying to get this recipe
4570 working, I learned that the apt->pip->pybombs route was a long detour,
4571 and the only piece of software dependency missing in Debian was the
4572 gr-gsm package. I also found out that the lead upstream developer of
4573 gr-gsm (the name stand for GNU Radio GSM) project already had a set of
4574 Debian packages provided in an Ubuntu PPA repository. All I needed to
4575 do was to dget the Debian source package and built it.</p>
4576
4577 <p>The IMSI collector is a python script listening for packages on the
4578 loopback network device and printing to the terminal some specific GSM
4579 packages with IMSI numbers in them. The code is fairly short and easy
4580 to understand. The reason this work is because gr-gsm include a tool
4581 to read GSM data from a software defined radio like a DVB-T USB stick
4582 and other software defined radios, decode them and inject them into a
4583 network device on your Linux machine (using the loopback device by
4584 default). This proved to work just fine, and I've been testing the
4585 collector for a few days now.</p>
4586
4587 <p>The updated and simpler recipe is thus to</p>
4588
4589 <ol>
4590
4591 <li>start with a Debian machine running Stretch or newer,</li>
4592
4593 <li>build and install the gr-gsm package available from
4594 <a href="http://ppa.launchpad.net/ptrkrysik/gr-gsm/ubuntu/pool/main/g/gr-gsm/">http://ppa.launchpad.net/ptrkrysik/gr-gsm/ubuntu/pool/main/g/gr-gsm/</a>,</li>
4595
4596 <li>clone the git repostory from <a href="https://github.com/Oros42/IMSI-catcher">https://github.com/Oros42/IMSI-catcher</a>,</li>
4597
4598 <li>run grgsm_livemon and adjust the frequency until the terminal
4599 where it was started is filled with a stream of text (meaning you
4600 found a GSM station).</li>
4601
4602 <li>go into the IMSI-catcher directory and run 'sudo python simple_IMSI-catcher.py' to extract the IMSI numbers.</li>
4603
4604 </ol>
4605
4606 <p>To make it even easier in the future to get this sniffer up and
4607 running, I decided to package
4608 <a href="https://github.com/ptrkrysik/gr-gsm/">the gr-gsm project</a>
4609 for Debian (<a href="https://bugs.debian.org/871055">WNPP
4610 #871055</a>), and the package was uploaded into the NEW queue today.
4611 Luckily the gnuradio maintainer has promised to help me, as I do not
4612 know much about gnuradio stuff yet.</p>
4613
4614 <p>I doubt this "IMSI cacher" is anywhere near as powerfull as
4615 commercial tools like
4616 <a href="https://www.thespyphone.com/portable-imsi-imei-catcher/">The
4617 Spy Phone Portable IMSI / IMEI Catcher</a> or the
4618 <a href="https://en.wikipedia.org/wiki/Stingray_phone_tracker">Harris
4619 Stingray</a>, but I hope the existance of cheap alternatives can make
4620 more people realise how their whereabouts when carrying a cell phone
4621 is easily tracked. Seeing the data flow on the screen, realizing that
4622 I live close to a police station and knowing that the police is also
4623 wearing cell phones, I wonder how hard it would be for criminals to
4624 track the position of the police officers to discover when there are
4625 police near by, or for foreign military forces to track the location
4626 of the Norwegian military forces, or for anyone to track the location
4627 of government officials...</p>
4628
4629 <p>It is worth noting that the data reported by the IMSI-catcher
4630 script mentioned above is only a fraction of the data broadcasted on
4631 the GSM network. It will only collect one frequency at the time,
4632 while a typical phone will be using several frequencies, and not all
4633 phones will be using the frequencies tracked by the grgsm_livemod
4634 program. Also, there is a lot of radio chatter being ignored by the
4635 simple_IMSI-catcher script, which would be collected by extending the
4636 parser code. I wonder if gr-gsm can be set up to listen to more than
4637 one frequency?</p>
4638
4639 </div>
4640 <div class="tags">
4641
4642
4643 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/personvern">personvern</a>, <a href="http://www.hungry.com/~pere/blog/tags/surveillance">surveillance</a>.
4644
4645
4646 </div>
4647 </div>
4648 <div class="padding"></div>
4649
4650 <div class="entry">
4651 <div class="title">
4652 <a href="http://www.hungry.com/~pere/blog/Norwegian_Bokm_l_edition_of_Debian_Administrator_s_Handbook_is_now_available.html">Norwegian Bokmål edition of Debian Administrator's Handbook is now available</a>
4653 </div>
4654 <div class="date">
4655 25th July 2017
4656 </div>
4657 <div class="body">
4658 <p align="center"><img align="center" src="http://www.hungry.com/~pere/blog/images/2017-07-25-debian-handbook-nb-testprint.png"/></p>
4659
4660 <p>I finally received a copy of the Norwegian Bokmål edition of
4661 "<a href="https://debian-handbook.info/">The Debian Administrator's
4662 Handbook</a>". This test copy arrived in the mail a few days ago, and
4663 I am very happy to hold the result in my hand. We spent around one and a half year translating it. This paperbook edition
4664 <a href="https://debian-handbook.info/get/#norwegian">is available
4665 from lulu.com</a>. If you buy it quickly, you save 25% on the list
4666 price. The book is also available for download in electronic form as
4667 PDF, EPUB and Mobipocket, as can be
4668 <a href="https://debian-handbook.info/browse/nb-NO/stable/">read online
4669 as a web page</a>.</p>
4670
4671 <p>This is the second book I publish (the first was the book
4672 "<a href="http://free-culture.cc/">Free Culture</a>" by Lawrence Lessig
4673 in
4674 <a href="http://www.lulu.com/shop/lawrence-lessig/free-culture/paperback/product-22440520.html">English</a>,
4675 <a href="http://www.lulu.com/shop/lawrence-lessig/culture-libre/paperback/product-22645082.html">French</a>
4676 and
4677 <a href="http://www.lulu.com/shop/lawrence-lessig/fri-kultur/paperback/product-22441576.html">Norwegian
4678 Bokmål</a>), and I am very excited to finally wrap up this
4679 project. I hope
4680 "<a href="http://www.lulu.com/shop/rapha%C3%ABl-hertzog-and-roland-mas/h%C3%A5ndbok-for-debian-administratoren/paperback/product-23262290.html">HÃ¥ndbok
4681 for Debian-administratoren</a>" will be well received.</p>
4682
4683 </div>
4684 <div class="tags">
4685
4686
4687 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian-handbook">debian-handbook</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
4688
4689
4690 </div>
4691 </div>
4692 <div class="padding"></div>
4693
4694 <div class="entry">
4695 <div class="title">
4696 <a href="http://www.hungry.com/~pere/blog/N_r_nynorskoversettelsen_svikter_til_eksamen___.html">NÃ¥r nynorskoversettelsen svikter til eksamen...</a>
4697 </div>
4698 <div class="date">
4699 3rd June 2017
4700 </div>
4701 <div class="body">
4702 <p><a href="http://www.aftenposten.no/norge/Krever-at-elever-ma-fa-annullert-eksamen-etter-rot-med-oppgavetekster-622459b.html">Aftenposten
4703 melder i dag</a> om feil i eksamensoppgavene for eksamen i politikk og
4704 menneskerettigheter, der teksten i bokmåls og nynorskutgaven ikke var
4705 like. Oppgaveteksten er gjengitt i artikkelen, og jeg ble nysgjerring
4706 på om den fri oversetterløsningen
4707 <a href="https://www.apertium.org/">Apertium</a> ville gjort en bedre
4708 jobb enn Utdanningsdirektoratet. Det kan se slik ut.</p>
4709
4710 <p>Her er bokmålsoppgaven fra eksamenen:</p>
4711
4712 <blockquote>
4713 <p>Drøft utfordringene knyttet til nasjonalstatenes og andre aktørers
4714 rolle og muligheter til å håndtere internasjonale utfordringer, som
4715 for eksempel flykningekrisen.</p>
4716
4717 <p>Vedlegge er eksempler på tekster som kan gi relevante perspektiver
4718 på temaet:</p>
4719 <ol>
4720 <li>Flykningeregnskapet 2016, UNHCR og IDMC
4721 <li>«Grenseløst Europa for fall» A-Magasinet, 26. november 2015
4722 </ol>
4723
4724 </blockquote>
4725
4726 <p>Dette oversetter Apertium slik:</p>
4727
4728 <blockquote>
4729 <p>Drøft utfordringane knytte til nasjonalstatane sine og rolla til
4730 andre aktørar og høve til å handtera internasjonale utfordringar, som
4731 til dømes *flykningekrisen.</p>
4732
4733 <p>Vedleggja er døme på tekster som kan gje relevante perspektiv på
4734 temaet:</p>
4735
4736 <ol>
4737 <li>*Flykningeregnskapet 2016, *UNHCR og *IDMC</li>
4738 <li>«*Grenseløst Europa for fall» A-Magasinet, 26. november 2015</li>
4739 </ol>
4740
4741 </blockquote>
4742
4743 <p>Ord som ikke ble forstått er markert med stjerne (*), og trenger
4744 ekstra språksjekk. Men ingen ord er forsvunnet, slik det var i
4745 oppgaven elevene fikk presentert på eksamen. Jeg mistenker dog at
4746 "andre aktørers rolle og muligheter til ..." burde vært oversatt til
4747 "rolla til andre aktørar og deira høve til ..." eller noe slikt, men
4748 det er kanskje flisespikking. Det understreker vel bare at det alltid
4749 trengs korrekturlesning etter automatisk oversettelse.</p>
4750
4751 </div>
4752 <div class="tags">
4753
4754
4755 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/norsk">norsk</a>, <a href="http://www.hungry.com/~pere/blog/tags/stavekontroll">stavekontroll</a>.
4756
4757
4758 </div>
4759 </div>
4760 <div class="padding"></div>
4761
4762 <div class="entry">
4763 <div class="title">
4764 <a href="http://www.hungry.com/~pere/blog/Detecting_NFS_hangs_on_Linux_without_hanging_yourself___.html">Detecting NFS hangs on Linux without hanging yourself...</a>
4765 </div>
4766 <div class="date">
4767 9th March 2017
4768 </div>
4769 <div class="body">
4770 <p>Over the years, administrating thousand of NFS mounting linux
4771 computers at the time, I often needed a way to detect if the machine
4772 was experiencing NFS hang. If you try to use <tt>df</tt> or look at a
4773 file or directory affected by the hang, the process (and possibly the
4774 shell) will hang too. So you want to be able to detect this without
4775 risking the detection process getting stuck too. It has not been
4776 obvious how to do this. When the hang has lasted a while, it is
4777 possible to find messages like these in dmesg:</p>
4778
4779 <p><blockquote>
4780 nfs: server nfsserver not responding, still trying
4781 <br>nfs: server nfsserver OK
4782 </blockquote></p>
4783
4784 <p>It is hard to know if the hang is still going on, and it is hard to
4785 be sure looking in dmesg is going to work. If there are lots of other
4786 messages in dmesg the lines might have rotated out of site before they
4787 are noticed.</p>
4788
4789 <p>While reading through the nfs client implementation in linux kernel
4790 code, I came across some statistics that seem to give a way to detect
4791 it. The om_timeouts sunrpc value in the kernel will increase every
4792 time the above log entry is inserted into dmesg. And after digging a
4793 bit further, I discovered that this value show up in
4794 /proc/self/mountstats on Linux.</p>
4795
4796 <p>The mountstats content seem to be shared between files using the
4797 same file system context, so it is enough to check one of the
4798 mountstats files to get the state of the mount point for the machine.
4799 I assume this will not show lazy umounted NFS points, nor NFS mount
4800 points in a different process context (ie with a different filesystem
4801 view), but that does not worry me.</p>
4802
4803 <p>The content for a NFS mount point look similar to this:</p>
4804
4805 <p><blockquote><pre>
4806 [...]
4807 device /dev/mapper/Debian-var mounted on /var with fstype ext3
4808 device nfsserver:/mnt/nfsserver/home0 mounted on /mnt/nfsserver/home0 with fstype nfs statvers=1.1
4809 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
4810 age: 7863311
4811 caps: caps=0x3fe7,wtmult=4096,dtsize=8192,bsize=0,namlen=255
4812 sec: flavor=1,pseudoflavor=1
4813 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
4814 bytes: 166253035039 219519120027 0 0 40783504807 185466229638 11677877 45561809
4815 RPC iostats version: 1.0 p/v: 100003/3 (nfs)
4816 xprt: tcp 925 1 6810 0 0 111505412 111480497 109 2672418560317 0 248 53869103 22481820
4817 per-op statistics
4818 NULL: 0 0 0 0 0 0 0 0
4819 GETATTR: 61063106 61063108 0 9621383060 6839064400 453650 77291321 78926132
4820 SETATTR: 463469 463470 0 92005440 66739536 63787 603235 687943
4821 LOOKUP: 17021657 17021657 0 3354097764 4013442928 57216 35125459 35566511
4822 ACCESS: 14281703 14290009 5 2318400592 1713803640 1709282 4865144 7130140
4823 READLINK: 125 125 0 20472 18620 0 1112 1118
4824 READ: 4214236 4214237 0 715608524 41328653212 89884 22622768 22806693
4825 WRITE: 8479010 8494376 22 187695798568 1356087148 178264904 51506907 231671771
4826 CREATE: 171708 171708 0 38084748 46702272 873 1041833 1050398
4827 MKDIR: 3680 3680 0 773980 993920 26 23990 24245
4828 SYMLINK: 903 903 0 233428 245488 6 5865 5917
4829 MKNOD: 80 80 0 20148 21760 0 299 304
4830 REMOVE: 429921 429921 0 79796004 61908192 3313 2710416 2741636
4831 RMDIR: 3367 3367 0 645112 484848 22 5782 6002
4832 RENAME: 466201 466201 0 130026184 121212260 7075 5935207 5961288
4833 LINK: 289155 289155 0 72775556 67083960 2199 2565060 2585579
4834 READDIR: 2933237 2933237 0 516506204 13973833412 10385 3190199 3297917
4835 READDIRPLUS: 1652839 1652839 0 298640972 6895997744 84735 14307895 14448937
4836 FSSTAT: 6144 6144 0 1010516 1032192 51 9654 10022
4837 FSINFO: 2 2 0 232 328 0 1 1
4838 PATHCONF: 1 1 0 116 140 0 0 0
4839 COMMIT: 0 0 0 0 0 0 0 0
4840
4841 device binfmt_misc mounted on /proc/sys/fs/binfmt_misc with fstype binfmt_misc
4842 [...]
4843 </pre></blockquote></p>
4844
4845 <p>The key number to look at is the third number in the per-op list.
4846 It is the number of NFS timeouts experiences per file system
4847 operation. Here 22 write timeouts and 5 access timeouts. If these
4848 numbers are increasing, I believe the machine is experiencing NFS
4849 hang. Unfortunately the timeout value do not start to increase right
4850 away. The NFS operations need to time out first, and this can take a
4851 while. The exact timeout value depend on the setup. For example the
4852 defaults for TCP and UDP mount points are quite different, and the
4853 timeout value is affected by the soft, hard, timeo and retrans NFS
4854 mount options.</p>
4855
4856 <p>The only way I have been able to get working on Debian and RedHat
4857 Enterprise Linux for getting the timeout count is to peek in /proc/.
4858 But according to
4859 <ahref="http://docs.oracle.com/cd/E19253-01/816-4555/netmonitor-12/index.html">Solaris
4860 10 System Administration Guide: Network Services</a>, the 'nfsstat -c'
4861 command can be used to get these timeout values. But this do not work
4862 on Linux, as far as I can tell. I
4863 <ahref="http://bugs.debian.org/857043">asked Debian about this</a>,
4864 but have not seen any replies yet.</p>
4865
4866 <p>Is there a better way to figure out if a Linux NFS client is
4867 experiencing NFS hangs? Is there a way to detect which processes are
4868 affected? Is there a way to get the NFS mount going quickly once the
4869 network problem causing the NFS hang has been cleared? I would very
4870 much welcome some clues, as we regularly run into NFS hangs.</p>
4871
4872 </div>
4873 <div class="tags">
4874
4875
4876 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/sysadmin">sysadmin</a>.
4877
4878
4879 </div>
4880 </div>
4881 <div class="padding"></div>
4882
4883 <div class="entry">
4884 <div class="title">
4885 <a href="http://www.hungry.com/~pere/blog/Norwegian_Bokm_l_translation_of_The_Debian_Administrator_s_Handbook_complete__proofreading_in_progress.html">Norwegian Bokmål translation of The Debian Administrator's Handbook complete, proofreading in progress</a>
4886 </div>
4887 <div class="date">
4888 3rd March 2017
4889 </div>
4890 <div class="body">
4891 <p>For almost a year now, we have been working on making a Norwegian
4892 Bokmål edition of <a href="https://debian-handbook.info/">The Debian
4893 Administrator's Handbook</a>. Now, thanks to the tireless effort of
4894 Ole-Erik, Ingrid and Andreas, the initial translation is complete, and
4895 we are working on the proof reading to ensure consistent language and
4896 use of correct computer science terms. The plan is to make the book
4897 available on paper, as well as in electronic form. For that to
4898 happen, the proof reading must be completed and all the figures need
4899 to be translated. If you want to help out, get in touch.</p>
4900
4901 <p><a href="http://www.hungry.com/~pere/debian-handbook/debian-handbook-nb-NO.pdf">A
4902
4903 fresh PDF edition</a> in A4 format (the final book will have smaller
4904 pages) of the book created every morning is available for
4905 proofreading. If you find any errors, please
4906 <a href="https://hosted.weblate.org/projects/debian-handbook/">visit
4907 Weblate and correct the error</a>. The
4908 <a href="http://l.github.io/debian-handbook/stat/nb-NO/index.html">state
4909 of the translation including figures</a> is a useful source for those
4910 provide Norwegian bokmål screen shots and figures.</p>
4911
4912 </div>
4913 <div class="tags">
4914
4915
4916 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian-handbook">debian-handbook</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
4917
4918
4919 </div>
4920 </div>
4921 <div class="padding"></div>
4922
4923 <div class="entry">
4924 <div class="title">
4925 <a href="http://www.hungry.com/~pere/blog/Unlimited_randomness_with_the_ChaosKey_.html">Unlimited randomness with the ChaosKey?</a>
4926 </div>
4927 <div class="date">
4928 1st March 2017
4929 </div>
4930 <div class="body">
4931 <p>A few days ago I ordered a small batch of
4932 <a href="http://altusmetrum.org/ChaosKey/">the ChaosKey</a>, a small
4933 USB dongle for generating entropy created by Bdale Garbee and Keith
4934 Packard. Yesterday it arrived, and I am very happy to report that it
4935 work great! According to its designers, to get it to work out of the
4936 box, you need the Linux kernel version 4.1 or later. I tested on a
4937 Debian Stretch machine (kernel version 4.9), and there it worked just
4938 fine, increasing the available entropy very quickly. I wrote a small
4939 test oneliner to test. It first print the current entropy level,
4940 drain /dev/random, and then print the entropy level for five seconds.
4941 Here is the situation without the ChaosKey inserted:</p>
4942
4943 <blockquote><pre>
4944 % cat /proc/sys/kernel/random/entropy_avail; \
4945 dd bs=1M if=/dev/random of=/dev/null count=1; \
4946 for n in $(seq 1 5); do \
4947 cat /proc/sys/kernel/random/entropy_avail; \
4948 sleep 1; \
4949 done
4950 300
4951 0+1 oppføringer inn
4952 0+1 oppføringer ut
4953 28 byte kopiert, 0,000264565 s, 106 kB/s
4954 4
4955 8
4956 12
4957 17
4958 21
4959 %
4960 </pre></blockquote>
4961
4962 <p>The entropy level increases by 3-4 every second. In such case any
4963 application requiring random bits (like a HTTPS enabled web server)
4964 will halt and wait for more entrpy. And here is the situation with
4965 the ChaosKey inserted:</p>
4966
4967 <blockquote><pre>
4968 % cat /proc/sys/kernel/random/entropy_avail; \
4969 dd bs=1M if=/dev/random of=/dev/null count=1; \
4970 for n in $(seq 1 5); do \
4971 cat /proc/sys/kernel/random/entropy_avail; \
4972 sleep 1; \
4973 done
4974 1079
4975 0+1 oppføringer inn
4976 0+1 oppføringer ut
4977 104 byte kopiert, 0,000487647 s, 213 kB/s
4978 433
4979 1028
4980 1031
4981 1035
4982 1038
4983 %
4984 </pre></blockquote>
4985
4986 <p>Quite the difference. :) I bought a few more than I need, in case
4987 someone want to buy one here in Norway. :)</p>
4988
4989 <p>Update: The dongle was presented at Debconf last year. You might
4990 find <a href="https://debconf16.debconf.org/talks/94/">the talk
4991 recording illuminating</a>. It explains exactly what the source of
4992 randomness is, if you are unable to spot it from the schema drawing
4993 available from the ChaosKey web site linked at the start of this blog
4994 post.</p>
4995
4996 </div>
4997 <div class="tags">
4998
4999
5000 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
5001
5002
5003 </div>
5004 </div>
5005 <div class="padding"></div>
5006
5007 <div class="entry">
5008 <div class="title">
5009 <a href="http://www.hungry.com/~pere/blog/Where_did_that_package_go___mdash__geolocated_IP_traceroute.html">Where did that package go? &mdash; geolocated IP traceroute</a>
5010 </div>
5011 <div class="date">
5012 9th January 2017
5013 </div>
5014 <div class="body">
5015 <p>Did you ever wonder where the web trafic really flow to reach the
5016 web servers, and who own the network equipment it is flowing through?
5017 It is possible to get a glimpse of this from using traceroute, but it
5018 is hard to find all the details. Many years ago, I wrote a system to
5019 map the Norwegian Internet (trying to figure out if our plans for a
5020 network game service would get low enough latency, and who we needed
5021 to talk to about setting up game servers close to the users. Back
5022 then I used traceroute output from many locations (I asked my friends
5023 to run a script and send me their traceroute output) to create the
5024 graph and the map. The output from traceroute typically look like
5025 this:
5026
5027 <p><pre>
5028 traceroute to www.stortinget.no (85.88.67.10), 30 hops max, 60 byte packets
5029 1 uio-gw10.uio.no (129.240.202.1) 0.447 ms 0.486 ms 0.621 ms
5030 2 uio-gw8.uio.no (129.240.24.229) 0.467 ms 0.578 ms 0.675 ms
5031 3 oslo-gw1.uninett.no (128.39.65.17) 0.385 ms 0.373 ms 0.358 ms
5032 4 te3-1-2.br1.fn3.as2116.net (193.156.90.3) 1.174 ms 1.172 ms 1.153 ms
5033 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
5034 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
5035 7 89.191.10.146 (89.191.10.146) 0.931 ms 0.917 ms 0.955 ms
5036 8 * * *
5037 9 * * *
5038 [...]
5039 </pre></p>
5040
5041 <p>This show the DNS names and IP addresses of (at least some of the)
5042 network equipment involved in getting the data traffic from me to the
5043 www.stortinget.no server, and how long it took in milliseconds for a
5044 package to reach the equipment and return to me. Three packages are
5045 sent, and some times the packages do not follow the same path. This
5046 is shown for hop 5, where three different IP addresses replied to the
5047 traceroute request.</p>
5048
5049 <p>There are many ways to measure trace routes. Other good traceroute
5050 implementations I use are traceroute (using ICMP packages) mtr (can do
5051 both ICMP, UDP and TCP) and scapy (python library with ICMP, UDP, TCP
5052 traceroute and a lot of other capabilities). All of them are easily
5053 available in <a href="https://www.debian.org/">Debian</a>.</p>
5054
5055 <p>This time around, I wanted to know the geographic location of
5056 different route points, to visualize how visiting a web page spread
5057 information about the visit to a lot of servers around the globe. The
5058 background is that a web site today often will ask the browser to get
5059 from many servers the parts (for example HTML, JSON, fonts,
5060 JavaScript, CSS, video) required to display the content. This will
5061 leak information about the visit to those controlling these servers
5062 and anyone able to peek at the data traffic passing by (like your ISP,
5063 the ISPs backbone provider, FRA, GCHQ, NSA and others).</p>
5064
5065 <p>Lets pick an example, the Norwegian parliament web site
5066 www.stortinget.no. It is read daily by all members of parliament and
5067 their staff, as well as political journalists, activits and many other
5068 citizens of Norway. A visit to the www.stortinget.no web site will
5069 ask your browser to contact 8 other servers: ajax.googleapis.com,
5070 insights.hotjar.com, script.hotjar.com, static.hotjar.com,
5071 stats.g.doubleclick.net, www.google-analytics.com,
5072 www.googletagmanager.com and www.netigate.se. I extracted this by
5073 asking <a href="http://phantomjs.org/">PhantomJS</a> to visit the
5074 Stortinget web page and tell me all the URLs PhantomJS downloaded to
5075 render the page (in HAR format using
5076 <a href="https://github.com/ariya/phantomjs/blob/master/examples/netsniff.js">their
5077 netsniff example</a>. I am very grateful to Gorm for showing me how
5078 to do this). My goal is to visualize network traces to all IP
5079 addresses behind these DNS names, do show where visitors personal
5080 information is spread when visiting the page.</p>
5081
5082 <p align="center"><a href="www.stortinget.no-geoip.kml"><img
5083 src="http://www.hungry.com/~pere/blog/images/2017-01-09-www.stortinget.no-geoip-small.png" alt="map of combined traces for URLs used by www.stortinget.no using GeoIP"/></a></p>
5084
5085 <p>When I had a look around for options, I could not find any good
5086 free software tools to do this, and decided I needed my own traceroute
5087 wrapper outputting KML based on locations looked up using GeoIP. KML
5088 is easy to work with and easy to generate, and understood by several
5089 of the GIS tools I have available. I got good help from by NUUG
5090 colleague Anders Einar with this, and the result can be seen in
5091 <a href="https://github.com/petterreinholdtsen/kmltraceroute">my
5092 kmltraceroute git repository</a>. Unfortunately, the quality of the
5093 free GeoIP databases I could find (and the for-pay databases my
5094 friends had access to) is not up to the task. The IP addresses of
5095 central Internet infrastructure would typically be placed near the
5096 controlling companies main office, and not where the router is really
5097 located, as you can see from <a href="www.stortinget.no-geoip.kml">the
5098 KML file I created</a> using the GeoLite City dataset from MaxMind.
5099
5100 <p align="center"><a href="http://www.hungry.com/~pere/blog/images/2017-01-09-www.stortinget.no-scapy.svg"><img
5101 src="http://www.hungry.com/~pere/blog/images/2017-01-09-www.stortinget.no-scapy-small.png" alt="scapy traceroute graph for URLs used by www.stortinget.no"/></a></p>
5102
5103 <p>I also had a look at the visual traceroute graph created by
5104 <a href="http://www.secdev.org/projects/scapy/">the scrapy project</a>,
5105 showing IP network ownership (aka AS owner) for the IP address in
5106 question.
5107 <a href="http://www.hungry.com/~pere/blog/images/2017-01-09-www.stortinget.no-scapy.svg">The
5108 graph display a lot of useful information about the traceroute in SVG
5109 format</a>, and give a good indication on who control the network
5110 equipment involved, but it do not include geolocation. This graph
5111 make it possible to see the information is made available at least for
5112 UNINETT, Catchcom, Stortinget, Nordunet, Google, Amazon, Telia, Level
5113 3 Communications and NetDNA.</p>
5114
5115 <p align="center"><a href="https://geotraceroute.com/index.php?node=4&host=www.stortinget.no"><img
5116 src="http://www.hungry.com/~pere/blog/images/2017-01-09-www.stortinget.no-geotraceroute-small.png" alt="example geotraceroute view for www.stortinget.no"/></a></p>
5117
5118 <p>In the process, I came across the
5119 <a href="https://geotraceroute.com/">web service GeoTraceroute</a> by
5120 Salim Gasmi. Its methology of combining guesses based on DNS names,
5121 various location databases and finally use latecy times to rule out
5122 candidate locations seemed to do a very good job of guessing correct
5123 geolocation. But it could only do one trace at the time, did not have
5124 a sensor in Norway and did not make the geolocations easily available
5125 for postprocessing. So I contacted the developer and asked if he
5126 would be willing to share the code (he refused until he had time to
5127 clean it up), but he was interested in providing the geolocations in a
5128 machine readable format, and willing to set up a sensor in Norway. So
5129 since yesterday, it is possible to run traces from Norway in this
5130 service thanks to a sensor node set up by
5131 <a href="https://www.nuug.no/">the NUUG assosiation</a>, and get the
5132 trace in KML format for further processing.</p>
5133
5134 <p align="center"><a href="http://www.hungry.com/~pere/blog/images/2017-01-09-www.stortinget.no-geotraceroute-kml-join.kml"><img
5135 src="http://www.hungry.com/~pere/blog/images/2017-01-09-www.stortinget.no-geotraceroute-kml-join.png" alt="map of combined traces for URLs used by www.stortinget.no using geotraceroute"/></a></p>
5136
5137 <p>Here we can see a lot of trafic passes Sweden on its way to
5138 Denmark, Germany, Holland and Ireland. Plenty of places where the
5139 Snowden confirmations verified the traffic is read by various actors
5140 without your best interest as their top priority.</p>
5141
5142 <p>Combining KML files is trivial using a text editor, so I could loop
5143 over all the hosts behind the urls imported by www.stortinget.no and
5144 ask for the KML file from GeoTraceroute, and create a combined KML
5145 file with all the traces (unfortunately only one of the IP addresses
5146 behind the DNS name is traced this time. To get them all, one would
5147 have to request traces using IP number instead of DNS names from
5148 GeoTraceroute). That might be the next step in this project.</p>
5149
5150 <p>Armed with these tools, I find it a lot easier to figure out where
5151 the IP traffic moves and who control the boxes involved in moving it.
5152 And every time the link crosses for example the Swedish border, we can
5153 be sure Swedish Signal Intelligence (FRA) is listening, as GCHQ do in
5154 Britain and NSA in USA and cables around the globe. (Hm, what should
5155 we tell them? :) Keep that in mind if you ever send anything
5156 unencrypted over the Internet.</p>
5157
5158 <p>PS: KML files are drawn using
5159 <a href="http://ivanrublev.me/kml/">the KML viewer from Ivan
5160 Rublev<a/>, as it was less cluttered than the local Linux application
5161 Marble. There are heaps of other options too.</p>
5162
5163 <p>As usual, if you use Bitcoin and want to show your support of my
5164 activities, please send Bitcoin donations to my address
5165 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
5166
5167 </div>
5168 <div class="tags">
5169
5170
5171 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/kart">kart</a>, <a href="http://www.hungry.com/~pere/blog/tags/nuug">nuug</a>, <a href="http://www.hungry.com/~pere/blog/tags/personvern">personvern</a>, <a href="http://www.hungry.com/~pere/blog/tags/stortinget">stortinget</a>, <a href="http://www.hungry.com/~pere/blog/tags/surveillance">surveillance</a>, <a href="http://www.hungry.com/~pere/blog/tags/web">web</a>.
5172
5173
5174 </div>
5175 </div>
5176 <div class="padding"></div>
5177
5178 <div class="entry">
5179 <div class="title">
5180 <a href="http://www.hungry.com/~pere/blog/Appstream_just_learned_how_to_map_hardware_to_packages_too_.html">Appstream just learned how to map hardware to packages too!</a>
5181 </div>
5182 <div class="date">
5183 23rd December 2016
5184 </div>
5185 <div class="body">
5186 <p>I received a very nice Christmas present today. As my regular
5187 readers probably know, I have been working on the
5188 <a href="http://packages.qa.debian.org/isenkram">the Isenkram
5189 system</a> for many years. The goal of the Isenkram system is to make
5190 it easier for users to figure out what to install to get a given piece
5191 of hardware to work in Debian, and a key part of this system is a way
5192 to map hardware to packages. Isenkram have its own mapping database,
5193 and also uses data provided by each package using the AppStream
5194 metadata format. And today,
5195 <a href="https://tracker.debian.org/pkg/appstream">AppStream</a> in
5196 Debian learned to look up hardware the same way Isenkram is doing it,
5197 ie using fnmatch():</p>
5198
5199 <p><pre>
5200 % appstreamcli what-provides modalias \
5201 usb:v1130p0202d0100dc00dsc00dp00ic03isc00ip00in00
5202 Identifier: pymissile [generic]
5203 Name: pymissile
5204 Summary: Control original Striker USB Missile Launcher
5205 Package: pymissile
5206 % appstreamcli what-provides modalias usb:v0694p0002d0000
5207 Identifier: libnxt [generic]
5208 Name: libnxt
5209 Summary: utility library for talking to the LEGO Mindstorms NXT brick
5210 Package: libnxt
5211 ---
5212 Identifier: t2n [generic]
5213 Name: t2n
5214 Summary: Simple command-line tool for Lego NXT
5215 Package: t2n
5216 ---
5217 Identifier: python-nxt [generic]
5218 Name: python-nxt
5219 Summary: Python driver/interface/wrapper for the Lego Mindstorms NXT robot
5220 Package: python-nxt
5221 ---
5222 Identifier: nbc [generic]
5223 Name: nbc
5224 Summary: C compiler for LEGO Mindstorms NXT bricks
5225 Package: nbc
5226 %
5227 </pre></p>
5228
5229 <p>A similar query can be done using the combined AppStream and
5230 Isenkram databases using the isenkram-lookup tool:</p>
5231
5232 <p><pre>
5233 % isenkram-lookup usb:v1130p0202d0100dc00dsc00dp00ic03isc00ip00in00
5234 pymissile
5235 % isenkram-lookup usb:v0694p0002d0000
5236 libnxt
5237 nbc
5238 python-nxt
5239 t2n
5240 %
5241 </pre></p>
5242
5243 <p>You can find modalias values relevant for your machine using
5244 <tt>cat $(find /sys/devices/ -name modalias)</tt>.
5245
5246 <p>If you want to make this system a success and help Debian users
5247 make the most of the hardware they have, please help
5248 <a href="https://wiki.debian.org/AppStream/Guidelines">add AppStream
5249 metadata for your package following the guidelines</a> documented in
5250 the wiki. So far only 11 packages provide such information, among the
5251 several hundred hardware specific packages in Debian. The Isenkram
5252 database on the other hand contain 101 packages, mostly related to USB
5253 dongles. Most of the packages with hardware mapping in AppStream are
5254 LEGO Mindstorms related, because I have, as part of my involvement in
5255 <a href="https://wiki.debian.org/LegoDesigners">the Debian LEGO
5256 team</a> given priority to making sure LEGO users get proposed the
5257 complete set of packages in Debian for that particular hardware. The
5258 team also got a nice Christmas present today. The
5259 <a href="https://tracker.debian.org/pkg/nxt-firmware">nxt-firmware
5260 package</a> made it into Debian. With this package in place, it is
5261 now possible to use the LEGO Mindstorms NXT unit with only free
5262 software, as the nxt-firmware package contain the source and firmware
5263 binaries for the NXT brick.</p>
5264
5265 <p>As usual, if you use Bitcoin and want to show your support of my
5266 activities, please send Bitcoin donations to my address
5267 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
5268
5269 </div>
5270 <div class="tags">
5271
5272
5273 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/isenkram">isenkram</a>.
5274
5275
5276 </div>
5277 </div>
5278 <div class="padding"></div>
5279
5280 <div class="entry">
5281 <div class="title">
5282 <a href="http://www.hungry.com/~pere/blog/Isenkram_updated_with_a_lot_more_hardware_package_mappings.html">Isenkram updated with a lot more hardware-package mappings</a>
5283 </div>
5284 <div class="date">
5285 20th December 2016
5286 </div>
5287 <div class="body">
5288 <p><a href="http://packages.qa.debian.org/isenkram">The Isenkram
5289 system</a> I wrote two years ago to make it easier in Debian to find
5290 and install packages to get your hardware dongles to work, is still
5291 going strong. It is a system to look up the hardware present on or
5292 connected to the current system, and map the hardware to Debian
5293 packages. It can either be done using the tools in isenkram-cli or
5294 using the user space daemon in the isenkram package. The latter will
5295 notify you, when inserting new hardware, about what packages to
5296 install to get the dongle working. It will even provide a button to
5297 click on to ask packagekit to install the packages.</p>
5298
5299 <p>Here is an command line example from my Thinkpad laptop:</p>
5300
5301 <p><pre>
5302 % isenkram-lookup
5303 bluez
5304 cheese
5305 ethtool
5306 fprintd
5307 fprintd-demo
5308 gkrellm-thinkbat
5309 hdapsd
5310 libpam-fprintd
5311 pidgin-blinklight
5312 thinkfan
5313 tlp
5314 tp-smapi-dkms
5315 tp-smapi-source
5316 tpb
5317 %
5318 </pre></p>
5319
5320 <p>It can also list the firware package providing firmware requested
5321 by the load kernel modules, which in my case is an empty list because
5322 I have all the firmware my machine need:
5323
5324 <p><pre>
5325 % /usr/sbin/isenkram-autoinstall-firmware -l
5326 info: did not find any firmware files requested by loaded kernel modules. exiting
5327 %
5328 </pre></p>
5329
5330 <p>The last few days I had a look at several of the around 250
5331 packages in Debian with udev rules. These seem like good candidates
5332 to install when a given hardware dongle is inserted, and I found
5333 several that should be proposed by isenkram. I have not had time to
5334 check all of them, but am happy to report that now there are 97
5335 packages packages mapped to hardware by Isenkram. 11 of these
5336 packages provide hardware mapping using AppStream, while the rest are
5337 listed in the modaliases file provided in isenkram.</p>
5338
5339 <p>These are the packages with hardware mappings at the moment. The
5340 <strong>marked packages</strong> are also announcing their hardware
5341 support using AppStream, for everyone to use:</p>
5342
5343 <p>air-quality-sensor, alsa-firmware-loaders, argyll,
5344 <strong>array-info</strong>, avarice, avrdude, b43-fwcutter,
5345 bit-babbler, bluez, bluez-firmware, <strong>brltty</strong>,
5346 <strong>broadcom-sta-dkms</strong>, calibre, cgminer, cheese, colord,
5347 <strong>colorhug-client</strong>, dahdi-firmware-nonfree, dahdi-linux,
5348 dfu-util, dolphin-emu, ekeyd, ethtool, firmware-ipw2x00, fprintd,
5349 fprintd-demo, <strong>galileo</strong>, gkrellm-thinkbat, gphoto2,
5350 gpsbabel, gpsbabel-gui, gpsman, gpstrans, gqrx-sdr, gr-fcdproplus,
5351 gr-osmosdr, gtkpod, hackrf, hdapsd, hdmi2usb-udev, hpijs-ppds, hplip,
5352 ipw3945-source, ipw3945d, kde-config-tablet, kinect-audio-setup,
5353 <strong>libnxt</strong>, libpam-fprintd, <strong>lomoco</strong>,
5354 madwimax, minidisc-utils, mkgmap, msi-keyboard, mtkbabel,
5355 <strong>nbc</strong>, <strong>nqc</strong>, nut-hal-drivers, ola,
5356 open-vm-toolbox, open-vm-tools, openambit, pcgminer, pcmciautils,
5357 pcscd, pidgin-blinklight, printer-driver-splix,
5358 <strong>pymissile</strong>, python-nxt, qlandkartegt,
5359 qlandkartegt-garmin, rosegarden, rt2x00-source, sispmctl,
5360 soapysdr-module-hackrf, solaar, squeak-plugins-scratch, sunxi-tools,
5361 <strong>t2n</strong>, thinkfan, thinkfinger-tools, tlp, tp-smapi-dkms,
5362 tp-smapi-source, tpb, tucnak, uhd-host, usbmuxd, viking,
5363 virtualbox-ose-guest-x11, w1retap, xawtv, xserver-xorg-input-vmmouse,
5364 xserver-xorg-input-wacom, xserver-xorg-video-qxl,
5365 xserver-xorg-video-vmware, yubikey-personalization and
5366 zd1211-firmware</p>
5367
5368 <p>If you know of other packages, please let me know with a wishlist
5369 bug report against the isenkram-cli package, and ask the package
5370 maintainer to
5371 <a href="https://wiki.debian.org/AppStream/Guidelines">add AppStream
5372 metadata according to the guidelines</a> to provide the information
5373 for everyone. In time, I hope to get rid of the isenkram specific
5374 hardware mapping and depend exclusively on AppStream.</p>
5375
5376 <p>Note, the AppStream metadata for broadcom-sta-dkms is matching too
5377 much hardware, and suggest that the package with with any ethernet
5378 card. See <a href="http://bugs.debian.org/838735">bug #838735</a> for
5379 the details. I hope the maintainer find time to address it soon. In
5380 the mean time I provide an override in isenkram.</p>
5381
5382 </div>
5383 <div class="tags">
5384
5385
5386 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/isenkram">isenkram</a>.
5387
5388
5389 </div>
5390 </div>
5391 <div class="padding"></div>
5392
5393 <div class="entry">
5394 <div class="title">
5395 <a href="http://www.hungry.com/~pere/blog/Oolite__a_life_in_space_as_vagabond_and_mercenary___nice_free_software.html">Oolite, a life in space as vagabond and mercenary - nice free software</a>
5396 </div>
5397 <div class="date">
5398 11th December 2016
5399 </div>
5400 <div class="body">
5401 <p align="center"><img width="70%" src="http://www.hungry.com/~pere/blog/images/2016-12-11-nice-oolite.png"/></p>
5402
5403 <p>In my early years, I played
5404 <a href="http://wiki.alioth.net/index.php/Classic_Elite">the epic game
5405 Elite</a> on my PC. I spent many months trading and fighting in
5406 space, and reached the 'elite' fighting status before I moved on. The
5407 original Elite game was available on Commodore 64 and the IBM PC
5408 edition I played had a 64 KB executable. I am still impressed today
5409 that the authors managed to squeeze both a 3D engine and details about
5410 more than 2000 planet systems across 7 galaxies into a binary so
5411 small.</p>
5412
5413 <p>I have known about <a href="http://www.oolite.org/">the free
5414 software game Oolite inspired by Elite</a> for a while, but did not
5415 really have time to test it properly until a few days ago. It was
5416 great to discover that my old knowledge about trading routes were
5417 still valid. But my fighting and flying abilities were gone, so I had
5418 to retrain to be able to dock on a space station. And I am still not
5419 able to make much resistance when I am attacked by pirates, so I
5420 bougth and mounted the most powerful laser in the rear to be able to
5421 put up at least some resistance while fleeing for my life. :)</p>
5422
5423 <p>When playing Elite in the late eighties, I had to discover
5424 everything on my own, and I had long lists of prices seen on different
5425 planets to be able to decide where to trade what. This time I had the
5426 advantages of the
5427 <a href="http://wiki.alioth.net/index.php/Main_Page">Elite wiki</a>,
5428 where information about each planet is easily available with common
5429 price ranges and suggested trading routes. This improved my ability
5430 to earn money and I have been able to earn enough to buy a lot of
5431 useful equipent in a few days. I believe I originally played for
5432 months before I could get a docking computer, while now I could get it
5433 after less then a week.</p>
5434
5435 <p>If you like science fiction and dreamed of a life as a vagabond in
5436 space, you should try out Oolite. It is available for Linux, MacOSX
5437 and Windows, and is included in Debian and derivatives since 2011.</p>
5438
5439 <p>As usual, if you use Bitcoin and want to show your support of my
5440 activities, please send Bitcoin donations to my address
5441 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
5442
5443 </div>
5444 <div class="tags">
5445
5446
5447 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nice free software">nice free software</a>.
5448
5449
5450 </div>
5451 </div>
5452 <div class="padding"></div>
5453
5454 <div class="entry">
5455 <div class="title">
5456 <a href="http://www.hungry.com/~pere/blog/Quicker_Debian_installations_using_eatmydata.html">Quicker Debian installations using eatmydata</a>
5457 </div>
5458 <div class="date">
5459 25th November 2016
5460 </div>
5461 <div class="body">
5462 <p>Two years ago, I did some experiments with eatmydata and the Debian
5463 installation system, observing how using
5464 <a href="http://www.hungry.com/~pere/blog/Speeding_up_the_Debian_installer_using_eatmydata_and_dpkg_divert.html">eatmydata
5465 could speed up the installation</a> quite a bit. My testing measured
5466 speedup around 20-40 percent for Debian Edu, where we install around
5467 1000 packages from within the installer. The eatmydata package
5468 provide a way to disable/delay file system flushing. This is a bit
5469 risky in the general case, as files that should be stored on disk will
5470 stay only in memory a bit longer than expected, causing problems if a
5471 machine crashes at an inconvenient time. But for an installation, if
5472 the machine crashes during installation the process is normally
5473 restarted, and avoiding disk operations as much as possible to speed
5474 up the process make perfect sense.
5475
5476 <p>I added code in the Debian Edu specific installation code to enable
5477 <a href="https://tracker.debian.org/pkg/libeatmydata">eatmydata</a>,
5478 but did not have time to push it any further. But a few months ago I
5479 picked it up again and worked with the libeatmydata package maintainer
5480 Mattia Rizzolo to make it easier for everyone to get this installation
5481 speedup in Debian. Thanks to our cooperation There is now an
5482 eatmydata-udeb package in Debian testing and unstable, and simply
5483 enabling/installing it in debian-installer (d-i) is enough to get the
5484 quicker installations. It can be enabled using preseeding. The
5485 following untested kernel argument should do the trick:</p>
5486
5487 <blockquote><pre>
5488 preseed/early_command="anna-install eatmydata-udeb"
5489 </pre></blockquote>
5490
5491 <p>This should ask d-i to install the package inside the d-i
5492 environment early in the installation sequence. Having it installed
5493 in d-i in turn will make sure the relevant scripts are called just
5494 after debootstrap filled /target/ with the freshly installed Debian
5495 system to configure apt to run dpkg with eatmydata. This is enough to
5496 speed up the installation process. There is a proposal to
5497 <a href="https://bugs.debian.org/841153">extend the idea a bit further
5498 by using /etc/ld.so.preload instead of apt.conf</a>, but I have not
5499 tested its impact.</p>
5500
5501
5502 </div>
5503 <div class="tags">
5504
5505
5506 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
5507
5508
5509 </div>
5510 </div>
5511 <div class="padding"></div>
5512
5513 <div class="entry">
5514 <div class="title">
5515 <a href="http://www.hungry.com/~pere/blog/Oversette_bokm_l_til_nynorsk__enklere_enn_du_tror_takket_v_re_Apertium.html">Oversette bokmål til nynorsk, enklere enn du tror takket være Apertium</a>
5516 </div>
5517 <div class="date">
5518 24th November 2016
5519 </div>
5520 <div class="body">
5521 <p>I Norge er det mange som trenger å skrive både bokmål og nynorsk.
5522 Eksamensoppgaver, offentlige brev og nyheter er eksempler på tekster
5523 der det er krav om skriftspråk. I tillegg til alle skoleoppgavene som
5524 elever over det ganske land skal levere inn hvert år. Det mange ikke
5525 vet er at selv om de kommersielle alternativene
5526 <a href="https://translate.google.com/">Google Translate</a> og
5527 <a href="https://www.bing.com/translator/">Bing Translator</a> ikke kan
5528 bidra med å oversette mellom bokmål og nynorsk, så finnes det et
5529 utmerket fri programvarealternativ som kan. Oversetterverktøyet
5530 Apertium har støtte for en rekke språkkombinasjoner, og takket være
5531 den utrettelige innsatsen til blant annet Kevin Brubeck Unhammer, kan
5532 en bruke webtjenesten til å fylle inn en tekst på bokmål eller
5533 nynorsk, og få den automatoversatt til det andre skriftspråket.
5534 Resultatet er ikke perfekt, men et svært godt utgangspunkt. Av og til
5535 er resultatet så bra at det kan benyttes uten endringer. Jeg vet
5536 f.eks. at store deler av Joomla ble oversatt til nynorsk ved hjelp
5537 Apertium. Høres det ut som noe du kan ha bruk for? Besøk i så fall
5538 <a href="https://www.apertium.org/">Apertium.org</a> og fyll inn
5539 teksten din i webskjemaet der.
5540
5541 <p>Hvis du trenger maskinell tilgang til den bakenforliggende
5542 teknologien kan du enten installere pakken
5543 <a href="https://tracker.debian.org/apertium-nno-nob">apertium-nno-nob</a>
5544 på en Debian-maskin eller bruke web-API-et tilgjengelig fra
5545 api.apertium.org. Se
5546 <a href="http://wiki.apertium.org/wiki/Apertium-apy">API-dokumentasjonen</a>
5547 for detaljer om web-API-et. Her kan du se hvordan resultatet blir for
5548 denne teksten som ble skrevet på bokmål over maskinoversatt til
5549 nynorsk.</p>
5550
5551 <hr/>
5552
5553 <p>I Noreg er det mange som treng å skriva både bokmål og nynorsk.
5554 Eksamensoppgåver, offentlege brev og nyhende er døme på tekster der
5555 det er krav om skriftspråk. I tillegg til alle skuleoppgåvene som
5556 elevar over det ganske land skal levera inn kvart år. Det mange ikkje
5557 veit er at sjølv om dei kommersielle alternativa
5558 <a href="https://translate.google.com/">Google *Translate</a> og
5559 <a href="https://www.bing.com/translator/">Bing *Translator</a> ikkje
5560 kan bidra med å omsetja mellom bokmål og nynorsk, så finst det eit
5561 utmerka fri programvarealternativ som kan. Omsetjarverktøyet
5562 *Apertium har støtte for ei rekkje språkkombinasjonar, og takka vera
5563 den utrøyttelege innsatsen til blant anna Kevin Brubeck Unhammer, kan
5564 ein bruka *webtjenesten til å fylla inn ei tekst på bokmål eller
5565 nynorsk, og få den *automatoversatt til det andre skriftspråket.
5566 Resultatet er ikkje perfekt, men eit svært godt utgangspunkt. Av og
5567 til er resultatet så bra at det kan nyttast utan endringar. Eg veit
5568 t.d. at store delar av *Joomla vart omsett til nynorsk ved hjelp
5569 *Apertium. Høyrast det ut som noko du kan ha bruk for? Besøk i så
5570 fall <a href="https://www.apertium.org/">*Apertium.org</a> og fyll inn
5571 teksta di i *webskjemaet der.
5572
5573 <p>Viss du treng *maskinell tilgjenge til den *bakenforliggende
5574 teknologien kan du anten installera pakken
5575 <a href="https://tracker.debian.org/apertium-nno-nob">*apertium-*nno-*nob</a>
5576 på ein *Debian-maskin eller bruka *web-*API-eit tilgjengeleg frå
5577 *api.*apertium.org. Sjå
5578 <a href="http://wiki.apertium.org/wiki/Apertium-apy">*API-dokumentasjonen</a>
5579 for detaljar om *web-*API-eit. Her kan du sjå korleis resultatet vert
5580 for denne teksta som vart skreva på bokmål over *maskinoversatt til
5581 nynorsk.</p>
5582
5583 </div>
5584 <div class="tags">
5585
5586
5587 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/norsk">norsk</a>, <a href="http://www.hungry.com/~pere/blog/tags/stavekontroll">stavekontroll</a>.
5588
5589
5590 </div>
5591 </div>
5592 <div class="padding"></div>
5593
5594 <div class="entry">
5595 <div class="title">
5596 <a href="http://www.hungry.com/~pere/blog/Coz_profiler_for_multi_threaded_software_is_now_in_Debian.html">Coz profiler for multi-threaded software is now in Debian</a>
5597 </div>
5598 <div class="date">
5599 13th November 2016
5600 </div>
5601 <div class="body">
5602 <p><a href="http://coz-profiler.org/">The Coz profiler</a>, a nice
5603 profiler able to run benchmarking experiments on the instrumented
5604 multi-threaded program, finally
5605 <a href="https://tracker.debian.org/pkg/coz-profiler">made it into
5606 Debian unstable yesterday</A>. Lluís Vilanova and I have spent many
5607 months since
5608 <a href="http://www.hungry.com/~pere/blog/Coz_can_help_you_find_bottlenecks_in_multi_threaded_software___nice_free_software.html">I
5609 blogged about the coz tool</a> in August working with upstream to make
5610 it suitable for Debian. There are still issues with clang
5611 compatibility, inline assembly only working x86 and minimized
5612 JavaScript libraries.</p>
5613
5614 <p>To test it, install 'coz-profiler' using apt and run it like this:</p>
5615
5616 <p><blockquote>
5617 <tt>coz run --- /path/to/binary-with-debug-info</tt>
5618 </blockquote></p>
5619
5620 <p>This will produce a profile.coz file in the current working
5621 directory with the profiling information. This is then given to a
5622 JavaScript application provided in the package and available from
5623 <a href="http://plasma-umass.github.io/coz/">a project web page</a>.
5624 To start the local copy, invoke it in a browser like this:</p>
5625
5626 <p><blockquote>
5627 <tt>sensible-browser /usr/share/coz-profiler/viewer/index.htm</tt>
5628 </blockquote></p>
5629
5630 <p>See the project home page and the
5631 <a href="https://www.usenix.org/publications/login/summer2016/curtsinger">USENIX
5632 ;login: article on Coz</a> for more information on how it is
5633 working.</p>
5634
5635 </div>
5636 <div class="tags">
5637
5638
5639 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
5640
5641
5642 </div>
5643 </div>
5644 <div class="padding"></div>
5645
5646 <div class="entry">
5647 <div class="title">
5648 <a href="http://www.hungry.com/~pere/blog/My_own_self_balancing_Lego_Segway.html">My own self balancing Lego Segway</a>
5649 </div>
5650 <div class="date">
5651 4th November 2016
5652 </div>
5653 <div class="body">
5654 <p>A while back I received a Gyro sensor for the NXT
5655 <a href="mindstorms.lego.com">Mindstorms</a> controller as a birthday
5656 present. It had been on my wishlist for a while, because I wanted to
5657 build a Segway like balancing lego robot. I had already built
5658 <a href="http://www.nxtprograms.com/NXT2/segway/">a simple balancing
5659 robot</a> with the kids, using the light/color sensor included in the
5660 NXT kit as the balance sensor, but it was not working very well. It
5661 could balance for a while, but was very sensitive to the light
5662 condition in the room and the reflective properties of the surface and
5663 would fall over after a short while. I wanted something more robust,
5664 and had
5665 <a href="https://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NGY1044">the
5666 gyro sensor from HiTechnic</a> I believed would solve it on my
5667 wishlist for some years before it suddenly showed up as a gift from my
5668 loved ones. :)</p>
5669
5670 <p>Unfortunately I have not had time to sit down and play with it
5671 since then. But that changed some days ago, when I was searching for
5672 lego segway information and came across a recipe from HiTechnic for
5673 building
5674 <a href="http://www.hitechnic.com/blog/gyro-sensor/htway/">the
5675 HTWay</a>, a segway like balancing robot. Build instructions and
5676 <a href="https://www.hitechnic.com/upload/786-HTWayC.nxc">source
5677 code</a> was included, so it was just a question of putting it all
5678 together. And thanks to the great work of many Debian developers, the
5679 compiler needed to build the source for the NXT is already included in
5680 Debian, so I was read to go in less than an hour. The resulting robot
5681 do not look very impressive in its simplicity:</p>
5682
5683 <p align="center"><img width="70%" src="http://www.hungry.com/~pere/blog/images/2016-11-04-lego-htway-robot.jpeg"></p>
5684
5685 <p>Because I lack the infrared sensor used to control the robot in the
5686 design from HiTechnic, I had to comment out the last task
5687 (taskControl). I simply placed /* and */ around it get the program
5688 working without that sensor present. Now it balances just fine until
5689 the battery status run low:</p>
5690
5691 <p align="center"><video width="70%" controls="true">
5692 <source src="http://www.hungry.com/~pere/blog/images/2016-11-04-lego-htway-balancing.ogv" type="video/ogg">
5693 </video></p>
5694
5695 <p>Now we would like to teach it how to follow a line and take remote
5696 control instructions using the included Bluetooth receiver in the NXT.</p>
5697
5698 <p>If you, like me, love LEGO and want to make sure we find the tools
5699 they need to work with LEGO in Debian and all our derivative
5700 distributions like Ubuntu, check out
5701 <a href="http://wiki.debian.org/LegoDesigners">the LEGO designers
5702 project page</a> and join the Debian LEGO team. Personally I own a
5703 RCX and NXT controller (no EV3), and would like to make sure the
5704 Debian tools needed to program the systems I own work as they
5705 should.</p>
5706
5707 </div>
5708 <div class="tags">
5709
5710
5711 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/lego">lego</a>, <a href="http://www.hungry.com/~pere/blog/tags/robot">robot</a>.
5712
5713
5714 </div>
5715 </div>
5716 <div class="padding"></div>
5717
5718 <div class="entry">
5719 <div class="title">
5720 <a href="http://www.hungry.com/~pere/blog/Experience_and_updated_recipe_for_using_the_Signal_app_without_a_mobile_phone.html">Experience and updated recipe for using the Signal app without a mobile phone</a>
5721 </div>
5722 <div class="date">
5723 10th October 2016
5724 </div>
5725 <div class="body">
5726 <p>In July
5727 <a href="http://www.hungry.com/~pere/blog/How_to_use_the_Signal_app_if_you_only_have_a_land_line__ie_no_mobile_phone_.html">I
5728 wrote how to get the Signal Chrome/Chromium app working</a> without
5729 the ability to receive SMS messages (aka without a cell phone). It is
5730 time to share some experiences and provide an updated setup.</p>
5731
5732 <p>The Signal app have worked fine for several months now, and I use
5733 it regularly to chat with my loved ones. I had a major snag at the
5734 end of my summer vacation, when the the app completely forgot my
5735 setup, identity and keys. The reason behind this major mess was
5736 running out of disk space. To avoid that ever happening again I have
5737 started storing everything in <tt>userdata/</tt> in git, to be able to
5738 roll back to an earlier version if the files are wiped by mistake. I
5739 had to use it once after introducing the git backup. When rolling
5740 back to an earlier version, one need to use the 'reset session' option
5741 in Signal to get going, and notify the people you talk with about the
5742 problem. I assume there is some sequence number tracking in the
5743 protocol to detect rollback attacks. The git repository is rather big
5744 (674 MiB so far), but I have not tried to figure out if some of the
5745 content can be added to a .gitignore file due to lack of spare
5746 time.</p>
5747
5748 <p>I've also hit the 90 days timeout blocking, and noticed that this
5749 make it impossible to send messages using Signal. I could still
5750 receive them, but had to patch the code with a new timestamp to send.
5751 I believe the timeout is added by the developers to force people to
5752 upgrade to the latest version of the app, even when there is no
5753 protocol changes, to reduce the version skew among the user base and
5754 thus try to keep the number of support requests down.</p>
5755
5756 <p>Since my original recipe, the Signal source code changed slightly,
5757 making the old patch fail to apply cleanly. Below is an updated
5758 patch, including the shell wrapper I use to start Signal. The
5759 original version required a new user to locate the JavaScript console
5760 and call a function from there. I got help from a friend with more
5761 JavaScript knowledge than me to modify the code to provide a GUI
5762 button instead. This mean that to get started you just need to run
5763 the wrapper and click the 'Register without mobile phone' to get going
5764 now. I've also modified the timeout code to always set it to 90 days
5765 in the future, to avoid having to patch the code regularly.</p>
5766
5767 <p>So, the updated recipe for Debian Jessie:</p>
5768
5769 <ol>
5770
5771 <li>First, install required packages to get the source code and the
5772 browser you need. Signal only work with Chrome/Chromium, as far as I
5773 know, so you need to install it.
5774
5775 <pre>
5776 apt install git tor chromium
5777 git clone https://github.com/WhisperSystems/Signal-Desktop.git
5778 </pre></li>
5779
5780 <li>Modify the source code using command listed in the the patch
5781 block below.</li>
5782
5783 <li>Start Signal using the run-signal-app wrapper (for example using
5784 <tt>`pwd`/run-signal-app</tt>).
5785
5786 <li>Click on the 'Register without mobile phone', will in a phone
5787 number you can receive calls to the next minute, receive the
5788 verification code and enter it into the form field and press
5789 'Register'. Note, the phone number you use will be user Signal
5790 username, ie the way others can find you on Signal.</li>
5791
5792 <li>You can now use Signal to contact others. Note, new contacts do
5793 not show up in the contact list until you restart Signal, and there is
5794 no way to assign names to Contacts. There is also no way to create or
5795 update chat groups. I suspect this is because the web app do not have
5796 a associated contact database.</li>
5797
5798 </ol>
5799
5800 <p>I am still a bit uneasy about using Signal, because of the way its
5801 main author moxie0 reject federation and accept dependencies to major
5802 corporations like Google (part of the code is fetched from Google) and
5803 Amazon (the central coordination point is owned by Amazon). See for
5804 example
5805 <a href="https://github.com/LibreSignal/LibreSignal/issues/37">the
5806 LibreSignal issue tracker</a> for a thread documenting the authors
5807 view on these issues. But the network effect is strong in this case,
5808 and several of the people I want to communicate with already use
5809 Signal. Perhaps we can all move to <a href="https://ring.cx/">Ring</a>
5810 once it <a href="https://bugs.debian.org/830265">work on my
5811 laptop</a>? It already work on Windows and Android, and is included
5812 in <a href="https://tracker.debian.org/pkg/ring">Debian</a> and
5813 <a href="https://launchpad.net/ubuntu/+source/ring">Ubuntu</a>, but not
5814 working on Debian Stable.</p>
5815
5816 <p>Anyway, this is the patch I apply to the Signal code to get it
5817 working. It switch to the production servers, disable to timeout,
5818 make registration easier and add the shell wrapper:</p>
5819
5820 <pre>
5821 cd Signal-Desktop; cat &lt;&lt;EOF | patch -p1
5822 diff --git a/js/background.js b/js/background.js
5823 index 24b4c1d..579345f 100644
5824 --- a/js/background.js
5825 +++ b/js/background.js
5826 @@ -33,9 +33,9 @@
5827 });
5828 });
5829
5830 - var SERVER_URL = 'https://textsecure-service-staging.whispersystems.org';
5831 + var SERVER_URL = 'https://textsecure-service-ca.whispersystems.org';
5832 var SERVER_PORTS = [80, 4433, 8443];
5833 - var ATTACHMENT_SERVER_URL = 'https://whispersystems-textsecure-attachments-staging.s3.amazonaws.com';
5834 + var ATTACHMENT_SERVER_URL = 'https://whispersystems-textsecure-attachments.s3.amazonaws.com';
5835 var messageReceiver;
5836 window.getSocketStatus = function() {
5837 if (messageReceiver) {
5838 diff --git a/js/expire.js b/js/expire.js
5839 index 639aeae..beb91c3 100644
5840 --- a/js/expire.js
5841 +++ b/js/expire.js
5842 @@ -1,6 +1,6 @@
5843 ;(function() {
5844 'use strict';
5845 - var BUILD_EXPIRATION = 0;
5846 + var BUILD_EXPIRATION = Date.now() + (90 * 24 * 60 * 60 * 1000);
5847
5848 window.extension = window.extension || {};
5849
5850 diff --git a/js/views/install_view.js b/js/views/install_view.js
5851 index 7816f4f..1d6233b 100644
5852 --- a/js/views/install_view.js
5853 +++ b/js/views/install_view.js
5854 @@ -38,7 +38,8 @@
5855 return {
5856 'click .step1': this.selectStep.bind(this, 1),
5857 'click .step2': this.selectStep.bind(this, 2),
5858 - 'click .step3': this.selectStep.bind(this, 3)
5859 + 'click .step3': this.selectStep.bind(this, 3),
5860 + 'click .callreg': function() { extension.install('standalone') },
5861 };
5862 },
5863 clearQR: function() {
5864 diff --git a/options.html b/options.html
5865 index dc0f28e..8d709f6 100644
5866 --- a/options.html
5867 +++ b/options.html
5868 @@ -14,7 +14,10 @@
5869 &lt;div class='nav'>
5870 &lt;h1>{{ installWelcome }}&lt;/h1>
5871 &lt;p>{{ installTagline }}&lt;/p>
5872 - &lt;div> &lt;a class='button step2'>{{ installGetStartedButton }}&lt;/a> &lt;/div>
5873 + &lt;div> &lt;a class='button step2'>{{ installGetStartedButton }}&lt;/a>
5874 + &lt;br> &lt;a class="button callreg">Register without mobile phone&lt;/a>
5875 +
5876 + &lt;/div>
5877 &lt;span class='dot step1 selected'>&lt;/span>
5878 &lt;span class='dot step2'>&lt;/span>
5879 &lt;span class='dot step3'>&lt;/span>
5880 --- /dev/null 2016-10-07 09:55:13.730181472 +0200
5881 +++ b/run-signal-app 2016-10-10 08:54:09.434172391 +0200
5882 @@ -0,0 +1,12 @@
5883 +#!/bin/sh
5884 +set -e
5885 +cd $(dirname $0)
5886 +mkdir -p userdata
5887 +userdata="`pwd`/userdata"
5888 +if [ -d "$userdata" ] && [ ! -d "$userdata/.git" ] ; then
5889 + (cd $userdata && git init)
5890 +fi
5891 +(cd $userdata && git add . && git commit -m "Current status." || true)
5892 +exec chromium \
5893 + --proxy-server="socks://localhost:9050" \
5894 + --user-data-dir=$userdata --load-and-launch-app=`pwd`
5895 EOF
5896 chmod a+rx run-signal-app
5897 </pre>
5898
5899 <p>As usual, if you use Bitcoin and want to show your support of my
5900 activities, please send Bitcoin donations to my address
5901 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
5902
5903 </div>
5904 <div class="tags">
5905
5906
5907 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/sikkerhet">sikkerhet</a>, <a href="http://www.hungry.com/~pere/blog/tags/surveillance">surveillance</a>.
5908
5909
5910 </div>
5911 </div>
5912 <div class="padding"></div>
5913
5914 <div class="entry">
5915 <div class="title">
5916 <a href="http://www.hungry.com/~pere/blog/Isenkram__Appstream_and_udev_make_life_as_a_LEGO_builder_easier.html">Isenkram, Appstream and udev make life as a LEGO builder easier</a>
5917 </div>
5918 <div class="date">
5919 7th October 2016
5920 </div>
5921 <div class="body">
5922 <p><a href="http://packages.qa.debian.org/isenkram">The Isenkram
5923 system</a> provide a practical and easy way to figure out which
5924 packages support the hardware in a given machine. The command line
5925 tool <tt>isenkram-lookup</tt> and the tasksel options provide a
5926 convenient way to list and install packages relevant for the current
5927 hardware during system installation, both user space packages and
5928 firmware packages. The GUI background daemon on the other hand provide
5929 a pop-up proposing to install packages when a new dongle is inserted
5930 while using the computer. For example, if you plug in a smart card
5931 reader, the system will ask if you want to install <tt>pcscd</tt> if
5932 that package isn't already installed, and if you plug in a USB video
5933 camera the system will ask if you want to install <tt>cheese</tt> if
5934 cheese is currently missing. This already work just fine.</p>
5935
5936 <p>But Isenkram depend on a database mapping from hardware IDs to
5937 package names. When I started no such database existed in Debian, so
5938 I made my own data set and included it with the isenkram package and
5939 made isenkram fetch the latest version of this database from git using
5940 http. This way the isenkram users would get updated package proposals
5941 as soon as I learned more about hardware related packages.</p>
5942
5943 <p>The hardware is identified using modalias strings. The modalias
5944 design is from the Linux kernel where most hardware descriptors are
5945 made available as a strings that can be matched using filename style
5946 globbing. It handle USB, PCI, DMI and a lot of other hardware related
5947 identifiers.</p>
5948
5949 <p>The downside to the Isenkram specific database is that there is no
5950 information about relevant distribution / Debian version, making
5951 isenkram propose obsolete packages too. But along came AppStream, a
5952 cross distribution mechanism to store and collect metadata about
5953 software packages. When I heard about the proposal, I contacted the
5954 people involved and suggested to add a hardware matching rule using
5955 modalias strings in the specification, to be able to use AppStream for
5956 mapping hardware to packages. This idea was accepted and AppStream is
5957 now a great way for a package to announce the hardware it support in a
5958 distribution neutral way. I wrote
5959 <a href="http://www.hungry.com/~pere/blog/Using_appstream_with_isenkram_to_install_hardware_related_packages_in_Debian.html">a
5960 recipe on how to add such meta-information</a> in a blog post last
5961 December. If you have a hardware related package in Debian, please
5962 announce the relevant hardware IDs using AppStream.</p>
5963
5964 <p>In Debian, almost all packages that can talk to a LEGO Mindestorms
5965 RCX or NXT unit, announce this support using AppStream. The effect is
5966 that when you insert such LEGO robot controller into your Debian
5967 machine, Isenkram will propose to install the packages needed to get
5968 it working. The intention is that this should allow the local user to
5969 start programming his robot controller right away without having to
5970 guess what packages to use or which permissions to fix.</p>
5971
5972 <p>But when I sat down with my son the other day to program our NXT
5973 unit using his Debian Stretch computer, I discovered something
5974 annoying. The local console user (ie my son) did not get access to
5975 the USB device for programming the unit. This used to work, but no
5976 longer in Jessie and Stretch. After some investigation and asking
5977 around on #debian-devel, I discovered that this was because udev had
5978 changed the mechanism used to grant access to local devices. The
5979 ConsoleKit mechanism from <tt>/lib/udev/rules.d/70-udev-acl.rules</tt>
5980 no longer applied, because LDAP users no longer was added to the
5981 plugdev group during login. Michael Biebl told me that this method
5982 was obsolete and the new method used ACLs instead. This was good
5983 news, as the plugdev mechanism is a mess when using a remote user
5984 directory like LDAP. Using ACLs would make sure a user lost device
5985 access when she logged out, even if the user left behind a background
5986 process which would retain the plugdev membership with the ConsoleKit
5987 setup. Armed with this knowledge I moved on to fix the access problem
5988 for the LEGO Mindstorms related packages.</p>
5989
5990 <p>The new system uses a udev tag, 'uaccess'. It can either be
5991 applied directly for a device, or is applied in
5992 /lib/udev/rules.d/70-uaccess.rules for classes of devices. As the
5993 LEGO Mindstorms udev rules did not have a class, I decided to add the
5994 tag directly in the udev rules files included in the packages. Here
5995 is one example. For the nqc C compiler for the RCX, the
5996 <tt>/lib/udev/rules.d/60-nqc.rules</tt> file now look like this:
5997
5998 <p><pre>
5999 SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="0694", ATTR{idProduct}=="0001", \
6000 SYMLINK+="rcx-%k", TAG+="uaccess"
6001 </pre></p>
6002
6003 <p>The key part is the 'TAG+="uaccess"' at the end. I suspect all
6004 packages using plugdev in their /lib/udev/rules.d/ files should be
6005 changed to use this tag (either directly or indirectly via
6006 <tt>70-uaccess.rules</tt>). Perhaps a lintian check should be created
6007 to detect this?</p>
6008
6009 <p>I've been unable to find good documentation on the uaccess feature.
6010 It is unclear to me if the uaccess tag is an internal implementation
6011 detail like the udev-acl tag used by
6012 <tt>/lib/udev/rules.d/70-udev-acl.rules</tt>. If it is, I guess the
6013 indirect method is the preferred way. Michael
6014 <a href="https://github.com/systemd/systemd/issues/4288">asked for more
6015 documentation from the systemd project</a> and I hope it will make
6016 this clearer. For now I use the generic classes when they exist and
6017 is already handled by <tt>70-uaccess.rules</tt>, and add the tag
6018 directly if no such class exist.</p>
6019
6020 <p>To learn more about the isenkram system, please check out
6021 <a href="http://www.hungry.com/~pere/blog/tags/isenkram/">my
6022 blog posts tagged isenkram</a>.</p>
6023
6024 <p>To help out making life for LEGO constructors in Debian easier,
6025 please join us on our IRC channel
6026 <a href="irc://irc.debian.org/%23debian-lego">#debian-lego</a> and join
6027 the <a href="https://alioth.debian.org/projects/debian-lego/">Debian
6028 LEGO team</a> in the Alioth project we created yesterday. A mailing
6029 list is not yet created, but we are working on it. :)</p>
6030
6031 <p>As usual, if you use Bitcoin and want to show your support of my
6032 activities, please send Bitcoin donations to my address
6033 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
6034
6035 </div>
6036 <div class="tags">
6037
6038
6039 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/isenkram">isenkram</a>, <a href="http://www.hungry.com/~pere/blog/tags/lego">lego</a>.
6040
6041
6042 </div>
6043 </div>
6044 <div class="padding"></div>
6045
6046 <div class="entry">
6047 <div class="title">
6048 <a href="http://www.hungry.com/~pere/blog/First_draft_Norwegian_Bokm_l_edition_of_The_Debian_Administrator_s_Handbook_now_public.html">First draft Norwegian Bokmål edition of The Debian Administrator's Handbook now public</a>
6049 </div>
6050 <div class="date">
6051 30th August 2016
6052 </div>
6053 <div class="body">
6054 <p>In April we
6055 <a href="http://www.hungry.com/~pere/blog/Lets_make_a_Norwegian_Bokm_l_edition_of_The_Debian_Administrator_s_Handbook.html">started
6056 to work</a> on a Norwegian Bokmål edition of the "open access" book on
6057 how to set up and administrate a Debian system. Today I am happy to
6058 report that the first draft is now publicly available. You can find
6059 it on <a href="https://debian-handbook.info/get/">get the Debian
6060 Administrator's Handbook page</a> (under Other languages). The first
6061 eight chapters have a first draft translation, and we are working on
6062 proofreading the content. If you want to help out, please start
6063 contributing using
6064 <a href="https://hosted.weblate.org/projects/debian-handbook/">the
6065 hosted weblate project page</a>, and get in touch using
6066 <a href="http://lists.alioth.debian.org/mailman/listinfo/debian-handbook-translators">the
6067 translators mailing list</a>. Please also check out
6068 <a href="https://debian-handbook.info/contribute/">the instructions for
6069 contributors</a>. A good way to contribute is to proofread the text
6070 and update weblate if you find errors.</p>
6071
6072 <p>Our goal is still to make the Norwegian book available on paper as well as
6073 electronic form.</p>
6074
6075 </div>
6076 <div class="tags">
6077
6078
6079 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian-handbook">debian-handbook</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
6080
6081
6082 </div>
6083 </div>
6084 <div class="padding"></div>
6085
6086 <div class="entry">
6087 <div class="title">
6088 <a href="http://www.hungry.com/~pere/blog/Coz_can_help_you_find_bottlenecks_in_multi_threaded_software___nice_free_software.html">Coz can help you find bottlenecks in multi-threaded software - nice free software</a>
6089 </div>
6090 <div class="date">
6091 11th August 2016
6092 </div>
6093 <div class="body">
6094 <p>This summer, I read a great article
6095 "<a href="https://www.usenix.org/publications/login/summer2016/curtsinger">coz:
6096 This Is the Profiler You're Looking For</a>" in USENIX ;login: about
6097 how to profile multi-threaded programs. It presented a system for
6098 profiling software by running experiences in the running program,
6099 testing how run time performance is affected by "speeding up" parts of
6100 the code to various degrees compared to a normal run. It does this by
6101 slowing down parallel threads while the "faster up" code is running
6102 and measure how this affect processing time. The processing time is
6103 measured using probes inserted into the code, either using progress
6104 counters (COZ_PROGRESS) or as latency meters (COZ_BEGIN/COZ_END). It
6105 can also measure unmodified code by measuring complete the program
6106 runtime and running the program several times instead.</p>
6107
6108 <p>The project and presentation was so inspiring that I would like to
6109 get the system into Debian. I
6110 <a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=830708">created
6111 a WNPP request for it</a> and contacted upstream to try to make the
6112 system ready for Debian by sending patches. The build process need to
6113 be changed a bit to avoid running 'git clone' to get dependencies, and
6114 to include the JavaScript web page used to visualize the collected
6115 profiling information included in the source package.
6116 But I expect that should work out fairly soon.</p>
6117
6118 <p>The way the system work is fairly simple. To run an coz experiment
6119 on a binary with debug symbols available, start the program like this:
6120
6121 <p><blockquote><pre>
6122 coz run --- program-to-run
6123 </pre></blockquote></p>
6124
6125 <p>This will create a text file profile.coz with the instrumentation
6126 information. To show what part of the code affect the performance
6127 most, use a web browser and either point it to
6128 <a href="http://plasma-umass.github.io/coz/">http://plasma-umass.github.io/coz/</a>
6129 or use the copy from git (in the gh-pages branch). Check out this web
6130 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
6131 profiling more useful you include &lt;coz.h&gt; and insert the
6132 COZ_PROGRESS or COZ_BEGIN and COZ_END at appropriate places in the
6133 code, rebuild and run the profiler. This allow coz to do more
6134 targeted experiments.</p>
6135
6136 <p>A video published by ACM
6137 <a href="https://www.youtube.com/watch?v=jE0V-p1odPg">presenting the
6138 Coz profiler</a> is available from Youtube. There is also a paper
6139 from the 25th Symposium on Operating Systems Principles available
6140 titled
6141 <a href="https://www.usenix.org/conference/atc16/technical-sessions/presentation/curtsinger">Coz:
6142 finding code that counts with causal profiling</a>.</p>
6143
6144 <p><a href="https://github.com/plasma-umass/coz">The source code</a>
6145 for Coz is available from github. It will only build with clang
6146 because it uses a
6147 <a href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55606">C++
6148 feature missing in GCC</a>, but I've submitted
6149 <a href="https://github.com/plasma-umass/coz/pull/67">a patch to solve
6150 it</a> and hope it will be included in the upstream source soon.</p>
6151
6152 <p>Please get in touch if you, like me, would like to see this piece
6153 of software in Debian. I would very much like some help with the
6154 packaging effort, as I lack the in depth knowledge on how to package
6155 C++ libraries.</p>
6156
6157 </div>
6158 <div class="tags">
6159
6160
6161 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nice free software">nice free software</a>.
6162
6163
6164 </div>
6165 </div>
6166 <div class="padding"></div>
6167
6168 <div class="entry">
6169 <div class="title">
6170 <a href="http://www.hungry.com/~pere/blog/Unlocking_HTC_Desire_HD_on_Linux_using_unruu_and_fastboot.html">Unlocking HTC Desire HD on Linux using unruu and fastboot</a>
6171 </div>
6172 <div class="date">
6173 7th July 2016
6174 </div>
6175 <div class="body">
6176 <p>Yesterday, I tried to unlock a HTC Desire HD phone, and it proved
6177 to be a slight challenge. Here is the recipe if I ever need to do it
6178 again. It all started by me wanting to try the recipe to set up
6179 <a href="https://blog.torproject.org/blog/mission-impossible-hardening-android-security-and-privacy">an
6180 hardened Android installation</a> from the Tor project blog on a
6181 device I had access to. It is a old mobile phone with a broken
6182 microphone The initial idea had been to just
6183 <a href="http://wiki.cyanogenmod.org/w/Install_CM_for_ace">install
6184 CyanogenMod on it</a>, but did not quite find time to start on it
6185 until a few days ago.</p>
6186
6187 <p>The unlock process is supposed to be simple: (1) Boot into the boot
6188 loader (press volume down and power at the same time), (2) select
6189 'fastboot' before (3) connecting the device via USB to a Linux
6190 machine, (4) request the device identifier token by running 'fastboot
6191 oem get_identifier_token', (5) request the device unlocking key using
6192 the <a href="http://www.htcdev.com/bootloader/">HTC developer web
6193 site</a> and unlock the phone using the key file emailed to you.</p>
6194
6195 <p>Unfortunately, this only work fi you have hboot version 2.00.0029
6196 or newer, and the device I was working on had 2.00.0027. This
6197 apparently can be easily fixed by downloading a Windows program and
6198 running it on your Windows machine, if you accept the terms Microsoft
6199 require you to accept to use Windows - which I do not. So I had to
6200 come up with a different approach. I got a lot of help from AndyCap
6201 on #nuug, and would not have been able to get this working without
6202 him.</p>
6203
6204 <p>First I needed to extract the hboot firmware from
6205 <a href="http://www.htcdev.com/ruu/PD9810000_Ace_Sense30_S_hboot_2.00.0029.exe">the
6206 windows binary for HTC Desire HD</a> downloaded as 'the RUU' from HTC.
6207 For this there is is <a href="https://github.com/kmdm/unruu/">a github
6208 project named unruu</a> using libunshield. The unshield tool did not
6209 recognise the file format, but unruu worked and extracted rom.zip,
6210 containing the new hboot firmware and a text file describing which
6211 devices it would work for.</p>
6212
6213 <p>Next, I needed to get the new firmware into the device. For this I
6214 followed some instructions
6215 <a href="http://www.htc1guru.com/2013/09/new-ruu-zips-posted/">available
6216 from HTC1Guru.com</a>, and ran these commands as root on a Linux
6217 machine with Debian testing:</p>
6218
6219 <p><pre>
6220 adb reboot-bootloader
6221 fastboot oem rebootRUU
6222 fastboot flash zip rom.zip
6223 fastboot flash zip rom.zip
6224 fastboot reboot
6225 </pre></p>
6226
6227 <p>The flash command apparently need to be done twice to take effect,
6228 as the first is just preparations and the second one do the flashing.
6229 The adb command is just to get to the boot loader menu, so turning the
6230 device on while holding volume down and the power button should work
6231 too.</p>
6232
6233 <p>With the new hboot version in place I could start following the
6234 instructions on the HTC developer web site. I got the device token
6235 like this:</p>
6236
6237 <p><pre>
6238 fastboot oem get_identifier_token 2>&1 | sed 's/(bootloader) //'
6239 </pre>
6240
6241 <p>And once I got the unlock code via email, I could use it like
6242 this:</p>
6243
6244 <p><pre>
6245 fastboot flash unlocktoken Unlock_code.bin
6246 </pre></p>
6247
6248 <p>And with that final step in place, the phone was unlocked and I
6249 could start stuffing the software of my own choosing into the device.
6250 So far I only inserted a replacement recovery image to wipe the phone
6251 before I start. We will see what happen next. Perhaps I should
6252 install <a href="https://www.debian.org/">Debian</a> on it. :)</p>
6253
6254 </div>
6255 <div class="tags">
6256
6257
6258 Tags: <a href="http://www.hungry.com/~pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/opphavsrett">opphavsrett</a>, <a href="http://www.hungry.com/~pere/blog/tags/sikkerhet">sikkerhet</a>.
6259
6260
6261 </div>
6262 </div>
6263 <div class="padding"></div>
6264
6265 <div class="entry">
6266 <div class="title">
6267 <a href="http://www.hungry.com/~pere/blog/How_to_use_the_Signal_app_if_you_only_have_a_land_line__ie_no_mobile_phone_.html">How to use the Signal app if you only have a land line (ie no mobile phone)</a>
6268 </div>
6269 <div class="date">
6270 3rd July 2016
6271 </div>
6272 <div class="body">
6273 <p>For a while now, I have wanted to test
6274 <a href="https://whispersystems.org/">the Signal app</a>, as it is
6275 said to provide end to end encrypted communication and several of my
6276 friends and family are already using it. As I by choice do not own a
6277 mobile phone, this proved to be harder than expected. And I wanted to
6278 have the source of the client and know that it was the code used on my
6279 machine. But yesterday I managed to get it working. I used the
6280 Github source, compared it to the source in
6281 <a href="https://chrome.google.com/webstore/detail/signal-private-messenger/bikioccmkafdpakkkcpdbppfkghcmihk?hl=en-US">the
6282 Signal Chrome app</a> available from the Chrome web store, applied
6283 patches to use the production Signal servers, started the app and
6284 asked for the hidden "register without a smart phone" form. Here is
6285 the recipe how I did it.</p>
6286
6287 <p>First, I fetched the Signal desktop source from Github, using
6288
6289 <pre>
6290 git clone https://github.com/WhisperSystems/Signal-Desktop.git
6291 </pre>
6292
6293 <p>Next, I patched the source to use the production servers, to be
6294 able to talk to other Signal users:</p>
6295
6296 <pre>
6297 cat &lt;&lt;EOF | patch -p0
6298 diff -ur ./js/background.js userdata/Default/Extensions/bikioccmkafdpakkkcpdbppfkghcmihk/0.15.0_0/js/background.js
6299 --- ./js/background.js 2016-06-29 13:43:15.630344628 +0200
6300 +++ userdata/Default/Extensions/bikioccmkafdpakkkcpdbppfkghcmihk/0.15.0_0/js/background.js 2016-06-29 14:06:29.530300934 +0200
6301 @@ -47,8 +47,8 @@
6302 });
6303 });
6304
6305 - var SERVER_URL = 'https://textsecure-service-staging.whispersystems.org';
6306 - var ATTACHMENT_SERVER_URL = 'https://whispersystems-textsecure-attachments-staging.s3.amazonaws.com';
6307 + var SERVER_URL = 'https://textsecure-service-ca.whispersystems.org:4433';
6308 + var ATTACHMENT_SERVER_URL = 'https://whispersystems-textsecure-attachments.s3.amazonaws.com';
6309 var messageReceiver;
6310 window.getSocketStatus = function() {
6311 if (messageReceiver) {
6312 diff -ur ./js/expire.js userdata/Default/Extensions/bikioccmkafdpakkkcpdbppfkghcmihk/0.15.0_0/js/expire.js
6313 --- ./js/expire.js 2016-06-29 13:43:15.630344628 +0200
6314 +++ userdata/Default/Extensions/bikioccmkafdpakkkcpdbppfkghcmihk/0.15.0_0/js/expire.js2016-06-29 14:06:29.530300934 +0200
6315 @@ -1,6 +1,6 @@
6316 ;(function() {
6317 'use strict';
6318 - var BUILD_EXPIRATION = 0;
6319 + var BUILD_EXPIRATION = 1474492690000;
6320
6321 window.extension = window.extension || {};
6322
6323 EOF
6324 </pre>
6325
6326 <p>The first part is changing the servers, and the second is updating
6327 an expiration timestamp. This timestamp need to be updated regularly.
6328 It is set 90 days in the future by the build process (Gruntfile.js).
6329 The value is seconds since 1970 times 1000, as far as I can tell.</p>
6330
6331 <p>Based on a tip and good help from the #nuug IRC channel, I wrote a
6332 script to launch Signal in Chromium.</p>
6333
6334 <pre>
6335 #!/bin/sh
6336 cd $(dirname $0)
6337 mkdir -p userdata
6338 exec chromium \
6339 --proxy-server="socks://localhost:9050" \
6340 --user-data-dir=`pwd`/userdata --load-and-launch-app=`pwd`
6341 </pre>
6342
6343 <p> The script start the app and configure Chromium to use the Tor
6344 SOCKS5 proxy to make sure those controlling the Signal servers (today
6345 Amazon and Whisper Systems) as well as those listening on the lines
6346 will have a harder time location my laptop based on the Signal
6347 connections if they use source IP address.</p>
6348
6349 <p>When the script starts, one need to follow the instructions under
6350 "Standalone Registration" in the CONTRIBUTING.md file in the git
6351 repository. I right clicked on the Signal window to get up the
6352 Chromium debugging tool, visited the 'Console' tab and wrote
6353 'extension.install("standalone")' on the console prompt to get the
6354 registration form. Then I entered by land line phone number and
6355 pressed 'Call'. 5 seconds later the phone rang and a robot voice
6356 repeated the verification code three times. After entering the number
6357 into the verification code field in the form, I could start using
6358 Signal from my laptop.
6359
6360 <p>As far as I can tell, The Signal app will leak who is talking to
6361 whom and thus who know who to those controlling the central server,
6362 but such leakage is hard to avoid with a centrally controlled server
6363 setup. It is something to keep in mind when using Signal - the
6364 content of your chats are harder to intercept, but the meta data
6365 exposing your contact network is available to people you do not know.
6366 So better than many options, but not great. And sadly the usage is
6367 connected to my land line, thus allowing those controlling the server
6368 to associate it to my home and person. I would prefer it if only
6369 those I knew could tell who I was on Signal. There are options
6370 avoiding such information leakage, but most of my friends are not
6371 using them, so I am stuck with Signal for now.</p>
6372
6373 <p><strong>Update 2017-01-10</strong>: There is an updated blog post
6374 on this topic in
6375 <a href="http://www.hungry.com/~pere/blog/Experience_and_updated_recipe_for_using_the_Signal_app_without_a_mobile_phone.html">Experience
6376 and updated recipe for using the Signal app without a mobile
6377 phone</a>.</p>
6378
6379 </div>
6380 <div class="tags">
6381
6382
6383 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/sikkerhet">sikkerhet</a>, <a href="http://www.hungry.com/~pere/blog/tags/surveillance">surveillance</a>.
6384
6385
6386 </div>
6387 </div>
6388 <div class="padding"></div>
6389
6390 <div class="entry">
6391 <div class="title">
6392 <a href="http://www.hungry.com/~pere/blog/The_new__best__multimedia_player_in_Debian_.html">The new "best" multimedia player in Debian?</a>
6393 </div>
6394 <div class="date">
6395 6th June 2016
6396 </div>
6397 <div class="body">
6398 <p>When I set out a few weeks ago to figure out
6399 <a href="http://www.hungry.com/~pere/blog/What_is_the_best_multimedia_player_in_Debian_.html">which
6400 multimedia player in Debian claimed to support most file formats /
6401 MIME types</a>, I was a bit surprised how varied the sets of MIME types
6402 the various players claimed support for. The range was from 55 to 130
6403 MIME types. I suspect most media formats are supported by all
6404 players, but this is not really reflected in the MimeTypes values in
6405 their desktop files. There are probably also some bogus MIME types
6406 listed, but it is hard to identify which one this is.</p>
6407
6408 <p>Anyway, in the mean time I got in touch with upstream for some of
6409 the players suggesting to add more MIME types to their desktop files,
6410 and decided to spend some time myself improving the situation for my
6411 favorite media player VLC. The fixes for VLC entered Debian unstable
6412 yesterday. The complete list of MIME types can be seen on the
6413 <a href="https://wiki.debian.org/DebianMultimedia/PlayerSupport">Multimedia
6414 player MIME type support status</a> Debian wiki page.</p>
6415
6416 <p>The new "best" multimedia player in Debian? It is VLC, followed by
6417 totem, parole, kplayer, gnome-mpv, mpv, smplayer, mplayer-gui and
6418 kmplayer. I am sure some of the other players desktop files support
6419 several of the formats currently listed as working only with vlc,
6420 toten and parole.</p>
6421
6422 <p>A sad observation is that only 14 MIME types are listed as
6423 supported by all the tested multimedia players in Debian in their
6424 desktop files: audio/mpeg, audio/vnd.rn-realaudio, audio/x-mpegurl,
6425 audio/x-ms-wma, audio/x-scpls, audio/x-wav, video/mp4, video/mpeg,
6426 video/quicktime, video/vnd.rn-realvideo, video/x-matroska,
6427 video/x-ms-asf, video/x-ms-wmv and video/x-msvideo. Personally I find
6428 it sad that video/ogg and video/webm is not supported by all the media
6429 players in Debian. As far as I can tell, all of them can handle both
6430 formats.</p>
6431
6432 </div>
6433 <div class="tags">
6434
6435
6436 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/multimedia">multimedia</a>, <a href="http://www.hungry.com/~pere/blog/tags/video">video</a>.
6437
6438
6439 </div>
6440 </div>
6441 <div class="padding"></div>
6442
6443 <div class="entry">
6444 <div class="title">
6445 <a href="http://www.hungry.com/~pere/blog/A_program_should_be_able_to_open_its_own_files_on_Linux.html">A program should be able to open its own files on Linux</a>
6446 </div>
6447 <div class="date">
6448 5th June 2016
6449 </div>
6450 <div class="body">
6451 <p>Many years ago, when koffice was fresh and with few users, I
6452 decided to test its presentation tool when making the slides for a
6453 talk I was giving for NUUG on Japhar, a free Java virtual machine. I
6454 wrote the first draft of the slides, saved the result and went to bed
6455 the day before I would give the talk. The next day I took a plane to
6456 the location where the meeting should take place, and on the plane I
6457 started up koffice again to polish the talk a bit, only to discover
6458 that kpresenter refused to load its own data file. I cursed a bit and
6459 started making the slides again from memory, to have something to
6460 present when I arrived. I tested that the saved files could be
6461 loaded, and the day seemed to be rescued. I continued to polish the
6462 slides until I suddenly discovered that the saved file could no longer
6463 be loaded into kpresenter. In the end I had to rewrite the slides
6464 three times, condensing the content until the talk became shorter and
6465 shorter. After the talk I was able to pinpoint the problem &ndash;
6466 kpresenter wrote inline images in a way itself could not understand.
6467 Eventually that bug was fixed and kpresenter ended up being a great
6468 program to make slides. The point I'm trying to make is that we
6469 expect a program to be able to load its own data files, and it is
6470 embarrassing to its developers if it can't.</p>
6471
6472 <p>Did you ever experience a program failing to load its own data
6473 files from the desktop file browser? It is not a uncommon problem. A
6474 while back I discovered that the screencast recorder
6475 gtk-recordmydesktop would save an Ogg Theora video file the KDE file
6476 browser would refuse to open. No video player claimed to understand
6477 such file. I tracked down the cause being <tt>file --mime-type</tt>
6478 returning the application/ogg MIME type, which no video player I had
6479 installed listed as a MIME type they would understand. I asked for
6480 <a href="http://bugs.gw.com/view.php?id=382">file to change its
6481 behavour</a> and use the MIME type video/ogg instead. I also asked
6482 several video players to add video/ogg to their desktop files, to give
6483 the file browser an idea what to do about Ogg Theora files. After a
6484 while, the desktop file browsers in Debian started to handle the
6485 output from gtk-recordmydesktop properly.</p>
6486
6487 <p>But history repeats itself. A few days ago I tested the music
6488 system Rosegarden again, and I discovered that the KDE and xfce file
6489 browsers did not know what to do with the Rosegarden project files
6490 (*.rg). I've reported <a href="http://bugs.debian.org/825993">the
6491 rosegarden problem to BTS</a> and a fix is commited to git and will be
6492 included in the next upload. To increase the chance of me remembering
6493 how to fix the problem next time some program fail to load its files
6494 from the file browser, here are some notes on how to fix it.</p>
6495
6496 <p>The file browsers in Debian in general operates on MIME types.
6497 There are two sources for the MIME type of a given file. The output from
6498 <tt>file --mime-type</tt> mentioned above, and the content of the
6499 shared MIME type registry (under /usr/share/mime/). The file MIME
6500 type is mapped to programs supporting the MIME type, and this
6501 information is collected from
6502 <a href="https://www.freedesktop.org/wiki/Specifications/desktop-entry-spec/">the
6503 desktop files</a> available in /usr/share/applications/. If there is
6504 one desktop file claiming support for the MIME type of the file, it is
6505 activated when asking to open a given file. If there are more, one
6506 can normally select which one to use by right-clicking on the file and
6507 selecting the wanted one using 'Open with' or similar. In general
6508 this work well. But it depend on each program picking a good MIME
6509 type (preferably
6510 <a href="http://www.iana.org/assignments/media-types/media-types.xhtml">a
6511 MIME type registered with IANA</a>), file and/or the shared MIME
6512 registry recognizing the file and the desktop file to list the MIME
6513 type in its list of supported MIME types.</p>
6514
6515 <p>The <tt>/usr/share/mime/packages/rosegarden.xml</tt> entry for
6516 <a href="http://www.freedesktop.org/wiki/Specifications/shared-mime-info-spec">the
6517 Shared MIME database</a> look like this:</p>
6518
6519 <p><blockquote><pre>
6520 &lt;?xml version="1.0" encoding="UTF-8"?&gt;
6521 &lt;mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info"&gt;
6522 &lt;mime-type type="audio/x-rosegarden"&gt;
6523 &lt;sub-class-of type="application/x-gzip"/&gt;
6524 &lt;comment&gt;Rosegarden project file&lt;/comment&gt;
6525 &lt;glob pattern="*.rg"/&gt;
6526 &lt;/mime-type&gt;
6527 &lt;/mime-info&gt;
6528 </pre></blockquote></p>
6529
6530 <p>This states that audio/x-rosegarden is a kind of application/x-gzip
6531 (it is a gzipped XML file). Note, it is much better to use an
6532 official MIME type registered with IANA than it is to make up ones own
6533 unofficial ones like the x-rosegarden type used by rosegarden.</p>
6534
6535 <p>The desktop file of the rosegarden program failed to list
6536 audio/x-rosegarden in its list of supported MIME types, causing the
6537 file browsers to have no idea what to do with *.rg files:</p>
6538
6539 <p><blockquote><pre>
6540 % grep Mime /usr/share/applications/rosegarden.desktop
6541 MimeType=audio/x-rosegarden-composition;audio/x-rosegarden-device;audio/x-rosegarden-project;audio/x-rosegarden-template;audio/midi;
6542 X-KDE-NativeMimeType=audio/x-rosegarden-composition
6543 %
6544 </pre></blockquote></p>
6545
6546 <p>The fix was to add "audio/x-rosegarden;" at the end of the
6547 MimeType= line.</p>
6548
6549 <p>If you run into a file which fail to open the correct program when
6550 selected from the file browser, please check out the output from
6551 <tt>file --mime-type</tt> for the file, ensure the file ending and
6552 MIME type is registered somewhere under /usr/share/mime/ and check
6553 that some desktop file under /usr/share/applications/ is claiming
6554 support for this MIME type. If not, please report a bug to have it
6555 fixed. :)</p>
6556
6557 </div>
6558 <div class="tags">
6559
6560
6561 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
6562
6563
6564 </div>
6565 </div>
6566 <div class="padding"></div>
6567
6568 <div class="entry">
6569 <div class="title">
6570 <a href="http://www.hungry.com/~pere/blog/Isenkram_with_PackageKit_support___new_version_0_23_available_in_Debian_unstable.html">Isenkram with PackageKit support - new version 0.23 available in Debian unstable</a>
6571 </div>
6572 <div class="date">
6573 25th May 2016
6574 </div>
6575 <div class="body">
6576 <p><a href="https://tracker.debian.org/pkg/isenkram">The isenkram
6577 system</a> is a user-focused solution in Debian for handling hardware
6578 related packages. The idea is to have a database of mappings between
6579 hardware and packages, and pop up a dialog suggesting for the user to
6580 install the packages to use a given hardware dongle. Some use cases
6581 are when you insert a Yubikey, it proposes to install the software
6582 needed to control it; when you insert a braille reader list it
6583 proposes to install the packages needed to send text to the reader;
6584 and when you insert a ColorHug screen calibrator it suggests to
6585 install the driver for it. The system work well, and even have a few
6586 command line tools to install firmware packages and packages for the
6587 hardware already in the machine (as opposed to hotpluggable hardware).</p>
6588
6589 <p>The system was initially written using aptdaemon, because I found
6590 good documentation and example code on how to use it. But aptdaemon
6591 is going away and is generally being replaced by
6592 <a href="http://www.freedesktop.org/software/PackageKit/">PackageKit</a>,
6593 so Isenkram needed a rewrite. And today, thanks to the great patch
6594 from my college Sunil Mohan Adapa in the FreedomBox project, the
6595 rewrite finally took place. I've just uploaded a new version of
6596 Isenkram into Debian Unstable with the patch included, and the default
6597 for the background daemon is now to use PackageKit. To check it out,
6598 install the <tt>isenkram</tt> package and insert some hardware dongle
6599 and see if it is recognised.</p>
6600
6601 <p>If you want to know what kind of packages isenkram would propose for
6602 the machine it is running on, you can check out the isenkram-lookup
6603 program. This is what it look like on a Thinkpad X230:</p>
6604
6605 <p><blockquote><pre>
6606 % isenkram-lookup
6607 bluez
6608 cheese
6609 fprintd
6610 fprintd-demo
6611 gkrellm-thinkbat
6612 hdapsd
6613 libpam-fprintd
6614 pidgin-blinklight
6615 thinkfan
6616 tleds
6617 tp-smapi-dkms
6618 tp-smapi-source
6619 tpb
6620 %p
6621 </pre></blockquote></p>
6622
6623 <p>The hardware mappings come from several places. The preferred way
6624 is for packages to announce their hardware support using
6625 <a href="https://www.freedesktop.org/software/appstream/docs/">the
6626 cross distribution appstream system</a>.
6627 See
6628 <a href="http://www.hungry.com/~pere/blog/tags/isenkram/">previous
6629 blog posts about isenkram</a> to learn how to do that.</p>
6630
6631 </div>
6632 <div class="tags">
6633
6634
6635 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/isenkram">isenkram</a>.
6636
6637
6638 </div>
6639 </div>
6640 <div class="padding"></div>
6641
6642 <div class="entry">
6643 <div class="title">
6644 <a href="http://www.hungry.com/~pere/blog/Discharge_rate_estimate_in_new_battery_statistics_collector_for_Debian.html">Discharge rate estimate in new battery statistics collector for Debian</a>
6645 </div>
6646 <div class="date">
6647 23rd May 2016
6648 </div>
6649 <div class="body">
6650 <p>Yesterday I updated the
6651 <a href="https://tracker.debian.org/pkg/battery-stats">battery-stats
6652 package in Debian</a> with a few patches sent to me by skilled and
6653 enterprising users. There were some nice user and visible changes.
6654 First of all, both desktop menu entries now work. A design flaw in
6655 one of the script made the history graph fail to show up (its PNG was
6656 dumped in ~/.xsession-errors) if no controlling TTY was available.
6657 The script worked when called from the command line, but not when
6658 called from the desktop menu. I changed this to look for a DISPLAY
6659 variable or a TTY before deciding where to draw the graph, and now the
6660 graph window pop up as expected.</p>
6661
6662 <p>The next new feature is a discharge rate estimator in one of the
6663 graphs (the one showing the last few hours). New is also the user of
6664 colours showing charging in blue and discharge in red. The percentages
6665 of this graph is relative to last full charge, not battery design
6666 capacity.</p>
6667
6668 <p align="center"><img src="http://www.hungry.com/~pere/blog/images/2016-05-23-battery-stats-rate.png"/></p>
6669
6670 <p>The other graph show the entire history of the collected battery
6671 statistics, comparing it to the design capacity of the battery to
6672 visualise how the battery life time get shorter over time. The red
6673 line in this graph is what the previous graph considers 100 percent:
6674
6675 <p align="center"><img src="http://www.hungry.com/~pere/blog/images/2016-05-23-battery-stats-history.png"/></p>
6676
6677 <p>In this graph you can see that I only charge the battery to 80
6678 percent of last full capacity, and how the capacity of the battery is
6679 shrinking. :(</p>
6680
6681 <p>The last new feature is in the collector, which now will handle
6682 more hardware models. On some hardware, Linux power supply
6683 information is stored in /sys/class/power_supply/ACAD/, while the
6684 collector previously only looked in /sys/class/power_supply/AC/. Now
6685 both are checked to figure if there is power connected to the
6686 machine.</p>
6687
6688 <p>If you are interested in how your laptop battery is doing, please
6689 check out the
6690 <a href="https://tracker.debian.org/pkg/battery-stats">battery-stats</a>
6691 in Debian unstable, or rebuild it on Jessie to get it working on
6692 Debian stable. :) The upstream source is available from <a
6693 href="https://github.com/petterreinholdtsen/battery-stats">github</a>.
6694 Patches are very welcome.</p>
6695
6696 <p>As usual, if you use Bitcoin and want to show your support of my
6697 activities, please send Bitcoin donations to my address
6698 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
6699
6700 </div>
6701 <div class="tags">
6702
6703
6704 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
6705
6706
6707 </div>
6708 </div>
6709 <div class="padding"></div>
6710
6711 <div class="entry">
6712 <div class="title">
6713 <a href="http://www.hungry.com/~pere/blog/Debian_now_with_ZFS_on_Linux_included.html">Debian now with ZFS on Linux included</a>
6714 </div>
6715 <div class="date">
6716 12th May 2016
6717 </div>
6718 <div class="body">
6719 <p>Today, after many years of hard work from many people,
6720 <a href="http://zfsonlinux.org/">ZFS for Linux</a> finally entered
6721 Debian. The package status can be seen on
6722 <a href="https://tracker.debian.org/pkg/zfs-linux">the package tracker
6723 for zfs-linux</a>. and
6724 <a href="https://qa.debian.org/developer.php?login=pkg-zfsonlinux-devel@lists.alioth.debian.org">the
6725 team status page</a>. If you want to help out, please join us.
6726 <a href="http://anonscm.debian.org/gitweb/?p=pkg-zfsonlinux/zfs.git">The
6727 source code</a> is available via git on Alioth. It would also be
6728 great if you could help out with
6729 <a href="https://tracker.debian.org/pkg/dkms">the dkms package</a>, as
6730 it is an important piece of the puzzle to get ZFS working.</p>
6731
6732 </div>
6733 <div class="tags">
6734
6735
6736 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
6737
6738
6739 </div>
6740 </div>
6741 <div class="padding"></div>
6742
6743 <div class="entry">
6744 <div class="title">
6745 <a href="http://www.hungry.com/~pere/blog/What_is_the_best_multimedia_player_in_Debian_.html">What is the best multimedia player in Debian?</a>
6746 </div>
6747 <div class="date">
6748 8th May 2016
6749 </div>
6750 <div class="body">
6751 <p><strong>Where I set out to figure out which multimedia player in
6752 Debian claim support for most file formats.</strong></p>
6753
6754 <p>A few years ago, I had a look at the media support for Browser
6755 plugins in Debian, to get an idea which plugins to include in Debian
6756 Edu. I created a script to extract the set of supported MIME types
6757 for each plugin, and used this to find out which multimedia browser
6758 plugin supported most file formats / media types.
6759 <a href="https://wiki.debian.org/DebianEdu/BrowserMultimedia">The
6760 result</a> can still be seen on the Debian wiki, even though it have
6761 not been updated for a while. But browser plugins are less relevant
6762 these days, so I thought it was time to look at standalone
6763 players.</p>
6764
6765 <p>A few days ago I was tired of VLC not being listed as a viable
6766 player when I wanted to play videos from the Norwegian National
6767 Broadcasting Company, and decided to investigate why. The cause is a
6768 <a href="https://bugs.debian.org/822245">missing MIME type in the VLC
6769 desktop file</a>. In the process I wrote a script to compare the set
6770 of MIME types announced in the desktop file and the browser plugin,
6771 only to discover that there is quite a large difference between the
6772 two for VLC. This discovery made me dig up the script I used to
6773 compare browser plugins, and adjust it to compare desktop files
6774 instead, to try to figure out which multimedia player in Debian
6775 support most file formats.</p>
6776
6777 <p>The result can be seen on the Debian Wiki, as
6778 <a href="https://wiki.debian.org/DebianMultimedia/PlayerSupport">a
6779 table listing all MIME types supported by one of the packages included
6780 in the table</a>, with the package supporting most MIME types being
6781 listed first in the table.</p>
6782
6783 </p>The best multimedia player in Debian? It is totem, followed by
6784 parole, kplayer, mpv, vlc, smplayer mplayer-gui gnome-mpv and
6785 kmplayer. Time for the other players to update their announced MIME
6786 support?</p>
6787
6788 </div>
6789 <div class="tags">
6790
6791
6792 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/multimedia">multimedia</a>, <a href="http://www.hungry.com/~pere/blog/tags/video">video</a>.
6793
6794
6795 </div>
6796 </div>
6797 <div class="padding"></div>
6798
6799 <div class="entry">
6800 <div class="title">
6801 <a href="http://www.hungry.com/~pere/blog/The_Pyra___handheld_computer_with_Debian_preinstalled.html">The Pyra - handheld computer with Debian preinstalled</a>
6802 </div>
6803 <div class="date">
6804 4th May 2016
6805 </div>
6806 <div class="body">
6807 A friend of mine made me aware of
6808 <a href="https://pyra-handheld.com/boards/pages/pyra/">The Pyra</a>, a
6809 handheld computer which will be delivered with Debian preinstalled. I
6810 would love to get one of those for my birthday. :)</p>
6811
6812 <p>The machine is a complete ARM-based PC with micro HDMI, SATA, USB
6813 plugs and many others connectors, and include a full keyboard and a 5"
6814 LCD touch screen. The 6000mAh battery is claimed to provide a whole
6815 day of battery life time, but I have not seen any independent tests
6816 confirming this. The vendor is still collecting preorders, and the
6817 last I heard last night was that 22 more orders were needed before
6818 production started.</p>
6819
6820 <p>As far as I know, this is the first handheld preinstalled with
6821 Debian. Please let me know if you know of any others. Is it the
6822 first computer being sold with Debian preinstalled?</p>
6823
6824 </div>
6825 <div class="tags">
6826
6827
6828 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
6829
6830
6831 </div>
6832 </div>
6833 <div class="padding"></div>
6834
6835 <div class="entry">
6836 <div class="title">
6837 <a href="http://www.hungry.com/~pere/blog/Lets_make_a_Norwegian_Bokm_l_edition_of_The_Debian_Administrator_s_Handbook.html">Lets make a Norwegian Bokmål edition of The Debian Administrator's Handbook</a>
6838 </div>
6839 <div class="date">
6840 10th April 2016
6841 </div>
6842 <div class="body">
6843 <p>During this weekends
6844 <a href="http://www.nuug.no/news/Oslo__Takk_for_feilfiksingsfesten.shtml">bug
6845 squashing party and developer gathering</a>, we decided to do our part
6846 to make sure there are good books about Debian available in Norwegian
6847 Bokmål, and got in touch with the people behind the
6848 <a href="http://debian-handbook.info/">Debian Administrator's Handbook
6849 project</a> to get started. If you want to help out, please start
6850 contributing using
6851 <a href="https://hosted.weblate.org/projects/debian-handbook/">the
6852 hosted weblate project page</a>, and get in touch using
6853 <a href="http://lists.alioth.debian.org/mailman/listinfo/debian-handbook-translators">the
6854 translators mailing list</a>. Please also check out
6855 <a href="https://debian-handbook.info/contribute/">the instructions for
6856 contributors</a>.</p>
6857
6858 <p>The book is already available on paper in English, French and
6859 Japanese, and our goal is to get it available on paper in Norwegian
6860 Bokmål too. In addition to the paper edition, there are also EPUB and
6861 Mobi versions available. And there are incomplete translations
6862 available for many more languages.</p>
6863
6864 </div>
6865 <div class="tags">
6866
6867
6868 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian-handbook">debian-handbook</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
6869
6870
6871 </div>
6872 </div>
6873 <div class="padding"></div>
6874
6875 <div class="entry">
6876 <div class="title">
6877 <a href="http://www.hungry.com/~pere/blog/One_in_two_hundred_Debian_users_using_ZFS_on_Linux_.html">One in two hundred Debian users using ZFS on Linux?</a>
6878 </div>
6879 <div class="date">
6880 7th April 2016
6881 </div>
6882 <div class="body">
6883 <p>Just for fun I had a look at the popcon number of ZFS related
6884 packages in Debian, and was quite surprised with what I found. I use
6885 ZFS myself at home, but did not really expect many others to do so.
6886 But I might be wrong.</p>
6887
6888 <p>According to
6889 <a href="https://qa.debian.org/popcon.php?package=spl-linux">the popcon
6890 results for spl-linux</a>, there are 1019 Debian installations, or
6891 0.53% of the population, with the package installed. As far as I know
6892 the only use of the spl-linux package is as a support library for ZFS
6893 on Linux, so I use it here as proxy for measuring the number of ZFS
6894 installation on Linux in Debian. In the kFreeBSD variant of Debian
6895 the ZFS feature is already available, and there
6896 <a href="https://qa.debian.org/popcon.php?package=zfsutils">the popcon
6897 results for zfsutils</a> show 1625 Debian installations or 0.84% of
6898 the population. So I guess I am not alone in using ZFS on Debian.</p>
6899
6900 <p>But even though the Debian project leader Lucas Nussbaum
6901 <a href="https://lists.debian.org/debian-devel-announce/2015/04/msg00006.html">announced
6902 in April 2015</a> that the legal obstacles blocking ZFS on Debian were
6903 cleared, the package is still not in Debian. The package is again in
6904 the NEW queue. Several uploads have been rejected so far because the
6905 debian/copyright file was incomplete or wrong, but there is no reason
6906 to give up. The current status can be seen on
6907 <a href="https://qa.debian.org/developer.php?login=pkg-zfsonlinux-devel@lists.alioth.debian.org">the
6908 team status page</a>, and
6909 <a href="http://anonscm.debian.org/gitweb/?p=pkg-zfsonlinux/zfs.git">the
6910 source code</a> is available on Alioth.</p>
6911
6912 <p>As I want ZFS to be included in next version of Debian to make sure
6913 my home server can function in the future using only official Debian
6914 packages, and the current blocker is to get the debian/copyright file
6915 accepted by the FTP masters in Debian, I decided a while back to try
6916 to help out the team. This was the background for my blog post about
6917 <a href="http://www.hungry.com/~pere/blog/Creating__updating_and_checking_debian_copyright_semi_automatically.html">creating,
6918 updating and checking debian/copyright semi-automatically</a>, and I
6919 used the techniques I explored there to try to find any errors in the
6920 copyright file. It is not very easy to check every one of the around
6921 2000 files in the source package, but I hope we this time got it
6922 right. If you want to help out, check out the git source and try to
6923 find missing entries in the debian/copyright file.</p>
6924
6925 </div>
6926 <div class="tags">
6927
6928
6929 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
6930
6931
6932 </div>
6933 </div>
6934 <div class="padding"></div>
6935
6936 <div class="entry">
6937 <div class="title">
6938 <a href="http://www.hungry.com/~pere/blog/Full_battery_stats_collector_is_now_available_in_Debian.html">Full battery stats collector is now available in Debian</a>
6939 </div>
6940 <div class="date">
6941 23rd March 2016
6942 </div>
6943 <div class="body">
6944 <p>Since this morning, the battery-stats package in Debian include an
6945 extended collector that will collect the complete battery history for
6946 later processing and graphing. The original collector store the
6947 battery level as percentage of last full level, while the new
6948 collector also record battery vendor, model, serial number, design
6949 full level, last full level and current battery level. This make it
6950 possible to predict the lifetime of the battery as well as visualise
6951 the energy flow when the battery is charging or discharging.</p>
6952
6953 <p>The new tools are available in <tt>/usr/share/battery-stats/</tt>
6954 in the version 0.5.1 package in unstable. Get the new battery level graph
6955 and lifetime prediction by running:
6956
6957 <p><pre>
6958 /usr/share/battery-stats/battery-stats-graph /var/log/battery-stats.csv
6959 </pre></p>
6960
6961 <p>Or select the 'Battery Level Graph' from your application menu.</p>
6962
6963 <p>The flow in/out of the battery can be seen by running (no menu
6964 entry yet):</p>
6965
6966 <p><pre>
6967 /usr/share/battery-stats/battery-stats-graph-flow
6968 </pre></p>
6969
6970 <p>I'm not quite happy with the way the data is visualised, at least
6971 when there are few data points. The graphs look a bit better with a
6972 few years of data.</p>
6973
6974 <p>A while back one important feature I use in the battery stats
6975 collector broke in Debian. The scripts in
6976 <tt>/usr/lib/pm-utils/power.d/</tt> were no longer executed. I
6977 suspect it happened when Jessie started using systemd, but I do not
6978 know. The issue is reported as
6979 <a href="https://bugs.debian.org/818649">bug #818649</a> against
6980 pm-utils. I managed to work around it by adding an udev rule to call
6981 the collector script every time the power connector is connected and
6982 disconnected. With this fix in place it was finally time to make a
6983 new release of the package, and get it into Debian.</p>
6984
6985 <p>If you are interested in how your laptop battery is doing, please
6986 check out the
6987 <a href="https://tracker.debian.org/pkg/battery-stats">battery-stats</a>
6988 in Debian unstable, or rebuild it on Jessie to get it working on
6989 Debian stable. :) The upstream source is available from
6990 <a href="https://github.com/petterreinholdtsen/battery-stats">github</a>.
6991 As always, patches are very welcome.</p>
6992
6993 </div>
6994 <div class="tags">
6995
6996
6997 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
6998
6999
7000 </div>
7001 </div>
7002 <div class="padding"></div>
7003
7004 <div class="entry">
7005 <div class="title">
7006 <a href="http://www.hungry.com/~pere/blog/Making_battery_measurements_a_little_easier_in_Debian.html">Making battery measurements a little easier in Debian</a>
7007 </div>
7008 <div class="date">
7009 15th March 2016
7010 </div>
7011 <div class="body">
7012 <p>Back in September, I blogged about
7013 <a href="http://www.hungry.com/~pere/blog/The_life_and_death_of_a_laptop_battery.html">the
7014 system I wrote to collect statistics about my laptop battery</a>, and
7015 how it showed the decay and death of this battery (now replaced). I
7016 created a simple deb package to handle the collection and graphing,
7017 but did not want to upload it to Debian as there were already
7018 <a href="https://tracker.debian.org/pkg/battery-stats">a battery-stats
7019 package in Debian</a> that should do the same thing, and I did not see
7020 a point of uploading a competing package when battery-stats could be
7021 fixed instead. I reported a few bugs about its non-function, and
7022 hoped someone would step in and fix it. But no-one did.</p>
7023
7024 <p>I got tired of waiting a few days ago, and took matters in my own
7025 hands. The end result is that I am now the new upstream developer of
7026 battery stats (<a href="https://github.com/petterreinholdtsen/battery-stats">available from github</a>) and part of the team maintaining
7027 battery-stats in Debian, and the package in Debian unstable is finally
7028 able to collect battery status using the <tt>/sys/class/power_supply/</tt>
7029 information provided by the Linux kernel. If you install the
7030 battery-stats package from unstable now, you will be able to get a
7031 graph of the current battery fill level, to get some idea about the
7032 status of the battery. The source package build and work just fine in
7033 Debian testing and stable (and probably oldstable too, but I have not
7034 tested). The default graph you get for that system look like this:</p>
7035
7036 <p align="center"><img src="http://www.hungry.com/~pere/blog/images/2016-03-15-battery-stats-graph-example.png" width="70%" align="center"></p>
7037
7038 <p>My plans for the future is to merge my old scripts into the
7039 battery-stats package, as my old scripts collected a lot more details
7040 about the battery. The scripts are merged into the upstream
7041 battery-stats git repository already, but I am not convinced they work
7042 yet, as I changed a lot of paths along the way. Will have to test a
7043 bit more before I make a new release.</p>
7044
7045 <p>I will also consider changing the file format slightly, as I
7046 suspect the way I combine several values into one field might make it
7047 impossible to know the type of the value when using it for processing
7048 and graphing.</p>
7049
7050 <p>If you would like I would like to keep an close eye on your laptop
7051 battery, check out the battery-stats package in
7052 <a href="https://tracker.debian.org/pkg/battery-stats">Debian</a> and
7053 on
7054 <a href="https://github.com/petterreinholdtsen/battery-stats">github</a>.
7055 I would love some help to improve the system further.</p>
7056
7057 </div>
7058 <div class="tags">
7059
7060
7061 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
7062
7063
7064 </div>
7065 </div>
7066 <div class="padding"></div>
7067
7068 <div class="entry">
7069 <div class="title">
7070 <a href="http://www.hungry.com/~pere/blog/Creating__updating_and_checking_debian_copyright_semi_automatically.html">Creating, updating and checking debian/copyright semi-automatically</a>
7071 </div>
7072 <div class="date">
7073 19th February 2016
7074 </div>
7075 <div class="body">
7076 <p>Making packages for Debian requires quite a lot of attention to
7077 details. And one of the details is the content of the
7078 debian/copyright file, which should list all relevant licenses used by
7079 the code in the package in question, preferably in
7080 <a href="https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/">machine
7081 readable DEP5 format</a>.</p>
7082
7083 <p>For large packages with lots of contributors it is hard to write
7084 and update this file manually, and if you get some detail wrong, the
7085 package is normally rejected by the ftpmasters. So getting it right
7086 the first time around get the package into Debian faster, and save
7087 both you and the ftpmasters some work.. Today, while trying to figure
7088 out what was wrong with
7089 <a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=686447">the
7090 zfsonlinux copyright file</a>, I decided to spend some time on
7091 figuring out the options for doing this job automatically, or at least
7092 semi-automatically.</p>
7093
7094 <p>Lucikly, there are at least two tools available for generating the
7095 file based on the code in the source package,
7096 <tt><a href="https://tracker.debian.org/pkg/debmake">debmake</a></tt>
7097 and <tt><a href="https://tracker.debian.org/pkg/cme">cme</a></tt>. I'm
7098 not sure which one of them came first, but both seem to be able to
7099 create a sensible draft file. As far as I can tell, none of them can
7100 be trusted to get the result just right, so the content need to be
7101 polished a bit before the file is OK to upload. I found the debmake
7102 option in
7103 <a href="http://goofying-with-debian.blogspot.com/2014/07/debmake-checking-source-against-dep-5.html">a
7104 blog posts from 2014</a>.
7105
7106 <p>To generate using debmake, use the -cc option:
7107
7108 <p><pre>
7109 debmake -cc > debian/copyright
7110 </pre></p>
7111
7112 <p>Note there are some problems with python and non-ASCII names, so
7113 this might not be the best option.</p>
7114
7115 <p>The cme option is based on a config parsing library, and I found
7116 this approach in
7117 <a href="https://ddumont.wordpress.com/2015/04/05/improving-creation-of-debian-copyright-file/">a
7118 blog post from 2015</a>. To generate using cme, use the 'update
7119 dpkg-copyright' option:
7120
7121 <p><pre>
7122 cme update dpkg-copyright
7123 </pre></p>
7124
7125 <p>This will create or update debian/copyright. The cme tool seem to
7126 handle UTF-8 names better than debmake.</p>
7127
7128 <p>When the copyright file is created, I would also like some help to
7129 check if the file is correct. For this I found two good options,
7130 <tt>debmake -k</tt> and <tt>license-reconcile</tt>. The former seem
7131 to focus on license types and file matching, and is able to detect
7132 ineffective blocks in the copyright file. The latter reports missing
7133 copyright holders and years, but was confused by inconsistent license
7134 names (like CDDL vs. CDDL-1.0). I suspect it is good to use both and
7135 fix all issues reported by them before uploading. But I do not know
7136 if the tools and the ftpmasters agree on what is important to fix in a
7137 copyright file, so the package might still be rejected.</p>
7138
7139 <p>The devscripts tool <tt>licensecheck</tt> deserve mentioning. It
7140 will read through the source and try to find all copyright statements.
7141 It is not comparing the result to the content of debian/copyright, but
7142 can be useful when verifying the content of the copyright file.</p>
7143
7144 <p>Are you aware of better tools in Debian to create and update
7145 debian/copyright file. Please let me know, or blog about it on
7146 planet.debian.org.</p>
7147
7148 <p>As usual, if you use Bitcoin and want to show your support of my
7149 activities, please send Bitcoin donations to my address
7150 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
7151
7152 <p><strong>Update 2016-02-20</strong>: I got a tip from Mike Gabriel
7153 on how to use licensecheck and cdbs to create a draft copyright file
7154
7155 <p><pre>
7156 licensecheck --copyright -r `find * -type f` | \
7157 /usr/lib/cdbs/licensecheck2dep5 > debian/copyright.auto
7158 </pre></p>
7159
7160 <p>He mentioned that he normally check the generated file into the
7161 version control system to make it easier to discover license and
7162 copyright changes in the upstream source. I will try to do the same
7163 with my packages in the future.</p>
7164
7165 <p><strong>Update 2016-02-21</strong>: The cme author recommended
7166 against using -quiet for new users, so I removed it from the proposed
7167 command line.</p>
7168
7169 </div>
7170 <div class="tags">
7171
7172
7173 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
7174
7175
7176 </div>
7177 </div>
7178 <div class="padding"></div>
7179
7180 <div class="entry">
7181 <div class="title">
7182 <a href="http://www.hungry.com/~pere/blog/Using_appstream_in_Debian_to_locate_packages_with_firmware_and_mime_type_support.html">Using appstream in Debian to locate packages with firmware and mime type support</a>
7183 </div>
7184 <div class="date">
7185 4th February 2016
7186 </div>
7187 <div class="body">
7188 <p>The <a href="https://wiki.debian.org/DEP-11">appstream system</a>
7189 is taking shape in Debian, and one provided feature is a very
7190 convenient way to tell you which package to install to make a given
7191 firmware file available when the kernel is looking for it. This can
7192 be done using apt-file too, but that is for someone else to blog
7193 about. :)</p>
7194
7195 <p>Here is a small recipe to find the package with a given firmware
7196 file, in this example I am looking for ctfw-3.2.3.0.bin, randomly
7197 picked from the set of firmware announced using appstream in Debian
7198 unstable. In general you would be looking for the firmware requested
7199 by the kernel during kernel module loading. To find the package
7200 providing the example file, do like this:</p>
7201
7202 <blockquote><pre>
7203 % apt install appstream
7204 [...]
7205 % apt update
7206 [...]
7207 % appstreamcli what-provides firmware:runtime ctfw-3.2.3.0.bin | \
7208 awk '/Package:/ {print $2}'
7209 firmware-qlogic
7210 %
7211 </pre></blockquote>
7212
7213 <p>See <a href="https://wiki.debian.org/AppStream/Guidelines">the
7214 appstream wiki</a> page to learn how to embed the package metadata in
7215 a way appstream can use.</p>
7216
7217 <p>This same approach can be used to find any package supporting a
7218 given MIME type. This is very useful when you get a file you do not
7219 know how to handle. First find the mime type using <tt>file
7220 --mime-type</tt>, and next look up the package providing support for
7221 it. Lets say you got an SVG file. Its MIME type is image/svg+xml,
7222 and you can find all packages handling this type like this:</p>
7223
7224 <blockquote><pre>
7225 % apt install appstream
7226 [...]
7227 % apt update
7228 [...]
7229 % appstreamcli what-provides mimetype image/svg+xml | \
7230 awk '/Package:/ {print $2}'
7231 bkchem
7232 phototonic
7233 inkscape
7234 shutter
7235 tetzle
7236 geeqie
7237 xia
7238 pinta
7239 gthumb
7240 karbon
7241 comix
7242 mirage
7243 viewnior
7244 postr
7245 ristretto
7246 kolourpaint4
7247 eog
7248 eom
7249 gimagereader
7250 midori
7251 %
7252 </pre></blockquote>
7253
7254 <p>I believe the MIME types are fetched from the desktop file for
7255 packages providing appstream metadata.</p>
7256
7257 </div>
7258 <div class="tags">
7259
7260
7261 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
7262
7263
7264 </div>
7265 </div>
7266 <div class="padding"></div>
7267
7268 <div class="entry">
7269 <div class="title">
7270 <a href="http://www.hungry.com/~pere/blog/Creepy__visualise_geotagged_social_media_information___nice_free_software.html">Creepy, visualise geotagged social media information - nice free software</a>
7271 </div>
7272 <div class="date">
7273 24th January 2016
7274 </div>
7275 <div class="body">
7276 <p>Most people seem not to realise that every time they walk around
7277 with the computerised radio beacon known as a mobile phone their
7278 position is tracked by the phone company and often stored for a long
7279 time (like every time a SMS is received or sent). And if their
7280 computerised radio beacon is capable of running programs (often called
7281 mobile apps) downloaded from the Internet, these programs are often
7282 also capable of tracking their location (if the app requested access
7283 during installation). And when these programs send out information to
7284 central collection points, the location is often included, unless
7285 extra care is taken to not send the location. The provided
7286 information is used by several entities, for good and bad (what is
7287 good and bad, depend on your point of view). What is certain, is that
7288 the private sphere and the right to free movement is challenged and
7289 perhaps even eradicated for those announcing their location this way,
7290 when they share their whereabouts with private and public
7291 entities.</p>
7292
7293 <p align="center"><img width="70%" src="http://www.hungry.com/~pere/blog/images/2016-01-24-nice-creepy-desktop-window.png"></p>
7294
7295 <p>The phone company logs provide a register of locations to check out
7296 when one want to figure out what the tracked person was doing. It is
7297 unavailable for most of us, but provided to selected government
7298 officials, company staff, those illegally buying information from
7299 unfaithful servants and crackers stealing the information. But the
7300 public information can be collected and analysed, and a free software
7301 tool to do so is called
7302 <a href="http://www.geocreepy.com/">Creepy or Cree.py</a>. I
7303 discovered it when I read
7304 <a href="http://www.aftenposten.no/kultur/Slik-kan-du-bli-overvaket-pa-Twitter-og-Instagram-uten-a-ane-det-7787884.html">an
7305 article about Creepy</a> in the Norwegian newspaper Aftenposten i
7306 November 2014, and decided to check if it was available in Debian.
7307 The python program was in Debian, but
7308 <a href="https://tracker.debian.org/pkg/creepy">the version in
7309 Debian</a> was completely broken and practically unmaintained. I
7310 uploaded a new version which did not work quite right, but did not
7311 have time to fix it then. This Christmas I decided to finally try to
7312 get Creepy operational in Debian. Now a fixed version is available in
7313 Debian unstable and testing, and almost all Debian specific patches
7314 are now included
7315 <a href="https://github.com/jkakavas/creepy">upstream</a>.</p>
7316
7317 <p>The Creepy program visualises geolocation information fetched from
7318 Twitter, Instagram, Flickr and Google+, and allow one to get a
7319 complete picture of every social media message posted recently in a
7320 given area, or track the movement of a given individual across all
7321 these services. Earlier it was possible to use the search API of at
7322 least some of these services without identifying oneself, but these
7323 days it is impossible. This mean that to use Creepy, you need to
7324 configure it to log in as yourself on these services, and provide
7325 information to them about your search interests. This should be taken
7326 into account when using Creepy, as it will also share information
7327 about yourself with the services.</p>
7328
7329 <p>The picture above show the twitter messages sent from (or at least
7330 geotagged with a position from) the city centre of Oslo, the capital
7331 of Norway. One useful way to use Creepy is to first look at
7332 information tagged with an area of interest, and next look at all the
7333 information provided by one or more individuals who was in the area.
7334 I tested it by checking out which celebrity provide their location in
7335 twitter messages by checkout out who sent twitter messages near a
7336 Norwegian TV station, and next could track their position over time,
7337 making it possible to locate their home and work place, among other
7338 things. A similar technique have been
7339 <a href="http://www.buzzfeed.com/maxseddon/does-this-soldiers-instagram-account-prove-russia-is-covertl">used
7340 to locate Russian soldiers in Ukraine</a>, and it is both a powerful
7341 tool to discover lying governments, and a useful tool to help people
7342 understand the value of the private information they provide to the
7343 public.</p>
7344
7345 <p>The package is not trivial to backport to Debian Stable/Jessie, as
7346 it depend on several python modules currently missing in Jessie (at
7347 least python-instagram, python-flickrapi and
7348 python-requests-toolbelt).</p>
7349
7350 <p>(I have uploaded
7351 <a href="https://screenshots.debian.net/package/creepy">the image to
7352 screenshots.debian.net</a> and licensed it under the same terms as the
7353 Creepy program in Debian.)</p>
7354
7355 </div>
7356 <div class="tags">
7357
7358
7359 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nice free software">nice free software</a>.
7360
7361
7362 </div>
7363 </div>
7364 <div class="padding"></div>
7365
7366 <div class="entry">
7367 <div class="title">
7368 <a href="http://www.hungry.com/~pere/blog/Always_download_Debian_packages_using_Tor___the_simple_recipe.html">Always download Debian packages using Tor - the simple recipe</a>
7369 </div>
7370 <div class="date">
7371 15th January 2016
7372 </div>
7373 <div class="body">
7374 <p>During his DebConf15 keynote, Jacob Appelbaum
7375 <a href="https://summit.debconf.org/debconf15/meeting/331/what-is-to-be-done/">observed
7376 that those listening on the Internet lines would have good reason to
7377 believe a computer have a given security hole</a> if it download a
7378 security fix from a Debian mirror. This is a good reason to always
7379 use encrypted connections to the Debian mirror, to make sure those
7380 listening do not know which IP address to attack. In August, Richard
7381 Hartmann observed that encryption was not enough, when it was possible
7382 to interfere download size to security patches or the fact that
7383 download took place shortly after a security fix was released, and
7384 <a href="http://richardhartmann.de/blog/posts/2015/08/24-Tor-enabled_Debian_mirror/">proposed
7385 to always use Tor to download packages from the Debian mirror</a>. He
7386 was not the first to propose this, as the
7387 <tt><a href="https://tracker.debian.org/pkg/apt-transport-tor">apt-transport-tor</a></tt>
7388 package by Tim Retout already existed to make it easy to convince apt
7389 to use <a href="https://www.torproject.org/">Tor</a>, but I was not
7390 aware of that package when I read the blog post from Richard.</p>
7391
7392 <p>Richard discussed the idea with Peter Palfrader, one of the Debian
7393 sysadmins, and he set up a Tor hidden service on one of the central
7394 Debian mirrors using the address vwakviie2ienjx6t.onion, thus making
7395 it possible to download packages directly between two tor nodes,
7396 making sure the network traffic always were encrypted.</p>
7397
7398 <p>Here is a short recipe for enabling this on your machine, by
7399 installing <tt>apt-transport-tor</tt> and replacing http and https
7400 urls with tor+http and tor+https, and using the hidden service instead
7401 of the official Debian mirror site. I recommend installing
7402 <tt>etckeeper</tt> before you start to have a history of the changes
7403 done in /etc/.</p>
7404
7405 <blockquote><pre>
7406 apt install apt-transport-tor
7407 sed -i 's% http://ftp.debian.org/% tor+http://vwakviie2ienjx6t.onion/%' /etc/apt/sources.list
7408 sed -i 's% http% tor+http%' /etc/apt/sources.list
7409 </pre></blockquote>
7410
7411 <p>If you have more sources listed in /etc/apt/sources.list.d/, run
7412 the sed commands for these too. The sed command is assuming your are
7413 using the ftp.debian.org Debian mirror. Adjust the command (or just
7414 edit the file manually) to match your mirror.</p>
7415
7416 <p>This work in Debian Jessie and later. Note that tools like
7417 <tt>apt-file</tt> only recently started using the apt transport
7418 system, and do not work with these tor+http URLs. For
7419 <tt>apt-file</tt> you need the version currently in experimental,
7420 which need a recent apt version currently only in unstable. So if you
7421 need a working <tt>apt-file</tt>, this is not for you.</p>
7422
7423 <p>Another advantage from this change is that your machine will start
7424 using Tor regularly and at fairly random intervals (every time you
7425 update the package lists or upgrade or install a new package), thus
7426 masking other Tor traffic done from the same machine. Using Tor will
7427 become normal for the machine in question.</p>
7428
7429 <p>On <a href="https://wiki.debian.org/FreedomBox">Freedombox</a>, APT
7430 is set up by default to use <tt>apt-transport-tor</tt> when Tor is
7431 enabled. It would be great if it was the default on any Debian
7432 system.</p>
7433
7434 </div>
7435 <div class="tags">
7436
7437
7438 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/sikkerhet">sikkerhet</a>.
7439
7440
7441 </div>
7442 </div>
7443 <div class="padding"></div>
7444
7445 <div class="entry">
7446 <div class="title">
7447 <a href="http://www.hungry.com/~pere/blog/OpenALPR__find_car_license_plates_in_video_streams___nice_free_software.html">OpenALPR, find car license plates in video streams - nice free software</a>
7448 </div>
7449 <div class="date">
7450 23rd December 2015
7451 </div>
7452 <div class="body">
7453 <p>When I was a kid, we used to collect "car numbers", as we used to
7454 call the car license plate numbers in those days. I would write the
7455 numbers down in my little book and compare notes with the other kids
7456 to see how many region codes we had seen and if we had seen some
7457 exotic or special region codes and numbers. It was a fun game to pass
7458 time, as we kids have plenty of it.</p>
7459
7460 <p>A few days I came across
7461 <a href="https://github.com/openalpr/openalpr">the OpenALPR
7462 project</a>, a free software project to automatically discover and
7463 report license plates in images and video streams, and provide the
7464 "car numbers" in a machine readable format. I've been looking for
7465 such system for a while now, because I believe it is a bad idea that the
7466 <a href="https://en.wikipedia.org/wiki/Automatic_number_plate_recognition">automatic
7467 number plate recognition</a> tool only is available in the hands of
7468 the powerful, and want it to be available also for the powerless to
7469 even the score when it comes to surveillance and sousveillance. I
7470 discovered the developer
7471 <a href="https://bugs.debian.org/747509">wanted to get the tool into
7472 Debian</a>, and as I too wanted it to be in Debian, I volunteered to
7473 help him get it into shape to get the package uploaded into the Debian
7474 archive.</p>
7475
7476 <p>Today we finally managed to get the package into shape and uploaded
7477 it into Debian, where it currently
7478 <a href="https://ftp-master.debian.org//new/openalpr_2.2.1-1.html">waits
7479 in the NEW queue</a> for review by the Debian ftpmasters.</p>
7480
7481 <p>I guess you are wondering why on earth such tool would be useful
7482 for the common folks, ie those not running a large government
7483 surveillance system? Well, I plan to put it in a computer on my bike
7484 and in my car, tracking the cars nearby and allowing me to be notified
7485 when number plates on my watch list are discovered. Another use case
7486 was suggested by a friend of mine, who wanted to set it up at his home
7487 to open the car port automatically when it discovered the plate on his
7488 car. When I mentioned it perhaps was a bit foolhardy to allow anyone
7489 capable of placing his license plate number of a piece of cardboard to
7490 open his car port, men replied that it was always unlocked anyway. I
7491 guess for such use case it make sense. I am sure there are other use
7492 cases too, for those with imagination and a vision.</p>
7493
7494 <p>If you want to build your own version of the Debian package, check
7495 out the upstream git source and symlink ./distros/debian to ./debian/
7496 before running "debuild" to build the source. Or wait a bit until the
7497 package show up in unstable.</p>
7498
7499 </div>
7500 <div class="tags">
7501
7502
7503 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nice free software">nice free software</a>.
7504
7505
7506 </div>
7507 </div>
7508 <div class="padding"></div>
7509
7510 <div class="entry">
7511 <div class="title">
7512 <a href="http://www.hungry.com/~pere/blog/Using_appstream_with_isenkram_to_install_hardware_related_packages_in_Debian.html">Using appstream with isenkram to install hardware related packages in Debian</a>
7513 </div>
7514 <div class="date">
7515 20th December 2015
7516 </div>
7517 <div class="body">
7518 <p>Around three years ago, I created
7519 <a href="http://packages.qa.debian.org/isenkram">the isenkram
7520 system</a> to get a more practical solution in Debian for handing
7521 hardware related packages. A GUI system in the isenkram package will
7522 present a pop-up dialog when some hardware dongle supported by
7523 relevant packages in Debian is inserted into the machine. The same
7524 lookup mechanism to detect packages is available as command line
7525 tools in the isenkram-cli package. In addition to mapping hardware,
7526 it will also map kernel firmware files to packages and make it easy to
7527 install needed firmware packages automatically. The key for this
7528 system to work is a good way to map hardware to packages, in other
7529 words, allow packages to announce what hardware they will work
7530 with.</p>
7531
7532 <p>I started by providing data files in the isenkram source, and
7533 adding code to download the latest version of these data files at run
7534 time, to ensure every user had the most up to date mapping available.
7535 I also added support for storing the mapping in the Packages file in
7536 the apt repositories, but did not push this approach because while I
7537 was trying to figure out how to best store hardware/package mappings,
7538 <a href="http://www.freedesktop.org/software/appstream/docs/">the
7539 appstream system</a> was announced. I got in touch and suggested to
7540 add the hardware mapping into that data set to be able to use
7541 appstream as a data source, and this was accepted at least for the
7542 Debian version of appstream.</p>
7543
7544 <p>A few days ago using appstream in Debian for this became possible,
7545 and today I uploaded a new version 0.20 of isenkram adding support for
7546 appstream as a data source for mapping hardware to packages. The only
7547 package so far using appstream to announce its hardware support is my
7548 pymissile package. I got help from Matthias Klumpp with figuring out
7549 how do add the required
7550 <a href="https://appstream.debian.org/html/sid/main/metainfo/pymissile.html">metadata
7551 in pymissile</a>. I added a file debian/pymissile.metainfo.xml with
7552 this content:</p>
7553
7554 <blockquote><pre>
7555 &lt;?xml version="1.0" encoding="UTF-8"?&gt;
7556 &lt;component&gt;
7557 &lt;id&gt;pymissile&lt;/id&gt;
7558 &lt;metadata_license&gt;MIT&lt;/metadata_license&gt;
7559 &lt;name&gt;pymissile&lt;/name&gt;
7560 &lt;summary&gt;Control original Striker USB Missile Launcher&lt;/summary&gt;
7561 &lt;description&gt;
7562 &lt;p&gt;
7563 Pymissile provides a curses interface to control an original
7564 Marks and Spencer / Striker USB Missile Launcher, as well as a
7565 motion control script to allow a webcamera to control the
7566 launcher.
7567 &lt;/p&gt;
7568 &lt;/description&gt;
7569 &lt;provides&gt;
7570 &lt;modalias&gt;usb:v1130p0202d*&lt;/modalias&gt;
7571 &lt;/provides&gt;
7572 &lt;/component&gt;
7573 </pre></blockquote>
7574
7575 <p>The key for isenkram is the component/provides/modalias value,
7576 which is a glob style match rule for hardware specific strings
7577 (modalias strings) provided by the Linux kernel. In this case, it
7578 will map to all USB devices with vendor code 1130 and product code
7579 0202.</p>
7580
7581 <p>Note, it is important that the license of all the metadata files
7582 are compatible to have permissions to aggregate them into archive wide
7583 appstream files. Matthias suggested to use MIT or BSD licenses for
7584 these files. A challenge is figuring out a good id for the data, as
7585 it is supposed to be globally unique and shared across distributions
7586 (in other words, best to coordinate with upstream what to use). But
7587 it can be changed later or, so we went with the package name as
7588 upstream for this project is dormant.</p>
7589
7590 <p>To get the metadata file installed in the correct location for the
7591 mirror update scripts to pick it up and include its content the
7592 appstream data source, the file must be installed in the binary
7593 package under /usr/share/appdata/. I did this by adding the following
7594 line to debian/pymissile.install:</p>
7595
7596 <blockquote><pre>
7597 debian/pymissile.metainfo.xml usr/share/appdata
7598 </pre></blockquote>
7599
7600 <p>With that in place, the command line tool isenkram-lookup will list
7601 all packages useful on the current computer automatically, and the GUI
7602 pop-up handler will propose to install the package not already
7603 installed if a hardware dongle is inserted into the machine in
7604 question.</p>
7605
7606 <p>Details of the modalias field in appstream is available from the
7607 <a href="https://wiki.debian.org/DEP-11">DEP-11</a> proposal.</p>
7608
7609 <p>To locate the modalias values of all hardware present in a machine,
7610 try running this command on the command line:</p>
7611
7612 <blockquote><pre>
7613 cat $(find /sys/devices/|grep modalias)
7614 </pre></blockquote>
7615
7616 <p>To learn more about the isenkram system, please check out
7617 <a href="http://www.hungry.com/~pere/blog/tags/isenkram/">my
7618 blog posts tagged isenkram</a>.</p>
7619
7620 </div>
7621 <div class="tags">
7622
7623
7624 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/isenkram">isenkram</a>.
7625
7626
7627 </div>
7628 </div>
7629 <div class="padding"></div>
7630
7631 <div class="entry">
7632 <div class="title">
7633 <a href="http://www.hungry.com/~pere/blog/The_GNU_General_Public_License_is_not_magic_pixie_dust.html">The GNU General Public License is not magic pixie dust</a>
7634 </div>
7635 <div class="date">
7636 30th November 2015
7637 </div>
7638 <div class="body">
7639 <p>A blog post from my fellow Debian developer Paul Wise titled
7640 "<a href="http://bonedaddy.net/pabs3/log/2015/11/27/sfc-supporter/">The
7641 GPL is not magic pixie dust</a>" explain the importance of making sure
7642 the <a href="http://www.gnu.org/copyleft/gpl.html">GPL</a> is enforced.
7643 I quote the blog post from Paul in full here with his permission:<p>
7644
7645 <blockquote>
7646
7647 <p><a href="https://sfconservancy.org/supporter/"><img src="https://sfconservancy.org/img/supporter-badge.png" width="194" height="90" alt="Become a Software Freedom Conservancy Supporter!" align="right" border="0" /></a></p>
7648
7649 <blockquote>
7650 The GPL is not magic pixie dust. It does not work by itself.<br/>
7651
7652 The first step is to choose a
7653 <a href="https://copyleft.org/">copyleft</a> license for your
7654 code.<br/>
7655
7656 The next step is, when someone fails to follow that copyleft license,
7657 <b>it must be enforced</b><br/>
7658
7659 and its a simple fact of our modern society that such type of
7660 work<br/>
7661
7662 is incredibly expensive to do and incredibly difficult to do.
7663 </blockquote>
7664
7665 <p><small>-- <a href="http://ebb.org/bkuhn/">Bradley Kuhn</a>, in
7666 <a href="http://faif.us/" title="Free as in Freedom">FaiF</a>
7667 <a href="http://faif.us/cast/2015/nov/24/0x57/">episode
7668 0x57</a></small></p>
7669
7670 <p>As the Debian Website
7671 <a href="https://bugs.debian.org/794116">used</a>
7672 <a href="https://anonscm.debian.org/viewvc/webwml/webwml/english/intro/free.wml?r1=1.24&amp;r2=1.25">to</a>
7673 imply, public domain and permissively licensed software can lead to
7674 the production of more proprietary software as people discover useful
7675 software, extend it and or incorporate it into their hardware or
7676 software products. Copyleft licenses such as the GNU GPL were created
7677 to close off this avenue to the production of proprietary software but
7678 such licenses are not enough. With the ongoing adoption of Free
7679 Software by individuals and groups, inevitably the community's
7680 expectations of license compliance are violated, usually out of
7681 ignorance of the way Free Software works, but not always. As Karen
7682 and Bradley explained in <a href="http://faif.us/" title="Free as in
7683 Freedom">FaiF</a>
7684 <a href="http://faif.us/cast/2015/nov/24/0x57/">episode 0x57</a>,
7685 copyleft is nothing if no-one is willing and able to stand up in court
7686 to protect it. The reality of today's world is that legal
7687 representation is expensive, difficult and time consuming. With
7688 <a href="http://gpl-violations.org/">gpl-violations.org</a> in hiatus
7689 <a href="http://gpl-violations.org/news/20151027-homepage-recovers/">until</a>
7690 some time in 2016, the <a href="https://sfconservancy.org/">Software
7691 Freedom Conservancy</a> (a tax-exempt charity) is the major defender
7692 of the Linux project, Debian and other groups against GPL violations.
7693 In March the SFC supported a
7694 <a href="https://sfconservancy.org/news/2015/mar/05/vmware-lawsuit/">lawsuit
7695 by Christoph Hellwig</a> against VMware for refusing to
7696 <a href="https://sfconservancy.org/linux-compliance/vmware-lawsuit-faq.html">comply
7697 with the GPL</a> in relation to their use of parts of the Linux
7698 kernel. Since then two of their sponsors pulled corporate funding and
7699 conferences
7700 <a href="https://sfconservancy.org/blog/2015/nov/24/faif-carols-fundraiser/">blocked
7701 or cancelled their talks</a>. As a result they have decided to rely
7702 less on corporate funding and more on the broad community of
7703 individuals who support Free Software and copyleft. So the SFC has
7704 <a href="https://sfconservancy.org/news/2015/nov/23/2015fundraiser/">launched</a>
7705 a <a href="https://sfconservancy.org/supporter/">campaign</a> to create
7706 a community of folks who stand up for copyleft and the GPL by
7707 supporting their work on promoting and supporting copyleft and Free
7708 Software.</p>
7709
7710 <p>If you support Free Software,
7711 <a href="https://sfconservancy.org/blog/2015/nov/26/like-what-I-do/">like</a>
7712 what the SFC do, agree with their
7713 <a href="https://sfconservancy.org/linux-compliance/principles.html">compliance
7714 principles</a>, are happy about their
7715 <a href="https://sfconservancy.org/supporter/">successes</a> in 2015,
7716 work on a project that is an SFC
7717 <a href="https://sfconservancy.org/members/current/">member</a> and or
7718 just want to stand up for copyleft, please join
7719 <a href="https://identi.ca/cwebber/image/JQGPA4qbTyyp3-MY8QpvuA">Christopher
7720 Allan Webber</a>,
7721 <a href="https://sfconservancy.org/blog/2015/nov/24/faif-carols-fundraiser/">Carol
7722 Smith</a>,
7723 <a href="http://www.jonobacon.org/2015/11/25/supporting-software-freedom-conservancy/">Jono
7724 Bacon</a>, myself and
7725 <a href="https://sfconservancy.org/sponsors/#supporters">others</a> in
7726 becoming a
7727 <a href="https://sfconservancy.org/supporter/">supporter</a>. For the
7728 next week your donation will be
7729 <a href="https://sfconservancy.org/news/2015/nov/27/black-friday/">matched</a>
7730 by an anonymous donor. Please also consider asking your employer to
7731 match your donation or become a sponsor of SFC. Don't forget to
7732 spread the word about your support for SFC via email, your blog and or
7733 social media accounts.</p>
7734
7735 </blockquote>
7736
7737 <p>I agree with Paul on this topic and just signed up as a Supporter
7738 of Software Freedom Conservancy myself. Perhaps you should be a
7739 supporter too?</p>
7740
7741 </div>
7742 <div class="tags">
7743
7744
7745 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/opphavsrett">opphavsrett</a>.
7746
7747
7748 </div>
7749 </div>
7750 <div class="padding"></div>
7751
7752 <div class="entry">
7753 <div class="title">
7754 <a href="http://www.hungry.com/~pere/blog/PGP_key_transition_statement_for_key_EE4E02F9.html">PGP key transition statement for key EE4E02F9</a>
7755 </div>
7756 <div class="date">
7757 17th November 2015
7758 </div>
7759 <div class="body">
7760 <p>I've needed a new OpenPGP key for a while, but have not had time to
7761 set it up properly. I wanted to generate it offline and have it
7762 available on <a href="http://shop.kernelconcepts.de/#openpgp">a OpenPGP
7763 smart card</a> for daily use, and learning how to do it and finding
7764 time to sit down with an offline machine almost took forever. But
7765 finally I've been able to complete the process, and have now moved
7766 from my old GPG key to a new GPG key. See
7767 <a href="http://www.hungry.com/~pere/blog/images/2015-11-17-new-gpg-key-transition.txt">the
7768 full transition statement, signed with both my old and new key</a> for
7769 the details. This is my new key:</p>
7770
7771 <pre>
7772 pub 3936R/<a href="http://pgp.cs.uu.nl/stats/111D6B29EE4E02F9.html">111D6B29EE4E02F9</a> 2015-11-03 [expires: 2019-11-14]
7773 Key fingerprint = 3AC7 B2E3 ACA5 DF87 78F1 D827 111D 6B29 EE4E 02F9
7774 uid Petter Reinholdtsen &lt;pere@hungry.com&gt;
7775 uid Petter Reinholdtsen &lt;pere@debian.org&gt;
7776 sub 4096R/87BAFB0E 2015-11-03 [expires: 2019-11-02]
7777 sub 4096R/F91E6DE9 2015-11-03 [expires: 2019-11-02]
7778 sub 4096R/A0439BAB 2015-11-03 [expires: 2019-11-02]
7779 </pre>
7780
7781 <p>The key can be downloaded from the OpenPGP key servers, signed by
7782 my old key.</p>
7783
7784 <p>If you signed my old key
7785 (<a href="http://pgp.cs.uu.nl/stats/DB4CCC4B2A30D729.html">DB4CCC4B2A30D729</a>),
7786 I'd very much appreciate a signature on my new key, details and
7787 instructions in the transition statement. I m happy to reciprocate if
7788 you have a similarly signed transition statement to present.</p>
7789
7790 </div>
7791 <div class="tags">
7792
7793
7794 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/sikkerhet">sikkerhet</a>.
7795
7796
7797 </div>
7798 </div>
7799 <div class="padding"></div>
7800
7801 <div class="entry">
7802 <div class="title">
7803 <a href="http://www.hungry.com/~pere/blog/The_life_and_death_of_a_laptop_battery.html">The life and death of a laptop battery</a>
7804 </div>
7805 <div class="date">
7806 24th September 2015
7807 </div>
7808 <div class="body">
7809 <p>When I get a new laptop, the battery life time at the start is OK.
7810 But this do not last. The last few laptops gave me a feeling that
7811 within a year, the life time is just a fraction of what it used to be,
7812 and it slowly become painful to use the laptop without power connected
7813 all the time. Because of this, when I got a new Thinkpad X230 laptop
7814 about two years ago, I decided to monitor its battery state to have
7815 more hard facts when the battery started to fail.</p>
7816
7817 <img src="http://www.hungry.com/~pere/blog/images/2015-09-24-laptop-battery-graph.png"/>
7818
7819 <p>First I tried to find a sensible Debian package to record the
7820 battery status, assuming that this must be a problem already handled
7821 by someone else. I found
7822 <a href="https://tracker.debian.org/pkg/battery-stats">battery-stats</a>,
7823 which collects statistics from the battery, but it was completely
7824 broken. I sent a few suggestions to the maintainer, but decided to
7825 write my own collector as a shell script while I waited for feedback
7826 from him. Via
7827 <a href="http://www.ifweassume.com/2013/08/the-de-evolution-of-my-laptop-battery.html">a
7828 blog post about the battery development on a MacBook Air</a> I also
7829 discovered
7830 <a href="https://github.com/jradavenport/batlog.git">batlog</a>, not
7831 available in Debian.</p>
7832
7833 <p>I started my collector 2013-07-15, and it has been collecting
7834 battery stats ever since. Now my
7835 /var/log/hjemmenett-battery-status.log file contain around 115,000
7836 measurements, from the time the battery was working great until now,
7837 when it is unable to charge above 7% of original capacity. My
7838 collector shell script is quite simple and look like this:</p>
7839
7840 <pre>
7841 #!/bin/sh
7842 # Inspired by
7843 # http://www.ifweassume.com/2013/08/the-de-evolution-of-my-laptop-battery.html
7844 # See also
7845 # http://blog.sleeplessbeastie.eu/2013/01/02/debian-how-to-monitor-battery-capacity/
7846 logfile=/var/log/hjemmenett-battery-status.log
7847
7848 files="manufacturer model_name technology serial_number \
7849 energy_full energy_full_design energy_now cycle_count status"
7850
7851 if [ ! -e "$logfile" ] ; then
7852 (
7853 printf "timestamp,"
7854 for f in $files; do
7855 printf "%s," $f
7856 done
7857 echo
7858 ) > "$logfile"
7859 fi
7860
7861 log_battery() {
7862 # Print complete message in one echo call, to avoid race condition
7863 # when several log processes run in parallel.
7864 msg=$(printf "%s," $(date +%s); \
7865 for f in $files; do \
7866 printf "%s," $(cat $f); \
7867 done)
7868 echo "$msg"
7869 }
7870
7871 cd /sys/class/power_supply
7872
7873 for bat in BAT*; do
7874 (cd $bat && log_battery >> "$logfile")
7875 done
7876 </pre>
7877
7878 <p>The script is called when the power management system detect a
7879 change in the power status (power plug in or out), and when going into
7880 and out of hibernation and suspend. In addition, it collect a value
7881 every 10 minutes. This make it possible for me know when the battery
7882 is discharging, charging and how the maximum charge change over time.
7883 The code for the Debian package
7884 <a href="https://github.com/petterreinholdtsen/battery-status">is now
7885 available on github</a>.</p>
7886
7887 <p>The collected log file look like this:</p>
7888
7889 <pre>
7890 timestamp,manufacturer,model_name,technology,serial_number,energy_full,energy_full_design,energy_now,cycle_count,status,
7891 1376591133,LGC,45N1025,Li-ion,974,62800000,62160000,39050000,0,Discharging,
7892 [...]
7893 1443090528,LGC,45N1025,Li-ion,974,4900000,62160000,4900000,0,Full,
7894 1443090601,LGC,45N1025,Li-ion,974,4900000,62160000,4900000,0,Full,
7895 </pre>
7896
7897 <p>I wrote a small script to create a graph of the charge development
7898 over time. This graph depicted above show the slow death of my laptop
7899 battery.</p>
7900
7901 <p>But why is this happening? Why are my laptop batteries always
7902 dying in a year or two, while the batteries of space probes and
7903 satellites keep working year after year. If we are to believe
7904 <a href="http://batteryuniversity.com/learn/article/how_to_prolong_lithium_based_batteries">Battery
7905 University</a>, the cause is me charging the battery whenever I have a
7906 chance, and the fix is to not charge the Lithium-ion batteries to 100%
7907 all the time, but to stay below 90% of full charge most of the time.
7908 I've been told that the Tesla electric cars
7909 <a href="http://my.teslamotors.com/de_CH/forum/forums/battery-charge-limit">limit
7910 the charge of their batteries to 80%</a>, with the option to charge to
7911 100% when preparing for a longer trip (not that I would want a car
7912 like Tesla where rights to privacy is abandoned, but that is another
7913 story), which I guess is the option we should have for laptops on
7914 Linux too.</p>
7915
7916 <p>Is there a good and generic way with Linux to tell the battery to
7917 stop charging at 80%, unless requested to charge to 100% once in
7918 preparation for a longer trip? I found
7919 <a href="http://askubuntu.com/questions/34452/how-can-i-limit-battery-charging-to-80-capacity">one
7920 recipe on askubuntu for Ubuntu to limit charging on Thinkpad to
7921 80%</a>, but could not get it to work (kernel module refused to
7922 load).</p>
7923
7924 <p>I wonder why the battery capacity was reported to be more than 100%
7925 at the start. I also wonder why the "full capacity" increases some
7926 times, and if it is possible to repeat the process to get the battery
7927 back to design capacity. And I wonder if the discharge and charge
7928 speed change over time, or if this stay the same. I did not yet try
7929 to write a tool to calculate the derivative values of the battery
7930 level, but suspect some interesting insights might be learned from
7931 those.</p>
7932
7933 <p>Update 2015-09-24: I got a tip to install the packages
7934 acpi-call-dkms and tlp (unfortunately missing in Debian stable)
7935 packages instead of the tp-smapi-dkms package I had tried to use
7936 initially, and use 'tlp setcharge 40 80' to change when charging start
7937 and stop. I've done so now, but expect my existing battery is toast
7938 and need to be replaced. The proposal is unfortunately Thinkpad
7939 specific.</p>
7940
7941 </div>
7942 <div class="tags">
7943
7944
7945 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
7946
7947
7948 </div>
7949 </div>
7950 <div class="padding"></div>
7951
7952 <div class="entry">
7953 <div class="title">
7954 <a href="http://www.hungry.com/~pere/blog/New_laptop___some_more_clues_and_ideas_based_on_feedback.html">New laptop - some more clues and ideas based on feedback</a>
7955 </div>
7956 <div class="date">
7957 5th July 2015
7958 </div>
7959 <div class="body">
7960 <p>Several people contacted me after my previous blog post about my
7961 need for a new laptop, and provided very useful feedback. I wish to
7962 thank every one of these. Several pointed me to the possibility of
7963 fixing my X230, and I am already in the process of getting Lenovo to
7964 do so thanks to the on site, next day support contract covering the
7965 machine. But the battery is almost useless (I expect to replace it
7966 with a non-official battery) and I do not expect the machine to live
7967 for many more years, so it is time to plan its replacement. If I did
7968 not have a support contract, it was suggested to find replacement parts
7969 using <a href="http://www.francecrans.com/">FrancEcrans</a>, but it
7970 might present a language barrier as I do not understand French.</p>
7971
7972 <p>One tip I got was to use the
7973 <a href="https://skinflint.co.uk/?cat=nb">Skinflint</a> web service to
7974 compare laptop models. It seem to have more models available than
7975 prisjakt.no. Another tip I got from someone I know have similar
7976 keyboard preferences was that the HP EliteBook 840 keyboard is not
7977 very good, and this matches my experience with earlier EliteBook
7978 keyboards I tested. Because of this, I will not consider it any further.
7979
7980 <p>When I wrote my blog post, I was not aware of Thinkpad X250, the
7981 newest Thinkpad X model. The keyboard reintroduces mouse buttons
7982 (which is missing from the X240), and is working fairly well with
7983 Debian Sid/Unstable according to
7984 <a href="http://www.corsac.net/X250/">Corsac.net</a>. The reports I
7985 got on the keyboard quality are not consistent. Some say the keyboard
7986 is good, others say it is ok, while others say it is not very good.
7987 Those with experience from X41 and and X60 agree that the X250
7988 keyboard is not as good as those trusty old laptops, and suggest I
7989 keep and fix my X230 instead of upgrading, or get a used X230 to
7990 replace it. I'm also told that the X250 lack leds for caps lock, disk
7991 activity and battery status, which is very convenient on my X230. I'm
7992 also told that the CPU fan is running very often, making it a bit
7993 noisy. In any case, the X250 do not work out of the box with Debian
7994 Stable/Jessie, one of my requirements.</p>
7995
7996 <p>I have also gotten a few vendor proposals, one was
7997 <a href="http://pro-star.com">Pro-Star</a>, another was
7998 <a href="http://shop.gluglug.org.uk/product/libreboot-x200/">Libreboot</a>.
7999 The latter look very attractive to me.</p>
8000
8001 <p>Again, thank you all for the very useful feedback. It help a lot
8002 as I keep looking for a replacement.</p>
8003
8004 <p>Update 2015-07-06: I was recommended to check out the
8005 <a href="">lapstore.de</a> web shop for used laptops. They got several
8006 different
8007 <a href="http://www.lapstore.de/f.php/shop/lapstore/f/411/lang/x/kw/Lenovo_ThinkPad_X_Serie/">old
8008 thinkpad X models</a>, and provide one year warranty.</p>
8009
8010 </div>
8011 <div class="tags">
8012
8013
8014 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
8015
8016
8017 </div>
8018 </div>
8019 <div class="padding"></div>
8020
8021 <div class="entry">
8022 <div class="title">
8023 <a href="http://www.hungry.com/~pere/blog/Time_to_find_a_new_laptop__as_the_old_one_is_broken_after_only_two_years.html">Time to find a new laptop, as the old one is broken after only two years</a>
8024 </div>
8025 <div class="date">
8026 3rd July 2015
8027 </div>
8028 <div class="body">
8029 <p>My primary work horse laptop is failing, and will need a
8030 replacement soon. The left 5 cm of the screen on my Thinkpad X230
8031 started flickering yesterday, and I suspect the cause is a broken
8032 cable, as changing the angle of the screen some times get rid of the
8033 flickering.</p>
8034
8035 <p>My requirements have not really changed since I bought it, and is
8036 still as
8037 <a href="http://www.hungry.com/~pere/blog/Thank_you_Thinkpad_X41__for_your_long_and_trustworthy_service.html">I
8038 described them in 2013</a>. The last time I bought a laptop, I had
8039 good help from
8040 <a href="http://www.prisjakt.no/category.php?k=353">prisjakt.no</a>
8041 where I could select at least a few of the requirements (mouse pin,
8042 wifi, weight) and go through the rest manually. Three button mouse
8043 and a good keyboard is not available as an option, and all the three
8044 laptop models proposed today (Thinkpad X240, HP EliteBook 820 G1 and
8045 G2) lack three mouse buttons). It is also unclear to me how good the
8046 keyboard on the HP EliteBooks are. I hope Lenovo have not messed up
8047 the keyboard, even if the quality and robustness in the X series have
8048 deteriorated since X41.</p>
8049
8050 <p>I wonder how I can find a sensible laptop when none of the options
8051 seem sensible to me? Are there better services around to search the
8052 set of available laptops for features? Please send me an email if you
8053 have suggestions.</p>
8054
8055 <p>Update 2015-07-23: I got a suggestion to check out the FSF
8056 <a href="http://www.fsf.org/resources/hw/endorsement/respects-your-freedom">list
8057 of endorsed hardware</a>, which is useful background information.</p>
8058
8059 </div>
8060 <div class="tags">
8061
8062
8063 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
8064
8065
8066 </div>
8067 </div>
8068 <div class="padding"></div>
8069
8070 <div class="entry">
8071 <div class="title">
8072 <a href="http://www.hungry.com/~pere/blog/How_to_stay_with_sysvinit_in_Debian_Jessie.html">How to stay with sysvinit in Debian Jessie</a>
8073 </div>
8074 <div class="date">
8075 22nd November 2014
8076 </div>
8077 <div class="body">
8078 <p>By now, it is well known that Debian Jessie will not be using
8079 sysvinit as its boot system by default. But how can one keep using
8080 sysvinit in Jessie? It is fairly easy, and here are a few recipes,
8081 courtesy of
8082 <a href="http://www.vitavonni.de/blog/201410/2014102101-avoiding-systemd.html">Erich
8083 Schubert</a> and
8084 <a href="http://smcv.pseudorandom.co.uk/2014/still_universal/">Simon
8085 McVittie</a>.
8086
8087 <p>If you already are using Wheezy and want to upgrade to Jessie and
8088 keep sysvinit as your boot system, create a file
8089 <tt>/etc/apt/preferences.d/use-sysvinit</tt> with this content before
8090 you upgrade:</p>
8091
8092 <p><blockquote><pre>
8093 Package: systemd-sysv
8094 Pin: release o=Debian
8095 Pin-Priority: -1
8096 </pre></blockquote><p>
8097
8098 <p>This file content will tell apt and aptitude to not consider
8099 installing systemd-sysv as part of any installation and upgrade
8100 solution when resolving dependencies, and thus tell it to avoid
8101 systemd as a default boot system. The end result should be that the
8102 upgraded system keep using sysvinit.</p>
8103
8104 <p>If you are installing Jessie for the first time, there is no way to
8105 get sysvinit installed by default (debootstrap used by
8106 debian-installer have no option for this), but one can tell the
8107 installer to switch to sysvinit before the first boot. Either by
8108 using a kernel argument to the installer, or by adding a line to the
8109 preseed file used. First, the kernel command line argument:
8110
8111 <p><blockquote><pre>
8112 preseed/late_command="in-target apt-get install --purge -y sysvinit-core"
8113 </pre></blockquote><p>
8114
8115 <p>Next, the line to use in a preseed file:</p>
8116
8117 <p><blockquote><pre>
8118 d-i preseed/late_command string in-target apt-get install -y sysvinit-core
8119 </pre></blockquote><p>
8120
8121 <p>One can of course also do this after the first boot by installing
8122 the sysvinit-core package.</p>
8123
8124 <p>I recommend only using sysvinit if you really need it, as the
8125 sysvinit boot sequence in Debian have several hardware specific bugs
8126 on Linux caused by the fact that it is unpredictable when hardware
8127 devices show up during boot. But on the other hand, the new default
8128 boot system still have a few rough edges I hope will be fixed before
8129 Jessie is released.</p>
8130
8131 <p>Update 2014-11-26: Inspired by
8132 <ahref="https://www.mirbsd.org/permalinks/wlog-10-tg_e20141125-tg.htm#e20141125-tg_wlog-10-tg">a
8133 blog post by Torsten Glaser</a>, added --purge to the preseed
8134 line.</p>
8135
8136 </div>
8137 <div class="tags">
8138
8139
8140 Tags: <a href="http://www.hungry.com/~pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
8141
8142
8143 </div>
8144 </div>
8145 <div class="padding"></div>
8146
8147 <div class="entry">
8148 <div class="title">
8149 <a href="http://www.hungry.com/~pere/blog/A_Debian_package_for_SMTP_via_Tor__aka_SMTorP__using_exim4.html">A Debian package for SMTP via Tor (aka SMTorP) using exim4</a>
8150 </div>
8151 <div class="date">
8152 10th November 2014
8153 </div>
8154 <div class="body">
8155 <p>The right to communicate with your friends and family in private,
8156 without anyone snooping, is a right every citicen have in a liberal
8157 democracy. But this right is under serious attack these days.</p>
8158
8159 <p>A while back it occurred to me that one way to make the dragnet
8160 surveillance conducted by NSA, GCHQ, FRA and others (and confirmed by
8161 the whisleblower Snowden) more expensive for Internet email,
8162 is to deliver all email using SMTP via Tor. Such SMTP option would be
8163 a nice addition to the FreedomBox project if we could send email
8164 between FreedomBox machines without leaking metadata about the emails
8165 to the people peeking on the wire. I
8166 <a href="http://lists.alioth.debian.org/pipermail/freedombox-discuss/2014-October/006493.html">proposed
8167 this on the FreedomBox project mailing list in October</a> and got a
8168 lot of useful feedback and suggestions. It also became obvious to me
8169 that this was not a novel idea, as the same idea was tested and
8170 documented by Johannes Berg as early as 2006, and both
8171 <a href="https://github.com/pagekite/Mailpile/wiki/SMTorP">the
8172 Mailpile</a> and <a href="http://dee.su/cables">the Cables</a> systems
8173 propose a similar method / protocol to pass emails between users.</p>
8174
8175 <p>To implement such system one need to set up a Tor hidden service
8176 providing the SMTP protocol on port 25, and use email addresses
8177 looking like username@hidden-service-name.onion. With such addresses
8178 the connections to port 25 on hidden-service-name.onion using Tor will
8179 go to the correct SMTP server. To do this, one need to configure the
8180 Tor daemon to provide the hidden service and the mail server to accept
8181 emails for this .onion domain. To learn more about Exim configuration
8182 in Debian and test the design provided by Johannes Berg in his FAQ, I
8183 set out yesterday to create a Debian package for making it trivial to
8184 set up such SMTP over Tor service based on Debian. Getting it to work
8185 were fairly easy, and
8186 <a href="https://github.com/petterreinholdtsen/exim4-smtorp">the
8187 source code for the Debian package</a> is available from github. I
8188 plan to move it into Debian if further testing prove this to be a
8189 useful approach.</p>
8190
8191 <p>If you want to test this, set up a blank Debian machine without any
8192 mail system installed (or run <tt>apt-get purge exim4-config</tt> to
8193 get rid of exim4). Install tor, clone the git repository mentioned
8194 above, build the deb and install it on the machine. Next, run
8195 <tt>/usr/lib/exim4-smtorp/setup-exim-hidden-service</tt> and follow
8196 the instructions to get the service up and running. Restart tor and
8197 exim when it is done, and test mail delivery using swaks like
8198 this:</p>
8199
8200 <p><blockquote><pre>
8201 torsocks swaks --server dutlqrrmjhtfa3vp.onion \
8202 --to fbx@dutlqrrmjhtfa3vp.onion
8203 </pre></blockquote></p>
8204
8205 <p>This will test the SMTP delivery using tor. Replace the email
8206 address with your own address to test your server. :)</p>
8207
8208 <p>The setup procedure is still to complex, and I hope it can be made
8209 easier and more automatic. Especially the tor setup need more work.
8210 Also, the package include a tor-smtp tool written in C, but its task
8211 should probably be rewritten in some script language to make the deb
8212 architecture independent. It would probably also make the code easier
8213 to review. The tor-smtp tool currently need to listen on a socket for
8214 exim to talk to it and is started using xinetd. It would be better if
8215 no daemon and no socket is needed. I suspect it is possible to get
8216 exim to run a command line tool for delivery instead of talking to a
8217 socket, and hope to figure out how in a future version of this
8218 system.</p>
8219
8220 <p>Until I wipe my test machine, I can be reached using the
8221 <tt>fbx@dutlqrrmjhtfa3vp.onion</tt> mail address, deliverable over
8222 SMTorP. :)</p>
8223
8224 </div>
8225 <div class="tags">
8226
8227
8228 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/freedombox">freedombox</a>, <a href="http://www.hungry.com/~pere/blog/tags/personvern">personvern</a>, <a href="http://www.hungry.com/~pere/blog/tags/surveillance">surveillance</a>.
8229
8230
8231 </div>
8232 </div>
8233 <div class="padding"></div>
8234
8235 <div class="entry">
8236 <div class="title">
8237 <a href="http://www.hungry.com/~pere/blog/listadmin__the_quick_way_to_moderate_mailman_lists___nice_free_software.html">listadmin, the quick way to moderate mailman lists - nice free software</a>
8238 </div>
8239 <div class="date">
8240 22nd October 2014
8241 </div>
8242 <div class="body">
8243 <p>If you ever had to moderate a mailman list, like the ones on
8244 alioth.debian.org, you know the web interface is fairly slow to
8245 operate. First you visit one web page, enter the moderation password
8246 and get a new page shown with a list of all the messages to moderate
8247 and various options for each email address. This take a while for
8248 every list you moderate, and you need to do it regularly to do a good
8249 job as a list moderator. But there is a quick alternative,
8250 <a href="http://heim.ifi.uio.no/kjetilho/hacks/#listadmin">the
8251 listadmin program</a>. It allow you to check lists for new messages
8252 to moderate in a fraction of a second. Here is a test run on two
8253 lists I recently took over:</p>
8254
8255 <p><blockquote><pre>
8256 % time listadmin xiph
8257 fetching data for pkg-xiph-commits@lists.alioth.debian.org ... nothing in queue
8258 fetching data for pkg-xiph-maint@lists.alioth.debian.org ... nothing in queue
8259
8260 real 0m1.709s
8261 user 0m0.232s
8262 sys 0m0.012s
8263 %
8264 </pre></blockquote></p>
8265
8266 <p>In 1.7 seconds I had checked two mailing lists and confirmed that
8267 there are no message in the moderation queue. Every morning I
8268 currently moderate 68 mailman lists, and it normally take around two
8269 minutes. When I took over the two pkg-xiph lists above a few days
8270 ago, there were 400 emails waiting in the moderator queue. It took me
8271 less than 15 minutes to process them all using the listadmin
8272 program.</p>
8273
8274 <p>If you install
8275 <a href="https://tracker.debian.org/pkg/listadmin">the listadmin
8276 package</a> from Debian and create a file <tt>~/.listadmin.ini</tt>
8277 with content like this, the moderation task is a breeze:</p>
8278
8279 <p><blockquote><pre>
8280 username username@example.org
8281 spamlevel 23
8282 default discard
8283 discard_if_reason "Posting restricted to members only. Remove us from your mail list."
8284
8285 password secret
8286 adminurl https://{domain}/mailman/admindb/{list}
8287 mailman-list@lists.example.com
8288
8289 password hidden
8290 other-list@otherserver.example.org
8291 </pre></blockquote></p>
8292
8293 <p>There are other options to set as well. Check the manual page to
8294 learn the details.</p>
8295
8296 <p>If you are forced to moderate lists on a mailman installation where
8297 the SSL certificate is self signed or not properly signed by a
8298 generally accepted signing authority, you can set a environment
8299 variable when calling listadmin to disable SSL verification:</p>
8300
8301 <p><blockquote><pre>
8302 PERL_LWP_SSL_VERIFY_HOSTNAME=0 listadmin
8303 </pre></blockquote></p>
8304
8305 <p>If you want to moderate a subset of the lists you take care of, you
8306 can provide an argument to the listadmin script like I do in the
8307 initial screen dump (the xiph argument). Using an argument, only
8308 lists matching the argument string will be processed. This make it
8309 quick to accept messages if you notice the moderation request in your
8310 email.</p>
8311
8312 <p>Without the listadmin program, I would never be the moderator of 68
8313 mailing lists, as I simply do not have time to spend on that if the
8314 process was any slower. The listadmin program have saved me hours of
8315 time I could spend elsewhere over the years. It truly is nice free
8316 software.</p>
8317
8318 <p>As usual, if you use Bitcoin and want to show your support of my
8319 activities, please send Bitcoin donations to my address
8320 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
8321
8322 <p>Update 2014-10-27: Added missing 'username' statement in
8323 configuration example. Also, I've been told that the
8324 PERL_LWP_SSL_VERIFY_HOSTNAME=0 setting do not work for everyone. Not
8325 sure why.</p>
8326
8327 </div>
8328 <div class="tags">
8329
8330
8331 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nice free software">nice free software</a>.
8332
8333
8334 </div>
8335 </div>
8336 <div class="padding"></div>
8337
8338 <div class="entry">
8339 <div class="title">
8340 <a href="http://www.hungry.com/~pere/blog/Debian_Jessie__PXE_and_automatic_firmware_installation.html">Debian Jessie, PXE and automatic firmware installation</a>
8341 </div>
8342 <div class="date">
8343 17th October 2014
8344 </div>
8345 <div class="body">
8346 <p>When PXE installing laptops with Debian, I often run into the
8347 problem that the WiFi card require some firmware to work properly.
8348 And it has been a pain to fix this using preseeding in Debian.
8349 Normally something more is needed. But thanks to
8350 <a href="https://packages.qa.debian.org/i/isenkram.html">my isenkram
8351 package</a> and its recent tasksel extension, it has now become easy
8352 to do this using simple preseeding.</p>
8353
8354 <p>The isenkram-cli package provide tasksel tasks which will install
8355 firmware for the hardware found in the machine (actually, requested by
8356 the kernel modules for the hardware). (It can also install user space
8357 programs supporting the hardware detected, but that is not the focus
8358 of this story.)</p>
8359
8360 <p>To get this working in the default installation, two preeseding
8361 values are needed. First, the isenkram-cli package must be installed
8362 into the target chroot (aka the hard drive) before tasksel is executed
8363 in the pkgsel step of the debian-installer system. This is done by
8364 preseeding the base-installer/includes debconf value to include the
8365 isenkram-cli package. The package name is next passed to debootstrap
8366 for installation. With the isenkram-cli package in place, tasksel
8367 will automatically use the isenkram tasks to detect hardware specific
8368 packages for the machine being installed and install them, because
8369 isenkram-cli contain tasksel tasks.</p>
8370
8371 <p>Second, one need to enable the non-free APT repository, because
8372 most firmware unfortunately is non-free. This is done by preseeding
8373 the apt-mirror-setup step. This is unfortunate, but for a lot of
8374 hardware it is the only option in Debian.</p>
8375
8376 <p>The end result is two lines needed in your preseeding file to get
8377 firmware installed automatically by the installer:</p>
8378
8379 <p><blockquote><pre>
8380 base-installer base-installer/includes string isenkram-cli
8381 apt-mirror-setup apt-setup/non-free boolean true
8382 </pre></blockquote></p>
8383
8384 <p>The current version of isenkram-cli in testing/jessie will install
8385 both firmware and user space packages when using this method. It also
8386 do not work well, so use version 0.15 or later. Installing both
8387 firmware and user space packages might give you a bit more than you
8388 want, so I decided to split the tasksel task in two, one for firmware
8389 and one for user space programs. The firmware task is enabled by
8390 default, while the one for user space programs is not. This split is
8391 implemented in the package currently in unstable.</p>
8392
8393 <p>If you decide to give this a go, please let me know (via email) how
8394 this recipe work for you. :)</p>
8395
8396 <p>So, I bet you are wondering, how can this work. First and
8397 foremost, it work because tasksel is modular, and driven by whatever
8398 files it find in /usr/lib/tasksel/ and /usr/share/tasksel/. So the
8399 isenkram-cli package place two files for tasksel to find. First there
8400 is the task description file (/usr/share/tasksel/descs/isenkram.desc):</p>
8401
8402 <p><blockquote><pre>
8403 Task: isenkram-packages
8404 Section: hardware
8405 Description: Hardware specific packages (autodetected by isenkram)
8406 Based on the detected hardware various hardware specific packages are
8407 proposed.
8408 Test-new-install: show show
8409 Relevance: 8
8410 Packages: for-current-hardware
8411
8412 Task: isenkram-firmware
8413 Section: hardware
8414 Description: Hardware specific firmware packages (autodetected by isenkram)
8415 Based on the detected hardware various hardware specific firmware
8416 packages are proposed.
8417 Test-new-install: mark show
8418 Relevance: 8
8419 Packages: for-current-hardware-firmware
8420 </pre></blockquote></p>
8421
8422 <p>The key parts are Test-new-install which indicate how the task
8423 should be handled and the Packages line referencing to a script in
8424 /usr/lib/tasksel/packages/. The scripts use other scripts to get a
8425 list of packages to install. The for-current-hardware-firmware script
8426 look like this to list relevant firmware for the machine:
8427
8428 <p><blockquote><pre>
8429 #!/bin/sh
8430 #
8431 PATH=/usr/sbin:$PATH
8432 export PATH
8433 isenkram-autoinstall-firmware -l
8434 </pre></blockquote></p>
8435
8436 <p>With those two pieces in place, the firmware is installed by
8437 tasksel during the normal d-i run. :)</p>
8438
8439 <p>If you want to test what tasksel will install when isenkram-cli is
8440 installed, run <tt>DEBIAN_PRIORITY=critical tasksel --test
8441 --new-install</tt> to get the list of packages that tasksel would
8442 install.</p>
8443
8444 <p><a href="https://wiki.debian.org/DebianEdu/">Debian Edu</a> will be
8445 pilots in testing this feature, as isenkram is used there now to
8446 install firmware, replacing the earlier scripts.</p>
8447
8448 </div>
8449 <div class="tags">
8450
8451
8452 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/isenkram">isenkram</a>, <a href="http://www.hungry.com/~pere/blog/tags/sysadmin">sysadmin</a>.
8453
8454
8455 </div>
8456 </div>
8457 <div class="padding"></div>
8458
8459 <div class="entry">
8460 <div class="title">
8461 <a href="http://www.hungry.com/~pere/blog/Ubuntu_used_to_show_the_bread_prizes_at_ICA_Storo.html">Ubuntu used to show the bread prizes at ICA Storo</a>
8462 </div>
8463 <div class="date">
8464 4th October 2014
8465 </div>
8466 <div class="body">
8467 <p>Today I came across an unexpected Ubuntu boot screen. Above the
8468 bread shelf on the ICA shop at Storo in Oslo, the grub menu of Ubuntu
8469 with Linux kernel 3.2.0-23 (ie probably version 12.04 LTS) was stuck
8470 on a screen normally showing the bread types and prizes:</p>
8471
8472 <p align="center"><img width="70%" src="http://www.hungry.com/~pere/blog/images/2014-10-04-ubuntu-ica-storo-crop.jpeg"></p>
8473
8474 <p>If it had booted as it was supposed to, I would never had known
8475 about this hidden Linux installation. It is interesting what
8476 <a href="http://revealingerrors.com/">errors can reveal</a>.</p>
8477
8478 </div>
8479 <div class="tags">
8480
8481
8482 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
8483
8484
8485 </div>
8486 </div>
8487 <div class="padding"></div>
8488
8489 <div class="entry">
8490 <div class="title">
8491 <a href="http://www.hungry.com/~pere/blog/New_lsdvd_release_version_0_17_is_ready.html">New lsdvd release version 0.17 is ready</a>
8492 </div>
8493 <div class="date">
8494 4th October 2014
8495 </div>
8496 <div class="body">
8497 <p>The <a href="https://sourceforge.net/p/lsdvd/">lsdvd project</a>
8498 got a new set of developers a few weeks ago, after the original
8499 developer decided to step down and pass the project to fresh blood.
8500 This project is now maintained by Petter Reinholdtsen and Steve
8501 Dibb.</p>
8502
8503 <p>I just wrapped up
8504 <a href="https://sourceforge.net/p/lsdvd/mailman/message/32896061/">a
8505 new lsdvd release</a>, available in git or from
8506 <a href="https://sourceforge.net/projects/lsdvd/files/lsdvd/">the
8507 download page</a>. This is the changelog dated 2014-10-03 for version
8508 0.17.</p>
8509
8510 <ul>
8511
8512 <li>Ignore 'phantom' audio, subtitle tracks</li>
8513 <li>Check for garbage in the program chains, which indicate that a track is
8514 non-existant, to work around additional copy protection</li>
8515 <li>Fix displaying content type for audio tracks, subtitles</li>
8516 <li>Fix pallete display of first entry</li>
8517 <li>Fix include orders</li>
8518 <li>Ignore read errors in titles that would not be displayed anyway</li>
8519 <li>Fix the chapter count</li>
8520 <li>Make sure the array size and the array limit used when initialising
8521 the palette size is the same.</li>
8522 <li>Fix array printing.</li>
8523 <li>Correct subsecond calculations.</li>
8524 <li>Add sector information to the output format.</li>
8525 <li>Clean up code to be closer to ANSI C and compile without warnings
8526 with more GCC compiler warnings.</li>
8527
8528 </ul>
8529
8530 <p>This change bring together patches for lsdvd in use in various
8531 Linux and Unix distributions, as well as patches submitted to the
8532 project the last nine years. Please check it out. :)</p>
8533
8534 </div>
8535 <div class="tags">
8536
8537
8538 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/lsdvd">lsdvd</a>, <a href="http://www.hungry.com/~pere/blog/tags/multimedia">multimedia</a>.
8539
8540
8541 </div>
8542 </div>
8543 <div class="padding"></div>
8544
8545 <div class="entry">
8546 <div class="title">
8547 <a href="http://www.hungry.com/~pere/blog/How_to_test_Debian_Edu_Jessie_despite_some_fatal_problems_with_the_installer.html">How to test Debian Edu Jessie despite some fatal problems with the installer</a>
8548 </div>
8549 <div class="date">
8550 26th September 2014
8551 </div>
8552 <div class="body">
8553 <p>The <a href="http://www.skolelinux.org/">Debian Edu / Skolelinux
8554 project</a> provide a Linux solution for schools, including a
8555 powerful desktop with education software, a central server providing
8556 web pages, user database, user home directories, central login and PXE
8557 boot of both clients without disk and the installation to install Debian
8558 Edu on machines with disk (and a few other services perhaps to small
8559 to mention here). We in the Debian Edu team are currently working on
8560 the Jessie based version, trying to get everything in shape before the
8561 freeze, to avoid having to maintain our own package repository in the
8562 future. The
8563 <a href="https://wiki.debian.org/DebianEdu/Status/Jessie">current
8564 status</a> can be seen on the Debian wiki, and there is still heaps of
8565 work left. Some fatal problems block testing, breaking the installer,
8566 but it is possible to work around these to get anyway. Here is a
8567 recipe on how to get the installation limping along.</p>
8568
8569 <p>First, download the test ISO via
8570 <a href="ftp://ftp.skolelinux.no/cd-edu-testing-nolocal-netinst/debian-edu-amd64-i386-NETINST-1.iso">ftp</a>,
8571 <a href="http://ftp.skolelinux.no/cd-edu-testing-nolocal-netinst/debian-edu-amd64-i386-NETINST-1.iso">http</a>
8572 or rsync (use
8573 ftp.skolelinux.org::cd-edu-testing-nolocal-netinst/debian-edu-amd64-i386-NETINST-1.iso).
8574 The ISO build was broken on Tuesday, so we do not get a new ISO every
8575 12 hours or so, but thankfully the ISO we already got we are able to
8576 install with some tweaking.</p>
8577
8578 <p>When you get to the Debian Edu profile question, go to tty2
8579 (use Alt-Ctrl-F2), run</p>
8580
8581 <p><blockquote><pre>
8582 nano /usr/bin/edu-eatmydata-install
8583 </pre></blockquote></p>
8584
8585 <p>and add 'exit 0' as the second line, disabling the eatmydata
8586 optimization. Return to the installation, select the profile you want
8587 and continue. Without this change, exim4-config will fail to install
8588 due to a known bug in eatmydata.</p>
8589
8590 <p>When you get the grub question at the end, answer /dev/sda (or if
8591 this do not work, figure out what your correct value would be. All my
8592 test machines need /dev/sda, so I have no advice if it do not fit
8593 your need.</p>
8594
8595 <p>If you installed a profile including a graphical desktop, log in as
8596 root after the initial boot from hard drive, and install the
8597 education-desktop-XXX metapackage. XXX can be kde, gnome, lxde, xfce
8598 or mate. If you want several desktop options, install more than one
8599 metapackage. Once this is done, reboot and you should have a working
8600 graphical login screen. This workaround should no longer be needed
8601 once the education-tasks package version 1.801 enter testing in two
8602 days.</p>
8603
8604 <p>I believe the ISO build will start working on two days when the new
8605 tasksel package enter testing and Steve McIntyre get a chance to
8606 update the debian-cd git repository. The eatmydata, grub and desktop
8607 issues are already fixed in unstable and testing, and should show up
8608 on the ISO as soon as the ISO build start working again. Well the
8609 eatmydata optimization is really just disabled. The proper fix
8610 require an upload by the eatmydata maintainer applying the patch
8611 provided in bug <a href="https://bugs.debian.org/702711">#702711</a>.
8612 The rest have proper fixes in unstable.</p>
8613
8614 <p>I hope this get you going with the installation testing, as we are
8615 quickly running out of time trying to get our Jessie based
8616 installation ready before the distribution freeze in a month.</p>
8617
8618 </div>
8619 <div class="tags">
8620
8621
8622 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
8623
8624
8625 </div>
8626 </div>
8627 <div class="padding"></div>
8628
8629 <div class="entry">
8630 <div class="title">
8631 <a href="http://www.hungry.com/~pere/blog/Suddenly_I_am_the_new_upstream_of_the_lsdvd_command_line_tool.html">Suddenly I am the new upstream of the lsdvd command line tool</a>
8632 </div>
8633 <div class="date">
8634 25th September 2014
8635 </div>
8636 <div class="body">
8637 <p>I use the <a href="https://sourceforge.net/p/lsdvd/">lsdvd tool</a>
8638 to handle my fairly large DVD collection. It is a nice command line
8639 tool to get details about a DVD, like title, tracks, track length,
8640 etc, in XML, Perl or human readable format. But lsdvd have not seen
8641 any new development since 2006 and had a few irritating bugs affecting
8642 its use with some DVDs. Upstream seemed to be dead, and in January I
8643 sent a small probe asking for a version control repository for the
8644 project, without any reply. But I use it regularly and would like to
8645 get <a href="https://packages.qa.debian.org/lsdvd">an updated version
8646 into Debian</a>. So two weeks ago I tried harder to get in touch with
8647 the project admin, and after getting a reply from him explaining that
8648 he was no longer interested in the project, I asked if I could take
8649 over. And yesterday, I became project admin.</p>
8650
8651 <p>I've been in touch with a Gentoo developer and the Debian
8652 maintainer interested in joining forces to maintain the upstream
8653 project, and I hope we can get a new release out fairly quickly,
8654 collecting the patches spread around on the internet into on place.
8655 I've added the relevant Debian patches to the freshly created git
8656 repository, and expect the Gentoo patches to make it too. If you got
8657 a DVD collection and care about command line tools, check out
8658 <a href="https://sourceforge.net/p/lsdvd/git/ci/master/tree/">the git source</a> and join
8659 <a href="https://sourceforge.net/p/lsdvd/mailman/">the project mailing
8660 list</a>. :)</p>
8661
8662 </div>
8663 <div class="tags">
8664
8665
8666 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/lsdvd">lsdvd</a>, <a href="http://www.hungry.com/~pere/blog/tags/multimedia">multimedia</a>.
8667
8668
8669 </div>
8670 </div>
8671 <div class="padding"></div>
8672
8673 <div class="entry">
8674 <div class="title">
8675 <a href="http://www.hungry.com/~pere/blog/Speeding_up_the_Debian_installer_using_eatmydata_and_dpkg_divert.html">Speeding up the Debian installer using eatmydata and dpkg-divert</a>
8676 </div>
8677 <div class="date">
8678 16th September 2014
8679 </div>
8680 <div class="body">
8681 <p>The <a href="https://www.debian.org/">Debian</a> installer could be
8682 a lot quicker. When we install more than 2000 packages in
8683 <a href="http://www.skolelinux.org/">Skolelinux / Debian Edu</a> using
8684 tasksel in the installer, unpacking the binary packages take forever.
8685 A part of the slow I/O issue was discussed in
8686 <a href="https://bugs.debian.org/613428">bug #613428</a> about too
8687 much file system sync-ing done by dpkg, which is the package
8688 responsible for unpacking the binary packages. Other parts (like code
8689 executed by postinst scripts) might also sync to disk during
8690 installation. All this sync-ing to disk do not really make sense to
8691 me. If the machine crash half-way through, I start over, I do not try
8692 to salvage the half installed system. So the failure sync-ing is
8693 supposed to protect against, hardware or system crash, is not really
8694 relevant while the installer is running.</p>
8695
8696 <p>A few days ago, I thought of a way to get rid of all the file
8697 system sync()-ing in a fairly non-intrusive way, without the need to
8698 change the code in several packages. The idea is not new, but I have
8699 not heard anyone propose the approach using dpkg-divert before. It
8700 depend on the small and clever package
8701 <a href="https://packages.qa.debian.org/eatmydata">eatmydata</a>, which
8702 uses LD_PRELOAD to replace the system functions for syncing data to
8703 disk with functions doing nothing, thus allowing programs to live
8704 dangerous while speeding up disk I/O significantly. Instead of
8705 modifying the implementation of dpkg, apt and tasksel (which are the
8706 packages responsible for selecting, fetching and installing packages),
8707 it occurred to me that we could just divert the programs away, replace
8708 them with a simple shell wrapper calling
8709 "eatmydata&nbsp;$program&nbsp;$@", to get the same effect.
8710 Two days ago I decided to test the idea, and wrapped up a simple
8711 implementation for the Debian Edu udeb.</p>
8712
8713 <p>The effect was stunning. In my first test it reduced the running
8714 time of the pkgsel step (installing tasks) from 64 to less than 44
8715 minutes (20 minutes shaved off the installation) on an old Dell
8716 Latitude D505 machine. I am not quite sure what the optimised time
8717 would have been, as I messed up the testing a bit, causing the debconf
8718 priority to get low enough for two questions to pop up during
8719 installation. As soon as I saw the questions I moved the installation
8720 along, but do not know how long the question were holding up the
8721 installation. I did some more measurements using Debian Edu Jessie,
8722 and got these results. The time measured is the time stamp in
8723 /var/log/syslog between the "pkgsel: starting tasksel" and the
8724 "pkgsel: finishing up" lines, if you want to do the same measurement
8725 yourself. In Debian Edu, the tasksel dialog do not show up, and the
8726 timing thus do not depend on how quickly the user handle the tasksel
8727 dialog.</p>
8728
8729 <p><table>
8730
8731 <tr>
8732 <th>Machine/setup</th>
8733 <th>Original tasksel</th>
8734 <th>Optimised tasksel</th>
8735 <th>Reduction</th>
8736 </tr>
8737
8738 <tr>
8739 <td>Latitude D505 Main+LTSP LXDE</td>
8740 <td>64 min (07:46-08:50)</td>
8741 <td><44 min (11:27-12:11)</td>
8742 <td>>20 min 18%</td>
8743 </tr>
8744
8745 <tr>
8746 <td>Latitude D505 Roaming LXDE</td>
8747 <td>57 min (08:48-09:45)</td>
8748 <td>34 min (07:43-08:17)</td>
8749 <td>23 min 40%</td>
8750 </tr>
8751
8752 <tr>
8753 <td>Latitude D505 Minimal</td>
8754 <td>22 min (10:37-10:59)</td>
8755 <td>11 min (11:16-11:27)</td>
8756 <td>11 min 50%</td>
8757 </tr>
8758
8759 <tr>
8760 <td>Thinkpad X200 Minimal</td>
8761 <td>6 min (08:19-08:25)</td>
8762 <td>4 min (08:04-08:08)</td>
8763 <td>2 min 33%</td>
8764 </tr>
8765
8766 <tr>
8767 <td>Thinkpad X200 Roaming KDE</td>
8768 <td>19 min (09:21-09:40)</td>
8769 <td>15 min (10:25-10:40)</td>
8770 <td>4 min 21%</td>
8771 </tr>
8772
8773 </table></p>
8774
8775 <p>The test is done using a netinst ISO on a USB stick, so some of the
8776 time is spent downloading packages. The connection to the Internet
8777 was 100Mbit/s during testing, so downloading should not be a
8778 significant factor in the measurement. Download typically took a few
8779 seconds to a few minutes, depending on the amount of packages being
8780 installed.</p>
8781
8782 <p>The speedup is implemented by using two hooks in
8783 <a href="https://www.debian.org/devel/debian-installer/">Debian
8784 Installer</a>, the pre-pkgsel.d hook to set up the diverts, and the
8785 finish-install.d hook to remove the divert at the end of the
8786 installation. I picked the pre-pkgsel.d hook instead of the
8787 post-base-installer.d hook because I test using an ISO without the
8788 eatmydata package included, and the post-base-installer.d hook in
8789 Debian Edu can only operate on packages included in the ISO. The
8790 negative effect of this is that I am unable to activate this
8791 optimization for the kernel installation step in d-i. If the code is
8792 moved to the post-base-installer.d hook, the speedup would be larger
8793 for the entire installation.</p>
8794
8795 <p>I've implemented this in the
8796 <a href="https://packages.qa.debian.org/debian-edu-install">debian-edu-install</a>
8797 git repository, and plan to provide the optimization as part of the
8798 Debian Edu installation. If you want to test this yourself, you can
8799 create two files in the installer (or in an udeb). One shell script
8800 need do go into /usr/lib/pre-pkgsel.d/, with content like this:</p>
8801
8802 <p><blockquote><pre>
8803 #!/bin/sh
8804 set -e
8805 . /usr/share/debconf/confmodule
8806 info() {
8807 logger -t my-pkgsel "info: $*"
8808 }
8809 error() {
8810 logger -t my-pkgsel "error: $*"
8811 }
8812 override_install() {
8813 apt-install eatmydata || true
8814 if [ -x /target/usr/bin/eatmydata ] ; then
8815 for bin in dpkg apt-get aptitude tasksel ; do
8816 file=/usr/bin/$bin
8817 # Test that the file exist and have not been diverted already.
8818 if [ -f /target$file ] ; then
8819 info "diverting $file using eatmydata"
8820 printf "#!/bin/sh\neatmydata $bin.distrib \"\$@\"\n" \
8821 > /target$file.edu
8822 chmod 755 /target$file.edu
8823 in-target dpkg-divert --package debian-edu-config \
8824 --rename --quiet --add $file
8825 ln -sf ./$bin.edu /target$file
8826 else
8827 error "unable to divert $file, as it is missing."
8828 fi
8829 done
8830 else
8831 error "unable to find /usr/bin/eatmydata after installing the eatmydata pacage"
8832 fi
8833 }
8834
8835 override_install
8836 </pre></blockquote></p>
8837
8838 <p>To clean up, another shell script should go into
8839 /usr/lib/finish-install.d/ with code like this:
8840
8841 <p><blockquote><pre>
8842 #! /bin/sh -e
8843 . /usr/share/debconf/confmodule
8844 error() {
8845 logger -t my-finish-install "error: $@"
8846 }
8847 remove_install_override() {
8848 for bin in dpkg apt-get aptitude tasksel ; do
8849 file=/usr/bin/$bin
8850 if [ -x /target$file.edu ] ; then
8851 rm /target$file
8852 in-target dpkg-divert --package debian-edu-config \
8853 --rename --quiet --remove $file
8854 rm /target$file.edu
8855 else
8856 error "Missing divert for $file."
8857 fi
8858 done
8859 sync # Flush file buffers before continuing
8860 }
8861
8862 remove_install_override
8863 </pre></blockquote></p>
8864
8865 <p>In Debian Edu, I placed both code fragments in a separate script
8866 edu-eatmydata-install and call it from the pre-pkgsel.d and
8867 finish-install.d scripts.</p>
8868
8869 <p>By now you might ask if this change should get into the normal
8870 Debian installer too? I suspect it should, but am not sure the
8871 current debian-installer coordinators find it useful enough. It also
8872 depend on the side effects of the change. I'm not aware of any, but I
8873 guess we will see if the change is safe after some more testing.
8874 Perhaps there is some package in Debian depending on sync() and
8875 fsync() having effect? Perhaps it should go into its own udeb, to
8876 allow those of us wanting to enable it to do so without affecting
8877 everyone.</p>
8878
8879 <p>Update 2014-09-24: Since a few days ago, enabling this optimization
8880 will break installation of all programs using gnutls because of
8881 <a href="https://bugs.debian.org/702711">bug #702711</a>. An updated
8882 eatmydata package in Debian will solve it.</p>
8883
8884 <p>Update 2014-10-17: The bug mentioned above is fixed in testing and
8885 the optimization work again. And I have discovered that the
8886 dpkg-divert trick is not really needed and implemented a slightly
8887 simpler approach as part of the debian-edu-install package. See
8888 tools/edu-eatmydata-install in the source package.</p>
8889
8890 <p>Update 2014-11-11: Unfortunately, a new
8891 <a href="http://bugs.debian.org/765738">bug #765738</a> in eatmydata only
8892 triggering on i386 made it into testing, and broke this installation
8893 optimization again. If <a href="http://bugs.debian.org/768893">unblock
8894 request 768893</a> is accepted, it should be working again.</p>
8895
8896 </div>
8897 <div class="tags">
8898
8899
8900 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
8901
8902
8903 </div>
8904 </div>
8905 <div class="padding"></div>
8906
8907 <div class="entry">
8908 <div class="title">
8909 <a href="http://www.hungry.com/~pere/blog/Good_bye_subkeys_pgp_net__welcome_pool_sks_keyservers_net.html">Good bye subkeys.pgp.net, welcome pool.sks-keyservers.net</a>
8910 </div>
8911 <div class="date">
8912 10th September 2014
8913 </div>
8914 <div class="body">
8915 <p>Yesterday, I had the pleasure of attending a talk with the
8916 <a href="http://www.nuug.no/">Norwegian Unix User Group</a> about
8917 <a href="http://www.nuug.no/aktiviteter/20140909-sks-keyservers/">the
8918 OpenPGP keyserver pool sks-keyservers.net</a>, and was very happy to
8919 learn that there is a large set of publicly available key servers to
8920 use when looking for peoples public key. So far I have used
8921 subkeys.pgp.net, and some times wwwkeys.nl.pgp.net when the former
8922 were misbehaving, but those days are ended. The servers I have used
8923 up until yesterday have been slow and some times unavailable. I hope
8924 those problems are gone now.</p>
8925
8926 <p>Behind the round robin DNS entry of the
8927 <a href="https://sks-keyservers.net/">sks-keyservers.net</a> service
8928 there is a pool of more than 100 keyservers which are checked every
8929 day to ensure they are well connected and up to date. It must be
8930 better than what I have used so far. :)</p>
8931
8932 <p>Yesterdays speaker told me that the service is the default
8933 keyserver provided by the default configuration in GnuPG, but this do
8934 not seem to be used in Debian. Perhaps it should?</p>
8935
8936 <p>Anyway, I've updated my ~/.gnupg/options file to now include this
8937 line:</p>
8938
8939 <p><blockquote><pre>
8940 keyserver pool.sks-keyservers.net
8941 </pre></blockquote></p>
8942
8943 <p>With GnuPG version 2 one can also locate the keyserver using SRV
8944 entries in DNS. Just for fun, I did just that at work, so now every
8945 user of GnuPG at the University of Oslo should find a OpenGPG
8946 keyserver automatically should their need it:</p>
8947
8948 <p><blockquote><pre>
8949 % host -t srv _pgpkey-http._tcp.uio.no
8950 _pgpkey-http._tcp.uio.no has SRV record 0 100 11371 pool.sks-keyservers.net.
8951 %
8952 </pre></blockquote></p>
8953
8954 <p>Now if only
8955 <a href="http://ietfreport.isoc.org/idref/draft-shaw-openpgp-hkp/">the
8956 HKP lookup protocol</a> supported finding signature paths, I would be
8957 very happy. It can look up a given key or search for a user ID, but I
8958 normally do not want that, but to find a trust path from my key to
8959 another key. Given a user ID or key ID, I would like to find (and
8960 download) the keys representing a signature path from my key to the
8961 key in question, to be able to get a trust path between the two keys.
8962 This is as far as I can tell not possible today. Perhaps something
8963 for a future version of the protocol?</p>
8964
8965 </div>
8966 <div class="tags">
8967
8968
8969 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/personvern">personvern</a>, <a href="http://www.hungry.com/~pere/blog/tags/sikkerhet">sikkerhet</a>.
8970
8971
8972 </div>
8973 </div>
8974 <div class="padding"></div>
8975
8976 <div class="entry">
8977 <div class="title">
8978 <a href="http://www.hungry.com/~pere/blog/From_English_wiki_to_translated_PDF_and_epub_via_Docbook.html">From English wiki to translated PDF and epub via Docbook</a>
8979 </div>
8980 <div class="date">
8981 17th June 2014
8982 </div>
8983 <div class="body">
8984 <p>The <a href="http://www.skolelinux.org/">Debian Edu / Skolelinux
8985 project</a> provide an instruction manual for teachers, system
8986 administrators and other users that contain useful tips for setting up
8987 and maintaining a Debian Edu installation. This text is about how the
8988 text processing of this manual is handled in the project.</p>
8989
8990 <p>One goal of the project is to provide information in the native
8991 language of its users, and for this we need to handle translations.
8992 But we also want to make sure each language contain the same
8993 information, so for this we need a good way to keep the translations
8994 in sync. And we want it to be easy for our users to improve the
8995 documentation, avoiding the need to learn special formats or tools to
8996 contribute, and the obvious way to do this is to make it possible to
8997 edit the documentation using a web browser. We also want it to be
8998 easy for translators to keep the translation up to date, and give them
8999 help in figuring out what need to be translated. Here is the list of
9000 tools and the process we have found trying to reach all these
9001 goals.</p>
9002
9003 <p>We maintain the authoritative source of our manual in the
9004 <a href="https://wiki.debian.org/DebianEdu/Documentation/Wheezy/">Debian
9005 wiki</a>, as several wiki pages written in English. It consist of one
9006 front page with references to the different chapters, several pages
9007 for each chapter, and finally one "collection page" gluing all the
9008 chapters together into one large web page (aka
9009 <a href="https://wiki.debian.org/DebianEdu/Documentation/Wheezy/AllInOne">the
9010 AllInOne page</a>). The AllInOne page is the one used for further
9011 processing and translations. Thanks to the fact that the
9012 <a href="http://moinmo.in/">MoinMoin</a> installation on
9013 wiki.debian.org support exporting pages in
9014 <a href="http://www.docbook.org/">the Docbook format</a>, we can fetch
9015 the list of pages to export using the raw version of the AllInOne
9016 page, loop over each of them to generate a Docbook XML version of the
9017 manual. This process also download images and transform image
9018 references to use the locally downloaded images. The generated
9019 Docbook XML files are slightly broken, so some post-processing is done
9020 using the <tt>documentation/scripts/get_manual</tt> program, and the
9021 result is a nice Docbook XML file (debian-edu-wheezy-manual.xml) and
9022 a handfull of images. The XML file can now be used to generate PDF, HTML
9023 and epub versions of the English manual. This is the basic step of
9024 our process, making PDF (using dblatex), HTML (using xsltproc) and
9025 epub (using dbtoepub) version from Docbook XML, and the resulting files
9026 are placed in the debian-edu-doc-en binary package.</p>
9027
9028 <p>But English documentation is not enough for us. We want translated
9029 documentation too, and we want to make it easy for translators to
9030 track the English original. For this we use the
9031 <a href="http://packages.qa.debian.org/p/poxml.html">poxml</a> package,
9032 which allow us to transform the English Docbook XML file into a
9033 translation file (a .pot file), usable with the normal gettext based
9034 translation tools used by those translating free software. The pot
9035 file is used to create and maintain translation files (several .po
9036 files), which the translations update with the native language
9037 translations of all titles, paragraphs and blocks of text in the
9038 original. The next step is combining the original English Docbook XML
9039 and the translation file (say debian-edu-wheezy-manual.nb.po), to
9040 create a translated Docbook XML file (in this case
9041 debian-edu-wheezy-manual.nb.xml). This translated (or partly
9042 translated, if the translation is not complete) Docbook XML file can
9043 then be used like the original to create a PDF, HTML and epub version
9044 of the documentation.</p>
9045
9046 <p>The translators use different tools to edit the .po files. We
9047 recommend using
9048 <a href="http://www.kde.org/applications/development/lokalize/">lokalize</a>,
9049 while some use emacs and vi, others can use web based editors like
9050 <a href="http://pootle.translatehouse.org/">Poodle</a> or
9051 <a href="https://www.transifex.com/">Transifex</a>. All we care about
9052 is where the .po file end up, in our git repository. Updated
9053 translations can either be committed directly to git, or submitted as
9054 <a href="https://bugs.debian.org/src:debian-edu-doc">bug reports
9055 against the debian-edu-doc package</a>.</p>
9056
9057 <p>One challenge is images, which both might need to be translated (if
9058 they show translated user applications), and are needed in different
9059 formats when creating PDF and HTML versions (epub is a HTML version in
9060 this regard). For this we transform the original PNG images to the
9061 needed density and format during build, and have a way to provide
9062 translated images by storing translated versions in
9063 images/$LANGUAGECODE/. I am a bit unsure about the details here. The
9064 package maintainers know more.</p>
9065
9066 <p>If you wonder what the result look like, we provide
9067 <a href="http://maintainer.skolelinux.org/debian-edu-doc/">the content
9068 of the documentation packages on the web</a>. See for example the
9069 <a href="http://maintainer.skolelinux.org/debian-edu-doc/it/debian-edu-wheezy-manual.pdf">Italian
9070 PDF version</a> or the
9071 <a href="http://maintainer.skolelinux.org/debian-edu-doc/de/debian-edu-wheezy-manual.html">German
9072 HTML version</a>. We do not yet build the epub version by default,
9073 but perhaps it will be done in the future.</p>
9074
9075 <p>To learn more, check out
9076 <a href="http://packages.qa.debian.org/d/debian-edu-doc.html">the
9077 debian-edu-doc package</a>,
9078 <a href="https://wiki.debian.org/DebianEdu/Documentation/Wheezy/">the
9079 manual on the wiki</a> and
9080 <a href="https://wiki.debian.org/DebianEdu/Documentation/Wheezy/Translations">the
9081 translation instructions</a> in the manual.</p>
9082
9083 </div>
9084 <div class="tags">
9085
9086
9087 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/docbook">docbook</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
9088
9089
9090 </div>
9091 </div>
9092 <div class="padding"></div>
9093
9094 <div class="entry">
9095 <div class="title">
9096 <a href="http://www.hungry.com/~pere/blog/Install_hardware_dependent_packages_using_tasksel__Isenkram_0_7_.html">Install hardware dependent packages using tasksel (Isenkram 0.7)</a>
9097 </div>
9098 <div class="date">
9099 23rd April 2014
9100 </div>
9101 <div class="body">
9102 <p>It would be nice if it was easier in Debian to get all the hardware
9103 related packages relevant for the computer installed automatically.
9104 So I implemented one, using
9105 <a href="http://packages.qa.debian.org/isenkram">my Isenkram
9106 package</a>. To use it, install the tasksel and isenkram packages and
9107 run tasksel as user root. You should be presented with a new option,
9108 "Hardware specific packages (autodetected by isenkram)". When you
9109 select it, tasksel will install the packages isenkram claim is fit for
9110 the current hardware, hot pluggable or not.<p>
9111
9112 <p>The implementation is in two files, one is the tasksel menu entry
9113 description, and the other is the script used to extract the list of
9114 packages to install. The first part is in
9115 <tt>/usr/share/tasksel/descs/isenkram.desc</tt> and look like
9116 this:</p>
9117
9118 <p><blockquote><pre>
9119 Task: isenkram
9120 Section: hardware
9121 Description: Hardware specific packages (autodetected by isenkram)
9122 Based on the detected hardware various hardware specific packages are
9123 proposed.
9124 Test-new-install: mark show
9125 Relevance: 8
9126 Packages: for-current-hardware
9127 </pre></blockquote></p>
9128
9129 <p>The second part is in
9130 <tt>/usr/lib/tasksel/packages/for-current-hardware</tt> and look like
9131 this:</p>
9132
9133 <p><blockquote><pre>
9134 #!/bin/sh
9135 #
9136 (
9137 isenkram-lookup
9138 isenkram-autoinstall-firmware -l
9139 ) | sort -u
9140 </pre></blockquote></p>
9141
9142 <p>All in all, a very short and simple implementation making it
9143 trivial to install the hardware dependent package we all may want to
9144 have installed on our machines. I've not been able to find a way to
9145 get tasksel to tell you exactly which packages it plan to install
9146 before doing the installation. So if you are curious or careful,
9147 check the output from the isenkram-* command line tools first.</p>
9148
9149 <p>The information about which packages are handling which hardware is
9150 fetched either from the isenkram package itself in
9151 /usr/share/isenkram/, from git.debian.org or from the APT package
9152 database (using the Modaliases header). The APT package database
9153 parsing have caused a nasty resource leak in the isenkram daemon (bugs
9154 <a href="http://bugs.debian.org/719837">#719837</a> and
9155 <a href="http://bugs.debian.org/730704">#730704</a>). The cause is in
9156 the python-apt code (bug
9157 <a href="http://bugs.debian.org/745487">#745487</a>), but using a
9158 workaround I was able to get rid of the file descriptor leak and
9159 reduce the memory leak from ~30 MiB per hardware detection down to
9160 around 2 MiB per hardware detection. It should make the desktop
9161 daemon a lot more useful. The fix is in version 0.7 uploaded to
9162 unstable today.</p>
9163
9164 <p>I believe the current way of mapping hardware to packages in
9165 Isenkram is is a good draft, but in the future I expect isenkram to
9166 use the AppStream data source for this. A proposal for getting proper
9167 AppStream support into Debian is floating around as
9168 <a href="https://wiki.debian.org/DEP-11">DEP-11</a>, and
9169 <a href="https://wiki.debian.org/SummerOfCode2014/Projects#SummerOfCode2014.2FProjects.2FAppStreamDEP11Implementation.AppStream.2FDEP-11_for_the_Debian_Archive">GSoC
9170 project</a> will take place this summer to improve the situation. I
9171 look forward to seeing the result, and welcome patches for isenkram to
9172 start using the information when it is ready.</p>
9173
9174 <p>If you want your package to map to some specific hardware, either
9175 add a "Xb-Modaliases" header to your control file like I did in
9176 <a href="http://packages.qa.debian.org/pymissile">the pymissile
9177 package</a> or submit a bug report with the details to the isenkram
9178 package. See also
9179 <a href="http://www.hungry.com/~pere/blog/tags/isenkram/">all my
9180 blog posts tagged isenkram</a> for details on the notation. I expect
9181 the information will be migrated to AppStream eventually, but for the
9182 moment I got no better place to store it.</p>
9183
9184 </div>
9185 <div class="tags">
9186
9187
9188 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/isenkram">isenkram</a>.
9189
9190
9191 </div>
9192 </div>
9193 <div class="padding"></div>
9194
9195 <div class="entry">
9196 <div class="title">
9197 <a href="http://www.hungry.com/~pere/blog/FreedomBox_milestone___all_packages_now_in_Debian_Sid.html">FreedomBox milestone - all packages now in Debian Sid</a>
9198 </div>
9199 <div class="date">
9200 15th April 2014
9201 </div>
9202 <div class="body">
9203 <p>The <a href="https://wiki.debian.org/FreedomBox">Freedombox
9204 project</a> is working on providing the software and hardware to make
9205 it easy for non-technical people to host their data and communication
9206 at home, and being able to communicate with their friends and family
9207 encrypted and away from prying eyes. It is still going strong, and
9208 today a major mile stone was reached.</p>
9209
9210 <p>Today, the last of the packages currently used by the project to
9211 created the system images were accepted into Debian Unstable. It was
9212 the freedombox-setup package, which is used to configure the images
9213 during build and on the first boot. Now all one need to get going is
9214 the build code from the freedom-maker git repository and packages from
9215 Debian. And once the freedombox-setup package enter testing, we can
9216 build everything directly from Debian. :)</p>
9217
9218 <p>Some key packages used by Freedombox are
9219 <a href="http://packages.qa.debian.org/freedombox-setup">freedombox-setup</a>,
9220 <a href="http://packages.qa.debian.org/plinth">plinth</a>,
9221 <a href="http://packages.qa.debian.org/pagekite">pagekite</a>,
9222 <a href="http://packages.qa.debian.org/tor">tor</a>,
9223 <a href="http://packages.qa.debian.org/privoxy">privoxy</a>,
9224 <a href="http://packages.qa.debian.org/owncloud">owncloud</a> and
9225 <a href="http://packages.qa.debian.org/dnsmasq">dnsmasq</a>. There
9226 are plans to integrate more packages into the setup. User
9227 documentation is maintained on the Debian wiki. Please
9228 <a href="https://wiki.debian.org/FreedomBox/Manual/Jessie">check out
9229 the manual</a> and help us improve it.</p>
9230
9231 <p>To test for yourself and create boot images with the FreedomBox
9232 setup, run this on a Debian machine using a user with sudo rights to
9233 become root:</p>
9234
9235 <p><pre>
9236 sudo apt-get install git vmdebootstrap mercurial python-docutils \
9237 mktorrent extlinux virtualbox qemu-user-static binfmt-support \
9238 u-boot-tools
9239 git clone http://anonscm.debian.org/git/freedombox/freedom-maker.git \
9240 freedom-maker
9241 make -C freedom-maker dreamplug-image raspberry-image virtualbox-image
9242 </pre></p>
9243
9244 <p>Root access is needed to run debootstrap and mount loopback
9245 devices. See the README in the freedom-maker git repo for more
9246 details on the build. If you do not want all three images, trim the
9247 make line. Note that the virtualbox-image target is not really
9248 virtualbox specific. It create a x86 image usable in kvm, qemu,
9249 vmware and any other x86 virtual machine environment. You might need
9250 the version of vmdebootstrap in Jessie to get the build working, as it
9251 include fixes for a race condition with kpartx.</p>
9252
9253 <p>If you instead want to install using a Debian CD and the preseed
9254 method, boot a Debian Wheezy ISO and use this boot argument to load
9255 the preseed values:</p>
9256
9257 <p><pre>
9258 url=<a href="http://www.reinholdtsen.name/freedombox/preseed-jessie.dat">http://www.reinholdtsen.name/freedombox/preseed-jessie.dat</a>
9259 </pre></p>
9260
9261 <p>I have not tested it myself the last few weeks, so I do not know if
9262 it still work.</p>
9263
9264 <p>If you wonder how to help, one task you could look at is using
9265 systemd as the boot system. It will become the default for Linux in
9266 Jessie, so we need to make sure it is usable on the Freedombox. I did
9267 a simple test a few weeks ago, and noticed dnsmasq failed to start
9268 during boot when using systemd. I suspect there are other problems
9269 too. :) To detect problems, there is a test suite included, which can
9270 be run from the plinth web interface.</p>
9271
9272 <p>Give it a go and let us know how it goes on the mailing list, and help
9273 us get the new release published. :) Please join us on
9274 <a href="irc://irc.debian.org:6667/%23freedombox">IRC (#freedombox on
9275 irc.debian.org)</a> and
9276 <a href="http://lists.alioth.debian.org/mailman/listinfo/freedombox-discuss">the
9277 mailing list</a> if you want to help make this vision come true.</p>
9278
9279 </div>
9280 <div class="tags">
9281
9282
9283 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/freedombox">freedombox</a>, <a href="http://www.hungry.com/~pere/blog/tags/sikkerhet">sikkerhet</a>, <a href="http://www.hungry.com/~pere/blog/tags/surveillance">surveillance</a>, <a href="http://www.hungry.com/~pere/blog/tags/web">web</a>.
9284
9285
9286 </div>
9287 </div>
9288 <div class="padding"></div>
9289
9290 <div class="entry">
9291 <div class="title">
9292 <a href="http://www.hungry.com/~pere/blog/S3QL__a_locally_mounted_cloud_file_system___nice_free_software.html">S3QL, a locally mounted cloud file system - nice free software</a>
9293 </div>
9294 <div class="date">
9295 9th April 2014
9296 </div>
9297 <div class="body">
9298 <p>For a while now, I have been looking for a sensible offsite backup
9299 solution for use at home. My requirements are simple, it must be
9300 cheap and locally encrypted (in other words, I keep the encryption
9301 keys, the storage provider do not have access to my private files).
9302 One idea me and my friends had many years ago, before the cloud
9303 storage providers showed up, was to use Google mail as storage,
9304 writing a Linux block device storing blocks as emails in the mail
9305 service provided by Google, and thus get heaps of free space. On top
9306 of this one can add encryption, RAID and volume management to have
9307 lots of (fairly slow, I admit that) cheap and encrypted storage. But
9308 I never found time to implement such system. But the last few weeks I
9309 have looked at a system called
9310 <a href="https://bitbucket.org/nikratio/s3ql/">S3QL</a>, a locally
9311 mounted network backed file system with the features I need.</p>
9312
9313 <p>S3QL is a fuse file system with a local cache and cloud storage,
9314 handling several different storage providers, any with Amazon S3,
9315 Google Drive or OpenStack API. There are heaps of such storage
9316 providers. S3QL can also use a local directory as storage, which
9317 combined with sshfs allow for file storage on any ssh server. S3QL
9318 include support for encryption, compression, de-duplication, snapshots
9319 and immutable file systems, allowing me to mount the remote storage as
9320 a local mount point, look at and use the files as if they were local,
9321 while the content is stored in the cloud as well. This allow me to
9322 have a backup that should survive fire. The file system can not be
9323 shared between several machines at the same time, as only one can
9324 mount it at the time, but any machine with the encryption key and
9325 access to the storage service can mount it if it is unmounted.</p>
9326
9327 <p>It is simple to use. I'm using it on Debian Wheezy, where the
9328 package is included already. So to get started, run <tt>apt-get
9329 install s3ql</tt>. Next, pick a storage provider. I ended up picking
9330 Greenqloud, after reading their nice recipe on
9331 <a href="https://greenqloud.zendesk.com/entries/44611757-How-To-Use-S3QL-to-mount-a-StorageQloud-bucket-on-Debian-Wheezy">how
9332 to use S3QL with their Amazon S3 service</a>, because I trust the laws
9333 in Iceland more than those in USA when it come to keeping my personal
9334 data safe and private, and thus would rather spend money on a company
9335 in Iceland. Another nice recipe is available from the article
9336 <a href="http://www.admin-magazine.com/HPC/Articles/HPC-Cloud-Storage">S3QL
9337 Filesystem for HPC Storage</a> by Jeff Layton in the HPC section of
9338 Admin magazine. When the provider is picked, figure out how to get
9339 the API key needed to connect to the storage API. With Greencloud,
9340 the key did not show up until I had added payment details to my
9341 account.</p>
9342
9343 <p>Armed with the API access details, it is time to create the file
9344 system. First, create a new bucket in the cloud. This bucket is the
9345 file system storage area. I picked a bucket name reflecting the
9346 machine that was going to store data there, but any name will do.
9347 I'll refer to it as <tt>bucket-name</tt> below. In addition, one need
9348 the API login and password, and a locally created password. Store it
9349 all in ~root/.s3ql/authinfo2 like this:
9350
9351 <p><blockquote><pre>
9352 [s3c]
9353 storage-url: s3c://s.greenqloud.com:443/bucket-name
9354 backend-login: API-login
9355 backend-password: API-password
9356 fs-passphrase: local-password
9357 </pre></blockquote></p>
9358
9359 <p>I create my local passphrase using <tt>pwget 50</tt> or similar,
9360 but any sensible way to create a fairly random password should do it.
9361 Armed with these details, it is now time to run mkfs, entering the API
9362 details and password to create it:</p>
9363
9364 <p><blockquote><pre>
9365 # mkdir -m 700 /var/lib/s3ql-cache
9366 # mkfs.s3ql --cachedir /var/lib/s3ql-cache --authfile /root/.s3ql/authinfo2 \
9367 --ssl s3c://s.greenqloud.com:443/bucket-name
9368 Enter backend login:
9369 Enter backend password:
9370 Before using S3QL, make sure to read the user's guide, especially
9371 the 'Important Rules to Avoid Loosing Data' section.
9372 Enter encryption password:
9373 Confirm encryption password:
9374 Generating random encryption key...
9375 Creating metadata tables...
9376 Dumping metadata...
9377 ..objects..
9378 ..blocks..
9379 ..inodes..
9380 ..inode_blocks..
9381 ..symlink_targets..
9382 ..names..
9383 ..contents..
9384 ..ext_attributes..
9385 Compressing and uploading metadata...
9386 Wrote 0.00 MB of compressed metadata.
9387 # </pre></blockquote></p>
9388
9389 <p>The next step is mounting the file system to make the storage available.
9390
9391 <p><blockquote><pre>
9392 # mount.s3ql --cachedir /var/lib/s3ql-cache --authfile /root/.s3ql/authinfo2 \
9393 --ssl --allow-root s3c://s.greenqloud.com:443/bucket-name /s3ql
9394 Using 4 upload threads.
9395 Downloading and decompressing metadata...
9396 Reading metadata...
9397 ..objects..
9398 ..blocks..
9399 ..inodes..
9400 ..inode_blocks..
9401 ..symlink_targets..
9402 ..names..
9403 ..contents..
9404 ..ext_attributes..
9405 Mounting filesystem...
9406 # df -h /s3ql
9407 Filesystem Size Used Avail Use% Mounted on
9408 s3c://s.greenqloud.com:443/bucket-name 1.0T 0 1.0T 0% /s3ql
9409 #
9410 </pre></blockquote></p>
9411
9412 <p>The file system is now ready for use. I use rsync to store my
9413 backups in it, and as the metadata used by rsync is downloaded at
9414 mount time, no network traffic (and storage cost) is triggered by
9415 running rsync. To unmount, one should not use the normal umount
9416 command, as this will not flush the cache to the cloud storage, but
9417 instead running the umount.s3ql command like this:
9418
9419 <p><blockquote><pre>
9420 # umount.s3ql /s3ql
9421 #
9422 </pre></blockquote></p>
9423
9424 <p>There is a fsck command available to check the file system and
9425 correct any problems detected. This can be used if the local server
9426 crashes while the file system is mounted, to reset the "already
9427 mounted" flag. This is what it look like when processing a working
9428 file system:</p>
9429
9430 <p><blockquote><pre>
9431 # fsck.s3ql --force --ssl s3c://s.greenqloud.com:443/bucket-name
9432 Using cached metadata.
9433 File system seems clean, checking anyway.
9434 Checking DB integrity...
9435 Creating temporary extra indices...
9436 Checking lost+found...
9437 Checking cached objects...
9438 Checking names (refcounts)...
9439 Checking contents (names)...
9440 Checking contents (inodes)...
9441 Checking contents (parent inodes)...
9442 Checking objects (reference counts)...
9443 Checking objects (backend)...
9444 ..processed 5000 objects so far..
9445 ..processed 10000 objects so far..
9446 ..processed 15000 objects so far..
9447 Checking objects (sizes)...
9448 Checking blocks (referenced objects)...
9449 Checking blocks (refcounts)...
9450 Checking inode-block mapping (blocks)...
9451 Checking inode-block mapping (inodes)...
9452 Checking inodes (refcounts)...
9453 Checking inodes (sizes)...
9454 Checking extended attributes (names)...
9455 Checking extended attributes (inodes)...
9456 Checking symlinks (inodes)...
9457 Checking directory reachability...
9458 Checking unix conventions...
9459 Checking referential integrity...
9460 Dropping temporary indices...
9461 Backing up old metadata...
9462 Dumping metadata...
9463 ..objects..
9464 ..blocks..
9465 ..inodes..
9466 ..inode_blocks..
9467 ..symlink_targets..
9468 ..names..
9469 ..contents..
9470 ..ext_attributes..
9471 Compressing and uploading metadata...
9472 Wrote 0.89 MB of compressed metadata.
9473 #
9474 </pre></blockquote></p>
9475
9476 <p>Thanks to the cache, working on files that fit in the cache is very
9477 quick, about the same speed as local file access. Uploading large
9478 amount of data is to me limited by the bandwidth out of and into my
9479 house. Uploading 685 MiB with a 100 MiB cache gave me 305 kiB/s,
9480 which is very close to my upload speed, and downloading the same
9481 Debian installation ISO gave me 610 kiB/s, close to my download speed.
9482 Both were measured using <tt>dd</tt>. So for me, the bottleneck is my
9483 network, not the file system code. I do not know what a good cache
9484 size would be, but suspect that the cache should e larger than your
9485 working set.</p>
9486
9487 <p>I mentioned that only one machine can mount the file system at the
9488 time. If another machine try, it is told that the file system is
9489 busy:</p>
9490
9491 <p><blockquote><pre>
9492 # mount.s3ql --cachedir /var/lib/s3ql-cache --authfile /root/.s3ql/authinfo2 \
9493 --ssl --allow-root s3c://s.greenqloud.com:443/bucket-name /s3ql
9494 Using 8 upload threads.
9495 Backend reports that fs is still mounted elsewhere, aborting.
9496 #
9497 </pre></blockquote></p>
9498
9499 <p>The file content is uploaded when the cache is full, while the
9500 metadata is uploaded once every 24 hour by default. To ensure the
9501 file system content is flushed to the cloud, one can either umount the
9502 file system, or ask S3QL to flush the cache and metadata using
9503 s3qlctrl:
9504
9505 <p><blockquote><pre>
9506 # s3qlctrl upload-meta /s3ql
9507 # s3qlctrl flushcache /s3ql
9508 #
9509 </pre></blockquote></p>
9510
9511 <p>If you are curious about how much space your data uses in the
9512 cloud, and how much compression and deduplication cut down on the
9513 storage usage, you can use s3qlstat on the mounted file system to get
9514 a report:</p>
9515
9516 <p><blockquote><pre>
9517 # s3qlstat /s3ql
9518 Directory entries: 9141
9519 Inodes: 9143
9520 Data blocks: 8851
9521 Total data size: 22049.38 MB
9522 After de-duplication: 21955.46 MB (99.57% of total)
9523 After compression: 21877.28 MB (99.22% of total, 99.64% of de-duplicated)
9524 Database size: 2.39 MB (uncompressed)
9525 (some values do not take into account not-yet-uploaded dirty blocks in cache)
9526 #
9527 </pre></blockquote></p>
9528
9529 <p>I mentioned earlier that there are several possible suppliers of
9530 storage. I did not try to locate them all, but am aware of at least
9531 <a href="https://www.greenqloud.com/">Greenqloud</a>,
9532 <a href="http://drive.google.com/">Google Drive</a>,
9533 <a href="http://aws.amazon.com/s3/">Amazon S3 web serivces</a>,
9534 <a href="http://www.rackspace.com/">Rackspace</a> and
9535 <a href="http://crowncloud.net/">Crowncloud</A>. The latter even
9536 accept payment in Bitcoin. Pick one that suit your need. Some of
9537 them provide several GiB of free storage, but the prize models are
9538 quite different and you will have to figure out what suits you
9539 best.</p>
9540
9541 <p>While researching this blog post, I had a look at research papers
9542 and posters discussing the S3QL file system. There are several, which
9543 told me that the file system is getting a critical check by the
9544 science community and increased my confidence in using it. One nice
9545 poster is titled
9546 "<a href="http://www.lanl.gov/orgs/adtsc/publications/science_highlights_2013/docs/pg68_69.pdf">An
9547 Innovative Parallel Cloud Storage System using OpenStack’s SwiftObject
9548 Store and Transformative Parallel I/O Approach</a>" by Hsing-Bung
9549 Chen, Benjamin McClelland, David Sherrill, Alfred Torrez, Parks Fields
9550 and Pamela Smith. Please have a look.</p>
9551
9552 <p>Given my problems with different file systems earlier, I decided to
9553 check out the mounted S3QL file system to see if it would be usable as
9554 a home directory (in other word, that it provided POSIX semantics when
9555 it come to locking and umask handling etc). Running
9556 <a href="http://www.hungry.com/~pere/blog/Testing_if_a_file_system_can_be_used_for_home_directories___.html">my
9557 test code to check file system semantics</a>, I was happy to discover that
9558 no error was found. So the file system can be used for home
9559 directories, if one chooses to do so.</p>
9560
9561 <p>If you do not want a locally file system, and want something that
9562 work without the Linux fuse file system, I would like to mention the
9563 <a href="http://www.tarsnap.com/">Tarsnap service</a>, which also
9564 provide locally encrypted backup using a command line client. It have
9565 a nicer access control system, where one can split out read and write
9566 access, allowing some systems to write to the backup and others to
9567 only read from it.</p>
9568
9569 <p>As usual, if you use Bitcoin and want to show your support of my
9570 activities, please send Bitcoin donations to my address
9571 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
9572
9573 </div>
9574 <div class="tags">
9575
9576
9577 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nice free software">nice free software</a>, <a href="http://www.hungry.com/~pere/blog/tags/personvern">personvern</a>, <a href="http://www.hungry.com/~pere/blog/tags/sikkerhet">sikkerhet</a>.
9578
9579
9580 </div>
9581 </div>
9582 <div class="padding"></div>
9583
9584 <div class="entry">
9585 <div class="title">
9586 <a href="http://www.hungry.com/~pere/blog/Freedombox_on_Dreamplug__Raspberry_Pi_and_virtual_x86_machine.html">Freedombox on Dreamplug, Raspberry Pi and virtual x86 machine</a>
9587 </div>
9588 <div class="date">
9589 14th March 2014
9590 </div>
9591 <div class="body">
9592 <p>The <a href="https://wiki.debian.org/FreedomBox">Freedombox
9593 project</a> is working on providing the software and hardware for
9594 making it easy for non-technical people to host their data and
9595 communication at home, and being able to communicate with their
9596 friends and family encrypted and away from prying eyes. It has been
9597 going on for a while, and is slowly progressing towards a new test
9598 release (0.2).</p>
9599
9600 <p>And what day could be better than the Pi day to announce that the
9601 new version will provide "hard drive" / SD card / USB stick images for
9602 Dreamplug, Raspberry Pi and VirtualBox (or any other virtualization
9603 system), and can also be installed using a Debian installer preseed
9604 file. The Debian based Freedombox is now based on Debian Jessie,
9605 where most of the needed packages used are already present. Only one,
9606 the freedombox-setup package, is missing. To try to build your own
9607 boot image to test the current status, fetch the freedom-maker scripts
9608 and build using
9609 <a href="http://packages.qa.debian.org/vmdebootstrap">vmdebootstrap</a>
9610 with a user with sudo access to become root:
9611
9612 <pre>
9613 git clone http://anonscm.debian.org/git/freedombox/freedom-maker.git \
9614 freedom-maker
9615 sudo apt-get install git vmdebootstrap mercurial python-docutils \
9616 mktorrent extlinux virtualbox qemu-user-static binfmt-support \
9617 u-boot-tools
9618 make -C freedom-maker dreamplug-image raspberry-image virtualbox-image
9619 </pre>
9620
9621 <p>Root access is needed to run debootstrap and mount loopback
9622 devices. See the README for more details on the build. If you do not
9623 want all three images, trim the make line. But note that thanks to <a
9624 href="https://bugs.debian.org/741407">a race condition in
9625 vmdebootstrap</a>, the build might fail without the patch to the
9626 kpartx call.</p>
9627
9628 <p>If you instead want to install using a Debian CD and the preseed
9629 method, boot a Debian Wheezy ISO and use this boot argument to load
9630 the preseed values:</p>
9631
9632 <pre>
9633 url=<a href="http://www.reinholdtsen.name/freedombox/preseed-jessie.dat">http://www.reinholdtsen.name/freedombox/preseed-jessie.dat</a>
9634 </pre>
9635
9636 <p>But note that due to <a href="https://bugs.debian.org/740673">a
9637 recently introduced bug in apt in Jessie</a>, the installer will
9638 currently hang while setting up APT sources. Killing the
9639 '<tt>apt-cdrom ident</tt>' process when it hang a few times during the
9640 installation will get the installation going. This affect all
9641 installations in Jessie, and I expect it will be fixed soon.</p>
9642
9643 <p>Give it a go and let us know how it goes on the mailing list, and help
9644 us get the new release published. :) Please join us on
9645 <a href="irc://irc.debian.org:6667/%23freedombox">IRC (#freedombox on
9646 irc.debian.org)</a> and
9647 <a href="http://lists.alioth.debian.org/mailman/listinfo/freedombox-discuss">the
9648 mailing list</a> if you want to help make this vision come true.</p>
9649
9650 </div>
9651 <div class="tags">
9652
9653
9654 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/freedombox">freedombox</a>, <a href="http://www.hungry.com/~pere/blog/tags/sikkerhet">sikkerhet</a>, <a href="http://www.hungry.com/~pere/blog/tags/surveillance">surveillance</a>, <a href="http://www.hungry.com/~pere/blog/tags/web">web</a>.
9655
9656
9657 </div>
9658 </div>
9659 <div class="padding"></div>
9660
9661 <div class="entry">
9662 <div class="title">
9663 <a href="http://www.hungry.com/~pere/blog/New_home_and_release_1_0_for_netgroup_and_innetgr__aka_ng_utils_.html">New home and release 1.0 for netgroup and innetgr (aka ng-utils)</a>
9664 </div>
9665 <div class="date">
9666 22nd February 2014
9667 </div>
9668 <div class="body">
9669 <p>Many years ago, I wrote a GPL licensed version of the netgroup and
9670 innetgr tools, because I needed them in
9671 <a href="http://www.skolelinux.org/">Skolelinux</a>. I called the project
9672 ng-utils, and it has served me well. I placed the project under the
9673 <a href="http://www.hungry.com/">Hungry Programmer</a> umbrella, and it was maintained in our CVS
9674 repository. But many years ago, the CVS repository was dropped (lost,
9675 not migrated to new hardware, not sure), and the project have lacked a
9676 proper home since then.</p>
9677
9678 <p>Last summer, I had a look at the package and made a new release
9679 fixing a irritating crash bug, but was unable to store the changes in
9680 a proper source control system. I applied for a project on
9681 <a href="https://alioth.debian.org/">Alioth</a>, but did not have time
9682 to follow up on it. Until today. :)</p>
9683
9684 <p>After many hours of cleaning and migration, the ng-utils project
9685 now have a new home, and a git repository with the highlight of the
9686 history of the project. I published all release tarballs and imported
9687 them into the git repository. As the project is really stable and not
9688 expected to gain new features any time soon, I decided to make a new
9689 release and call it 1.0. Visit the new project home on
9690 <a href="https://alioth.debian.org/projects/ng-utils/">https://alioth.debian.org/projects/ng-utils/</a>
9691 if you want to check it out. The new version is also uploaded into
9692 <a href="http://packages.qa.debian.org/n/ng-utils.html">Debian Unstable</a>.</p>
9693
9694 </div>
9695 <div class="tags">
9696
9697
9698 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
9699
9700
9701 </div>
9702 </div>
9703 <div class="padding"></div>
9704
9705 <div class="entry">
9706 <div class="title">
9707 <a href="http://www.hungry.com/~pere/blog/Testing_sysvinit_from_experimental_in_Debian_Hurd.html">Testing sysvinit from experimental in Debian Hurd</a>
9708 </div>
9709 <div class="date">
9710 3rd February 2014
9711 </div>
9712 <div class="body">
9713 <p>A few days ago I decided to try to help the Hurd people to get
9714 their changes into sysvinit, to allow them to use the normal sysvinit
9715 boot system instead of their old one. This follow up on the
9716 <a href="https://teythoon.cryptobitch.de//categories/gsoc.html">great
9717 Google Summer of Code work</a> done last summer by Justus Winter to
9718 get Debian on Hurd working more like Debian on Linux. To get started,
9719 I downloaded a prebuilt hard disk image from
9720 <a href="http://ftp.debian-ports.org/debian-cd/hurd-i386/current/debian-hurd.img.tar.gz">http://ftp.debian-ports.org/debian-cd/hurd-i386/current/debian-hurd.img.tar.gz</a>,
9721 and started it using virt-manager.</p>
9722
9723 <p>The first think I had to do after logging in (root without any
9724 password) was to get the network operational. I followed
9725 <a href="https://www.debian.org/ports/hurd/hurd-install">the
9726 instructions on the Debian GNU/Hurd ports page</a> and ran these
9727 commands as root to get the machine to accept a IP address from the
9728 kvm internal DHCP server:</p>
9729
9730 <p><blockquote><pre>
9731 settrans -fgap /dev/netdde /hurd/netdde
9732 kill $(ps -ef|awk '/[p]finet/ { print $2}')
9733 kill $(ps -ef|awk '/[d]evnode/ { print $2}')
9734 dhclient /dev/eth0
9735 </pre></blockquote></p>
9736
9737 <p>After this, the machine had internet connectivity, and I could
9738 upgrade it and install the sysvinit packages from experimental and
9739 enable it as the default boot system in Hurd.</p>
9740
9741 <p>But before I did that, I set a password on the root user, as ssh is
9742 running on the machine it for ssh login to work a password need to be
9743 set. Also, note that a bug somewhere in openssh on Hurd block
9744 compression from working. Remember to turn that off on the client
9745 side.</p>
9746
9747 <p>Run these commands as root to upgrade and test the new sysvinit
9748 stuff:</p>
9749
9750 <p><blockquote><pre>
9751 cat > /etc/apt/sources.list.d/experimental.list &lt;&lt;EOF
9752 deb http://http.debian.net/debian/ experimental main
9753 EOF
9754 apt-get update
9755 apt-get dist-upgrade
9756 apt-get install -t experimental initscripts sysv-rc sysvinit \
9757 sysvinit-core sysvinit-utils
9758 update-alternatives --config runsystem
9759 </pre></blockquote></p>
9760
9761 <p>To reboot after switching boot system, you have to use
9762 <tt>reboot-hurd</tt> instead of just <tt>reboot</tt>, as there is not
9763 yet a sysvinit process able to receive the signals from the normal
9764 'reboot' command. After switching to sysvinit as the boot system,
9765 upgrading every package and rebooting, the network come up with DHCP
9766 after boot as it should, and the settrans/pkill hack mentioned at the
9767 start is no longer needed. But for some strange reason, there are no
9768 longer any login prompt in the virtual console, so I logged in using
9769 ssh instead.
9770
9771 <p>Note that there are some race conditions in Hurd making the boot
9772 fail some times. No idea what the cause is, but hope the Hurd porters
9773 figure it out. At least Justus said on IRC (#debian-hurd on
9774 irc.debian.org) that they are aware of the problem. A way to reduce
9775 the impact is to upgrade to the Hurd packages built by Justus by
9776 adding this repository to the machine:</p>
9777
9778 <p><blockquote><pre>
9779 cat > /etc/apt/sources.list.d/hurd-ci.list &lt;&lt;EOF
9780 deb http://darnassus.sceen.net/~teythoon/hurd-ci/ sid main
9781 EOF
9782 </pre></blockquote></p>
9783
9784 <p>At the moment the prebuilt virtual machine get some packages from
9785 http://ftp.debian-ports.org/debian, because some of the packages in
9786 unstable do not yet include the required patches that are lingering in
9787 BTS. This is the completely list of "unofficial" packages installed:</p>
9788
9789 <p><blockquote><pre>
9790 # aptitude search '?narrow(?version(CURRENT),?origin(Debian Ports))'
9791 i emacs - GNU Emacs editor (metapackage)
9792 i gdb - GNU Debugger
9793 i hurd-recommended - Miscellaneous translators
9794 i isc-dhcp-client - ISC DHCP client
9795 i isc-dhcp-common - common files used by all the isc-dhcp* packages
9796 i libc-bin - Embedded GNU C Library: Binaries
9797 i libc-dev-bin - Embedded GNU C Library: Development binaries
9798 i libc0.3 - Embedded GNU C Library: Shared libraries
9799 i A libc0.3-dbg - Embedded GNU C Library: detached debugging symbols
9800 i libc0.3-dev - Embedded GNU C Library: Development Libraries and Hea
9801 i multiarch-support - Transitional package to ensure multiarch compatibilit
9802 i A x11-common - X Window System (X.Org) infrastructure
9803 i xorg - X.Org X Window System
9804 i A xserver-xorg - X.Org X server
9805 i A xserver-xorg-input-all - X.Org X server -- input driver metapackage
9806 #
9807 </pre></blockquote></p>
9808
9809 <p>All in all, testing hurd has been an interesting experience. :)
9810 X.org did not work out of the box and I never took the time to follow
9811 the porters instructions to fix it. This time I was interested in the
9812 command line stuff.<p>
9813
9814 </div>
9815 <div class="tags">
9816
9817
9818 Tags: <a href="http://www.hungry.com/~pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
9819
9820
9821 </div>
9822 </div>
9823 <div class="padding"></div>
9824
9825 <div class="entry">
9826 <div class="title">
9827 <a href="http://www.hungry.com/~pere/blog/New_chrpath_release_0_16.html">New chrpath release 0.16</a>
9828 </div>
9829 <div class="date">
9830 14th January 2014
9831 </div>
9832 <div class="body">
9833 <p><a href="http://www.coverity.com/">Coverity</a> is a nice tool to
9834 find problems in C, C++ and Java code using static source code
9835 analysis. It can detect a lot of different problems, and is very
9836 useful to find memory and locking bugs in the error handling part of
9837 the source. The company behind it provide
9838 <a href="https://scan.coverity.com/">check of free software projects as
9839 a community service</a>, and many hundred free software projects are
9840 already checked. A few days ago I decided to have a closer look at
9841 the Coverity system, and discovered that the
9842 <a href="http://www.gnu.org/software/gnash/">gnash</a> and
9843 <a href="http://sourceforge.net/projects/ipmitool/">ipmitool</a>
9844 projects I am involved with was already registered. But these are
9845 fairly big, and I would also like to have a small and easy project to
9846 check, and decided to <a href="http://scan.coverity.com/projects/1179">request
9847 checking of the chrpath project</a>. It was
9848 added to the checker and discovered seven potential defects. Six of
9849 these were real, mostly resource "leak" when the program detected an
9850 error. Nothing serious, as the resources would be released a fraction
9851 of a second later when the program exited because of the error, but it
9852 is nice to do it right in case the source of the program some time in
9853 the future end up in a library. Having fixed all defects and added
9854 <a href="https://lists.alioth.debian.org/mailman/listinfo/chrpath-devel">a
9855 mailing list for the chrpath developers</a>, I decided it was time to
9856 publish a new release. These are the release notes:</p>
9857
9858 <p>New in 0.16 released 2014-01-14:</p>
9859
9860 <ul>
9861
9862 <li>Fixed all minor bugs discovered by Coverity.</li>
9863 <li>Updated config.sub and config.guess from the GNU project.</li>
9864 <li>Mention new project mailing list in the documentation.</li>
9865
9866 </ul>
9867
9868 <p>You can
9869 <a href="https://alioth.debian.org/frs/?group_id=31052">download the
9870 new version 0.16 from alioth</a>. Please let us know via the Alioth
9871 project if something is wrong with the new release. The test suite
9872 did not discover any old errors, so if you find a new one, please also
9873 include a test suite check.</p>
9874
9875 </div>
9876 <div class="tags">
9877
9878
9879 Tags: <a href="http://www.hungry.com/~pere/blog/tags/chrpath">chrpath</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
9880
9881
9882 </div>
9883 </div>
9884 <div class="padding"></div>
9885
9886 <div class="entry">
9887 <div class="title">
9888 <a href="http://www.hungry.com/~pere/blog/New_chrpath_release_0_15.html">New chrpath release 0.15</a>
9889 </div>
9890 <div class="date">
9891 24th November 2013
9892 </div>
9893 <div class="body">
9894 <p>After many years break from the package and a vain hope that
9895 development would be continued by someone else, I finally pulled my
9896 acts together this morning and wrapped up a new release of chrpath,
9897 the command line tool to modify the rpath and runpath of already
9898 compiled ELF programs. The update was triggered by the persistence of
9899 Isha Vishnoi at IBM, which needed a new config.guess file to get
9900 support for the ppc64le architecture (powerpc 64-bit Little Endian) he
9901 is working on. I checked the
9902 <a href="http://packages.qa.debian.org/chrpath">Debian</a>,
9903 <a href="https://launchpad.net/ubuntu/+source/chrpath">Ubuntu</a> and
9904 <a href="https://admin.fedoraproject.org/pkgdb/acls/name/chrpath">Fedora</a>
9905 packages for interesting patches (failed to find the source from
9906 OpenSUSE and Mandriva packages), and found quite a few nice fixes.
9907 These are the release notes:</p>
9908
9909 <p>New in 0.15 released 2013-11-24:</p>
9910
9911 <ul>
9912
9913 <li>Updated config.sub and config.guess from the GNU project to work
9914 with newer architectures. Thanks to isha vishnoi for the heads
9915 up.</li>
9916
9917 <li>Updated README with current URLs.</li>
9918
9919 <li>Added byteswap fix found in Ubuntu, credited Jeremy Kerr and
9920 Matthias Klose.</li>
9921
9922 <li>Added missing help for -k|--keepgoing option, using patch by
9923 Petr Machata found in Fedora.</li>
9924
9925 <li>Rewrite removal of RPATH/RUNPATH to make sure the entry in
9926 .dynamic is a NULL terminated string. Based on patch found in
9927 Fedora credited Axel Thimm and Christian Krause.</li>
9928
9929 </ul>
9930
9931 <p>You can
9932 <a href="https://alioth.debian.org/frs/?group_id=31052">download the
9933 new version 0.15 from alioth</a>. Please let us know via the Alioth
9934 project if something is wrong with the new release. The test suite
9935 did not discover any old errors, so if you find a new one, please also
9936 include a testsuite check.</p>
9937
9938 </div>
9939 <div class="tags">
9940
9941
9942 Tags: <a href="http://www.hungry.com/~pere/blog/tags/chrpath">chrpath</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
9943
9944
9945 </div>
9946 </div>
9947 <div class="padding"></div>
9948
9949 <div class="entry">
9950 <div class="title">
9951 <a href="http://www.hungry.com/~pere/blog/Debian_init_d_boot_script_example_for_rsyslog.html">Debian init.d boot script example for rsyslog</a>
9952 </div>
9953 <div class="date">
9954 2nd November 2013
9955 </div>
9956 <div class="body">
9957 <p>If one of the points of switching to a new init system in Debian is
9958 <a href="http://thomas.goirand.fr/blog/?p=147">to get rid of huge
9959 init.d scripts</a>, I doubt we need to switch away from sysvinit and
9960 init.d scripts at all. Here is an example init.d script, ie a rewrite
9961 of /etc/init.d/rsyslog:</p>
9962
9963 <p><pre>
9964 #!/lib/init/init-d-script
9965 ### BEGIN INIT INFO
9966 # Provides: rsyslog
9967 # Required-Start: $remote_fs $time
9968 # Required-Stop: umountnfs $time
9969 # X-Stop-After: sendsigs
9970 # Default-Start: 2 3 4 5
9971 # Default-Stop: 0 1 6
9972 # Short-Description: enhanced syslogd
9973 # Description: Rsyslog is an enhanced multi-threaded syslogd.
9974 # It is quite compatible to stock sysklogd and can be
9975 # used as a drop-in replacement.
9976 ### END INIT INFO
9977 DESC="enhanced syslogd"
9978 DAEMON=/usr/sbin/rsyslogd
9979 </pre></p>
9980
9981 <p>Pretty minimalistic to me... For the record, the original sysv-rc
9982 script was 137 lines, and the above is just 15 lines, most of it meta
9983 info/comments.</p>
9984
9985 <p>How to do this, you ask? Well, one create a new script
9986 /lib/init/init-d-script looking something like this:
9987
9988 <p><pre>
9989 #!/bin/sh
9990
9991 # Define LSB log_* functions.
9992 # Depend on lsb-base (>= 3.2-14) to ensure that this file is present
9993 # and status_of_proc is working.
9994 . /lib/lsb/init-functions
9995
9996 #
9997 # Function that starts the daemon/service
9998
9999 #
10000 do_start()
10001 {
10002 # Return
10003 # 0 if daemon has been started
10004 # 1 if daemon was already running
10005 # 2 if daemon could not be started
10006 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
10007 || return 1
10008 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
10009 $DAEMON_ARGS \
10010 || return 2
10011 # Add code here, if necessary, that waits for the process to be ready
10012 # to handle requests from services started subsequently which depend
10013 # on this one. As a last resort, sleep for some time.
10014 }
10015
10016 #
10017 # Function that stops the daemon/service
10018 #
10019 do_stop()
10020 {
10021 # Return
10022 # 0 if daemon has been stopped
10023 # 1 if daemon was already stopped
10024 # 2 if daemon could not be stopped
10025 # other if a failure occurred
10026 start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
10027 RETVAL="$?"
10028 [ "$RETVAL" = 2 ] && return 2
10029 # Wait for children to finish too if this is a daemon that forks
10030 # and if the daemon is only ever run from this initscript.
10031 # If the above conditions are not satisfied then add some other code
10032 # that waits for the process to drop all resources that could be
10033 # needed by services started subsequently. A last resort is to
10034 # sleep for some time.
10035 start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
10036 [ "$?" = 2 ] && return 2
10037 # Many daemons don't delete their pidfiles when they exit.
10038 rm -f $PIDFILE
10039 return "$RETVAL"
10040 }
10041
10042 #
10043 # Function that sends a SIGHUP to the daemon/service
10044 #
10045 do_reload() {
10046 #
10047 # If the daemon can reload its configuration without
10048 # restarting (for example, when it is sent a SIGHUP),
10049 # then implement that here.
10050 #
10051 start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
10052 return 0
10053 }
10054
10055 SCRIPTNAME=$1
10056 scriptbasename="$(basename $1)"
10057 echo "SN: $scriptbasename"
10058 if [ "$scriptbasename" != "init-d-library" ] ; then
10059 script="$1"
10060 shift
10061 . $script
10062 else
10063 exit 0
10064 fi
10065
10066 NAME=$(basename $DAEMON)
10067 PIDFILE=/var/run/$NAME.pid
10068
10069 # Exit if the package is not installed
10070 #[ -x "$DAEMON" ] || exit 0
10071
10072 # Read configuration variable file if it is present
10073 [ -r /etc/default/$NAME ] && . /etc/default/$NAME
10074
10075 # Load the VERBOSE setting and other rcS variables
10076 . /lib/init/vars.sh
10077
10078 case "$1" in
10079 start)
10080 [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
10081 do_start
10082 case "$?" in
10083 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
10084 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
10085 esac
10086 ;;
10087 stop)
10088 [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
10089 do_stop
10090 case "$?" in
10091 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
10092 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
10093 esac
10094 ;;
10095 status)
10096 status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
10097 ;;
10098 #reload|force-reload)
10099 #
10100 # If do_reload() is not implemented then leave this commented out
10101 # and leave 'force-reload' as an alias for 'restart'.
10102 #
10103 #log_daemon_msg "Reloading $DESC" "$NAME"
10104 #do_reload
10105 #log_end_msg $?
10106 #;;
10107 restart|force-reload)
10108 #
10109 # If the "reload" option is implemented then remove the
10110 # 'force-reload' alias
10111 #
10112 log_daemon_msg "Restarting $DESC" "$NAME"
10113 do_stop
10114 case "$?" in
10115 0|1)
10116 do_start
10117 case "$?" in
10118 0) log_end_msg 0 ;;
10119 1) log_end_msg 1 ;; # Old process is still running
10120 *) log_end_msg 1 ;; # Failed to start
10121 esac
10122 ;;
10123 *)
10124 # Failed to stop
10125 log_end_msg 1
10126 ;;
10127 esac
10128 ;;
10129 *)
10130 echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
10131 exit 3
10132 ;;
10133 esac
10134
10135 :
10136 </pre></p>
10137
10138 <p>It is based on /etc/init.d/skeleton, and could be improved quite a
10139 lot. I did not really polish the approach, so it might not always
10140 work out of the box, but you get the idea. I did not try very hard to
10141 optimize it nor make it more robust either.</p>
10142
10143 <p>A better argument for switching init system in Debian than reducing
10144 the size of init scripts (which is a good thing to do anyway), is to
10145 get boot system that is able to handle the kernel events sensibly and
10146 robustly, and do not depend on the boot to run sequentially. The boot
10147 and the kernel have not behaved sequentially in years.</p>
10148
10149 </div>
10150 <div class="tags">
10151
10152
10153 Tags: <a href="http://www.hungry.com/~pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
10154
10155
10156 </div>
10157 </div>
10158 <div class="padding"></div>
10159
10160 <div class="entry">
10161 <div class="title">
10162 <a href="http://www.hungry.com/~pere/blog/Browser_plugin_for_SPICE__spice_xpi__uploaded_to_Debian.html">Browser plugin for SPICE (spice-xpi) uploaded to Debian</a>
10163 </div>
10164 <div class="date">
10165 1st November 2013
10166 </div>
10167 <div class="body">
10168 <p><a href="http://www.spice-space.org/">The SPICE protocol</a> for
10169 remote display access is the preferred solution with oVirt and RedHat
10170 Enterprise Virtualization, and I was sad to discover the other day
10171 that the browser plugin needed to use these systems seamlessly was
10172 missing in Debian. The <a href="http://bugs.debian.org/668284">request
10173 for a package</a> was from 2012-04-10 with no progress since
10174 2013-04-01, so I decided to wrap up a package based on the great work
10175 from Cajus Pollmeier and put it in a collab-maint maintained git
10176 repository to get a package I could use. I would very much like
10177 others to help me maintain the package (or just take over, I do not
10178 mind), but as no-one had volunteered so far, I just uploaded it to
10179 NEW. I hope it will be available in Debian in a few days.</p>
10180
10181 <p>The source is now available from
10182 <a href="http://anonscm.debian.org/gitweb/?p=collab-maint/spice-xpi.git;a=summary">http://anonscm.debian.org/gitweb/?p=collab-maint/spice-xpi.git;a=summary</a>.</p>
10183
10184 </div>
10185 <div class="tags">
10186
10187
10188 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
10189
10190
10191 </div>
10192 </div>
10193 <div class="padding"></div>
10194
10195 <div class="entry">
10196 <div class="title">
10197 <a href="http://www.hungry.com/~pere/blog/Teaching_vmdebootstrap_to_create_Raspberry_Pi_SD_card_images.html">Teaching vmdebootstrap to create Raspberry Pi SD card images</a>
10198 </div>
10199 <div class="date">
10200 27th October 2013
10201 </div>
10202 <div class="body">
10203 <p>The
10204 <a href="http://packages.qa.debian.org/v/vmdebootstrap.html">vmdebootstrap</a>
10205 program is a a very nice system to create virtual machine images. It
10206 create a image file, add a partition table, mount it and run
10207 debootstrap in the mounted directory to create a Debian system on a
10208 stick. Yesterday, I decided to try to teach it how to make images for
10209 <a href="https://wiki.debian.org/RaspberryPi">Raspberry Pi</a>, as part
10210 of a plan to simplify the build system for
10211 <a href="https://wiki.debian.org/FreedomBox">the FreedomBox
10212 project</a>. The FreedomBox project already uses vmdebootstrap for
10213 the virtualbox images, but its current build system made multistrap
10214 based system for Dreamplug images, and it is lacking support for
10215 Raspberry Pi.</p>
10216
10217 <p>Armed with the knowledge on how to build "foreign" (aka non-native
10218 architecture) chroots for Raspberry Pi, I dived into the vmdebootstrap
10219 code and adjusted it to be able to build armel images on my amd64
10220 Debian laptop. I ended up giving vmdebootstrap five new options,
10221 allowing me to replicate the image creation process I use to make
10222 <a href="http://www.hungry.com/~pere/blog/A_Raspberry_Pi_based_batman_adv_Mesh_network_node.html">Debian
10223 Jessie based mesh node images for the Raspberry Pi</a>. First, the
10224 <tt>--foreign /path/to/binfm_handler</tt> option tell vmdebootstrap to
10225 call debootstrap with --foreign and to copy the handler into the
10226 generated chroot before running the second stage. This allow
10227 vmdebootstrap to create armel images on an amd64 host. Next I added
10228 two new options <tt>--bootsize size</tt> and <tt>--boottype
10229 fstype</tt> to teach it to create a separate /boot/ partition with the
10230 given file system type, allowing me to create an image with a vfat
10231 partition for the /boot/ stuff. I also added a <tt>--variant
10232 variant</tt> option to allow me to create smaller images without the
10233 Debian base system packages installed. Finally, I added an option
10234 <tt>--no-extlinux</tt> to tell vmdebootstrap to not install extlinux
10235 as a boot loader. It is not needed on the Raspberry Pi and probably
10236 most other non-x86 architectures. The changes were accepted by the
10237 upstream author of vmdebootstrap yesterday and today, and is now
10238 available from
10239 <a href="http://git.liw.fi/cgi-bin/cgit/cgit.cgi/vmdebootstrap/">the
10240 upstream project page</a>.</p>
10241
10242 <p>To use it to build a Raspberry Pi image using Debian Jessie, first
10243 create a small script (the customize script) to add the non-free
10244 binary blob needed to boot the Raspberry Pi and the APT source
10245 list:</p>
10246
10247 <p><pre>
10248 #!/bin/sh
10249 set -e # Exit on first error
10250 rootdir="$1"
10251 cd "$rootdir"
10252 cat &lt;&lt;EOF > etc/apt/sources.list
10253 deb http://http.debian.net/debian/ jessie main contrib non-free
10254 EOF
10255 # Install non-free binary blob needed to boot Raspberry Pi. This
10256 # install a kernel somewhere too.
10257 wget https://raw.github.com/Hexxeh/rpi-update/master/rpi-update \
10258 -O $rootdir/usr/bin/rpi-update
10259 chmod a+x $rootdir/usr/bin/rpi-update
10260 mkdir -p $rootdir/lib/modules
10261 touch $rootdir/boot/start.elf
10262 chroot $rootdir rpi-update
10263 </pre></p>
10264
10265 <p>Next, fetch the latest vmdebootstrap script and call it like this
10266 to build the image:</p>
10267
10268 <pre>
10269 sudo ./vmdebootstrap \
10270 --variant minbase \
10271 --arch armel \
10272 --distribution jessie \
10273 --mirror http://http.debian.net/debian \
10274 --image test.img \
10275 --size 600M \
10276 --bootsize 64M \
10277 --boottype vfat \
10278 --log-level debug \
10279 --verbose \
10280 --no-kernel \
10281 --no-extlinux \
10282 --root-password raspberry \
10283 --hostname raspberrypi \
10284 --foreign /usr/bin/qemu-arm-static \
10285 --customize `pwd`/customize \
10286 --package netbase \
10287 --package git-core \
10288 --package binutils \
10289 --package ca-certificates \
10290 --package wget \
10291 --package kmod
10292 </pre></p>
10293
10294 <p>The list of packages being installed are the ones needed by
10295 rpi-update to make the image bootable on the Raspberry Pi, with the
10296 exception of netbase, which is needed by debootstrap to find
10297 /etc/hosts with the minbase variant. I really wish there was a way to
10298 set up an Raspberry Pi using only packages in the Debian archive, but
10299 that is not possible as far as I know, because it boots from the GPU
10300 using a non-free binary blob.</p>
10301
10302 <p>The build host need debootstrap, kpartx and qemu-user-static and
10303 probably a few others installed. I have not checked the complete
10304 build dependency list.</p>
10305
10306 <p>The resulting image will not use the hardware floating point unit
10307 on the Raspberry PI, because the armel architecture in Debian is not
10308 optimized for that use. So the images created will be a bit slower
10309 than <a href="http://www.raspbian.org/">Raspbian</a> based images.</p>
10310
10311 </div>
10312 <div class="tags">
10313
10314
10315 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/freedombox">freedombox</a>, <a href="http://www.hungry.com/~pere/blog/tags/mesh network">mesh network</a>.
10316
10317
10318 </div>
10319 </div>
10320 <div class="padding"></div>
10321
10322 <div class="entry">
10323 <div class="title">
10324 <a href="http://www.hungry.com/~pere/blog/Good_causes__Debian_Outreach_Program_for_Women__EFF_documenting_the_spying_and_Open_access_in_Norway.html">Good causes: Debian Outreach Program for Women, EFF documenting the spying and Open access in Norway</a>
10325 </div>
10326 <div class="date">
10327 15th October 2013
10328 </div>
10329 <div class="body">
10330 <p>The last few days I came across a few good causes that should get
10331 wider attention. I recommend signing and donating to each one of
10332 these. :)</p>
10333
10334 <p>Via <a href="http://www.debian.org/News/weekly/2013/18/">Debian
10335 Project News for 2013-10-14</a> I came across the Outreach Program for
10336 Women program which is a Google Summer of Code like initiative to get
10337 more women involved in free software. One debian sponsor has offered
10338 to match <a href="http://debian.ch/opw2013">any donation done to Debian
10339 earmarked</a> for this initiative. I donated a few minutes ago, and
10340 hope you will to. :)</p>
10341
10342 <p>And the Electronic Frontier Foundation just announced plans to
10343 create <a href="https://supporters.eff.org/donate/nsa-videos">video
10344 documentaries about the excessive spying</a> on every Internet user that
10345 take place these days, and their need to fund the work. I've already
10346 donated. Are you next?</p>
10347
10348 <p>For my Norwegian audience, the organisation Studentenes og
10349 Akademikernes Internasjonale Hjelpefond is collecting signatures for a
10350 statement under the heading
10351 <a href="http://saih.no/Bloggers_United/">Bloggers United for Open
10352 Access</a> for those of us asking for more focus on open access in the
10353 Norwegian government. So far 499 signatures. I hope you will sign it
10354 too.</p>
10355
10356 </div>
10357 <div class="tags">
10358
10359
10360 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/opphavsrett">opphavsrett</a>, <a href="http://www.hungry.com/~pere/blog/tags/surveillance">surveillance</a>.
10361
10362
10363 </div>
10364 </div>
10365 <div class="padding"></div>
10366
10367 <div class="entry">
10368 <div class="title">
10369 <a href="http://www.hungry.com/~pere/blog/Videos_about_the_Freedombox_project___for_inspiration_and_learning.html">Videos about the Freedombox project - for inspiration and learning</a>
10370 </div>
10371 <div class="date">
10372 27th September 2013
10373 </div>
10374 <div class="body">
10375 <p>The <a href="http://www.freedomboxfoundation.org/">Freedombox
10376 project</a> have been going on for a while, and have presented the
10377 vision, ideas and solution several places. Here is a little
10378 collection of videos of talks and presentation of the project.</p>
10379
10380 <ul>
10381
10382 <li><a href="http://www.youtube.com/watch?v=ukvUz5taxvA">FreedomBox -
10383 2,5 minute marketing film</a> (Youtube)</li>
10384
10385 <li><a href="http://www.youtube.com/watch?v=SzW25QTVWsE">Eben Moglen
10386 discusses the Freedombox on CBS news 2011</a> (Youtube)</li>
10387
10388 <li><a href="http://www.youtube.com/watch?v=Ae8SZbxfE0g">Eben Moglen -
10389 Freedom in the Cloud - Software Freedom, Privacy and and Security for
10390 Web 2.0 and Cloud computing at ISOC-NY Public Meeting 2010</a>
10391 (Youtube)</li>
10392
10393 <li><a href="http://www.youtube.com/watch?v=vNaIji_3xBE">Fosdem 2011
10394 Keynote by Eben Moglen presenting the Freedombox</a> (Youtube)</li>
10395
10396 <li><a href="http://www.youtube.com/watch?v=9bDDUyJSQ9s">Presentation of
10397 the Freedombox by James Vasile at Elevate in Gratz 2011</a> (Youtube)</li>
10398
10399 <li><a href="http://www.youtube.com/watch?v=zQTmnk27g9s"> Freedombox -
10400 Discovery, Identity, and Trust by Nick Daly at Freedombox Hackfest New
10401 York City in 2012</a> (Youtube)</li>
10402
10403 <li><a href="http://www.youtube.com/watch?v=tkbSB4Ba7Ck">Introduction
10404 to the Freedombox at Freedombox Hackfest New York City in 2012</a>
10405 (Youtube)</li>
10406
10407 <li><a href="http://www.youtube.com/watch?v=z-P2Jaeg0aQ">Freedom, Out
10408 of the Box! by Bdale Garbee at linux.conf.au Ballarat, 2012</a> (Youtube) </li>
10409
10410 <li><a href="https://archive.fosdem.org/2013/schedule/event/freedombox/">Freedombox
10411 1.0 by Eben Moglen and Bdale Garbee at Fosdem 2013</a> (FOSDEM) </li>
10412
10413 <li><a href="http://www.youtube.com/watch?v=e1LpYX2zVYg">What is the
10414 FreedomBox today by Bdale Garbee at Debconf13 in Vaumarcus
10415 2013</a> (Youtube)</li>
10416
10417 </ul>
10418
10419 <p>A larger list is available from
10420 <a href="https://wiki.debian.org/FreedomBox/TalksAndPresentations">the
10421 Freedombox Wiki</a>.</p>
10422
10423 <p>On other news, I am happy to report that Freedombox based on Debian
10424 Jessie is coming along quite well, and soon both Owncloud and using
10425 Tor should be available for testers of the Freedombox solution. :) In
10426 a few weeks I hope everything needed to test it is included in Debian.
10427 The withsqlite package is already in Debian, and the plinth package is
10428 pending in NEW. The third and vital part of that puzzle is the
10429 metapackage/setup framework, which is still pending an upload. Join
10430 us on <a href="irc://irc.debian.org:6667/%23freedombox">IRC
10431 (#freedombox on irc.debian.org)</a> and
10432 <a href="http://lists.alioth.debian.org/mailman/listinfo/freedombox-discuss">the
10433 mailing list</a> if you want to help make this vision come true.</p>
10434
10435 </div>
10436 <div class="tags">
10437
10438
10439 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/freedombox">freedombox</a>, <a href="http://www.hungry.com/~pere/blog/tags/sikkerhet">sikkerhet</a>, <a href="http://www.hungry.com/~pere/blog/tags/surveillance">surveillance</a>, <a href="http://www.hungry.com/~pere/blog/tags/web">web</a>.
10440
10441
10442 </div>
10443 </div>
10444 <div class="padding"></div>
10445
10446 <div class="entry">
10447 <div class="title">
10448 <a href="http://www.hungry.com/~pere/blog/Recipe_to_test_the_Freedombox_project_on_amd64_or_Raspberry_Pi.html">Recipe to test the Freedombox project on amd64 or Raspberry Pi</a>
10449 </div>
10450 <div class="date">
10451 10th September 2013
10452 </div>
10453 <div class="body">
10454 <p>I was introduced to the
10455 <a href="http://www.freedomboxfoundation.org/">Freedombox project</a>
10456 in 2010, when Eben Moglen presented his vision about serving the need
10457 of non-technical people to keep their personal information private and
10458 within the legal protection of their own homes. The idea is to give
10459 people back the power over their network and machines, and return
10460 Internet back to its intended peer-to-peer architecture. Instead of
10461 depending on a central service, the Freedombox will give everyone
10462 control over their own basic infrastructure.</p>
10463
10464 <p>I've intended to join the effort since then, but other tasks have
10465 taken priority. But this summers nasty news about the misuse of trust
10466 and privilege exercised by the "western" intelligence gathering
10467 communities increased my eagerness to contribute to a point where I
10468 actually started working on the project a while back.</p>
10469
10470 <p>The <a href="https://alioth.debian.org/projects/freedombox/">initial
10471 Debian initiative</a> based on the vision from Eben Moglen, is to
10472 create a simple and cheap Debian based appliance that anyone can hook
10473 up in their home and get access to secure and private services and
10474 communication. The initial deployment platform have been the
10475 <a href="http://www.globalscaletechnologies.com/t-dreamplugdetails.aspx">Dreamplug</a>,
10476 which is a piece of hardware I do not own. So to be able to test what
10477 the current Freedombox setup look like, I had to come up with a way to install
10478 it on some hardware I do have access to. I have rewritten the
10479 <a href="https://github.com/NickDaly/freedom-maker">freedom-maker</a>
10480 image build framework to use .deb packages instead of only copying
10481 setup into the boot images, and thanks to this rewrite I am able to
10482 set up any machine supported by Debian Wheezy as a Freedombox, using
10483 the previously mentioned deb (and a few support debs for packages
10484 missing in Debian).</p>
10485
10486 <p>The current Freedombox setup consist of a set of bootstrapping
10487 scripts
10488 (<a href="https://github.com/petterreinholdtsen/freedombox-setup">freedombox-setup</a>),
10489 and a administrative web interface
10490 (<a href="https://github.com/NickDaly/Plinth">plinth</a> + exmachina +
10491 withsqlite), as well as a privacy enhancing proxy based on
10492 <a href="http://packages.qa.debian.org/privoxy">privoxy</a>
10493 (freedombox-privoxy). There is also a web/javascript based XMPP
10494 client (<a href="http://packages.qa.debian.org/jwchat">jwchat</a>)
10495 trying (unsuccessfully so far) to talk to the XMPP server
10496 (<a href="http://packages.qa.debian.org/ejabberd">ejabberd</a>). The
10497 web interface is pluggable, and the goal is to use it to enable OpenID
10498 services, mesh network connectivity, use of TOR, etc, etc. Not much of
10499 this is really working yet, see
10500 <a href="https://github.com/NickDaly/freedombox-todos/blob/master/TODO">the
10501 project TODO</a> for links to GIT repositories. Most of the code is
10502 on github at the moment. The HTTP proxy is operational out of the
10503 box, and the admin web interface can be used to add/remove plinth
10504 users. I've not been able to do anything else with it so far, but
10505 know there are several branches spread around github and other places
10506 with lots of half baked features.</p>
10507
10508 <p>Anyway, if you want to have a look at the current state, the
10509 following recipes should work to give you a test machine to poke
10510 at.</p>
10511
10512 <p><strong>Debian Wheezy amd64</strong></p>
10513
10514 <ol>
10515
10516 <li>Fetch normal Debian Wheezy installation ISO.</li>
10517 <li>Boot from it, either as CD or USB stick.</li>
10518 <li><p>Press [tab] on the boot prompt and add this as a boot argument
10519 to the Debian installer:<p>
10520 <pre>url=<a href="http://www.reinholdtsen.name/freedombox/preseed-wheezy.dat">http://www.reinholdtsen.name/freedombox/preseed-wheezy.dat</a></pre></li>
10521
10522 <li>Answer the few language/region/password questions and pick disk to
10523 install on.</li>
10524
10525 <li>When the installation is finished and the machine have rebooted a
10526 few times, your Freedombox is ready for testing.</li>
10527
10528 </ol>
10529
10530 <p><strong>Raspberry Pi Raspbian</strong></p>
10531
10532 <ol>
10533
10534 <li>Fetch a Raspbian SD card image, create SD card.</li>
10535 <li>Boot from SD card, extend file system to fill the card completely.</li>
10536 <li><p>Log in and add this to /etc/sources.list:</p>
10537 <pre>
10538 deb <a href="http://www.reinholdtsen.name/freedombox/">http://www.reinholdtsen.name/freedombox</a> wheezy main
10539 </pre></li>
10540 <li><p>Run this as root:</p>
10541 <pre>
10542 wget -O - http://www.reinholdtsen.name/freedombox/BE1A583D.asc | \
10543 apt-key add -
10544 apt-get update
10545 apt-get install freedombox-setup
10546 /usr/lib/freedombox/setup
10547 </pre></li>
10548 <li>Reboot into your freshly created Freedombox.</li>
10549
10550 </ol>
10551
10552 <p>You can test it on other architectures too, but because the
10553 freedombox-privoxy package is binary, it will only work as intended on
10554 the architectures where I have had time to build the binary and put it
10555 in my APT repository. But do not let this stop you. It is only a
10556 short "<tt>apt-get source -b freedombox-privoxy</tt>" away. :)</p>
10557
10558 <p>Note that by default Freedombox is a DHCP server on the
10559 192.168.1.0/24 subnet, so if this is your subnet be careful and turn
10560 off the DHCP server by running "<tt>update-rc.d isc-dhcp-server
10561 disable</tt>" as root.</p>
10562
10563 <p>Please let me know if this works for you, or if you have any
10564 problems. We gather on the IRC channel
10565 <a href="irc://irc.debian.org:6667/%23freedombox">#freedombox</a> on
10566 irc.debian.org and the
10567 <a href="http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/freedombox-discuss">project
10568 mailing list</a>.</p>
10569
10570 <p>Once you get your freedombox operational, you can visit
10571 <tt>http://your-host-name:8001/</tt> to see the state of the plint
10572 welcome screen (dead end - do not be surprised if you are unable to
10573 get past it), and next visit <tt>http://your-host-name:8001/help/</tt>
10574 to look at the rest of plinth. The default user is 'admin' and the
10575 default password is 'secret'.</p>
10576
10577 </div>
10578 <div class="tags">
10579
10580
10581 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/freedombox">freedombox</a>, <a href="http://www.hungry.com/~pere/blog/tags/sikkerhet">sikkerhet</a>, <a href="http://www.hungry.com/~pere/blog/tags/surveillance">surveillance</a>, <a href="http://www.hungry.com/~pere/blog/tags/web">web</a>.
10582
10583
10584 </div>
10585 </div>
10586 <div class="padding"></div>
10587
10588 <div class="entry">
10589 <div class="title">
10590 <a href="http://www.hungry.com/~pere/blog/Intel_180_SSD_disk_with_Lenovo_firmware_can_not_use_Intel_firmware.html">Intel 180 SSD disk with Lenovo firmware can not use Intel firmware</a>
10591 </div>
10592 <div class="date">
10593 18th August 2013
10594 </div>
10595 <div class="body">
10596 <p>Earlier, I reported about
10597 <a href="http://www.hungry.com/~pere/blog/How_to_fix_a_Thinkpad_X230_with_a_broken_180_GB_SSD_disk.html">my
10598 problems using an Intel SSD 520 Series 180 GB disk</a>. Friday I was
10599 told by IBM that the original disk should be thrown away. And as
10600 there no longer was a problem if I bricked the firmware, I decided
10601 today to try to install Intel firmware to replace the Lenovo firmware
10602 currently on the disk.</p>
10603
10604 <p>I searched the Intel site for firmware, and found
10605 <a href="https://downloadcenter.intel.com/Detail_Desc.aspx?agr=Y&ProdId=3472&DwnldID=18363&ProductFamily=Solid-State+Drives+and+Caching&ProductLine=Intel%c2%ae+High+Performance+Solid-State+Drive&ProductProduct=Intel%c2%ae+SSD+520+Series+(180GB%2c+2.5in+SATA+6Gb%2fs%2c+25nm%2c+MLC)&lang=eng">issdfut_2.0.4.iso</a>
10606 (aka Intel SATA Solid-State Drive Firmware Update Tool) which
10607 according to the site should contain the latest firmware for SSD
10608 disks. I inserted the broken disk in one of my spare laptops and
10609 booted the ISO from a USB stick. The disk was recognized, but the
10610 program claimed the newest firmware already were installed and refused
10611 to insert any Intel firmware. So no change, and the disk is still
10612 unable to handle write load. :( I guess the only way to get them
10613 working would be if Lenovo releases new firmware. No idea how likely
10614 that is. Anyway, just blogging about this test for completeness. I
10615 got a working Samsung disk, and see no point in spending more time on
10616 the broken disks.</p>
10617
10618 </div>
10619 <div class="tags">
10620
10621
10622 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
10623
10624
10625 </div>
10626 </div>
10627 <div class="padding"></div>
10628
10629 <div class="entry">
10630 <div class="title">
10631 <a href="http://www.hungry.com/~pere/blog/How_to_fix_a_Thinkpad_X230_with_a_broken_180_GB_SSD_disk.html">How to fix a Thinkpad X230 with a broken 180 GB SSD disk</a>
10632 </div>
10633 <div class="date">
10634 17th July 2013
10635 </div>
10636 <div class="body">
10637 <p>Today I switched to
10638 <a href="http://www.hungry.com/~pere/blog/The_Thinkpad_is_dead__long_live_the_Thinkpad_X230_.html">my
10639 new laptop</a>. I've previously written about the problems I had with
10640 my new Thinkpad X230, which was delivered with an
10641 <a href="http://www.hungry.com/~pere/blog/Intel_SSD_520_Series_180_GB_with_Lenovo_firmware_still_lock_up_from_sustained_writes.html">180
10642 GB Intel SSD disk with Lenovo firmware</a> that did not handle
10643 sustained writes. My hardware supplier have been very forthcoming in
10644 trying to find a solution, and after first trying with another
10645 identical 180 GB disks they decided to send me a 256 GB Samsung SSD
10646 disk instead to fix it once and for all. The Samsung disk survived
10647 the installation of Debian with encrypted disks (filling the disk with
10648 random data during installation killed the first two), and I thus
10649 decided to trust it with my data. I have installed it as a Debian Edu
10650 Wheezy roaming workstation hooked up with my Debian Edu Squeeze main
10651 server at home using Kerberos and LDAP, and will use it as my work
10652 station from now on.</p>
10653
10654 <p>As this is a solid state disk with no moving parts, I believe the
10655 Debian Wheezy default installation need to be tuned a bit to increase
10656 performance and increase life time of the disk. The Linux kernel and
10657 user space applications do not yet adjust automatically to such
10658 environment. To make it easier for my self, I created a draft Debian
10659 package <tt>ssd-setup</tt> to handle this tuning. The
10660 <a href="http://anonscm.debian.org/gitweb/?p=collab-maint/ssd-setup.git">source
10661 for the ssd-setup package</a> is available from collab-maint, and it
10662 is set up to adjust the setup of the machine by just installing the
10663 package. If there is any non-SSD disk in the machine, the package
10664 will refuse to install, as I did not try to write any logic to sort
10665 file systems in SSD and non-SSD file systems.</p>
10666
10667 <p>I consider the package a draft, as I am a bit unsure how to best
10668 set up Debian Wheezy with an SSD. It is adjusted to my use case,
10669 where I set up the machine with one large encrypted partition (in
10670 addition to /boot), put LVM on top of this and set up partitions on
10671 top of this again. See the README file in the package source for the
10672 references I used to pick the settings. At the moment these
10673 parameters are tuned:</p>
10674
10675 <ul>
10676
10677 <li>Set up cryptsetup to pass TRIM commands to the physical disk
10678 (adding discard to /etc/crypttab)</li>
10679
10680 <li>Set up LVM to pass on TRIM commands to the underlying device (in
10681 this case a cryptsetup partition) by changing issue_discards from
10682 0 to 1 in /etc/lvm/lvm.conf.</li>
10683
10684 <li>Set relatime as a file system option for ext3 and ext4 file
10685 systems.</li>
10686
10687 <li>Tell swap to use TRIM commands by adding 'discard' to
10688 /etc/fstab.</li>
10689
10690 <li>Change I/O scheduler from cfq to deadline using a udev rule.</li>
10691
10692 <li>Run fstrim on every ext3 and ext4 file system every night (from
10693 cron.daily).</li>
10694
10695 <li>Adjust sysctl values vm.swappiness to 1 and vm.vfs_cache_pressure
10696 to 50 to reduce the kernel eagerness to swap out processes.</li>
10697
10698 </ul>
10699
10700 <p>During installation, I cancelled the part where the installer fill
10701 the disk with random data, as this would kill the SSD performance for
10702 little gain. My goal with the encrypted file system is to ensure
10703 those stealing my laptop end up with a brick and not a working
10704 computer. I have no hope in keeping the really resourceful people
10705 from getting the data on the disk (see
10706 <a href="http://xkcd.com/538/">XKCD #538</a> for an explanation why).
10707 Thus I concluded that adding the discard option to crypttab is the
10708 right thing to do.</p>
10709
10710 <p>I considered using the noop I/O scheduler, as several recommended
10711 it for SSD, but others recommended deadline and a benchmark I found
10712 indicated that deadline might be better for interactive use.</p>
10713
10714 <p>I also considered using the 'discard' file system option for ext3
10715 and ext4, but read that it would give a performance hit ever time a
10716 file is removed, and thought it best to that that slowdown once a day
10717 instead of during my work.</p>
10718
10719 <p>My package do not set up tmpfs on /var/run, /var/lock and /tmp, as
10720 this is already done by Debian Edu.</p>
10721
10722 <p>I have not yet started on the user space tuning. I expect
10723 iceweasel need some tuning, and perhaps other applications too, but
10724 have not yet had time to investigate those parts.</p>
10725
10726 <p>The package should work on Ubuntu too, but I have not yet tested it
10727 there.</p>
10728
10729 <p>As for the answer to the question in the title of this blog post,
10730 as far as I know, the only solution I know about is to replace the
10731 disk. It might be possible to flash it with Intel firmware instead of
10732 the Lenovo firmware. But I have not tried and did not want to do so
10733 without approval from Lenovo as I wanted to keep the warranty on the
10734 disk until a solution was found and they wanted the broken disks
10735 back.</p>
10736
10737 </div>
10738 <div class="tags">
10739
10740
10741 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
10742
10743
10744 </div>
10745 </div>
10746 <div class="padding"></div>
10747
10748 <div class="entry">
10749 <div class="title">
10750 <a href="http://www.hungry.com/~pere/blog/Intel_SSD_520_Series_180_GB_with_Lenovo_firmware_still_lock_up_from_sustained_writes.html">Intel SSD 520 Series 180 GB with Lenovo firmware still lock up from sustained writes</a>
10751 </div>
10752 <div class="date">
10753 10th July 2013
10754 </div>
10755 <div class="body">
10756 <p>A few days ago, I wrote about
10757 <a href="http://www.hungry.com/~pere/blog/The_Thinkpad_is_dead__long_live_the_Thinkpad_X230_.html">the
10758 problems I experienced with my new X230 and its SSD disk</a>, which
10759 was dying during installation because it is unable to cope with
10760 sustained write. My supplier is in contact with
10761 <a href="http://www.lenovo.com/">Lenovo</a>, and they wanted to send a
10762 replacement disk to try to fix the problem. They decided to send an
10763 identical model, so my hopes for a permanent fix was slim.</p>
10764
10765 <p>Anyway, today I got the replacement disk and tried to install
10766 Debian Edu Wheezy with encrypted disk on it. The new disk have the
10767 same firmware version as the original. This time my hope raised
10768 slightly as the installation progressed, as the original disk used to
10769 die after 4-7% of the disk was written to, while this time it kept
10770 going past 10%, 20%, 40% and even past 50%. But around 60%, the disk
10771 died again and I was back on square one. I still do not have a new
10772 laptop with a disk I can trust. I can not live with a disk that might
10773 lock up when I download a new
10774 <a href="http://www.skolelinux.org/">Debian Edu / Skolelinux</a> ISO or
10775 other large files. I look forward to hearing from my supplier with
10776 the next proposal from Lenovo.</p>
10777
10778 <p>The original disk is marked Intel SSD 520 Series 180 GB,
10779 11S0C38722Z1ZNME35X1TR, ISN: CVCV321407HB180EGN, SA: G57560302, FW:
10780 LF1i, 29MAY2013, PBA: G39779-300, LBA 351,651,888, LI P/N: 0C38722,
10781 Pb-free 2LI, LC P/N: 16-200366, WWN: 55CD2E40002756C4, Model:
10782 SSDSC2BW180A3L 2.5" 6Gb/s SATA SSD 180G 5V 1A, ASM P/N 0C38732, FRU
10783 P/N 45N8295, P0C38732.</p>
10784
10785 <p>The replacement disk is marked Intel SSD 520 Series 180 GB,
10786 11S0C38722Z1ZNDE34N0L0, ISN: CVCV315306RK180EGN, SA: G57560-302, FW:
10787 LF1i, 22APR2013, PBA: G39779-300, LBA 351,651,888, LI P/N: 0C38722,
10788 Pb-free 2LI, LC P/N: 16-200366, WWN: 55CD2E40000AB69E, Model:
10789 SSDSC2BW180A3L 2.5" 6Gb/s SATA SSD 180G 5V 1A, ASM P/N 0C38732, FRU
10790 P/N 45N8295, P0C38732.</p>
10791
10792 <p>The only difference is in the first number (serial number?), ISN,
10793 SA, date and WNPP values. Mentioning all the details here in case
10794 someone is able to use the information to find a way to identify the
10795 failing disk among working ones (if any such working disk actually
10796 exist).</p>
10797
10798 </div>
10799 <div class="tags">
10800
10801
10802 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
10803
10804
10805 </div>
10806 </div>
10807 <div class="padding"></div>
10808
10809 <div class="entry">
10810 <div class="title">
10811 <a href="http://www.hungry.com/~pere/blog/July_13th__Debian_Ubuntu_BSP_and_Skolelinux_Debian_Edu_developer_gathering_in_Oslo.html">July 13th: Debian/Ubuntu BSP and Skolelinux/Debian Edu developer gathering in Oslo</a>
10812 </div>
10813 <div class="date">
10814 9th July 2013
10815 </div>
10816 <div class="body">
10817 <p>The upcoming Saturday, 2013-07-13, we are organising a combined
10818 Debian Edu developer gathering and Debian and Ubuntu bug squashing
10819 party in Oslo. It is organised by <a href="http://www.nuug.no/">the
10820 member assosiation NUUG</a> and
10821 <a href="http://www.skolelinux.org/">the Debian Edu / Skolelinux
10822 project</a> together with <a href="http://bitraf.no/">the hack space
10823 Bitraf</a>.</p>
10824
10825 <p>It starts 10:00 and continue until late evening. Everyone is
10826 welcome, and there is no fee to participate. There is on the other
10827 hand limited space, and only room for 30 people. Please put your name
10828 on <a href="http://wiki.debian.org/BSP/2013/07/13/no/Oslo">the event
10829 wiki page</a> if you plan to join us.</p>
10830
10831 </div>
10832 <div class="tags">
10833
10834
10835 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nuug">nuug</a>.
10836
10837
10838 </div>
10839 </div>
10840 <div class="padding"></div>
10841
10842 <div class="entry">
10843 <div class="title">
10844 <a href="http://www.hungry.com/~pere/blog/The_Thinkpad_is_dead__long_live_the_Thinkpad_X230_.html">The Thinkpad is dead, long live the Thinkpad X230?</a>
10845 </div>
10846 <div class="date">
10847 5th July 2013
10848 </div>
10849 <div class="body">
10850 <p>Half a year ago, I reported that I had to find a
10851 <a href="http://www.hungry.com/~pere/blog/Thank_you_Thinkpad_X41__for_your_long_and_trustworthy_service.html">replacement
10852 for my trusty old Thinkpad X41</a>. Unfortunately I did not have much
10853 time to spend on it, and it took a while to find a model I believe
10854 will do the job, but two days ago the replacement finally arrived. I
10855 ended up picking a
10856 <a href="http://www.linlap.com/lenovo_thinkpad_x230">Thinkpad X230</a>
10857 with SSD disk (NZDAJMN). I first test installed Debian Edu Wheezy as
10858 a roaming workstation, and it seemed to work flawlessly. But my
10859 second installation with encrypted disk was not as successful. More
10860 on that below.</p>
10861
10862 <p>I had a hard time trying to track down a good laptop, as my most
10863 important requirements (robust and with a good keyboard) are never
10864 listed in the feature list. But I did get good help from the search
10865 feature at <a href="http://www.prisjakt.no/">Prisjakt</a>, which
10866 allowed me to limit the list of interesting laptops based on my other
10867 requirements. A bit surprising that SSD disk are not disks according
10868 to that search interface, so I had to drop specifying the number of
10869 disks from my search parameters. I also asked around among friends to
10870 get their impression on keyboards and robustness.</p>
10871
10872 <p>So the new laptop arrived, and it is quite a lot wider than the
10873 X41. I am not quite convinced about the keyboard, as it is
10874 significantly wider than my old keyboard, and I have to stretch my
10875 hand a lot more to reach the edges. But the key response is fairly
10876 good and the individual key shape is fairly easy to handle, so I hope
10877 I will get used to it. My old X40 was starting to fail, and I really
10878 needed a new laptop now. :)</p>
10879
10880 <p>Turning off the touch pad was simple. All it took was a quick
10881 visit to the BIOS during boot it disable it.</p>
10882
10883 <p>But there is a fatal problem with the laptop. The 180 GB SSD disk
10884 lock up during load. And this happen when installing Debian Wheezy
10885 with encrypted disk, while the disk is being filled with random data.
10886 I also tested to install Ubuntu Raring, and it happen there too if I
10887 reenable the code to fill the disk with random data (it is disabled by
10888 default in Ubuntu). And the bug with is already known. It was
10889 reported to Debian as <a href="http://bugs.debian.org/691427">BTS
10890 report #691427 2012-10-25</a> (journal commit I/O error on brand-new
10891 Thinkpad T430s ext4 on lvm on SSD). It is also reported to the Linux
10892 kernel developers as
10893 <a href="https://bugzilla.kernel.org/show_bug.cgi?id=51861">Kernel bugzilla
10894 report #51861 2012-12-20</a> (Intel SSD 520 stops working under load
10895 (SSDSC2BW180A3L in Lenovo ThinkPad T430s)). It is also reported on the
10896 Lenovo forums, both for
10897 <a href="http://forums.lenovo.com/t5/T400-T500-and-newer-T-series/T430s-Intel-SSD-520-180GB-issue/m-p/1070549">T430
10898 2012-11-10</a> and for
10899 <a href="http://forums.lenovo.com/t5/X-Series-ThinkPad-Laptops/x230-SATA-errors-with-180GB-Intel-520-SSD-under-heavy-write-load/m-p/1068147">X230
10900 03-20-2013</a>. The problem do not only affect installation. The
10901 reports state that the disk lock up during use if many writes are done
10902 on the disk, so it is much no use to work around the installation
10903 problem and end up with a computer that can lock up at any moment.
10904 There is even a
10905 <a href="https://git.efficios.com/?p=test-ssd.git">small C program
10906 available</a> that will lock up the hard drive after running a few
10907 minutes by writing to a file.</p>
10908
10909 <p>I've contacted my supplier and asked how to handle this, and after
10910 contacting PCHELP Norway (request 01D1FDP) which handle support
10911 requests for Lenovo, his first suggestion was to upgrade the disk
10912 firmware. Unfortunately there is no newer firmware available from
10913 Lenovo, as my disk already have the most recent one (version LF1i). I
10914 hope to hear more from him today and hope the problem can be
10915 fixed. :)</p>
10916
10917 </div>
10918 <div class="tags">
10919
10920
10921 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
10922
10923
10924 </div>
10925 </div>
10926 <div class="padding"></div>
10927
10928 <div class="entry">
10929 <div class="title">
10930 <a href="http://www.hungry.com/~pere/blog/The_Thinkpad_is_dead__long_live_the_Thinkpad_X230.html">The Thinkpad is dead, long live the Thinkpad X230</a>
10931 </div>
10932 <div class="date">
10933 4th July 2013
10934 </div>
10935 <div class="body">
10936 <p>Half a year ago, I reported that I had to find a replacement for my
10937 trusty old Thinkpad X41. Unfortunately I did not have much time to
10938 spend on it, but today the replacement finally arrived. I ended up
10939 picking a <a href="http://www.linlap.com/lenovo_thinkpad_x230">Thinkpad
10940 X230</a> with SSD disk (NZDAJMN). I first test installed Debian Edu
10941 Wheezy as a roaming workstation, and it worked flawlessly. As I write
10942 this, it is installing what I hope will be a more final installation,
10943 with a encrypted hard drive to ensure any dope head stealing it end up
10944 with an expencive door stop.</p>
10945
10946 <p>I had a hard time trying to track down a good laptop, as my most
10947 important requirements (robust and with a good keyboard) are never
10948 listed in the feature list. But I did get good help from the search
10949 feature at <ahref="http://www.prisjakt.no/">Prisjakt</a>, which
10950 allowed me to limit the list of interesting laptops based on my other
10951 requirements. A bit surprising that SSD disk are not disks, so I had
10952 to drop number of disks from my search parameters.</p>
10953
10954 <p>I am not quite convinced about the keyboard, as it is significantly
10955 wider than my old keyboard, and I have to stretch my hand a lot more
10956 to reach the edges. But the key response is fairly good and the
10957 individual key shape is fairly easy to handle, so I hope I will get
10958 used to it. My old X40 was starting to fail, and I really needed a
10959 new laptop now. :)</p>
10960
10961 <p>I look forward to figuring out how to turn off the touch pad.</p>
10962
10963 </div>
10964 <div class="tags">
10965
10966
10967 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
10968
10969
10970 </div>
10971 </div>
10972 <div class="padding"></div>
10973
10974 <div class="entry">
10975 <div class="title">
10976 <a href="http://www.hungry.com/~pere/blog/Automatically_locate_and_install_required_firmware_packages_on_Debian__Isenkram_0_4_.html">Automatically locate and install required firmware packages on Debian (Isenkram 0.4)</a>
10977 </div>
10978 <div class="date">
10979 25th June 2013
10980 </div>
10981 <div class="body">
10982 <p>It annoys me when the computer fail to do automatically what it is
10983 perfectly capable of, and I have to do it manually to get things
10984 working. One such task is to find out what firmware packages are
10985 needed to get the hardware on my computer working. Most often this
10986 affect the wifi card, but some times it even affect the RAID
10987 controller or the ethernet card. Today I pushed version 0.4 of the
10988 <a href="http://packages.qa.debian.org/isenkram">Isenkram package</a>
10989 including a new script isenkram-autoinstall-firmware handling the
10990 process of asking all the loaded kernel modules what firmware files
10991 they want, find debian packages providing these files and install the
10992 debian packages. Here is a test run on my laptop:</p>
10993
10994 <p><pre>
10995 # isenkram-autoinstall-firmware
10996 info: kernel drivers requested extra firmware: ipw2200-bss.fw ipw2200-ibss.fw ipw2200-sniffer.fw
10997 info: fetching http://http.debian.net/debian/dists/squeeze/Contents-i386.gz
10998 info: locating packages with the requested firmware files
10999 info: Updating APT sources after adding non-free APT source
11000 info: trying to install firmware-ipw2x00
11001 firmware-ipw2x00
11002 firmware-ipw2x00
11003 Preconfiguring packages ...
11004 Selecting previously deselected package firmware-ipw2x00.
11005 (Reading database ... 259727 files and directories currently installed.)
11006 Unpacking firmware-ipw2x00 (from .../firmware-ipw2x00_0.28+squeeze1_all.deb) ...
11007 Setting up firmware-ipw2x00 (0.28+squeeze1) ...
11008 #
11009 </pre></p>
11010
11011 <p>When all the requested firmware is present, a simple message is
11012 printed instead:</p>
11013
11014 <p><pre>
11015 # isenkram-autoinstall-firmware
11016 info: did not find any firmware files requested by loaded kernel modules. exiting
11017 #
11018 </pre></p>
11019
11020 <p>It could use some polish, but it is already working well and saving
11021 me some time when setting up new machines. :)</p>
11022
11023 <p>So, how does it work? It look at the set of currently loaded
11024 kernel modules, and look up each one of them using modinfo, to find
11025 the firmware files listed in the module meta-information. Next, it
11026 download the Contents file from a nearby APT mirror, and search for
11027 the firmware files in this file to locate the package with the
11028 requested firmware file. If the package is in the non-free section, a
11029 non-free APT source is added and the package is installed using
11030 <tt>apt-get install</tt>. The end result is a slightly better working
11031 machine.</p>
11032
11033 <p>I hope someone find time to implement a more polished version of
11034 this script as part of the hw-detect debian-installer module, to
11035 finally fix <a href="http://bugs.debian.org/655507">BTS report
11036 #655507</a>. There really is no need to insert USB sticks with
11037 firmware during a PXE install when the packages already are available
11038 from the nearby Debian mirror.</p>
11039
11040 </div>
11041 <div class="tags">
11042
11043
11044 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/isenkram">isenkram</a>.
11045
11046
11047 </div>
11048 </div>
11049 <div class="padding"></div>
11050
11051 <div class="entry">
11052 <div class="title">
11053 <a href="http://www.hungry.com/~pere/blog/Fixing_the_Linux_black_screen_of_death_on_machines_with_Intel_HD_video.html">Fixing the Linux black screen of death on machines with Intel HD video</a>
11054 </div>
11055 <div class="date">
11056 11th June 2013
11057 </div>
11058 <div class="body">
11059 <p>When installing RedHat, Fedora, Debian and Ubuntu on some machines,
11060 the screen just turn black when Linux boot, either during installation
11061 or on first boot from the hard disk. I've seen it once in a while the
11062 last few years, but only recently understood the cause. I've seen it
11063 on HP laptops, and on my latest acquaintance the Packard Bell laptop.
11064 The reason seem to be in the wiring of some laptops. The system to
11065 control the screen background light is inverted, so when Linux try to
11066 turn the brightness fully on, it end up turning it off instead. I do
11067 not know which Linux drivers are affected, but this post is about the
11068 i915 driver used by the
11069 <a href="http://www.linlap.com/packard_bell_easynote_lv">Packard Bell
11070 EasyNote LV</a>, Thinkpad X40 and many other laptops.</p>
11071
11072 <p>The problem can be worked around two ways. Either by adding
11073 i915.invert_brightness=1 as a kernel option, or by adding a file in
11074 /etc/modprobe.d/ to tell modprobe to add the invert_brightness=1
11075 option when it load the i915 kernel module. On Debian and Ubuntu, it
11076 can be done by running these commands as root:</p>
11077
11078 <pre>
11079 echo options i915 invert_brightness=1 | tee /etc/modprobe.d/i915.conf
11080 update-initramfs -u -k all
11081 </pre>
11082
11083 <p>Since March 2012 there is
11084 <a href="http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=4dca20efb1a9c2efefc28ad2867e5d6c3f5e1955">a
11085 mechanism in the Linux kernel</a> to tell the i915 driver which
11086 hardware have this problem, and get the driver to invert the
11087 brightness setting automatically. To use it, one need to add a row in
11088 <a href="http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/gpu/drm/i915/intel_display.c">the
11089 intel_quirks array</a> in the driver source
11090 <tt>drivers/gpu/drm/i915/intel_display.c</tt> (look for "<tt>static
11091 struct intel_quirk intel_quirks</tt>"), specifying the PCI device
11092 number (vendor number 8086 is assumed) and subdevice vendor and device
11093 number.</p>
11094
11095 <p>My Packard Bell EasyNote LV got this output from <tt>lspci
11096 -vvnn</tt> for the video card in question:</p>
11097
11098 <p><pre>
11099 00:02.0 VGA compatible controller [0300]: Intel Corporation \
11100 3rd Gen Core processor Graphics Controller [8086:0156] \
11101 (rev 09) (prog-if 00 [VGA controller])
11102 Subsystem: Acer Incorporated [ALI] Device [1025:0688]
11103 Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- \
11104 ParErr- Stepping- SE RR- FastB2B- DisINTx+
11105 Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- \
11106 <TAbort- <MAbort->SERR- <PERR- INTx-
11107 Latency: 0
11108 Interrupt: pin A routed to IRQ 42
11109 Region 0: Memory at c2000000 (64-bit, non-prefetchable) [size=4M]
11110 Region 2: Memory at b0000000 (64-bit, prefetchable) [size=256M]
11111 Region 4: I/O ports at 4000 [size=64]
11112 Expansion ROM at <unassigned> [disabled]
11113 Capabilities: <access denied>
11114 Kernel driver in use: i915
11115 </pre></p>
11116
11117 <p>The resulting intel_quirks entry would then look like this:</p>
11118
11119 <p><pre>
11120 struct intel_quirk intel_quirks[] = {
11121 ...
11122 /* Packard Bell EasyNote LV11HC needs invert brightness quirk */
11123 { 0x0156, 0x1025, 0x0688, quirk_invert_brightness },
11124 ...
11125 }
11126 </pre></p>
11127
11128 <p>According to the kernel module instructions (as seen using
11129 <tt>modinfo i915</tt>), information about hardware needing the
11130 invert_brightness flag should be sent to the
11131 <a href="http://lists.freedesktop.org/mailman/listinfo/dri-devel">dri-devel
11132 (at) lists.freedesktop.org</a> mailing list to reach the kernel
11133 developers. But my email about the laptop sent 2013-06-03 have not
11134 yet shown up in
11135 <a href="http://lists.freedesktop.org/archives/dri-devel/2013-June/thread.html">the
11136 web archive for the mailing list</a>, so I suspect they do not accept
11137 emails from non-subscribers. Because of this, I sent my patch also to
11138 the Debian bug tracking system instead as
11139 <a href="http://bugs.debian.org/710938">BTS report #710938</a>, to make
11140 sure the patch is not lost.</p>
11141
11142 <p>Unfortunately, it is not enough to fix the kernel to get Laptops
11143 with this problem working properly with Linux. If you use Gnome, your
11144 worries should be over at this point. But if you use KDE, there is
11145 something in KDE ignoring the invert_brightness setting and turning on
11146 the screen during login. I've reported it to Debian as
11147 <a href="http://bugs.debian.org/711237">BTS report #711237</a>, and
11148 have no idea yet how to figure out exactly what subsystem is doing
11149 this. Perhaps you can help? Perhaps you know what the Gnome
11150 developers did to handle this, and this can give a clue to the KDE
11151 developers? Or you know where in KDE the screen brightness is changed
11152 during login? If so, please update the BTS report (or get in touch if
11153 you do not know how to update BTS).</p>
11154
11155 <p>Update 2013-07-19: The correct fix for this machine seem to be
11156 acpi_backlight=vendor, to disable ACPI backlight support completely,
11157 as the ACPI information on the machine is trash and it is better to
11158 leave it to the intel video driver to control the screen
11159 backlight.</p>
11160
11161 </div>
11162 <div class="tags">
11163
11164
11165 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
11166
11167
11168 </div>
11169 </div>
11170 <div class="padding"></div>
11171
11172 <div class="entry">
11173 <div class="title">
11174 <a href="http://www.hungry.com/~pere/blog/How_to_install_Linux_on_a_Packard_Bell_Easynote_LV_preinstalled_with_Windows_8.html">How to install Linux on a Packard Bell Easynote LV preinstalled with Windows 8</a>
11175 </div>
11176 <div class="date">
11177 27th May 2013
11178 </div>
11179 <div class="body">
11180 <p>Two days ago, I asked
11181 <a href="http://www.hungry.com/~pere/blog/How_can_I_install_Linux_on_a_Packard_Bell_Easynote_LV_preinstalled_with_Windows_8_.html">how
11182 I could install Linux on a Packard Bell EasyNote LV computer
11183 preinstalled with Windows 8</a>. I found a solution, but am horrified
11184 with the obstacles put in the way of Linux users on a laptop with UEFI
11185 and Windows 8.</p>
11186
11187 <p>I never found out if the cause of my problems were the use of UEFI
11188 secure booting or fast boot. I suspect fast boot was the problem,
11189 causing the firmware to boot directly from HD without considering any
11190 key presses and alternative devices, but do not know UEFI settings
11191 enough to tell.</p>
11192
11193 <p>There is no way to install Linux on the machine in question without
11194 opening the box and disconnecting the hard drive! This is as far as I
11195 can tell, the only way to get access to the firmware setup menu
11196 without accepting the Windows 8 license agreement. I am told (and
11197 found description on how to) that it is possible to configure the
11198 firmware setup once booted into Windows 8. But as I believe the terms
11199 of that agreement are completely unacceptable, accepting the license
11200 was never an alternative. I do not enter agreements I do not intend
11201 to follow.</p>
11202
11203 <p>I feared I had to return the laptops and ask for a refund, and
11204 waste many hours on this, but luckily there was a way to get it to
11205 work. But I would not recommend it to anyone planning to run Linux on
11206 it, and I have become sceptical to Windows 8 certified laptops. Is
11207 this the way Linux will be forced out of the market place, by making
11208 it close to impossible for "normal" users to install Linux without
11209 accepting the Microsoft Windows license terms? Or at least not
11210 without risking to loose the warranty?</p>
11211
11212 <p>I've updated the
11213 <a href="http://www.linlap.com/packard_bell_easynote_lv">Linux Laptop
11214 wiki page for Packard Bell EasyNote LV</a>, to ensure the next person
11215 do not have to struggle as much as I did to get Linux into the
11216 machine.</p>
11217
11218 <p>Thanks to Bob Rosbag, Florian Weimer, Philipp Kern, Ben Hutching,
11219 Michael Tokarev and others for feedback and ideas.</p>
11220
11221 </div>
11222 <div class="tags">
11223
11224
11225 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
11226
11227
11228 </div>
11229 </div>
11230 <div class="padding"></div>
11231
11232 <div class="entry">
11233 <div class="title">
11234 <a href="http://www.hungry.com/~pere/blog/How_can_I_install_Linux_on_a_Packard_Bell_Easynote_LV_preinstalled_with_Windows_8_.html">How can I install Linux on a Packard Bell Easynote LV preinstalled with Windows 8?</a>
11235 </div>
11236 <div class="date">
11237 25th May 2013
11238 </div>
11239 <div class="body">
11240 <p>I've run into quite a problem the last few days. I bought three
11241 new laptops for my parents and a few others. I bought Packard Bell
11242 Easynote LV to run Kubuntu on and use as their home computer. But I
11243 am completely unable to figure out how to install Linux on it. The
11244 computer is preinstalled with Windows 8, and I suspect it uses UEFI
11245 instead of a BIOS to boot.</p>
11246
11247 <p>The problem is that I am unable to get it to PXE boot, and unable
11248 to get it to boot the Linux installer from my USB stick. I have yet
11249 to try the DVD install, and still hope it will work. when I turn on
11250 the computer, there is no information on what buttons to press to get
11251 the normal boot menu. I expect to get some boot menu to select PXE or
11252 USB stick booting. When booting, it first ask for the language to
11253 use, then for some regional settings, and finally if I will accept the
11254 Windows 8 terms of use. As these terms are completely unacceptable to
11255 me, I have no other choice but to turn off the computer and try again
11256 to get it to boot the Linux installer.</p>
11257
11258 <p>I have gathered my findings so far on a Linlap page about the
11259 <a href="http://www.linlap.com/packard_bell_easynote_lv">Packard Bell
11260 EasyNote LV</a> model. If you have any idea how to get Linux
11261 installed on this machine, please get in touch or update that wiki
11262 page. If I can't find a way to install Linux, I will have to return
11263 the laptop to the seller and find another machine for my parents.</p>
11264
11265 <p>I wonder, is this the way Linux will be forced out of the market
11266 using UEFI and "secure boot" by making it impossible to install Linux
11267 on new Laptops?</p>
11268
11269 </div>
11270 <div class="tags">
11271
11272
11273 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
11274
11275
11276 </div>
11277 </div>
11278 <div class="padding"></div>
11279
11280 <div class="entry">
11281 <div class="title">
11282 <a href="http://www.hungry.com/~pere/blog/How_to_transform_a_Debian_based_system_to_a_Debian_Edu_installation.html">How to transform a Debian based system to a Debian Edu installation</a>
11283 </div>
11284 <div class="date">
11285 17th May 2013
11286 </div>
11287 <div class="body">
11288 <p><a href="http://www.skolelinux.org/">Debian Edu / Skolelinux</a> is
11289 an operating system based on Debian intended for use in schools. It
11290 contain a turn-key solution for the computer network provided to
11291 pupils in the primary schools. It provide both the central server,
11292 network boot servers and desktop environments with heaps of
11293 educational software. The project was founded almost 12 years ago,
11294 2001-07-02. If you want to support the project, which is in need for
11295 cash to fund developer gatherings and other project related activity,
11296 <a href="http://www.linuxiskolen.no/slxdebianlabs/donations.html">please
11297 donate some money</a>.
11298
11299 <p>A topic that come up again and again on the Debian Edu mailing
11300 lists and elsewhere, is the question on how to transform a Debian or
11301 Ubuntu installation into a Debian Edu installation. It isn't very
11302 hard, and last week I wrote a script to replicate the steps done by
11303 the Debian Edu installer.</p>
11304
11305 <p>The script,
11306 <a href="http://anonscm.debian.org/viewvc/debian-edu/branches/wheezy/debian-edu-config/share/debian-edu-config/tools/debian-edu-bless?view=markup">debian-edu-bless<a/>
11307 in the debian-edu-config package, will go through these six steps and
11308 transform an existing Debian Wheezy or Ubuntu (untested) installation
11309 into a Debian Edu Workstation:</p>
11310
11311 <ol>
11312
11313 <li>Add skolelinux related APT sources.</li>
11314 <li>Create /etc/debian-edu/config with the wanted configuration.</li>
11315 <li>Install debian-edu-install to load preseeding values and pull in
11316 our configuration.</li>
11317 <li>Preseed debconf database with profile setup in
11318 /etc/debian-edu/config, and run tasksel to install packages
11319 according to the profile specified in the config above,
11320 overriding some of the Debian automation machinery.</li>
11321 <li>Run debian-edu-cfengine-D installation to configure everything
11322 that could not be done using preseeding.</li>
11323 <li>Ask for a reboot to enable all the configuration changes.</li>
11324
11325 </ol>
11326
11327 <p>There are some steps in the Debian Edu installation that can not be
11328 replicated like this. Disk partitioning and LVM setup, for example.
11329 So this script just assume there is enough disk space to install all
11330 the needed packages.</p>
11331
11332 <p>The script was created to help a Debian Edu student working on
11333 setting up <a href="http://www.raspberrypi.org">Raspberry Pi</a> as a
11334 Debian Edu client, and using it he can take the existing
11335 <a href="http://www.raspbian.org/FrontPage‎">Raspbian</a> installation and
11336 transform it into a fully functioning Debian Edu Workstation (or
11337 Roaming Workstation, or whatever :).</p>
11338
11339 <p>The default setting in the script is to create a KDE Workstation.
11340 If a LXDE based Roaming workstation is wanted instead, modify the
11341 PROFILE and DESKTOP values at the top to look like this instead:</p>
11342
11343 <p><pre>
11344 PROFILE="Roaming-Workstation"
11345 DESKTOP="lxde"
11346 </pre></p>
11347
11348 <p>The script could even become useful to set up Debian Edu servers in
11349 the cloud, by starting with a virtual Debian installation at some
11350 virtual hosting service and setting up all the services on first
11351 boot.</p>
11352
11353 </div>
11354 <div class="tags">
11355
11356
11357 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
11358
11359
11360 </div>
11361 </div>
11362 <div class="padding"></div>
11363
11364 <div class="entry">
11365 <div class="title">
11366 <a href="http://www.hungry.com/~pere/blog/Debian__the_Linux_distribution_of_choice_for_LEGO_designers_.html">Debian, the Linux distribution of choice for LEGO designers?</a>
11367 </div>
11368 <div class="date">
11369 11th May 2013
11370 </div>
11371 <div class="body">
11372 <P>In January,
11373 <a href="http://www.hungry.com/~pere/blog/New_IRC_channel_for_LEGO_designers_using_Debian.html">I
11374 announced a</a> new <a href="irc://irc.debian.org/%23debian-lego">IRC
11375 channel #debian-lego</a>, for those of us in the Debian and Linux
11376 community interested in <a href="http://www.lego.com/">LEGO</a>, the
11377 marvellous construction system from Denmark. We also created
11378 <a href="http://wiki.debian.org/LegoDesigners">a wiki page</a> to have
11379 a place to take notes and write down our plans and hopes. And several
11380 people showed up to help. I was very happy to see the effect of my
11381 call. Since the small start, we have a debtags tag
11382 <a href="http://debtags.debian.net/search/bytag?wl=hardware::hobby:lego">hardware::hobby:lego</a>
11383 tag for LEGO related packages, and now count 10 packages related to
11384 LEGO and <a href="http://mindstorms.lego.com/">Mindstorms</a>:</p>
11385
11386 <p><table>
11387 <tr><td><a href="http://packages.qa.debian.org/brickos">brickos</a></td><td>alternative OS for LEGO Mindstorms RCX. Supports development in C/C++</td></tr>
11388 <tr><td><a href="http://packages.qa.debian.org/leocad">leocad</a></td><td>virtual brick CAD software</td></tr>
11389 <tr><td><a href="http://packages.qa.debian.org/libnxt">libnxt</a></td><td>utility library for talking to the LEGO Mindstorms NX</td></tr>
11390 <tr><td><a href="http://packages.qa.debian.org/lnpd">lnpd</a></td><td>daemon for LNP communication with BrickOS</td></tr>
11391 <tr><td><a href="http://packages.qa.debian.org/nbc">nbc</a></td><td>compiler for LEGO Mindstorms NXT bricks</td></tr>
11392 <tr><td><a href="http://packages.qa.debian.org/nqc">nqc</a></td><td>Not Quite C compiler for LEGO Mindstorms RCX</td></tr>
11393 <tr><td><a href="http://packages.qa.debian.org/python-nxt">python-nxt</a></td><td>python driver/interface/wrapper for the Lego Mindstorms NXT robot</td></tr>
11394 <tr><td><a href="http://packages.qa.debian.org/python-nxt-filer">python-nxt-filer</a></td><td>simple GUI to manage files on a LEGO Mindstorms NXT</td></tr>
11395 <tr><td><a href="http://packages.qa.debian.org/scratch">scratch</a></td><td>easy to use programming environment for ages 8 and up</td></tr>
11396 <tr><td><a href="http://packages.qa.debian.org/t2n">t2n</a></td><td>simple command-line tool for Lego NXT</td></tr>
11397 </table></p>
11398
11399 <p>Some of these are available in Wheezy, and all but one are
11400 currently available in Jessie/testing. leocad is so far only
11401 available in experimental.</p>
11402
11403 <p>If you care about LEGO in Debian, please join us on IRC and help
11404 adding the rest of the great free software tools available on Linux
11405 for LEGO designers.</p>
11406
11407 </div>
11408 <div class="tags">
11409
11410
11411 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/lego">lego</a>, <a href="http://www.hungry.com/~pere/blog/tags/robot">robot</a>.
11412
11413
11414 </div>
11415 </div>
11416 <div class="padding"></div>
11417
11418 <div class="entry">
11419 <div class="title">
11420 <a href="http://www.hungry.com/~pere/blog/Debian_Wheezy_is_out___and_Debian_Edu___Skolelinux_should_soon_follow___newinwheezy.html">Debian Wheezy is out - and Debian Edu / Skolelinux should soon follow! #newinwheezy</a>
11421 </div>
11422 <div class="date">
11423 5th May 2013
11424 </div>
11425 <div class="body">
11426 <p>When I woke up this morning, I was very happy to see that the
11427 <a href="http://www.debian.org/News/2013/20130504">release announcement
11428 for Debian Wheezy</a> was waiting in my mail box. This is a great
11429 Debian release, and I expect to move my machines at home over to it fairly
11430 soon.</p>
11431
11432 <p>The new debian release contain heaps of new stuff, and one program
11433 in particular make me very happy to see included. The
11434 <a href="http://scratch.mit.edu/">Scratch</a> program, made famous by
11435 the <a href="http://www.code.org/">Teach kids code</a> movement, is
11436 included for the first time. Alongside similar programs like
11437 <a href="http://edu.kde.org/kturtle/">kturtle</a> and
11438 <a href="http://wiki.sugarlabs.org/go/Activities/Turtle_Art">turtleart</a>,
11439 it allow for visual programming where syntax errors can not happen,
11440 and a friendly programming environment for learning to control the
11441 computer. Scratch will also be included in the next release of Debian
11442 Edu.</a>
11443
11444 <p>And now that Wheezy is wrapped up, we can wrap up the next Debian
11445 Edu/Skolelinux release too. The
11446 <a href="http://lists.debian.org/debian-edu/2013/04/msg00132.html">first
11447 alpha release</a> went out last week, and the next should soon
11448 follow.<p>
11449
11450 </div>
11451 <div class="tags">
11452
11453
11454 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
11455
11456
11457 </div>
11458 </div>
11459 <div class="padding"></div>
11460
11461 <div class="entry">
11462 <div class="title">
11463 <a href="http://www.hungry.com/~pere/blog/Isenkram_0_2_finally_in_the_Debian_archive.html">Isenkram 0.2 finally in the Debian archive</a>
11464 </div>
11465 <div class="date">
11466 3rd April 2013
11467 </div>
11468 <div class="body">
11469 <p>Today the <a href="http://packages.qa.debian.org/isenkram">Isenkram
11470 package</a> finally made it into the archive, after lingering in NEW
11471 for many months. I uploaded it to the Debian experimental suite
11472 2013-01-27, and today it was accepted into the archive.</p>
11473
11474 <p>Isenkram is a system for suggesting to users what packages to
11475 install to work with a pluggable hardware device. The suggestion pop
11476 up when the device is plugged in. For example if a Lego Mindstorm NXT
11477 is inserted, it will suggest to install the program needed to program
11478 the NXT controller. Give it a go, and report bugs and suggestions to
11479 BTS. :)</p>
11480
11481 </div>
11482 <div class="tags">
11483
11484
11485 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/isenkram">isenkram</a>.
11486
11487
11488 </div>
11489 </div>
11490 <div class="padding"></div>
11491
11492 <div class="entry">
11493 <div class="title">
11494 <a href="http://www.hungry.com/~pere/blog/Bitcoin_GUI_now_available_from_Debian_unstable__and_Ubuntu_raring_.html">Bitcoin GUI now available from Debian/unstable (and Ubuntu/raring)</a>
11495 </div>
11496 <div class="date">
11497 2nd February 2013
11498 </div>
11499 <div class="body">
11500 <p>My
11501 <a href="http://www.hungry.com/~pere/blog/How_to_backport_bitcoin_qt_version_0_7_2_2_to_Debian_Squeeze.html">last
11502 bitcoin related blog post</a> mentioned that the new
11503 <a href="http://packages.qa.debian.org/bitcoin">bitcoin package</a> for
11504 Debian was waiting in NEW. It was accepted by the Debian ftp-masters
11505 2013-01-19, and have been available in unstable since then. It was
11506 automatically copied to Ubuntu, and is available in their Raring
11507 version too.</p>
11508
11509 <p>But there is a strange problem with the build that block this new
11510 version from being available on the i386 and kfreebsd-i386
11511 architectures. For some strange reason, the autobuilders in Debian
11512 for these architectures fail to run the test suite on these
11513 architectures (<a href="http://bugs.debian.org/672524">BTS #672524</a>).
11514 We are so far unable to reproduce it when building it manually, and
11515 no-one have been able to propose a fix. If you got an idea what is
11516 failing, please let us know via the BTS.</p>
11517
11518 <p>One feature that is annoying me with of the bitcoin client, because
11519 I often run low on disk space, is the fact that the client will exit
11520 if it run short on space (<a href="http://bugs.debian.org/696715">BTS
11521 #696715</a>). So make sure you have enough disk space when you run
11522 it. :)</p>
11523
11524 <p>As usual, if you use bitcoin and want to show your support of my
11525 activities, please send Bitcoin donations to my address
11526 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
11527
11528 </div>
11529 <div class="tags">
11530
11531
11532 Tags: <a href="http://www.hungry.com/~pere/blog/tags/bitcoin">bitcoin</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
11533
11534
11535 </div>
11536 </div>
11537 <div class="padding"></div>
11538
11539 <div class="entry">
11540 <div class="title">
11541 <a href="http://www.hungry.com/~pere/blog/Welcome_to_the_world__Isenkram_.html">Welcome to the world, Isenkram!</a>
11542 </div>
11543 <div class="date">
11544 22nd January 2013
11545 </div>
11546 <div class="body">
11547 <p>Yesterday, I
11548 <a href="http://www.hungry.com/~pere/blog/First_prototype_ready_making_hardware_easier_to_use_in_Debian.html">asked
11549 for testers</a> for my prototype for making Debian better at handling
11550 pluggable hardware devices, which I
11551 <a href="http://www.hungry.com/~pere/blog/Lets_make_hardware_dongles_easier_to_use_in_Debian.html">set
11552 out to create</a> earlier this month. Several valuable testers showed
11553 up, and caused me to really want to to open up the development to more
11554 people. But before I did this, I want to come up with a sensible name
11555 for this project. Today I finally decided on a new name, and I have
11556 renamed the project from hw-support-handler to this new name. In the
11557 process, I moved the source to git and made it available as a
11558 <a href="http://anonscm.debian.org/gitweb/?p=collab-maint/isenkram.git">collab-maint</a>
11559 repository in Debian. The new name? It is <strong>Isenkram</strong>.
11560 To fetch and build the latest version of the source, use</p>
11561
11562 <pre>
11563 git clone http://anonscm.debian.org/git/collab-maint/isenkram.git
11564 cd isenkram && git-buildpackage -us -uc
11565 </pre>
11566
11567 <p>I have not yet adjusted all files to use the new name yet. If you
11568 want to hack on the source or improve the package, please go ahead.
11569 But please talk to me first on IRC or via email before you do major
11570 changes, to make sure we do not step on each others toes. :)</p>
11571
11572 <p>If you wonder what 'isenkram' is, it is a Norwegian word for iron
11573 stuff, typically meaning tools, nails, screws, etc. Typical hardware
11574 stuff, in other words. I've been told it is the Norwegian variant of
11575 the German word eisenkram, for those that are familiar with that
11576 word.</p>
11577
11578 <p><strong>Update 2013-01-26</strong>: Added -us -us to build
11579 instructions, to avoid confusing people with an error from the signing
11580 process.</p>
11581
11582 <p><strong>Update 2013-01-27</strong>: Switch to HTTP URL for the git
11583 clone argument to avoid the need for authentication.</p>
11584
11585 </div>
11586 <div class="tags">
11587
11588
11589 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/isenkram">isenkram</a>.
11590
11591
11592 </div>
11593 </div>
11594 <div class="padding"></div>
11595
11596 <div class="entry">
11597 <div class="title">
11598 <a href="http://www.hungry.com/~pere/blog/First_prototype_ready_making_hardware_easier_to_use_in_Debian.html">First prototype ready making hardware easier to use in Debian</a>
11599 </div>
11600 <div class="date">
11601 21st January 2013
11602 </div>
11603 <div class="body">
11604 <p>Early this month I set out to try to
11605 <a href="http://www.hungry.com/~pere/blog/Lets_make_hardware_dongles_easier_to_use_in_Debian.html">improve
11606 the Debian support for pluggable hardware devices</a>. Now my
11607 prototype is working, and it is ready for a larger audience. To test
11608 it, fetch the
11609 <a href="http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/">source
11610 from the Debian Edu subversion repository</a>, build and install the
11611 package. You might have to log out and in again activate the
11612 autostart script.</p>
11613
11614 <p>The design is simple:</p>
11615
11616 <ul>
11617
11618 <li>Add desktop entry in /usr/share/autostart/ causing a program
11619 hw-support-handlerd to start when the user log in.</li>
11620
11621 <li>This program listen for kernel events about new hardware (directly
11622 from the kernel like udev does), not using HAL dbus events as I
11623 initially did.</li>
11624
11625 <li>When new hardware is inserted, look up the hardware modalias in
11626 the APT database, a database
11627 <a href="http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/modaliases?view=markup">available
11628 via HTTP</a> and a database available as part of the package.</li>
11629
11630 <li>If a package is mapped to the hardware in question, the package
11631 isn't installed yet and this is the first time the hardware was
11632 plugged in, show a desktop notification suggesting to install the
11633 package or packages.</li>
11634
11635 <li>If the user click on the 'install package now' button, ask
11636 aptdaemon via the PackageKit API to install the requrired package.</li>
11637
11638 <li>aptdaemon ask for root password or sudo password, and install the
11639 package while showing progress information in a window.</li>
11640
11641 </ul>
11642
11643 <p>I still need to come up with a better name for the system. Here
11644 are some screen shots showing the prototype in action. First the
11645 notification, then the password request, and finally the request to
11646 approve all the dependencies. Sorry for the Norwegian Bokmål GUI.</p>
11647
11648 <p><img src="http://www.hungry.com/~pere/blog/images/2013-01-21-hw-support-1-notification.png">
11649 <br><img src="http://www.hungry.com/~pere/blog/images/2013-01-21-hw-support-2-password.png">
11650 <br><img src="http://www.hungry.com/~pere/blog/images/2013-01-21-hw-support-3-dependencies.png">
11651 <br><img src="http://www.hungry.com/~pere/blog/images/2013-01-21-hw-support-4-installing.png">
11652 <br><img src="http://www.hungry.com/~pere/blog/images/2013-01-21-hw-support-5-installing-details.png" width="70%"></p>
11653
11654 <p>The prototype still need to be improved with longer timeouts, but
11655 is already useful. The database of hardware to package mappings also
11656 need more work. It is currently compatible with the Ubuntu way of
11657 storing such information in the package control file, but could be
11658 changed to use other formats instead or in addition to the current
11659 method. I've dropped the use of discover for this mapping, as the
11660 modalias approach is more flexible and easier to use on Linux as long
11661 as the Linux kernel expose its modalias strings directly.</p>
11662
11663 <p><strong>Update 2013-01-21 16:50</strong>: Due to popular demand,
11664 here is the command required to check out and build the source: Use
11665 '<tt>svn checkout
11666 svn://svn.debian.org/debian-edu/trunk/src/hw-support-handler/; cd
11667 hw-support-handler; debuild</tt>'. If you lack debuild, install the
11668 devscripts package.</p>
11669
11670 <p><strong>Update 2013-01-23 12:00</strong>: The project is now
11671 renamed to Isenkram and the source moved from the Debian Edu
11672 subversion repository to a Debian collab-maint git repository. See
11673 <a href="http://www.hungry.com/~pere/blog/Welcome_to_the_world__Isenkram_.html">build
11674 instructions</a> for details.</p>
11675
11676 </div>
11677 <div class="tags">
11678
11679
11680 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/isenkram">isenkram</a>.
11681
11682
11683 </div>
11684 </div>
11685 <div class="padding"></div>
11686
11687 <div class="entry">
11688 <div class="title">
11689 <a href="http://www.hungry.com/~pere/blog/Thank_you_Thinkpad_X41__for_your_long_and_trustworthy_service.html">Thank you Thinkpad X41, for your long and trustworthy service</a>
11690 </div>
11691 <div class="date">
11692 19th January 2013
11693 </div>
11694 <div class="body">
11695 <p>This Christmas my trusty old laptop died. It died quietly and
11696 suddenly in bed. With a quiet whimper, it went completely quiet and
11697 black. The power button was no longer able to turn it on. It was a
11698 IBM Thinkpad X41, and the best laptop I ever had. Better than both
11699 Thinkpads X30, X31, X40, X60, X61 and X61S. Far better than the
11700 Compaq I had before that. Now I need to find a replacement. To keep
11701 going during Christmas, I moved the one year old SSD disk to my old
11702 X40 where it fitted (only one I had left that could use it), but it is
11703 not a durable solution.
11704
11705 <p>My laptop needs are fairly modest. This is my wishlist from when I
11706 got a new one more than 10 years ago. It still holds true.:)</p>
11707
11708 <ul>
11709
11710 <li>Lightweight (around 1 kg) and small volume (preferably smaller
11711 than A4).</li>
11712 <li>Robust, it will be in my backpack every day.</li>
11713 <li>Three button mouse and a mouse pin instead of touch pad.</li>
11714 <li>Long battery life time. Preferable a week.</li>
11715 <li>Internal WIFI network card.</li>
11716 <li>Internal Twisted Pair network card.</li>
11717 <li>Some USB slots (2-3 is plenty)</li>
11718 <li>Good keyboard - similar to the Thinkpad.</li>
11719 <li>Video resolution at least 1024x768, with size around 12" (A4 paper
11720 size).</li>
11721 <li>Hardware supported by Debian Stable, ie the default kernel and
11722 X.org packages.</li>
11723 <li>Quiet, preferably fan free (or at least not using the fan most of
11724 the time).
11725
11726 </ul>
11727
11728 <p>You will notice that there are no RAM and CPU requirements in the
11729 list. The reason is simply that the specifications on laptops the
11730 last 10-15 years have been sufficient for my needs, and I have to look
11731 at other features to choose my laptop. But are there still made as
11732 robust laptops as my X41? The Thinkpad X60/X61 proved to be less
11733 robust, and Thinkpads seem to be heading in the wrong direction since
11734 Lenovo took over. But I've been told that X220 and X1 Carbon might
11735 still be useful.</p>
11736
11737 <p>Perhaps I should rethink my needs, and look for a pad with an
11738 external keyboard? I'll have to check the
11739 <a href="http://www.linux-laptop.net/">Linux Laptops site</a> for
11740 well-supported laptops, or perhaps just buy one preinstalled from one
11741 of the vendors listed on the <a href="http://linuxpreloaded.com/">Linux
11742 Pre-loaded site</a>.</p>
11743
11744 </div>
11745 <div class="tags">
11746
11747
11748 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
11749
11750
11751 </div>
11752 </div>
11753 <div class="padding"></div>
11754
11755 <div class="entry">
11756 <div class="title">
11757 <a href="http://www.hungry.com/~pere/blog/How_to_find_a_browser_plugin_supporting_a_given_MIME_type.html">How to find a browser plugin supporting a given MIME type</a>
11758 </div>
11759 <div class="date">
11760 18th January 2013
11761 </div>
11762 <div class="body">
11763 <p>Some times I try to figure out which Iceweasel browser plugin to
11764 install to get support for a given MIME type. Thanks to
11765 <a href="https://wiki.ubuntu.com/MozillaTeam/Plugins">specifications
11766 done by Ubuntu</a> and Mozilla, it is possible to do this in Debian.
11767 Unfortunately, not very many packages provide the needed meta
11768 information, Anyway, here is a small script to look up all browser
11769 plugin packages announcing ther MIME support using this specification:</p>
11770
11771 <pre>
11772 #!/usr/bin/python
11773 import sys
11774 import apt
11775 def pkgs_handling_mimetype(mimetype):
11776 cache = apt.Cache()
11777 cache.open(None)
11778 thepkgs = []
11779 for pkg in cache:
11780 version = pkg.candidate
11781 if version is None:
11782 version = pkg.installed
11783 if version is None:
11784 continue
11785 record = version.record
11786 if not record.has_key('Npp-MimeType'):
11787 continue
11788 mime_types = record['Npp-MimeType'].split(',')
11789 for t in mime_types:
11790 t = t.rstrip().strip()
11791 if t == mimetype:
11792 thepkgs.append(pkg.name)
11793 return thepkgs
11794 mimetype = "audio/ogg"
11795 if 1 < len(sys.argv):
11796 mimetype = sys.argv[1]
11797 print "Browser plugin packages supporting %s:" % mimetype
11798 for pkg in pkgs_handling_mimetype(mimetype):
11799 print " %s" %pkg
11800 </pre>
11801
11802 <p>It can be used like this to look up a given MIME type:</p>
11803
11804 <pre>
11805 % ./apt-find-browserplug-for-mimetype
11806 Browser plugin packages supporting audio/ogg:
11807 gecko-mediaplayer
11808 % ./apt-find-browserplug-for-mimetype application/x-shockwave-flash
11809 Browser plugin packages supporting application/x-shockwave-flash:
11810 browser-plugin-gnash
11811 %
11812 </pre>
11813
11814 <p>In Ubuntu this mechanism is combined with support in the browser
11815 itself to query for plugins and propose to install the needed
11816 packages. It would be great if Debian supported such feature too. Is
11817 anyone working on adding it?</p>
11818
11819 <p><strong>Update 2013-01-18 14:20</strong>: The Debian BTS
11820 request for icweasel support for this feature is
11821 <a href="http://bugs.debian.org/484010">#484010</a> from 2008 (and
11822 <a href="http://bugs.debian.org/698426">#698426</a> from today). Lack
11823 of manpower and wish for a different design is the reason thus feature
11824 is not yet in iceweasel from Debian.</p>
11825
11826 </div>
11827 <div class="tags">
11828
11829
11830 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
11831
11832
11833 </div>
11834 </div>
11835 <div class="padding"></div>
11836
11837 <div class="entry">
11838 <div class="title">
11839 <a href="http://www.hungry.com/~pere/blog/What_is_the_most_supported_MIME_type_in_Debian_.html">What is the most supported MIME type in Debian?</a>
11840 </div>
11841 <div class="date">
11842 16th January 2013
11843 </div>
11844 <div class="body">
11845 <p>The <a href="http://wiki.debian.org/AppStreamDebianProposal">DEP-11
11846 proposal to add AppStream information to the Debian archive</a>, is a
11847 proposal to make it possible for a Desktop application to propose to
11848 the user some package to install to gain support for a given MIME
11849 type, font, library etc. that is currently missing. With such
11850 mechanism in place, it would be possible for the desktop to
11851 automatically propose and install leocad if some LDraw file is
11852 downloaded by the browser.</p>
11853
11854 <p>To get some idea about the current content of the archive, I decided
11855 to write a simple program to extract all .desktop files from the
11856 Debian archive and look up the claimed MIME support there. The result
11857 can be found on the
11858 <a href="http://ftp.skolelinux.org/pub/AppStreamTest">Skolelinux FTP
11859 site</a>. Using the collected information, it become possible to
11860 answer the question in the title. Here are the 20 most supported MIME
11861 types in Debian stable (Squeeze), testing (Wheezy) and unstable (Sid).
11862 The complete list is available from the link above.</p>
11863
11864 <p><strong>Debian Stable:</strong></p>
11865
11866 <pre>
11867 count MIME type
11868 ----- -----------------------
11869 32 text/plain
11870 30 audio/mpeg
11871 29 image/png
11872 28 image/jpeg
11873 27 application/ogg
11874 26 audio/x-mp3
11875 25 image/tiff
11876 25 image/gif
11877 22 image/bmp
11878 22 audio/x-wav
11879 20 audio/x-flac
11880 19 audio/x-mpegurl
11881 18 video/x-ms-asf
11882 18 audio/x-musepack
11883 18 audio/x-mpeg
11884 18 application/x-ogg
11885 17 video/mpeg
11886 17 audio/x-scpls
11887 17 audio/ogg
11888 16 video/x-ms-wmv
11889 </pre>
11890
11891 <p><strong>Debian Testing:</strong></p>
11892
11893 <pre>
11894 count MIME type
11895 ----- -----------------------
11896 33 text/plain
11897 32 image/png
11898 32 image/jpeg
11899 29 audio/mpeg
11900 27 image/gif
11901 26 image/tiff
11902 26 application/ogg
11903 25 audio/x-mp3
11904 22 image/bmp
11905 21 audio/x-wav
11906 19 audio/x-mpegurl
11907 19 audio/x-mpeg
11908 18 video/mpeg
11909 18 audio/x-scpls
11910 18 audio/x-flac
11911 18 application/x-ogg
11912 17 video/x-ms-asf
11913 17 text/html
11914 17 audio/x-musepack
11915 16 image/x-xbitmap
11916 </pre>
11917
11918 <p><strong>Debian Unstable:</strong></p>
11919
11920 <pre>
11921 count MIME type
11922 ----- -----------------------
11923 31 text/plain
11924 31 image/png
11925 31 image/jpeg
11926 29 audio/mpeg
11927 28 application/ogg
11928 27 image/gif
11929 26 image/tiff
11930 26 audio/x-mp3
11931 23 audio/x-wav
11932 22 image/bmp
11933 21 audio/x-flac
11934 20 audio/x-mpegurl
11935 19 audio/x-mpeg
11936 18 video/x-ms-asf
11937 18 video/mpeg
11938 18 audio/x-scpls
11939 18 application/x-ogg
11940 17 audio/x-musepack
11941 16 video/x-ms-wmv
11942 16 video/x-msvideo
11943 </pre>
11944
11945 <p>I am told that PackageKit can provide an API to access the kind of
11946 information mentioned in DEP-11. I have not yet had time to look at
11947 it, but hope the PackageKit people in Debian are on top of these
11948 issues.</p>
11949
11950 <p><strong>Update 2013-01-16 13:35</strong>: Updated numbers after
11951 discovering a typo in my script.</p>
11952
11953 </div>
11954 <div class="tags">
11955
11956
11957 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
11958
11959
11960 </div>
11961 </div>
11962 <div class="padding"></div>
11963
11964 <div class="entry">
11965 <div class="title">
11966 <a href="http://www.hungry.com/~pere/blog/Using_modalias_info_to_find_packages_handling_my_hardware.html">Using modalias info to find packages handling my hardware</a>
11967 </div>
11968 <div class="date">
11969 15th January 2013
11970 </div>
11971 <div class="body">
11972 <p>Yesterday, I wrote about the
11973 <a href="http://www.hungry.com/~pere/blog/Modalias_strings___a_practical_way_to_map__stuff__to_hardware.html">modalias
11974 values provided by the Linux kernel</a> following my hope for
11975 <a href="http://www.hungry.com/~pere/blog/Lets_make_hardware_dongles_easier_to_use_in_Debian.html">better
11976 dongle support in Debian</a>. Using this knowledge, I have tested how
11977 modalias values attached to package names can be used to map packages
11978 to hardware. This allow the system to look up and suggest relevant
11979 packages when I plug in some new hardware into my machine, and replace
11980 discover and discover-data as the database used to map hardware to
11981 packages.</p>
11982
11983 <p>I create a modaliases file with entries like the following,
11984 containing package name, kernel module name (if relevant, otherwise
11985 the package name) and globs matching the relevant hardware
11986 modalias.</p>
11987
11988 <p><blockquote>
11989 Package: package-name
11990 <br>Modaliases: module(modaliasglob, modaliasglob, modaliasglob)</p>
11991 </blockquote></p>
11992
11993 <p>It is fairly trivial to write code to find the relevant packages
11994 for a given modalias value using this file.</p>
11995
11996 <p>An entry like this would suggest the video and picture application
11997 cheese for many USB web cameras (interface bus class 0E01):</p>
11998
11999 <p><blockquote>
12000 Package: cheese
12001 <br>Modaliases: cheese(usb:v*p*d*dc*dsc*dp*ic0Eisc01ip*)</p>
12002 </blockquote></p>
12003
12004 <p>An entry like this would suggest the pcmciautils package when a
12005 CardBus bridge (bus class 0607) PCI device is present:</p>
12006
12007 <p><blockquote>
12008 Package: pcmciautils
12009 <br>Modaliases: pcmciautils(pci:v*d*sv*sd*bc06sc07i*)
12010 </blockquote></p>
12011
12012 <p>An entry like this would suggest the package colorhug-client when
12013 plugging in a ColorHug with USB IDs 04D8:F8DA:</p>
12014
12015 <p><blockquote>
12016 Package: colorhug-client
12017 <br>Modaliases: colorhug-client(usb:v04D8pF8DAd*)</p>
12018 </blockquote></p>
12019
12020 <p>I believe the format is compatible with the format of the Packages
12021 file in the Debian archive. Ubuntu already uses their Packages file
12022 to store their mappings from packages to hardware.</p>
12023
12024 <p>By adding a XB-Modaliases: header in debian/control, any .deb can
12025 announce the hardware it support in a way my prototype understand.
12026 This allow those publishing packages in an APT source outside the
12027 Debian archive as well as those backporting packages to make sure the
12028 hardware mapping are included in the package meta information. I've
12029 tested such header in the pymissile package, and its modalias mapping
12030 is working as it should with my prototype. It even made it to Ubuntu
12031 Raring.</p>
12032
12033 <p>To test if it was possible to look up supported hardware using only
12034 the shell tools available in the Debian installer, I wrote a shell
12035 implementation of the lookup code. The idea is to create files for
12036 each modalias and let the shell do the matching. Please check out and
12037 try the
12038 <a href="http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/hw-support-lookup?view=co">hw-support-lookup</a>
12039 shell script. It run without any extra dependencies and fetch the
12040 hardware mappings from the Debian archive and the subversion
12041 repository where I currently work on my prototype.</p>
12042
12043 <p>When I use it on a machine with a yubikey inserted, it suggest to
12044 install yubikey-personalization:</p>
12045
12046 <p><blockquote>
12047 % ./hw-support-lookup
12048 <br>yubikey-personalization
12049 <br>%
12050 </blockquote></p>
12051
12052 <p>When I run it on my Thinkpad X40 with a PCMCIA/CardBus slot, it
12053 propose to install the pcmciautils package:</p>
12054
12055 <p><blockquote>
12056 % ./hw-support-lookup
12057 <br>pcmciautils
12058 <br>%
12059 </blockquote></p>
12060
12061 <p>If you know of any hardware-package mapping that should be added to
12062 <a href="http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/modaliases?view=co">my
12063 database</a>, please tell me about it.</p>
12064
12065 <p>It could be possible to generate several of the mappings between
12066 packages and hardware. One source would be to look at packages with
12067 kernel modules, ie packages with *.ko files in /lib/modules/, and
12068 extract their modalias information. Another would be to look at
12069 packages with udev rules, ie packages with files in
12070 /lib/udev/rules.d/, and extract their vendor/model information to
12071 generate a modalias matching rule. I have not tested any of these to
12072 see if it work.</p>
12073
12074 <p>If you want to help implementing a system to let us propose what
12075 packages to install when new hardware is plugged into a Debian
12076 machine, please send me an email or talk to me on
12077 <a href="irc://irc.debian.org/%23debian-devel">#debian-devel</a>.</p>
12078
12079 </div>
12080 <div class="tags">
12081
12082
12083 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/isenkram">isenkram</a>.
12084
12085
12086 </div>
12087 </div>
12088 <div class="padding"></div>
12089
12090 <div class="entry">
12091 <div class="title">
12092 <a href="http://www.hungry.com/~pere/blog/Modalias_strings___a_practical_way_to_map__stuff__to_hardware.html">Modalias strings - a practical way to map "stuff" to hardware</a>
12093 </div>
12094 <div class="date">
12095 14th January 2013
12096 </div>
12097 <div class="body">
12098 <p>While looking into how to look up Debian packages based on hardware
12099 information, to find the packages that support a given piece of
12100 hardware, I refreshed my memory regarding modalias values, and decided
12101 to document the details. Here are my findings so far, also available
12102 in
12103 <a href="http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/">the
12104 Debian Edu subversion repository</a>:
12105
12106 <p><strong>Modalias decoded</strong></p>
12107
12108 <p>This document try to explain what the different types of modalias
12109 values stands for. It is in part based on information from
12110 &lt;URL: <a href="https://wiki.archlinux.org/index.php/Modalias">https://wiki.archlinux.org/index.php/Modalias</a> &gt;,
12111 &lt;URL: <a href="http://unix.stackexchange.com/questions/26132/how-to-assign-usb-driver-to-device">http://unix.stackexchange.com/questions/26132/how-to-assign-usb-driver-to-device</a> &gt;,
12112 &lt;URL: <a href="http://code.metager.de/source/history/linux/stable/scripts/mod/file2alias.c">http://code.metager.de/source/history/linux/stable/scripts/mod/file2alias.c</a> &gt; and
12113 &lt;URL: <a href="http://cvs.savannah.gnu.org/viewvc/dmidecode/dmidecode.c?root=dmidecode&view=markup">http://cvs.savannah.gnu.org/viewvc/dmidecode/dmidecode.c?root=dmidecode&view=markup</a> &gt;.
12114
12115 <p>The modalias entries for a given Linux machine can be found using
12116 this shell script:</p>
12117
12118 <pre>
12119 find /sys -name modalias -print0 | xargs -0 cat | sort -u
12120 </pre>
12121
12122 <p>The supported modalias globs for a given kernel module can be found
12123 using modinfo:</p>
12124
12125 <pre>
12126 % /sbin/modinfo psmouse | grep alias:
12127 alias: serio:ty05pr*id*ex*
12128 alias: serio:ty01pr*id*ex*
12129 %
12130 </pre>
12131
12132 <p><strong>PCI subtype</strong></p>
12133
12134 <p>A typical PCI entry can look like this. This is an Intel Host
12135 Bridge memory controller:</p>
12136
12137 <p><blockquote>
12138 pci:v00008086d00002770sv00001028sd000001ADbc06sc00i00
12139 </blockquote></p>
12140
12141 <p>This represent these values:</p>
12142
12143 <pre>
12144 v 00008086 (vendor)
12145 d 00002770 (device)
12146 sv 00001028 (subvendor)
12147 sd 000001AD (subdevice)
12148 bc 06 (bus class)
12149 sc 00 (bus subclass)
12150 i 00 (interface)
12151 </pre>
12152
12153 <p>The vendor/device values are the same values outputted from 'lspci
12154 -n' as 8086:2770. The bus class/subclass is also shown by lspci as
12155 0600. The 0600 class is a host bridge. Other useful bus values are
12156 0300 (VGA compatible card) and 0200 (Ethernet controller).</p>
12157
12158 <p>Not sure how to figure out the interface value, nor what it
12159 means.</p>
12160
12161 <p><strong>USB subtype</strong></p>
12162
12163 <p>Some typical USB entries can look like this. This is an internal
12164 USB hub in a laptop:</p>
12165
12166 <p><blockquote>
12167 usb:v1D6Bp0001d0206dc09dsc00dp00ic09isc00ip00
12168 </blockquote></p>
12169
12170 <p>Here is the values included in this alias:</p>
12171
12172 <pre>
12173 v 1D6B (device vendor)
12174 p 0001 (device product)
12175 d 0206 (bcddevice)
12176 dc 09 (device class)
12177 dsc 00 (device subclass)
12178 dp 00 (device protocol)
12179 ic 09 (interface class)
12180 isc 00 (interface subclass)
12181 ip 00 (interface protocol)
12182 </pre>
12183
12184 <p>The 0900 device class/subclass means hub. Some times the relevant
12185 class is in the interface class section. For a simple USB web camera,
12186 these alias entries show up:</p>
12187
12188 <p><blockquote>
12189 usb:v0AC8p3420d5000dcEFdsc02dp01ic01isc01ip00
12190 <br>usb:v0AC8p3420d5000dcEFdsc02dp01ic01isc02ip00
12191 <br>usb:v0AC8p3420d5000dcEFdsc02dp01ic0Eisc01ip00
12192 <br>usb:v0AC8p3420d5000dcEFdsc02dp01ic0Eisc02ip00
12193 </blockquote></p>
12194
12195 <p>Interface class 0E01 is video control, 0E02 is video streaming (aka
12196 camera), 0101 is audio control device and 0102 is audio streaming (aka
12197 microphone). Thus this is a camera with microphone included.</p>
12198
12199 <p><strong>ACPI subtype</strong></p>
12200
12201 <p>The ACPI type is used for several non-PCI/USB stuff. This is an IR
12202 receiver in a Thinkpad X40:</p>
12203
12204 <p><blockquote>
12205 acpi:IBM0071:PNP0511:
12206 </blockquote></p>
12207
12208 <p>The values between the colons are IDs.</p>
12209
12210 <p><strong>DMI subtype</strong></p>
12211
12212 <p>The DMI table contain lots of information about the computer case
12213 and model. This is an entry for a IBM Thinkpad X40, fetched from
12214 /sys/devices/virtual/dmi/id/modalias:</p>
12215
12216 <p><blockquote>
12217 dmi:bvnIBM:bvr1UETB6WW(1.66):bd06/15/2005:svnIBM:pn2371H4G:pvrThinkPadX40:rvnIBM:rn2371H4G:rvrNotAvailable:cvnIBM:ct10:cvrNotAvailable:
12218 </blockquote></p>
12219
12220 <p>The values present are</p>
12221
12222 <pre>
12223 bvn IBM (BIOS vendor)
12224 bvr 1UETB6WW(1.66) (BIOS version)
12225 bd 06/15/2005 (BIOS date)
12226 svn IBM (system vendor)
12227 pn 2371H4G (product name)
12228 pvr ThinkPadX40 (product version)
12229 rvn IBM (board vendor)
12230 rn 2371H4G (board name)
12231 rvr NotAvailable (board version)
12232 cvn IBM (chassis vendor)
12233 ct 10 (chassis type)
12234 cvr NotAvailable (chassis version)
12235 </pre>
12236
12237 <p>The chassis type 10 is Notebook. Other interesting values can be
12238 found in the dmidecode source:</p>
12239
12240 <pre>
12241 3 Desktop
12242 4 Low Profile Desktop
12243 5 Pizza Box
12244 6 Mini Tower
12245 7 Tower
12246 8 Portable
12247 9 Laptop
12248 10 Notebook
12249 11 Hand Held
12250 12 Docking Station
12251 13 All In One
12252 14 Sub Notebook
12253 15 Space-saving
12254 16 Lunch Box
12255 17 Main Server Chassis
12256 18 Expansion Chassis
12257 19 Sub Chassis
12258 20 Bus Expansion Chassis
12259 21 Peripheral Chassis
12260 22 RAID Chassis
12261 23 Rack Mount Chassis
12262 24 Sealed-case PC
12263 25 Multi-system
12264 26 CompactPCI
12265 27 AdvancedTCA
12266 28 Blade
12267 29 Blade Enclosing
12268 </pre>
12269
12270 <p>The chassis type values are not always accurately set in the DMI
12271 table. For example my home server is a tower, but the DMI modalias
12272 claim it is a desktop.</p>
12273
12274 <p><strong>SerIO subtype</strong></p>
12275
12276 <p>This type is used for PS/2 mouse plugs. One example is from my
12277 test machine:</p>
12278
12279 <p><blockquote>
12280 serio:ty01pr00id00ex00
12281 </blockquote></p>
12282
12283 <p>The values present are</p>
12284
12285 <pre>
12286 ty 01 (type)
12287 pr 00 (prototype)
12288 id 00 (id)
12289 ex 00 (extra)
12290 </pre>
12291
12292 <p>This type is supported by the psmouse driver. I am not sure what
12293 the valid values are.</p>
12294
12295 <p><strong>Other subtypes</strong></p>
12296
12297 <p>There are heaps of other modalias subtypes according to
12298 file2alias.c. There is the rest of the list from that source: amba,
12299 ap, bcma, ccw, css, eisa, hid, i2c, ieee1394, input, ipack, isapnp,
12300 mdio, of, parisc, pcmcia, platform, scsi, sdio, spi, ssb, vio, virtio,
12301 vmbus, x86cpu and zorro. I did not spend time documenting all of
12302 these, as they do not seem relevant for my intended use with mapping
12303 hardware to packages when new stuff is inserted during run time.</p>
12304
12305 <p><strong>Looking up kernel modules using modalias values</strong></p>
12306
12307 <p>To check which kernel modules provide support for a given modalias,
12308 one can use the following shell script:</p>
12309
12310 <pre>
12311 for id in $(find /sys -name modalias -print0 | xargs -0 cat | sort -u); do \
12312 echo "$id" ; \
12313 /sbin/modprobe --show-depends "$id"|sed 's/^/ /' ; \
12314 done
12315 </pre>
12316
12317 <p>The output can look like this (only the first few entries as the
12318 list is very long on my test machine):</p>
12319
12320 <pre>
12321 acpi:ACPI0003:
12322 insmod /lib/modules/2.6.32-5-686/kernel/drivers/acpi/ac.ko
12323 acpi:device:
12324 FATAL: Module acpi:device: not found.
12325 acpi:IBM0068:
12326 insmod /lib/modules/2.6.32-5-686/kernel/drivers/char/nvram.ko
12327 insmod /lib/modules/2.6.32-5-686/kernel/drivers/leds/led-class.ko
12328 insmod /lib/modules/2.6.32-5-686/kernel/net/rfkill/rfkill.ko
12329 insmod /lib/modules/2.6.32-5-686/kernel/drivers/platform/x86/thinkpad_acpi.ko
12330 acpi:IBM0071:PNP0511:
12331 insmod /lib/modules/2.6.32-5-686/kernel/lib/crc-ccitt.ko
12332 insmod /lib/modules/2.6.32-5-686/kernel/net/irda/irda.ko
12333 insmod /lib/modules/2.6.32-5-686/kernel/drivers/net/irda/nsc-ircc.ko
12334 [...]
12335 </pre>
12336
12337 <p>If you want to help implementing a system to let us propose what
12338 packages to install when new hardware is plugged into a Debian
12339 machine, please send me an email or talk to me on
12340 <a href="irc://irc.debian.org/%23debian-devel">#debian-devel</a>.</p>
12341
12342 <p><strong>Update 2013-01-15:</strong> Rewrite "cat $(find ...)" to
12343 "find ... -print0 | xargs -0 cat" to make sure it handle directories
12344 in /sys/ with space in them.</p>
12345
12346 </div>
12347 <div class="tags">
12348
12349
12350 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/isenkram">isenkram</a>.
12351
12352
12353 </div>
12354 </div>
12355 <div class="padding"></div>
12356
12357 <div class="entry">
12358 <div class="title">
12359 <a href="http://www.hungry.com/~pere/blog/Moved_the_pymissile_Debian_packaging_to_collab_maint.html">Moved the pymissile Debian packaging to collab-maint</a>
12360 </div>
12361 <div class="date">
12362 10th January 2013
12363 </div>
12364 <div class="body">
12365 <p>As part of my investigation on how to improve the support in Debian
12366 for hardware dongles, I dug up my old Mark and Spencer USB Rocket
12367 Launcher and updated the Debian package
12368 <a href="http://packages.qa.debian.org/pymissile">pymissile</a> to make
12369 sure udev will fix the device permissions when it is plugged in. I
12370 also added a "Modaliases" header to test it in the Debian archive and
12371 hopefully make the package be proposed by jockey in Ubuntu when a user
12372 plug in his rocket launcher. In the process I moved the source to a
12373 git repository under collab-maint, to make it easier for any DD to
12374 contribute. <a href="http://code.google.com/p/pymissile/">Upstream</a>
12375 is not very active, but the software still work for me even after five
12376 years of relative silence. The new git repository is not listed in
12377 the uploaded package yet, because I want to test the other changes a
12378 bit more before I upload the new version. If you want to check out
12379 the new version with a .desktop file included, visit the
12380 <a href="http://anonscm.debian.org/gitweb/?p=collab-maint/pymissile.git">gitweb
12381 view</a> or use "<tt>git clone
12382 git://anonscm.debian.org/collab-maint/pymissile.git</tt>".</p>
12383
12384 </div>
12385 <div class="tags">
12386
12387
12388 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/isenkram">isenkram</a>, <a href="http://www.hungry.com/~pere/blog/tags/robot">robot</a>.
12389
12390
12391 </div>
12392 </div>
12393 <div class="padding"></div>
12394
12395 <div class="entry">
12396 <div class="title">
12397 <a href="http://www.hungry.com/~pere/blog/Lets_make_hardware_dongles_easier_to_use_in_Debian.html">Lets make hardware dongles easier to use in Debian</a>
12398 </div>
12399 <div class="date">
12400 9th January 2013
12401 </div>
12402 <div class="body">
12403 <p>One thing that annoys me with Debian and Linux distributions in
12404 general, is that there is a great package management system with the
12405 ability to automatically install software packages by downloading them
12406 from the distribution mirrors, but no way to get it to automatically
12407 install the packages I need to use the hardware I plug into my
12408 machine. Even if the package to use it is easily available from the
12409 Linux distribution. When I plug in a LEGO Mindstorms NXT, it could
12410 suggest to automatically install the python-nxt, nbc and t2n packages
12411 I need to talk to it. When I plug in a Yubikey, it could propose the
12412 yubikey-personalization package. The information required to do this
12413 is available, but no-one have pulled all the pieces together.</p>
12414
12415 <p>Some years ago, I proposed to
12416 <a href="http://lists.debian.org/debian-devel/2010/05/msg01206.html">use
12417 the discover subsystem to implement this</a>. The idea is fairly
12418 simple:
12419
12420 <ul>
12421
12422 <li>Add a desktop entry in /usr/share/autostart/ pointing to a program
12423 starting when a user log in.</li>
12424
12425 <li>Set this program up to listen for kernel events emitted when new
12426 hardware is inserted into the computer.</li>
12427
12428 <li>When new hardware is inserted, look up the hardware ID in a
12429 database mapping to packages, and take note of any non-installed
12430 packages.</li>
12431
12432 <li>Show a message to the user proposing to install the discovered
12433 package, and make it easy to install it.</li>
12434
12435 </ul>
12436
12437 <p>I am not sure what the best way to implement this is, but my
12438 initial idea was to use dbus events to discover new hardware, the
12439 discover database to find packages and
12440 <a href="http://www.packagekit.org/">PackageKit</a> to install
12441 packages.</p>
12442
12443 <p>Yesterday, I found time to try to implement this idea, and the
12444 draft package is now checked into
12445 <a href="http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/">the
12446 Debian Edu subversion repository</a>. In the process, I updated the
12447 <a href="http://packages.qa.debian.org/d/discover-data.html">discover-data</a>
12448 package to map the USB ids of LEGO Mindstorms and Yubikey devices to
12449 the relevant packages in Debian, and uploaded a new version
12450 2.2013.01.09 to unstable. I also discovered that the current
12451 <a href="http://packages.qa.debian.org/d/discover.html">discover</a>
12452 package in Debian no longer discovered any USB devices, because
12453 /proc/bus/usb/devices is no longer present. I ported it to use
12454 libusb as a fall back option to get it working. The fixed package
12455 version 2.1.2-6 is now in experimental (didn't upload it to unstable
12456 because of the freeze).</p>
12457
12458 <p>With this prototype in place, I can insert my Yubikey, and get this
12459 desktop notification to show up (only once, the first time it is
12460 inserted):</p>
12461
12462 <p align="center"><img src="http://www.hungry.com/~pere/blog/images/2013-01-09-hw-autoinstall.png"></p>
12463
12464 <p>For this prototype to be really useful, some way to automatically
12465 install the proposed packages by pressing the "Please install
12466 program(s)" button should to be implemented.</p>
12467
12468 <p>If this idea seem useful to you, and you want to help make it
12469 happen, please help me update the discover-data database with mappings
12470 from hardware to Debian packages. Check if 'discover-pkginstall -l'
12471 list the package you would like to have installed when a given
12472 hardware device is inserted into your computer, and report bugs using
12473 reportbug if it isn't. Or, if you know of a better way to provide
12474 such mapping, please let me know.</p>
12475
12476 <p>This prototype need more work, and there are several questions that
12477 should be considered before it is ready for production use. Is dbus
12478 the correct way to detect new hardware? At the moment I look for HAL
12479 dbus events on the system bus, because that is the events I could see
12480 on my Debian Squeeze KDE desktop. Are there better events to use?
12481 How should the user be notified? Is the desktop notification
12482 mechanism the best option, or should the background daemon raise a
12483 popup instead? How should packages be installed? When should they
12484 not be installed?</p>
12485
12486 <p>If you want to help getting such feature implemented in Debian,
12487 please send me an email. :)</p>
12488
12489 </div>
12490 <div class="tags">
12491
12492
12493 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/isenkram">isenkram</a>.
12494
12495
12496 </div>
12497 </div>
12498 <div class="padding"></div>
12499
12500 <div class="entry">
12501 <div class="title">
12502 <a href="http://www.hungry.com/~pere/blog/New_IRC_channel_for_LEGO_designers_using_Debian.html">New IRC channel for LEGO designers using Debian</a>
12503 </div>
12504 <div class="date">
12505 2nd January 2013
12506 </div>
12507 <div class="body">
12508 <p>During Christmas, I have worked a bit on the Debian support for
12509 <a href="http://mindstorms.lego.com/en-us/Default.aspx">LEGO Mindstorm
12510 NXT</a>. My son and I have played a bit with my NXT set, and I
12511 discovered I had to build all the tools myself because none were
12512 already in Debian Squeeze. If Debian support for LEGO is something
12513 you care about, please join me on the IRC channel
12514 <a href="irc://irc.debian.org/%23debian-lego">#debian-lego</a> (server
12515 irc.debian.org). There is a lot that could be done to improve the
12516 Debian support for LEGO designers. For example both CAD software
12517 and Mindstorm compilers are missing. :)</p>
12518
12519 <p>Update 2012-01-03: A
12520 <a href="http://wiki.debian.org/LegoDesigners">project page</a>
12521 including links to Lego related packages is now available.</p>
12522
12523 </div>
12524 <div class="tags">
12525
12526
12527 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/lego">lego</a>, <a href="http://www.hungry.com/~pere/blog/tags/robot">robot</a>.
12528
12529
12530 </div>
12531 </div>
12532 <div class="padding"></div>
12533
12534 <div class="entry">
12535 <div class="title">
12536 <a href="http://www.hungry.com/~pere/blog/How_to_backport_bitcoin_qt_version_0_7_2_2_to_Debian_Squeeze.html">How to backport bitcoin-qt version 0.7.2-2 to Debian Squeeze</a>
12537 </div>
12538 <div class="date">
12539 25th December 2012
12540 </div>
12541 <div class="body">
12542 <p>Let me start by wishing you all marry Christmas and a happy new
12543 year! I hope next year will prove to be a good year.</p>
12544
12545 <p><a href="http://www.bitcoin.org/">Bitcoin</a>, the digital
12546 decentralised "currency" that allow people to transfer bitcoins
12547 between each other with minimal overhead, is a very interesting
12548 experiment. And as I wrote a few days ago, the bitcoin situation in
12549 <a href="http://www.debian.org/">Debian</a> is about to improve a bit.
12550 The <a href="http://packages.qa.debian.org/bitcoin">new debian source
12551 package</a> (version 0.7.2-2) was uploaded yesterday, and is waiting
12552 in <a href="http://ftp-master.debian.org/new.html">the NEW queue</A>
12553 for one of the ftpmasters to approve the new bitcoin-qt package
12554 name.</p>
12555
12556 <p>And thanks to the great work of Jonas and the rest of the bitcoin
12557 team in Debian, you can easily test the package in Debian Squeeze
12558 using the following steps to get a set of working packages:</p>
12559
12560 <blockquote><pre>
12561 git clone git://git.debian.org/git/collab-maint/bitcoin
12562 cd bitcoin
12563 DEB_MAINTAINER_MODE=1 DEB_BUILD_OPTIONS=noupnp fakeroot debian/rules clean
12564 DEB_BUILD_OPTIONS=noupnp git-buildpackage --git-ignore-new
12565 </pre></blockquote>
12566
12567 <p>You might have to install some build dependencies as well. The
12568 list of commands should give you two packages, bitcoind and
12569 bitcoin-qt, ready for use in a Squeeze environment. Note that the
12570 client will download the complete set of bitcoin "blocks", which need
12571 around 5.6 GiB of data on my machine at the moment. Make sure your
12572 ~/.bitcoin/ directory have lots of spare room if you want to download
12573 all the blocks. The client will warn if the disk is getting full, so
12574 there is not really a problem if you got too little room, but you will
12575 not be able to get all the features out of the client.</p>
12576
12577 <p>As usual, if you use bitcoin and want to show your support of my
12578 activities, please send Bitcoin donations to my address
12579 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
12580
12581 </div>
12582 <div class="tags">
12583
12584
12585 Tags: <a href="http://www.hungry.com/~pere/blog/tags/bitcoin">bitcoin</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
12586
12587
12588 </div>
12589 </div>
12590 <div class="padding"></div>
12591
12592 <div class="entry">
12593 <div class="title">
12594 <a href="http://www.hungry.com/~pere/blog/A_word_on_bitcoin_support_in_Debian.html">A word on bitcoin support in Debian</a>
12595 </div>
12596 <div class="date">
12597 21st December 2012
12598 </div>
12599 <div class="body">
12600 <p>It has been a while since I wrote about
12601 <a href="http://www.bitcoin.org/">bitcoin</a>, the decentralised
12602 peer-to-peer based crypto-currency, and the reason is simply that I
12603 have been busy elsewhere. But two days ago, I started looking at the
12604 state of <a href="http://packages.qa.debian.org/bitcoin">bitcoin in
12605 Debian</a> again to try to recover my old bitcoin wallet. The package
12606 is now maintained by a
12607 <a href="https://alioth.debian.org/projects/pkg-bitcoin/">team of
12608 people</a>, and the grunt work had already been done by this team. We
12609 owe a huge thank you to all these team members. :)
12610 But I was sad to discover that the bitcoin client is missing in
12611 Wheezy. It is only available in Sid (and an outdated client from
12612 backports). The client had several RC bugs registered in BTS blocking
12613 it from entering testing. To try to help the team and improve the
12614 situation, I spent some time providing patches and triaging the bug
12615 reports. I also had a look at the bitcoin package available from Matt
12616 Corallo in a
12617 <a href="https://launchpad.net/~bitcoin/+archive/bitcoin">PPA for
12618 Ubuntu</a>, and moved the useful pieces from that version into the
12619 Debian package.</p>
12620
12621 <p>After checking with the main package maintainer Jonas Smedegaard on
12622 IRC, I pushed several patches into the collab-maint git repository to
12623 improve the package. It now contains fixes for the RC issues (not from
12624 me, but fixed by Scott Howard), build rules for a Qt GUI client
12625 package, konqueror support for the bitcoin: URI and bash completion
12626 setup. As I work on Debian Squeeze, I also created
12627 <a href="http://lists.alioth.debian.org/pipermail/pkg-bitcoin-devel/Week-of-Mon-20121217/000041.html">a
12628 patch to backport</a> the latest version. Jonas is going to look at
12629 it and try to integrate it into the git repository before uploading a
12630 new version to unstable.
12631
12632 <p>I would very much like bitcoin to succeed, to get rid of the
12633 centralized control currently exercised in the monetary system. I
12634 find it completely unacceptable that the USA government is collecting
12635 transaction data for almost all international money transfers (most are done in USD and transaction logs shipped to the spooks), and
12636 that the major credit card companies can block legal money
12637 transactions to Wikileaks. But for bitcoin to succeed, more people
12638 need to use bitcoins, and more people need to accept bitcoins when
12639 they sell products and services. Improving the bitcoin support in
12640 Debian is a small step in the right direction, but not enough.
12641 Unfortunately the user experience when browsing the web and wanting to
12642 pay with bitcoin is still not very good. The bitcoin: URI is a step
12643 in the right direction, but need to work in most or every browser in
12644 use. Also the bitcoin-qt client is too heavy to fire up to do a
12645 quick transaction. I believe there are other clients available, but
12646 have not tested them.</p>
12647
12648 <p>My
12649 <a href="http://www.hungry.com/~pere/blog/Now_accepting_bitcoins___anonymous_and_distributed_p2p_crypto_money.html">experiment
12650 with bitcoins</a> showed that at least some of my readers use bitcoin.
12651 I received 20.15 BTC so far on the address I provided in my blog two
12652 years ago, as can be
12653 <a href="http://blockexplorer.com/address/15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">seen
12654 on the blockexplorer service</a>. Thank you everyone for your
12655 donation. The blockexplorer service demonstrates quite well that
12656 bitcoin is not quite anonymous and untracked. :) I wonder if the
12657 number of users have gone up since then. If you use bitcoin and want
12658 to show your support of my activity, please send Bitcoin donations to
12659 the same address as last time,
12660 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
12661
12662 </div>
12663 <div class="tags">
12664
12665
12666 Tags: <a href="http://www.hungry.com/~pere/blog/tags/bitcoin">bitcoin</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
12667
12668
12669 </div>
12670 </div>
12671 <div class="padding"></div>
12672
12673 <div class="entry">
12674 <div class="title">
12675 <a href="http://www.hungry.com/~pere/blog/Git_repository_for_song_book_for_Computer_Scientists.html">Git repository for song book for Computer Scientists</a>
12676 </div>
12677 <div class="date">
12678 7th September 2012
12679 </div>
12680 <div class="body">
12681 <p>As I
12682 <a href="http://www.hungry.com/~pere/blog/Song_book_for_Computer_Scientists.html">mentioned
12683 this summer</a>, I have created a Computer Science song book a few
12684 years ago, and today I finally found time to create a public
12685 <a href="https://gitorious.org/pere-cs-songbook/pere-cs-songbook">Gitorious
12686 repository for the project</a>.</p>
12687
12688 <p>If you want to help out, please clone the source and submit patches
12689 to the HTML version. To generate the PDF and PostScript version,
12690 please use prince XML, or let me know about a useful free software
12691 processor capable of creating a good looking PDF from the HTML.</p>
12692
12693 <p>Want to sing? You can still find the song book in HTML, PDF and
12694 PostScript formats at
12695 <a href="http://www.hungry.com/~pere/cs-songbook/">Petter's Computer
12696 Science Songbook</a>.</p>
12697
12698 </div>
12699 <div class="tags">
12700
12701
12702 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/multimedia">multimedia</a>.
12703
12704
12705 </div>
12706 </div>
12707 <div class="padding"></div>
12708
12709 <div class="entry">
12710 <div class="title">
12711 <a href="http://www.hungry.com/~pere/blog/Gratulerer_med_19__rsdagen__Debian_.html">Gratulerer med 19-Ã¥rsdagen, Debian!</a>
12712 </div>
12713 <div class="date">
12714 16th August 2012
12715 </div>
12716 <div class="body">
12717 <p>I dag fyller
12718 <a href="http://www.debian.org/News/2012/20120813">Debian-prosjektet 19
12719 år</a>. Jeg har fulgt det de siste 12 årene, og er veldig glad for å kunne
12720 si gratulerer med dagen, Debian!</p>
12721
12722 </div>
12723 <div class="tags">
12724
12725
12726 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/norsk">norsk</a>.
12727
12728
12729 </div>
12730 </div>
12731 <div class="padding"></div>
12732
12733 <div class="entry">
12734 <div class="title">
12735 <a href="http://www.hungry.com/~pere/blog/Song_book_for_Computer_Scientists.html">Song book for Computer Scientists</a>
12736 </div>
12737 <div class="date">
12738 24th June 2012
12739 </div>
12740 <div class="body">
12741 <p>Many years ago, while studying Computer Science at the
12742 <a href="http://www.uit.no/">University of Tromsø</a>, I started
12743 collecting computer related songs for use at parties. The original
12744 version was written in LaTeX, but a few years ago I got help from
12745 HÃ¥kon W. Lie, one of the inventors of W3C CSS, to convert it to HTML
12746 while keeping the ability to create a nice book in PDF format. I have
12747 not had time to maintain the book for a while now, and guess I should
12748 put it up on some public version control repository where others can
12749 help me extend and update the book. If anyone is volunteering to help
12750 me with this, send me an email. Also let me know if there are songs
12751 missing in my book.</p>
12752
12753 <p>I have not mentioned the book on my blog so far, and it occured to
12754 me today that I really should let all my readers share the joys of
12755 singing out load about programming, computers and computer networks.
12756 Especially now that <a href="http://debconf12.debconf.org/">Debconf
12757 12</a> is about to start (and I am not going). Want to sing? Check
12758 out <a href="http://www.hungry.com/~pere/cs-songbook/">Petter's
12759 Computer Science Songbook</a>.
12760
12761 </div>
12762 <div class="tags">
12763
12764
12765 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/multimedia">multimedia</a>.
12766
12767
12768 </div>
12769 </div>
12770 <div class="padding"></div>
12771
12772 <div class="entry">
12773 <div class="title">
12774 <a href="http://www.hungry.com/~pere/blog/Automatically_upgrading_server_firmware_on_Dell_PowerEdge.html">Automatically upgrading server firmware on Dell PowerEdge</a>
12775 </div>
12776 <div class="date">
12777 21st November 2011
12778 </div>
12779 <div class="body">
12780 <p>At work we have heaps of servers. I believe the total count is
12781 around 1000 at the moment. To be able to get help from the vendors
12782 when something go wrong, we want to keep the firmware on the servers
12783 up to date. If the firmware isn't the latest and greatest, the
12784 vendors typically refuse to start debugging any problems until the
12785 firmware is upgraded. So before every reboot, we want to upgrade the
12786 firmware, and we would really like everyone handling servers at the
12787 university to do this themselves when they plan to reboot a machine.
12788 For that to happen we at the unix server admin group need to provide
12789 the tools to do so.</p>
12790
12791 <p>To make firmware upgrading easier, I am working on a script to
12792 fetch and install the latest firmware for the servers we got. Most of
12793 our hardware are from Dell and HP, so I have focused on these servers
12794 so far. This blog post is about the Dell part.</P>
12795
12796 <p>On the Dell FTP site I was lucky enough to find
12797 <a href="ftp://ftp.us.dell.com/catalog/Catalog.xml.gz">an XML file</a>
12798 with firmware information for all 11th generation servers, listing
12799 which firmware should be used on a given model and where on the FTP
12800 site I can find it. Using a simple perl XML parser I can then
12801 download the shell scripts Dell provides to do firmware upgrades from
12802 within Linux and reboot when all the firmware is primed and ready to
12803 be activated on the first reboot.</p>
12804
12805 <p>This is the Dell related fragment of the perl code I am working on.
12806 Are there anyone working on similar tools for firmware upgrading all
12807 servers at a site? Please get in touch and lets share resources.</p>
12808
12809 <p><pre>
12810 #!/usr/bin/perl
12811 use strict;
12812 use warnings;
12813 use File::Temp qw(tempdir);
12814 BEGIN {
12815 # Install needed RHEL packages if missing
12816 my %rhelmodules = (
12817 'XML::Simple' => 'perl-XML-Simple',
12818 );
12819 for my $module (keys %rhelmodules) {
12820 eval "use $module;";
12821 if ($@) {
12822 my $pkg = $rhelmodules{$module};
12823 system("yum install -y $pkg");
12824 eval "use $module;";
12825 }
12826 }
12827 }
12828 my $errorsto = 'pere@hungry.com';
12829
12830 upgrade_dell();
12831
12832 exit 0;
12833
12834 sub run_firmware_script {
12835 my ($opts, $script) = @_;
12836 unless ($script) {
12837 print STDERR "fail: missing script name\n";
12838 exit 1
12839 }
12840 print STDERR "Running $script\n\n";
12841
12842 if (0 == system("sh $script $opts")) { # FIXME correct exit code handling
12843 print STDERR "success: firmware script ran succcessfully\n";
12844 } else {
12845 print STDERR "fail: firmware script returned error\n";
12846 }
12847 }
12848
12849 sub run_firmware_scripts {
12850 my ($opts, @dirs) = @_;
12851 # Run firmware packages
12852 for my $dir (@dirs) {
12853 print STDERR "info: Running scripts in $dir\n";
12854 opendir(my $dh, $dir) or die "Unable to open directory $dir: $!";
12855 while (my $s = readdir $dh) {
12856 next if $s =~ m/^\.\.?/;
12857 run_firmware_script($opts, "$dir/$s");
12858 }
12859 closedir $dh;
12860 }
12861 }
12862
12863 sub download {
12864 my $url = shift;
12865 print STDERR "info: Downloading $url\n";
12866 system("wget --quiet \"$url\"");
12867 }
12868
12869 sub upgrade_dell {
12870 my @dirs;
12871 my $product = `dmidecode -s system-product-name`;
12872 chomp $product;
12873
12874 if ($product =~ m/PowerEdge/) {
12875
12876 # on RHEL, these pacakges are needed by the firwmare upgrade scripts
12877 system('yum install -y compat-libstdc++-33.i686 libstdc++.i686 libxml2.i686 procmail');
12878
12879 my $tmpdir = tempdir(
12880 CLEANUP => 1
12881 );
12882 chdir($tmpdir);
12883 fetch_dell_fw('catalog/Catalog.xml.gz');
12884 system('gunzip Catalog.xml.gz');
12885 my @paths = fetch_dell_fw_list('Catalog.xml');
12886 # -q is quiet, disabling interactivity and reducing console output
12887 my $fwopts = "-q";
12888 if (@paths) {
12889 for my $url (@paths) {
12890 fetch_dell_fw($url);
12891 }
12892 run_firmware_scripts($fwopts, $tmpdir);
12893 } else {
12894 print STDERR "error: Unsupported Dell model '$product'.\n";
12895 print STDERR "error: Please report to $errorsto.\n";
12896 }
12897 chdir('/');
12898 } else {
12899 print STDERR "error: Unsupported Dell model '$product'.\n";
12900 print STDERR "error: Please report to $errorsto.\n";
12901 }
12902 }
12903
12904 sub fetch_dell_fw {
12905 my $path = shift;
12906 my $url = "ftp://ftp.us.dell.com/$path";
12907 download($url);
12908 }
12909
12910 # Using ftp://ftp.us.dell.com/catalog/Catalog.xml.gz, figure out which
12911 # firmware packages to download from Dell. Only work for Linux
12912 # machines and 11th generation Dell servers.
12913 sub fetch_dell_fw_list {
12914 my $filename = shift;
12915
12916 my $product = `dmidecode -s system-product-name`;
12917 chomp $product;
12918 my ($mybrand, $mymodel) = split(/\s+/, $product);
12919
12920 print STDERR "Finding firmware bundles for $mybrand $mymodel\n";
12921
12922 my $xml = XMLin($filename);
12923 my @paths;
12924 for my $bundle (@{$xml->{SoftwareBundle}}) {
12925 my $brand = $bundle->{TargetSystems}->{Brand}->{Display}->{content};
12926 my $model = $bundle->{TargetSystems}->{Brand}->{Model}->{Display}->{content};
12927 my $oscode;
12928 if ("ARRAY" eq ref $bundle->{TargetOSes}->{OperatingSystem}) {
12929 $oscode = $bundle->{TargetOSes}->{OperatingSystem}[0]->{osCode};
12930 } else {
12931 $oscode = $bundle->{TargetOSes}->{OperatingSystem}->{osCode};
12932 }
12933 if ($mybrand eq $brand && $mymodel eq $model && "LIN" eq $oscode)
12934 {
12935 @paths = map { $_->{path} } @{$bundle->{Contents}->{Package}};
12936 }
12937 }
12938 for my $component (@{$xml->{SoftwareComponent}}) {
12939 my $componenttype = $component->{ComponentType}->{value};
12940
12941 # Drop application packages, only firmware and BIOS
12942 next if 'APAC' eq $componenttype;
12943
12944 my $cpath = $component->{path};
12945 for my $path (@paths) {
12946 if ($cpath =~ m%/$path$%) {
12947 push(@paths, $cpath);
12948 }
12949 }
12950 }
12951 return @paths;
12952 }
12953 </pre>
12954
12955 <p>The code is only tested on RedHat Enterprise Linux, but I suspect
12956 it could work on other platforms with some tweaking. Anyone know a
12957 index like Catalog.xml is available from HP for HP servers? At the
12958 moment I maintain a similar list manually and it is quickly getting
12959 outdated.</p>
12960
12961 </div>
12962 <div class="tags">
12963
12964
12965 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
12966
12967
12968 </div>
12969 </div>
12970 <div class="padding"></div>
12971
12972 <div class="entry">
12973 <div class="title">
12974 <a href="http://www.hungry.com/~pere/blog/How_is_booting_into_runlevel_1_different_from_single_user_boots_.html">How is booting into runlevel 1 different from single user boots?</a>
12975 </div>
12976 <div class="date">
12977 4th August 2011
12978 </div>
12979 <div class="body">
12980 <p>Wouter Verhelst have some
12981 <a href="http://grep.be/blog/en/retorts/pere_kubuntu_boot">interesting
12982 comments and opinions</a> on my blog post on
12983 <a href="http://www.hungry.com/~pere/blog/What_should_start_from__etc_rcS_d__in_Debian____almost_nothing.html">the
12984 need to clean up /etc/rcS.d/ in Debian</a> and my blog post about
12985 <a href="http://www.hungry.com/~pere/blog/What_is_missing_in_the_Debian_desktop__or_why_my_parents_use_Kubuntu.html">the
12986 default KDE desktop in Debian</a>. I only have time to address one
12987 small piece of his comment now, and though it best to address the
12988 misunderstanding he bring forward:</p>
12989
12990 <p><blockquote>
12991 Currently, a system admin has four options: [...] boot to a
12992 single-user system (by adding 'single' to the kernel command line;
12993 this runs rcS and rc1 scripts)
12994 </blockquote></p>
12995
12996 <p>This make me believe Wouter believe booting into single user mode
12997 and booting into runlevel 1 is the same. I am not surprised he
12998 believe this, because it would make sense and is a quite sensible
12999 thing to believe. But because the boot in Debian is slightly broken,
13000 runlevel 1 do not work properly and it isn't the same as single user
13001 mode. I'll try to explain what is actually happing, but it is a bit
13002 hard to explain.</p>
13003
13004 <p>Single user mode is defined like this in /etc/inittab:
13005 "<tt>~~:S:wait:/sbin/sulogin</tt>". This means the only thing that is
13006 executed in single user mode is sulogin. Single user mode is a boot
13007 state "between" the runlevels, and when booting into single user mode,
13008 only the scripts in /etc/rcS.d/ are executed before the init process
13009 enters the single user state. When switching to runlevel 1, the state
13010 is in fact not ending in runlevel 1, but it passes through runlevel 1
13011 and end up in the single user mode (see /etc/rc1.d/S03single, which
13012 runs "init -t1 S" to switch to single user mode at the end of runlevel
13013 1. It is confusing that the 'S' (single user) init mode is not the
13014 mode enabled by /etc/rcS.d/ (which is more like the initial boot
13015 mode).</p>
13016
13017 <p>This summary might make it clearer. When booting for the first
13018 time into single user mode, the following commands are executed:
13019 "<tt>/etc/init.d/rc S; /sbin/sulogin</tt>". When booting into
13020 runlevel 1, the following commands are executed: "<tt>/etc/init.d/rc
13021 S; /etc/init.d/rc 1; /sbin/sulogin</tt>". A problem show up when
13022 trying to continue after visiting single user mode. Not all services
13023 are started again as they should, causing the machine to end up in an
13024 unpredicatble state. This is why Debian admins recommend rebooting
13025 after visiting single user mode.</p>
13026
13027 <p>A similar problem with runlevel 1 is caused by the amount of
13028 scripts executed from /etc/rcS.d/. When switching from say runlevel 2
13029 to runlevel 1, the services started from /etc/rcS.d/ are not properly
13030 stopped when passing through the scripts in /etc/rc1.d/, and not
13031 started again when switching away from runlevel 1 to the runlevels
13032 2-5. I believe the problem is best fixed by moving all the scripts
13033 out of /etc/rcS.d/ that are not <strong>required</strong> to get a
13034 functioning single user mode during boot.</p>
13035
13036 <p>I have spent several years investigating the Debian boot system,
13037 and discovered this problem a few years ago. I suspect it originates
13038 from when sysvinit was introduced into Debian, a long time ago.</p>
13039
13040 </div>
13041 <div class="tags">
13042
13043
13044 Tags: <a href="http://www.hungry.com/~pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
13045
13046
13047 </div>
13048 </div>
13049 <div class="padding"></div>
13050
13051 <div class="entry">
13052 <div class="title">
13053 <a href="http://www.hungry.com/~pere/blog/What_should_start_from__etc_rcS_d__in_Debian____almost_nothing.html">What should start from /etc/rcS.d/ in Debian? - almost nothing</a>
13054 </div>
13055 <div class="date">
13056 30th July 2011
13057 </div>
13058 <div class="body">
13059 <p>In the Debian boot system, several packages include scripts that
13060 are started from /etc/rcS.d/. In fact, there is a bite more of them
13061 than make sense, and this causes a few problems. What kind of
13062 problems, you might ask. There are at least two problems. The first
13063 is that it is not possible to recover a machine after switching to
13064 runlevel 1. One need to actually reboot to get the machine back to
13065 the expected state. The other is that single user boot will sometimes
13066 run into problems because some of the subsystems are activated before
13067 the root login is presented, causing problems when trying to recover a
13068 machine from a problem in that subsystem. A minor additional point is
13069 that moving more scripts out of rcS.d/ and into the other rc#.d/
13070 directories will increase the amount of scripts that can run in
13071 parallel during boot, and thus decrease the boot time.</p>
13072
13073 <p>So, which scripts should start from rcS.d/. In short, only the
13074 scripts that _have_ to execute before the root login prompt is
13075 presented during a single user boot should go there. Everything else
13076 should go into the numeric runlevels. This means things like
13077 lm-sensors, fuse and x11-common should not run from rcS.d, but from
13078 the numeric runlevels. Today in Debian, there are around 115 init.d
13079 scripts that are started from rcS.d/, and most of them should be moved
13080 out. Do your package have one of them? Please help us make single
13081 user and runlevel 1 better by moving it.</p>
13082
13083 <p>Scripts setting up the screen, keyboard, system partitions
13084 etc. should still be started from rcS.d/, but there is for example no
13085 need to have the network enabled before the single user login prompt
13086 is presented.</p>
13087
13088 <p>As always, things are not so easy to fix as they sound. To keep
13089 Debian systems working while scripts migrate and during upgrades, the
13090 scripts need to be moved from rcS.d/ to rc2.d/ in reverse dependency
13091 order, ie the scripts that nothing in rcS.d/ depend on can be moved,
13092 and the next ones can only be moved when their dependencies have been
13093 moved first. This migration must be done sequentially while we ensure
13094 that the package system upgrade packages in the right order to keep
13095 the system state correct. This will require some coordination when it
13096 comes to network related packages, but most of the packages with
13097 scripts that should migrate do not have anything in rcS.d/ depending
13098 on them. Some packages have already been updated, like the sudo
13099 package, while others are still left to do. I wish I had time to work
13100 on this myself, but real live constrains make it unlikely that I will
13101 find time to push this forward.</p>
13102
13103 </div>
13104 <div class="tags">
13105
13106
13107 Tags: <a href="http://www.hungry.com/~pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
13108
13109
13110 </div>
13111 </div>
13112 <div class="padding"></div>
13113
13114 <div class="entry">
13115 <div class="title">
13116 <a href="http://www.hungry.com/~pere/blog/What_is_missing_in_the_Debian_desktop__or_why_my_parents_use_Kubuntu.html">What is missing in the Debian desktop, or why my parents use Kubuntu</a>
13117 </div>
13118 <div class="date">
13119 29th July 2011
13120 </div>
13121 <div class="body">
13122 <p>While at Debconf11, I have several times during discussions
13123 mentioned the issues I believe should be improved in Debian for its
13124 desktop to be useful for more people. The use case for this is my
13125 parents, which are currently running Kubuntu which solve the
13126 issues.</p>
13127
13128 <p>I suspect these four missing features are not very hard to
13129 implement. After all, they are present in Ubuntu, so if we wanted to
13130 do this in Debian we would have a source.</p>
13131
13132 <ol>
13133
13134 <li><strong>Simple GUI based upgrade of packages.</strong> When there
13135 are new packages available for upgrades, a icon in the KDE status bar
13136 indicate this, and clicking on it will activate the simple upgrade
13137 tool to handle it. I have no problem guiding both of my parents
13138 through the process over the phone. If a kernel reboot is required,
13139 this too is indicated by the status bars and the upgrade tool. Last
13140 time I checked, nothing with the same features was working in KDE in
13141 Debian.</li>
13142
13143 <li><strong>Simple handling of missing Firefox browser
13144 plugins.</strong> When the browser encounter a MIME type it do not
13145 currently have a handler for, it will ask the user if the system
13146 should search for a package that would add support for this MIME type,
13147 and if the user say yes, the APT sources will be searched for packages
13148 advertising the MIME type in their control file (visible in the
13149 Packages file in the APT archive). If one or more packages are found,
13150 it is a simple click of the mouse to add support for the missing mime
13151 type. If the package require the user to accept some non-free
13152 license, this is explained to the user. The entire process make it
13153 more clear to the user why something do not work in the browser, and
13154 make the chances higher for the user to blame the web page authors and
13155 not the browser for any missing features.</li>
13156
13157 <li><strong>Simple handling of missing multimedia codec/format
13158 handlers.</strong> When the media players encounter a format or codec
13159 it is not supporting, a dialog pop up asking the user if the system
13160 should search for a package that would add support for it. This
13161 happen with things like MP3, Windows Media or H.264. The selection
13162 and installation procedure is very similar to the Firefox browser
13163 plugin handling. This is as far as I know implemented using a
13164 gstreamer hook. The end result is that the user easily get access to
13165 the codecs that are present from the APT archives available, while
13166 explaining more on why a given format is unsupported by Ubuntu.</li>
13167
13168 <li><strong>Better browser handling of some MIME types.</strong> When
13169 displaying a text/plain file in my Debian browser, it will propose to
13170 start emacs to show it. If I remember correctly, when doing the same
13171 in Kunbutu it show the file as a text file in the browser. At least I
13172 know Opera will show text files within the browser. I much prefer the
13173 latter behaviour.</li>
13174
13175 </ol>
13176
13177 <p>There are other nice features as well, like the simplified suite
13178 upgrader, but given that I am the one mostly doing the dist-upgrade,
13179 it do not matter much.</p>
13180
13181 <p>I really hope we could get these features in place for the next
13182 Debian release. It would require the coordinated effort of several
13183 maintainers, but would make the end user experience a lot better.</p>
13184
13185 </div>
13186 <div class="tags">
13187
13188
13189 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/h264">h264</a>, <a href="http://www.hungry.com/~pere/blog/tags/multimedia">multimedia</a>, <a href="http://www.hungry.com/~pere/blog/tags/web">web</a>.
13190
13191
13192 </div>
13193 </div>
13194 <div class="padding"></div>
13195
13196 <div class="entry">
13197 <div class="title">
13198 <a href="http://www.hungry.com/~pere/blog/Perl_modules_used_by_FixMyStreet_which_are_missing_in_Debian_Squeeze.html">Perl modules used by FixMyStreet which are missing in Debian/Squeeze</a>
13199 </div>
13200 <div class="date">
13201 26th July 2011
13202 </div>
13203 <div class="body">
13204 <p>The Norwegian <a href="http://www.fiksgatami.no/">FiksGataMi</A>
13205 site is build on Debian/Squeeze, and this platform was chosen because
13206 I am most familiar with Debian (being a Debian Developer for around 10
13207 years) because it is the latest stable Debian release which should get
13208 security support for a few years.</p>
13209
13210 <p>The web service is written in Perl, and depend on some perl modules
13211 that are missing in Debian at the moment. It would be great if these
13212 modules were added to the Debian archive, allowing anyone to set up
13213 their own <a href="http://www.fixmystreet.com">FixMyStreet</a> clone
13214 in their own country using only Debian packages. The list of modules
13215 missing in Debian/Squeeze isn't very long, and I hope the perl group
13216 will find time to package the 12 modules Catalyst::Plugin::SmartURI,
13217 Catalyst::Plugin::Unicode::Encoding, Catalyst::View::TT, Devel::Hide,
13218 Sort::Key, Statistics::Distributions, Template::Plugin::Comma,
13219 Template::Plugin::DateTime::Format, Term::Size::Any, Term::Size::Perl,
13220 URI::SmartURI and Web::Scraper to make the maintenance of FixMyStreet
13221 easier in the future.</p>
13222
13223 <p>Thanks to the great tools in Debian, getting the missing modules
13224 installed on my server was a simple call to 'cpan2deb Module::Name'
13225 and 'dpkg -i' to install the resulting package. But this leave me
13226 with the responsibility of tracking security problems, which I really
13227 do not have time for.</p>
13228
13229 </div>
13230 <div class="tags">
13231
13232
13233 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/fiksgatami">fiksgatami</a>.
13234
13235
13236 </div>
13237 </div>
13238 <div class="padding"></div>
13239
13240 <div class="entry">
13241 <div class="title">
13242 <a href="http://www.hungry.com/~pere/blog/A_Norwegian_FixMyStreet_have_kept_me_busy_the_last_few_weeks.html">A Norwegian FixMyStreet have kept me busy the last few weeks</a>
13243 </div>
13244 <div class="date">
13245 3rd April 2011
13246 </div>
13247 <div class="body">
13248 <p>Here is a small update for my English readers. Most of my blog
13249 posts have been in Norwegian the last few weeks, so here is a short
13250 update in English.</p>
13251
13252 <p>The kids still keep me too busy to get much free software work
13253 done, but I did manage to organise a project to get a Norwegian port
13254 of the British service
13255 <a href="http://www.fixmystreet.com/">FixMyStreet</a> up and running,
13256 and it has been running for a month now. The entire project has been
13257 organised by me and two others. Around Christmas we gathered sponsors
13258 to fund the development work. In January I drafted a contract with
13259 <a href="http://www.mysociety.org/">mySociety</a> on what to develop,
13260 and in February the development took place. Most of it involved
13261 converting the source to use GPS coordinates instead of British
13262 easting/northing, and the resulting code should be a lot easier to get
13263 running in any country by now. The Norwegian
13264 <a href="http://www.fiksgatami.no/">FiksGataMi</a> is using
13265 <a href="http://www.openstreetmap.org/">OpenStreetmap</a> as the map
13266 source and the source for administrative borders in Norway, and
13267 support for this had to be added/fixed.</p>
13268
13269 <p>The Norwegian version went live March 3th, and we spent the weekend
13270 polishing the system before we announced it March 7th. The system is
13271 running on a KVM instance of Debian/Squeeze, and has seen almost 3000
13272 problem reports in a few weeks. Soon we hope to announce the Android
13273 and iPhone versions making it even easier to report problems with the
13274 public infrastructure.</p>
13275
13276 <p>Perhaps something to consider for those of you in countries without
13277 such service?</p>
13278
13279 </div>
13280 <div class="tags">
13281
13282
13283 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/fiksgatami">fiksgatami</a>, <a href="http://www.hungry.com/~pere/blog/tags/kart">kart</a>.
13284
13285
13286 </div>
13287 </div>
13288 <div class="padding"></div>
13289
13290 <div class="entry">
13291 <div class="title">
13292 <a href="http://www.hungry.com/~pere/blog/Using_NVD_and_CPE_to_track_CVEs_in_locally_maintained_software.html">Using NVD and CPE to track CVEs in locally maintained software</a>
13293 </div>
13294 <div class="date">
13295 28th January 2011
13296 </div>
13297 <div class="body">
13298 <p>The last few days I have looked at ways to track open security
13299 issues here at my work with the University of Oslo. My idea is that
13300 it should be possible to use the information about security issues
13301 available on the Internet, and check our locally
13302 maintained/distributed software against this information. It should
13303 allow us to verify that no known security issues are forgotten. The
13304 CVE database listing vulnerabilities seem like a great central point,
13305 and by using the package lists from Debian mapped to CVEs provided by
13306 the testing security team, I believed it should be possible to figure
13307 out which security holes were present in our free software
13308 collection.</p>
13309
13310 <p>After reading up on the topic, it became obvious that the first
13311 building block is to be able to name software packages in a unique and
13312 consistent way across data sources. I considered several ways to do
13313 this, for example coming up with my own naming scheme like using URLs
13314 to project home pages or URLs to the Freshmeat entries, or using some
13315 existing naming scheme. And it seem like I am not the first one to
13316 come across this problem, as MITRE already proposed and implemented a
13317 solution. Enter the <a href="http://cpe.mitre.org/index.html">Common
13318 Platform Enumeration</a> dictionary, a vocabulary for referring to
13319 software, hardware and other platform components. The CPE ids are
13320 mapped to CVEs in the <a href="http://web.nvd.nist.gov/">National
13321 Vulnerability Database</a>, allowing me to look up know security
13322 issues for any CPE name. With this in place, all I need to do is to
13323 locate the CPE id for the software packages we use at the university.
13324 This is fairly trivial (I google for 'cve cpe $package' and check the
13325 NVD entry if a CVE for the package exist).</p>
13326
13327 <p>To give you an example. The GNU gzip source package have the CPE
13328 name cpe:/a:gnu:gzip. If the old version 1.3.3 was the package to
13329 check out, one could look up
13330 <a href="http://web.nvd.nist.gov/view/vuln/search?cpe=cpe%3A%2Fa%3Agnu%3Agzip:1.3.3">cpe:/a:gnu:gzip:1.3.3
13331 in NVD</a> and get a list of 6 security holes with public CVE entries.
13332 The most recent one is
13333 <a href="http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2010-0001">CVE-2010-0001</a>,
13334 and at the bottom of the NVD page for this vulnerability the complete
13335 list of affected versions is provided.</p>
13336
13337 <p>The NVD database of CVEs is also available as a XML dump, allowing
13338 for offline processing of issues. Using this dump, I've written a
13339 small script taking a list of CPEs as input and list all CVEs
13340 affecting the packages represented by these CPEs. One give it CPEs
13341 with version numbers as specified above and get a list of open
13342 security issues out.</p>
13343
13344 <p>Of course for this approach to be useful, the quality of the NVD
13345 information need to be high. For that to happen, I believe as many as
13346 possible need to use and contribute to the NVD database. I notice
13347 RHEL is providing
13348 <a href="https://www.redhat.com/security/data/metrics/rhsamapcpe.txt">a
13349 map from CVE to CPE</a>, indicating that they are using the CPE
13350 information. I'm not aware of Debian and Ubuntu doing the same.</p>
13351
13352 <p>To get an idea about the quality for free software, I spent some
13353 time making it possible to compare the CVE database from Debian with
13354 the CVE database in NVD. The result look fairly good, but there are
13355 some inconsistencies in NVD (same software package having several
13356 CPEs), and some inaccuracies (NVD not mentioning buggy packages that
13357 Debian believe are affected by a CVE). Hope to find time to improve
13358 the quality of NVD, but that require being able to get in touch with
13359 someone maintaining it. So far my three emails with questions and
13360 corrections have not seen any reply, but I hope contact can be
13361 established soon.</p>
13362
13363 <p>An interesting application for CPEs is cross platform package
13364 mapping. It would be useful to know which packages in for example
13365 RHEL, OpenSuSe and Mandriva are missing from Debian and Ubuntu, and
13366 this would be trivial if all linux distributions provided CPE entries
13367 for their packages.</p>
13368
13369 </div>
13370 <div class="tags">
13371
13372
13373 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/sikkerhet">sikkerhet</a>.
13374
13375
13376 </div>
13377 </div>
13378 <div class="padding"></div>
13379
13380 <div class="entry">
13381 <div class="title">
13382 <a href="http://www.hungry.com/~pere/blog/Which_module_is_loaded_for_a_given_PCI_and_USB_device_.html">Which module is loaded for a given PCI and USB device?</a>
13383 </div>
13384 <div class="date">
13385 23rd January 2011
13386 </div>
13387 <div class="body">
13388 <p>In the
13389 <a href="http://packages.qa.debian.org/discover-data">discover-data</a>
13390 package in Debian, there is a script to report useful information
13391 about the running hardware for use when people report missing
13392 information. One part of this script that I find very useful when
13393 debugging hardware problems, is the part mapping loaded kernel module
13394 to the PCI device it claims. It allow me to quickly see if the kernel
13395 module I expect is driving the hardware I am struggling with. To see
13396 the output, make sure discover-data is installed and run
13397 <tt>/usr/share/bug/discover-data 3>&1</tt>. The relevant output on
13398 one of my machines like this:</p>
13399
13400 <pre>
13401 loaded modules:
13402 10de:03eb i2c_nforce2
13403 10de:03f1 ohci_hcd
13404 10de:03f2 ehci_hcd
13405 10de:03f0 snd_hda_intel
13406 10de:03ec pata_amd
13407 10de:03f6 sata_nv
13408 1022:1103 k8temp
13409 109e:036e bttv
13410 109e:0878 snd_bt87x
13411 11ab:4364 sky2
13412 </pre>
13413
13414 <p>The code in question look like this, slightly modified for
13415 readability and to drop the output to file descriptor 3:</p>
13416
13417 <pre>
13418 if [ -d /sys/bus/pci/devices/ ] ; then
13419 echo loaded pci modules:
13420 (
13421 cd /sys/bus/pci/devices/
13422 for address in * ; do
13423 if [ -d "$address/driver/module" ] ; then
13424 module=`cd $address/driver/module ; pwd -P | xargs basename`
13425 if grep -q "^$module " /proc/modules ; then
13426 address=$(echo $address |sed s/0000://)
13427 id=`lspci -n -s $address | tail -n 1 | awk '{print $3}'`
13428 echo "$id $module"
13429 fi
13430 fi
13431 done
13432 )
13433 echo
13434 fi
13435 </pre>
13436
13437 <p>Similar code could be used to extract USB device module
13438 mappings:</p>
13439
13440 <pre>
13441 if [ -d /sys/bus/usb/devices/ ] ; then
13442 echo loaded usb modules:
13443 (
13444 cd /sys/bus/usb/devices/
13445 for address in * ; do
13446 if [ -d "$address/driver/module" ] ; then
13447 module=`cd $address/driver/module ; pwd -P | xargs basename`
13448 if grep -q "^$module " /proc/modules ; then
13449 address=$(echo $address |sed s/0000://)
13450 id=$(lsusb -s $address | tail -n 1 | awk '{print $6}')
13451 if [ "$id" ] ; then
13452 echo "$id $module"
13453 fi
13454 fi
13455 fi
13456 done
13457 )
13458 echo
13459 fi
13460 </pre>
13461
13462 <p>This might perhaps be something to include in other tools as
13463 well.</p>
13464
13465 </div>
13466 <div class="tags">
13467
13468
13469 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
13470
13471
13472 </div>
13473 </div>
13474 <div class="padding"></div>
13475
13476 <div class="entry">
13477 <div class="title">
13478 <a href="http://www.hungry.com/~pere/blog/How_to_test_if_a_laptop_is_working_with_Linux.html">How to test if a laptop is working with Linux</a>
13479 </div>
13480 <div class="date">
13481 22nd December 2010
13482 </div>
13483 <div class="body">
13484 <p>The last few days I have spent at work here at the <a
13485 href="http://www.uio.no/">University of Oslo</a> testing if the new
13486 batch of computers will work with Linux. Every year for the last few
13487 years the university have organised shared bid of a few thousand
13488 computers, and this year HP won the bid. Two different desktops and
13489 five different laptops are on the list this year. We in the UNIX
13490 group want to know which one of these computers work well with RHEL
13491 and Ubuntu, the two Linux distributions we currently handle at the
13492 university.</p>
13493
13494 <p>My test method is simple, and I share it here to get feedback and
13495 perhaps inspire others to test hardware as well. To test, I PXE
13496 install the OS version of choice, and log in as my normal user and run
13497 a few applications and plug in selected pieces of hardware. When
13498 something fail, I make a note about this in the test matrix and move
13499 on. If I have some spare time I try to report the bug to the OS
13500 vendor, but as I only have the machines for a short time, I rarely
13501 have the time to do this for all the problems I find.</p>
13502
13503 <p>Anyway, to get to the point of this post. Here is the simple tests
13504 I perform on a new model.</p>
13505
13506 <ul>
13507
13508 <li>Is PXE installation working? I'm testing with RHEL6, Ubuntu Lucid
13509 and Ubuntu Maverik at the moment. If I feel like it, I also test with
13510 RHEL5 and Debian Edu/Squeeze.</li>
13511
13512 <li>Is X.org working? If the graphical login screen show up after
13513 installation, X.org is working.</li>
13514
13515 <li>Is hardware accelerated OpenGL working? Running glxgears (in
13516 package mesa-utils on Ubuntu) and writing down the frames per second
13517 reported by the program.</li>
13518
13519 <li>Is sound working? With Gnome and KDE, a sound is played when
13520 logging in, and if I can hear this the test is successful. If there
13521 are several audio exits on the machine, I try them all and check if
13522 the Gnome/KDE audio mixer can control where to send the sound. I
13523 normally test this by playing
13524 <a href="http://www.nuug.no/aktiviteter/20101012-chef/ ">a HTML5
13525 video</a> in Firefox/Iceweasel.</li>
13526
13527 <li>Is the USB subsystem working? I test this by plugging in a USB
13528 memory stick and see if Gnome/KDE notices this.</li>
13529
13530 <li>Is the CD/DVD player working? I test this by inserting any CD/DVD
13531 I have lying around, and see if Gnome/KDE notices this.</li>
13532
13533 <li>Is any built in camera working? Test using cheese, and see if a
13534 picture from the v4l device show up.</li>
13535
13536 <li>Is bluetooth working? Use the Gnome/KDE browsing tool to see if
13537 any bluetooth devices are discovered. In my office, I normally see a
13538 few.</li>
13539
13540 <li>For laptops, is the SD or Compaq Flash reader working. I have
13541 memory modules lying around, and stick them in and see if Gnome/KDE
13542 notice this.</li>
13543
13544 <li>For laptops, is suspend/hibernate working? I'm testing if the
13545 special button work, and if the laptop continue to work after
13546 resume.</li>
13547
13548 <li>For laptops, is the extra buttons working, like audio level,
13549 adjusting background light, switching on/off external video output,
13550 switching on/off wifi, bluetooth, etc? The set of buttons differ from
13551 laptop to laptop, so I just write down which are working and which are
13552 not.</li>
13553
13554 <li>Some laptops have smart card readers, finger print readers,
13555 acceleration sensors etc. I rarely test these, as I do not know how
13556 to quickly test if they are working or not, so I only document their
13557 existence.</li>
13558
13559 </ul>
13560
13561 <p>By now I suspect you are really curious what the test results are
13562 for the HP machines I am testing. I'm not done yet, so I will report
13563 the test results later. For now I can report that HP 8100 Elite work
13564 fine, and hibernation fail with HP EliteBook 8440p on Ubuntu Lucid,
13565 and audio fail on RHEL6. Ubuntu Maverik worked with 8440p. As you
13566 can see, I have most machines left to test. One interesting
13567 observation is that Ubuntu Lucid has almost twice the frame rate than
13568 RHEL6 with glxgears. No idea why.</p>
13569
13570 </div>
13571 <div class="tags">
13572
13573
13574 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
13575
13576
13577 </div>
13578 </div>
13579 <div class="padding"></div>
13580
13581 <div class="entry">
13582 <div class="title">
13583 <a href="http://www.hungry.com/~pere/blog/Some_thoughts_on_BitCoins.html">Some thoughts on BitCoins</a>
13584 </div>
13585 <div class="date">
13586 11th December 2010
13587 </div>
13588 <div class="body">
13589 <p>As I continue to explore
13590 <a href="http://www.bitcoin.org/">BitCoin</a>, I've starting to wonder
13591 what properties the system have, and how it will be affected by laws
13592 and regulations here in Norway. Here are some random notes.</p>
13593
13594 <p>One interesting thing to note is that since the transactions are
13595 verified using a peer to peer network, all details about a transaction
13596 is known to everyone. This means that if a BitCoin address has been
13597 published like I did with mine in my initial post about BitCoin, it is
13598 possible for everyone to see how many BitCoins have been transfered to
13599 that address. There is even a web service to look at the details for
13600 all transactions. There I can see that my address
13601 <a href="http://blockexplorer.com/address/15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a>
13602 have received 16.06 Bitcoin, the
13603 <a href="http://blockexplorer.com/address/1LfdGnGuWkpSJgbQySxxCWhv8MHqvwst3">1LfdGnGuWkpSJgbQySxxCWhv8MHqvwst3</a>
13604 address of Simon Phipps have received 181.97 BitCoin and the address
13605 <a href="http://blockexplorer.com/address/1MCwBbhNGp5hRm5rC1Aims2YFRe2SXPYKt">1MCwBbhNGp5hRm5rC1Aims2YFRe2SXPYKt</A>
13606 of EFF have received 2447.38 BitCoins so far. Thank you to each and
13607 every one of you that donated bitcoins to support my activity. The
13608 fact that anyone can see how much money was transfered to a given
13609 address make it more obvious why the BitCoin community recommend to
13610 generate and hand out a new address for each transaction. I'm told
13611 there is no way to track which addresses belong to a given person or
13612 organisation without the person or organisation revealing it
13613 themselves, as Simon, EFF and I have done.</p>
13614
13615 <p>In Norway, and in most other countries, there are laws and
13616 regulations limiting how much money one can transfer across the border
13617 without declaring it. There are money laundering, tax and accounting
13618 laws and regulations I would expect to apply to the use of BitCoin.
13619 If the Skolelinux foundation
13620 (<a href="http://linuxiskolen.no/slxdebianlabs/donations.html">SLX
13621 Debian Labs</a>) were to accept donations in BitCoin in addition to
13622 normal bank transfers like EFF is doing, how should this be accounted?
13623 Given that it is impossible to know if money can cross the border or
13624 not, should everything or nothing be declared? What exchange rate
13625 should be used when calculating taxes? Would receivers have to pay
13626 income tax if the foundation were to pay Skolelinux contributors in
13627 BitCoin? I have no idea, but it would be interesting to know.</p>
13628
13629 <p>For a currency to be useful and successful, it must be trusted and
13630 accepted by a lot of users. It must be possible to get easy access to
13631 the currency (as a wage or using currency exchanges), and it must be
13632 easy to spend it. At the moment BitCoin seem fairly easy to get
13633 access to, but there are very few places to spend it. I am not really
13634 a regular user of any of the vendor types currently accepting BitCoin,
13635 so I wonder when my kind of shop would start accepting BitCoins. I
13636 would like to buy electronics, travels and subway tickets, not herbs
13637 and books. :) The currency is young, and this will improve over time
13638 if it become popular, but I suspect regular banks will start to lobby
13639 to get BitCoin declared illegal if it become popular. I'm sure they
13640 will claim it is helping fund terrorism and money laundering (which
13641 probably would be true, as is any currency in existence), but I
13642 believe the problems should be solved elsewhere and not by blaming
13643 currencies.</p>
13644
13645 <p>The process of creating new BitCoins is called mining, and it is
13646 CPU intensive process that depend on a bit of luck as well (as one is
13647 competing against all the other miners currently spending CPU cycles
13648 to see which one get the next lump of cash). The "winner" get 50
13649 BitCoin when this happen. Yesterday I came across the obvious way to
13650 join forces to increase ones changes of getting at least some coins,
13651 by coordinating the work on mining BitCoins across several machines
13652 and people, and sharing the result if one is lucky and get the 50
13653 BitCoins. Check out
13654 <a href="http://www.bluishcoder.co.nz/bitcoin-pool/">BitCoin Pool</a>
13655 if this sounds interesting. I have not had time to try to set up a
13656 machine to participate there yet, but have seen that running on ones
13657 own for a few days have not yield any BitCoins througth mining
13658 yet.</p>
13659
13660 <p>Update 2010-12-15: Found an <a
13661 href="http://inertia.posterous.com/reply-to-the-underground-economist-why-bitcoi">interesting
13662 criticism</a> of bitcoin. Not quite sure how valid it is, but thought
13663 it was interesting to read. The arguments presented seem to be
13664 equally valid for gold, which was used as a currency for many years.</p>
13665
13666 </div>
13667 <div class="tags">
13668
13669
13670 Tags: <a href="http://www.hungry.com/~pere/blog/tags/bitcoin">bitcoin</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/personvern">personvern</a>, <a href="http://www.hungry.com/~pere/blog/tags/sikkerhet">sikkerhet</a>.
13671
13672
13673 </div>
13674 </div>
13675 <div class="padding"></div>
13676
13677 <div class="entry">
13678 <div class="title">
13679 <a href="http://www.hungry.com/~pere/blog/Now_accepting_bitcoins___anonymous_and_distributed_p2p_crypto_money.html">Now accepting bitcoins - anonymous and distributed p2p crypto-money</a>
13680 </div>
13681 <div class="date">
13682 10th December 2010
13683 </div>
13684 <div class="body">
13685 <p>With this weeks lawless
13686 <a href="http://www.salon.com/news/opinion/glenn_greenwald/2010/12/06/wikileaks/index.html">governmental
13687 attacks</a> on Wikileak and
13688 <a href="http://www.salon.com/technology/dan_gillmor/2010/12/06/war_on_speech">free
13689 speech</a>, it has become obvious that PayPal, visa and mastercard can
13690 not be trusted to handle money transactions.
13691 A blog post from
13692 <a href="http://webmink.com/2010/12/06/now-accepting-bitcoin/">Simon
13693 Phipps on bitcoin</a> reminded me about a project that a friend of
13694 mine mentioned earlier. I decided to follow Simon's example, and get
13695 involved with <a href="http://www.bitcoin.org/">BitCoin</a>. I got
13696 some help from my friend to get it all running, and he even handed me
13697 some bitcoins to get started. I even donated a few bitcoins to Simon
13698 for helping me remember BitCoin.</p>
13699
13700 <p>So, what is bitcoins, you probably wonder? It is a digital
13701 crypto-currency, decentralised and handled using peer-to-peer
13702 networks. It allows anonymous transactions and prohibits central
13703 control over the transactions, making it impossible for governments
13704 and companies alike to block donations and other transactions. The
13705 source is free software, and while the key dependency wxWidgets 2.9
13706 for the graphical user interface is missing in Debian, the command
13707 line client builds just fine. Hopefully Jonas
13708 <a href="http://bugs.debian.org/578157">will get the package into
13709 Debian</a> soon.</p>
13710
13711 <p>Bitcoins can be converted to other currencies, like USD and EUR.
13712 There are <a href="http://www.bitcoin.org/trade">companies accepting
13713 bitcoins</a> when selling services and goods, and there are even
13714 currency "stock" markets where the exchange rate is decided. There
13715 are not many users so far, but the concept seems promising. If you
13716 want to get started and lack a friend with any bitcoins to spare,
13717 you can even get
13718 <a href="https://freebitcoins.appspot.com/">some for free</a> (0.05
13719 bitcoin at the time of writing). Use
13720 <a href="http://www.bitcoinwatch.com/">BitcoinWatch</a> to keep an eye
13721 on the current exchange rates.</p>
13722
13723 <p>As an experiment, I have decided to set up bitcoind on one of my
13724 machines. If you want to support my activity, please send Bitcoin
13725 donations to the address
13726 <b>15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</b>. Thank you!</p>
13727
13728 </div>
13729 <div class="tags">
13730
13731
13732 Tags: <a href="http://www.hungry.com/~pere/blog/tags/bitcoin">bitcoin</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/personvern">personvern</a>, <a href="http://www.hungry.com/~pere/blog/tags/sikkerhet">sikkerhet</a>.
13733
13734
13735 </div>
13736 </div>
13737 <div class="padding"></div>
13738
13739 <div class="entry">
13740 <div class="title">
13741 <a href="http://www.hungry.com/~pere/blog/Why_isn_t_Debian_Edu_using_VLC_.html">Why isn't Debian Edu using VLC?</a>
13742 </div>
13743 <div class="date">
13744 27th November 2010
13745 </div>
13746 <div class="body">
13747 <p>In the latest issue of Linux Journal, the readers choices were
13748 presented, and the winner among the multimedia player were VLC.
13749 Personally, I like VLC, and it is my player of choice when I first try
13750 to play a video file or stream. Only if VLC fail will I drag out
13751 gmplayer to see if it can do better. The reason is mostly the failure
13752 model and trust. When VLC fail, it normally pop up a error message
13753 reporting the problem. When mplayer fail, it normally segfault or
13754 just hangs. The latter failure mode drain my trust in the program.<p>
13755
13756 <p>But even if VLC is my player of choice, we have choosen to use
13757 mplayer in <a href="http://www.skolelinux.org/">Debian
13758 Edu/Skolelinux</a>. The reason is simple. We need a good browser
13759 plugin to play web videos seamlessly, and the VLC browser plugin is
13760 not very good. For example, it lack in-line control buttons, so there
13761 is no way for the user to pause the video. Also, when I
13762 <a href="http://wiki.debian.org/DebianEdu/BrowserMultimedia">last
13763 tested the browser plugins</a> available in Debian, the VLC plugin
13764 failed on several video pages where mplayer based plugins worked. If
13765 the browser plugin for VLC was as good as the gecko-mediaplayer
13766 package (which uses mplayer), we would switch.</P>
13767
13768 <p>While VLC is a good player, its user interface is slightly
13769 annoying. The most annoying feature is its inconsistent use of
13770 keyboard shortcuts. When the player is in full screen mode, its
13771 shortcuts are different from when it is playing the video in a window.
13772 For example, space only work as pause when in full screen mode. I
13773 wish it had consisten shortcuts and that space also would work when in
13774 window mode. Another nice shortcut in gmplayer is [enter] to restart
13775 the current video. It is very nice when playing short videos from the
13776 web and want to restart it when new people arrive to have a look at
13777 what is going on.</p>
13778
13779 </div>
13780 <div class="tags">
13781
13782
13783 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/multimedia">multimedia</a>, <a href="http://www.hungry.com/~pere/blog/tags/video">video</a>, <a href="http://www.hungry.com/~pere/blog/tags/web">web</a>.
13784
13785
13786 </div>
13787 </div>
13788 <div class="padding"></div>
13789
13790 <div class="entry">
13791 <div class="title">
13792 <a href="http://www.hungry.com/~pere/blog/Lenny__Squeeze_upgrades_of_the_Gnome_and_KDE_desktop__now_with_apt_get_autoremove.html">Lenny->Squeeze upgrades of the Gnome and KDE desktop, now with apt-get autoremove</a>
13793 </div>
13794 <div class="date">
13795 22nd November 2010
13796 </div>
13797 <div class="body">
13798 <p>Michael Biebl suggested to me on IRC, that I changed my automated
13799 upgrade testing of the
13800 <a href="https://people.skolelinux.org/~pere/debian-upgrade-testing/">Lenny
13801 Gnome and KDE Desktop</a> to do <tt>apt-get autoremove</tt> when using apt-get.
13802 This seem like a very good idea, so I adjusted by test scripts and
13803 can now present the updated result from today:</p>
13804
13805 <p>This is for Gnome:</p>
13806
13807 <p>Installed using apt-get, missing with aptitude</p>
13808
13809 <blockquote><p>
13810 apache2.2-bin
13811 aptdaemon
13812 baobab
13813 binfmt-support
13814 browser-plugin-gnash
13815 cheese-common
13816 cli-common
13817 cups-pk-helper
13818 dmz-cursor-theme
13819 empathy
13820 empathy-common
13821 freedesktop-sound-theme
13822 freeglut3
13823 gconf-defaults-service
13824 gdm-themes
13825 gedit-plugins
13826 geoclue
13827 geoclue-hostip
13828 geoclue-localnet
13829 geoclue-manual
13830 geoclue-yahoo
13831 gnash
13832 gnash-common
13833 gnome
13834 gnome-backgrounds
13835 gnome-cards-data
13836 gnome-codec-install
13837 gnome-core
13838 gnome-desktop-environment
13839 gnome-disk-utility
13840 gnome-screenshot
13841 gnome-search-tool
13842 gnome-session-canberra
13843 gnome-system-log
13844 gnome-themes-extras
13845 gnome-themes-more
13846 gnome-user-share
13847 gstreamer0.10-fluendo-mp3
13848 gstreamer0.10-tools
13849 gtk2-engines
13850 gtk2-engines-pixbuf
13851 gtk2-engines-smooth
13852 hamster-applet
13853 libapache2-mod-dnssd
13854 libapr1
13855 libaprutil1
13856 libaprutil1-dbd-sqlite3
13857 libaprutil1-ldap
13858 libart2.0-cil
13859 libboost-date-time1.42.0
13860 libboost-python1.42.0
13861 libboost-thread1.42.0
13862 libchamplain-0.4-0
13863 libchamplain-gtk-0.4-0
13864 libcheese-gtk18
13865 libclutter-gtk-0.10-0
13866 libcryptui0
13867 libdiscid0
13868 libelf1
13869 libepc-1.0-2
13870 libepc-common
13871 libepc-ui-1.0-2
13872 libfreerdp-plugins-standard
13873 libfreerdp0
13874 libgconf2.0-cil
13875 libgdata-common
13876 libgdata7
13877 libgdu-gtk0
13878 libgee2
13879 libgeoclue0
13880 libgexiv2-0
13881 libgif4
13882 libglade2.0-cil
13883 libglib2.0-cil
13884 libgmime2.4-cil
13885 libgnome-vfs2.0-cil
13886 libgnome2.24-cil
13887 libgnomepanel2.24-cil
13888 libgpod-common
13889 libgpod4
13890 libgtk2.0-cil
13891 libgtkglext1
13892 libgtksourceview2.0-common
13893 libmono-addins-gui0.2-cil
13894 libmono-addins0.2-cil
13895 libmono-cairo2.0-cil
13896 libmono-corlib2.0-cil
13897 libmono-i18n-west2.0-cil
13898 libmono-posix2.0-cil
13899 libmono-security2.0-cil
13900 libmono-sharpzip2.84-cil
13901 libmono-system2.0-cil
13902 libmtp8
13903 libmusicbrainz3-6
13904 libndesk-dbus-glib1.0-cil
13905 libndesk-dbus1.0-cil
13906 libopal3.6.8
13907 libpolkit-gtk-1-0
13908 libpt2.6.7
13909 libpython2.6
13910 librpm1
13911 librpmio1
13912 libsdl1.2debian
13913 libsrtp0
13914 libssh-4
13915 libtelepathy-farsight0
13916 libtelepathy-glib0
13917 libtidy-0.99-0
13918 media-player-info
13919 mesa-utils
13920 mono-2.0-gac
13921 mono-gac
13922 mono-runtime
13923 nautilus-sendto
13924 nautilus-sendto-empathy
13925 p7zip-full
13926 pkg-config
13927 python-aptdaemon
13928 python-aptdaemon-gtk
13929 python-axiom
13930 python-beautifulsoup
13931 python-bugbuddy
13932 python-clientform
13933 python-coherence
13934 python-configobj
13935 python-crypto
13936 python-cupshelpers
13937 python-elementtree
13938 python-epsilon
13939 python-evolution
13940 python-feedparser
13941 python-gdata
13942 python-gdbm
13943 python-gst0.10
13944 python-gtkglext1
13945 python-gtksourceview2
13946 python-httplib2
13947 python-louie
13948 python-mako
13949 python-markupsafe
13950 python-mechanize
13951 python-nevow
13952 python-notify
13953 python-opengl
13954 python-openssl
13955 python-pam
13956 python-pkg-resources
13957 python-pyasn1
13958 python-pysqlite2
13959 python-rdflib
13960 python-serial
13961 python-tagpy
13962 python-twisted-bin
13963 python-twisted-conch
13964 python-twisted-core
13965 python-twisted-web
13966 python-utidylib
13967 python-webkit
13968 python-xdg
13969 python-zope.interface
13970 remmina
13971 remmina-plugin-data
13972 remmina-plugin-rdp
13973 remmina-plugin-vnc
13974 rhythmbox-plugin-cdrecorder
13975 rhythmbox-plugins
13976 rpm-common
13977 rpm2cpio
13978 seahorse-plugins
13979 shotwell
13980 software-center
13981 system-config-printer-udev
13982 telepathy-gabble
13983 telepathy-mission-control-5
13984 telepathy-salut
13985 tomboy
13986 totem
13987 totem-coherence
13988 totem-mozilla
13989 totem-plugins
13990 transmission-common
13991 xdg-user-dirs
13992 xdg-user-dirs-gtk
13993 xserver-xephyr
13994 </p></blockquote>
13995
13996 <p>Installed using apt-get, removed with aptitude</p>
13997
13998 <blockquote><p>
13999 cheese
14000 ekiga
14001 eog
14002 epiphany-extensions
14003 evolution-exchange
14004 fast-user-switch-applet
14005 file-roller
14006 gcalctool
14007 gconf-editor
14008 gdm
14009 gedit
14010 gedit-common
14011 gnome-games
14012 gnome-games-data
14013 gnome-nettool
14014 gnome-system-tools
14015 gnome-themes
14016 gnuchess
14017 gucharmap
14018 guile-1.8-libs
14019 libavahi-ui0
14020 libdmx1
14021 libgalago3
14022 libgtk-vnc-1.0-0
14023 libgtksourceview2.0-0
14024 liblircclient0
14025 libsdl1.2debian-alsa
14026 libspeexdsp1
14027 libsvga1
14028 rhythmbox
14029 seahorse
14030 sound-juicer
14031 system-config-printer
14032 totem-common
14033 transmission-gtk
14034 vinagre
14035 vino
14036 </p></blockquote>
14037
14038 <p>Installed using aptitude, missing with apt-get</p>
14039
14040 <blockquote><p>
14041 gstreamer0.10-gnomevfs
14042 </p></blockquote>
14043
14044 <p>Installed using aptitude, removed with apt-get</p>
14045
14046 <blockquote><p>
14047 [nothing]
14048 </p></blockquote>
14049
14050 <p>This is for KDE:</p>
14051
14052 <p>Installed using apt-get, missing with aptitude</p>
14053
14054 <blockquote><p>
14055 ksmserver
14056 </p></blockquote>
14057
14058 <p>Installed using apt-get, removed with aptitude</p>
14059
14060 <blockquote><p>
14061 kwin
14062 network-manager-kde
14063 </p></blockquote>
14064
14065 <p>Installed using aptitude, missing with apt-get</p>
14066
14067 <blockquote><p>
14068 arts
14069 dolphin
14070 freespacenotifier
14071 google-gadgets-gst
14072 google-gadgets-xul
14073 kappfinder
14074 kcalc
14075 kcharselect
14076 kde-core
14077 kde-plasma-desktop
14078 kde-standard
14079 kde-window-manager
14080 kdeartwork
14081 kdeartwork-emoticons
14082 kdeartwork-style
14083 kdeartwork-theme-icon
14084 kdebase
14085 kdebase-apps
14086 kdebase-workspace
14087 kdebase-workspace-bin
14088 kdebase-workspace-data
14089 kdeeject
14090 kdelibs
14091 kdeplasma-addons
14092 kdeutils
14093 kdewallpapers
14094 kdf
14095 kfloppy
14096 kgpg
14097 khelpcenter4
14098 kinfocenter
14099 konq-plugins-l10n
14100 konqueror-nsplugins
14101 kscreensaver
14102 kscreensaver-xsavers
14103 ktimer
14104 kwrite
14105 libgle3
14106 libkde4-ruby1.8
14107 libkonq5
14108 libkonq5-templates
14109 libnetpbm10
14110 libplasma-ruby
14111 libplasma-ruby1.8
14112 libqt4-ruby1.8
14113 marble-data
14114 marble-plugins
14115 netpbm
14116 nuvola-icon-theme
14117 plasma-dataengines-workspace
14118 plasma-desktop
14119 plasma-desktopthemes-artwork
14120 plasma-runners-addons
14121 plasma-scriptengine-googlegadgets
14122 plasma-scriptengine-python
14123 plasma-scriptengine-qedje
14124 plasma-scriptengine-ruby
14125 plasma-scriptengine-webkit
14126 plasma-scriptengines
14127 plasma-wallpapers-addons
14128 plasma-widget-folderview
14129 plasma-widget-networkmanagement
14130 ruby
14131 sweeper
14132 update-notifier-kde
14133 xscreensaver-data-extra
14134 xscreensaver-gl
14135 xscreensaver-gl-extra
14136 xscreensaver-screensaver-bsod
14137 </p></blockquote>
14138
14139 <p>Installed using aptitude, removed with apt-get</p>
14140
14141 <blockquote><p>
14142 ark
14143 google-gadgets-common
14144 google-gadgets-qt
14145 htdig
14146 kate
14147 kdebase-bin
14148 kdebase-data
14149 kdepasswd
14150 kfind
14151 klipper
14152 konq-plugins
14153 konqueror
14154 ksysguard
14155 ksysguardd
14156 libarchive1
14157 libcln6
14158 libeet1
14159 libeina-svn-06
14160 libggadget-1.0-0b
14161 libggadget-qt-1.0-0b
14162 libgps19
14163 libkdecorations4
14164 libkephal4
14165 libkonq4
14166 libkonqsidebarplugin4a
14167 libkscreensaver5
14168 libksgrd4
14169 libksignalplotter4
14170 libkunitconversion4
14171 libkwineffects1a
14172 libmarblewidget4
14173 libntrack-qt4-1
14174 libntrack0
14175 libplasma-geolocation-interface4
14176 libplasmaclock4a
14177 libplasmagenericshell4
14178 libprocesscore4a
14179 libprocessui4a
14180 libqalculate5
14181 libqedje0a
14182 libqtruby4shared2
14183 libqzion0a
14184 libruby1.8
14185 libscim8c2a
14186 libsmokekdecore4-3
14187 libsmokekdeui4-3
14188 libsmokekfile3
14189 libsmokekhtml3
14190 libsmokekio3
14191 libsmokeknewstuff2-3
14192 libsmokeknewstuff3-3
14193 libsmokekparts3
14194 libsmokektexteditor3
14195 libsmokekutils3
14196 libsmokenepomuk3
14197 libsmokephonon3
14198 libsmokeplasma3
14199 libsmokeqtcore4-3
14200 libsmokeqtdbus4-3
14201 libsmokeqtgui4-3
14202 libsmokeqtnetwork4-3
14203 libsmokeqtopengl4-3
14204 libsmokeqtscript4-3
14205 libsmokeqtsql4-3
14206 libsmokeqtsvg4-3
14207 libsmokeqttest4-3
14208 libsmokeqtuitools4-3
14209 libsmokeqtwebkit4-3
14210 libsmokeqtxml4-3
14211 libsmokesolid3
14212 libsmokesoprano3
14213 libtaskmanager4a
14214 libtidy-0.99-0
14215 libweather-ion4a
14216 libxklavier16
14217 libxxf86misc1
14218 okteta
14219 oxygencursors
14220 plasma-dataengines-addons
14221 plasma-scriptengine-superkaramba
14222 plasma-widget-lancelot
14223 plasma-widgets-addons
14224 plasma-widgets-workspace
14225 polkit-kde-1
14226 ruby1.8
14227 systemsettings
14228 update-notifier-common
14229 </p></blockquote>
14230
14231 <p>Running apt-get autoremove made the results using apt-get and
14232 aptitude a bit more similar, but there are still quite a lott of
14233 differences. I have no idea what packages should be installed after
14234 the upgrade, but hope those that do can have a look.</p>
14235
14236 </div>
14237 <div class="tags">
14238
14239
14240 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
14241
14242
14243 </div>
14244 </div>
14245 <div class="padding"></div>
14246
14247 <div class="entry">
14248 <div class="title">
14249 <a href="http://www.hungry.com/~pere/blog/Migrating_Xen_virtual_machines_using_LVM_to_KVM_using_disk_images.html">Migrating Xen virtual machines using LVM to KVM using disk images</a>
14250 </div>
14251 <div class="date">
14252 22nd November 2010
14253 </div>
14254 <div class="body">
14255 <p>Most of the computers in use by the
14256 <a href="http://www.skolelinux.org/">Debian Edu/Skolelinux project</a>
14257 are virtual machines. And they have been Xen machines running on a
14258 fairly old IBM eserver xseries 345 machine, and we wanted to migrate
14259 them to KVM on a newer Dell PowerEdge 2950 host machine. This was a
14260 bit harder that it could have been, because we set up the Xen virtual
14261 machines to get the virtual partitions from LVM, which as far as I
14262 know is not supported by KVM. So to migrate, we had to convert
14263 several LVM logical volumes to partitions on a virtual disk file.</p>
14264
14265 <p>I found
14266 <a href="http://searchnetworking.techtarget.com.au/articles/35011-Six-steps-for-migrating-Xen-virtual-machines-to-KVM">a
14267 nice recipe</a> to do this, and wrote the following script to do the
14268 migration. It uses qemu-img from the qemu package to make the disk
14269 image, parted to partition it, losetup and kpartx to present the disk
14270 image partions as devices, and dd to copy the data. I NFS mounted the
14271 new servers storage area on the old server to do the migration.</p>
14272
14273 <pre>
14274 #!/bin/sh
14275
14276 # Based on
14277 # http://searchnetworking.techtarget.com.au/articles/35011-Six-steps-for-migrating-Xen-virtual-machines-to-KVM
14278
14279 set -e
14280 set -x
14281
14282 if [ -z "$1" ] ; then
14283 echo "Usage: $0 &lt;hostname&gt;"
14284 exit 1
14285 else
14286 host="$1"
14287 fi
14288
14289 if [ ! -e /dev/vg_data/$host-disk ] ; then
14290 echo "error: unable to find LVM volume for $host"
14291 exit 1
14292 fi
14293
14294 # Partitions need to be a bit bigger than the LVM LVs. not sure why.
14295 disksize=$( lvs --units m | grep $host-disk | awk '{sum = sum + $4} END { print int(sum * 1.05) }')
14296 swapsize=$( lvs --units m | grep $host-swap | awk '{sum = sum + $4} END { print int(sum * 1.05) }')
14297 totalsize=$(( ( $disksize + $swapsize ) ))
14298
14299 img=$host.img
14300 #dd if=/dev/zero of=$img bs=1M count=$(( $disksize + $swapsize ))
14301 qemu-img create $img ${totalsize}MMaking room on the Debian Edu/Sqeeze DVD
14302
14303 parted $img mklabel msdos
14304 parted $img mkpart primary linux-swap 0 $disksize
14305 parted $img mkpart primary ext2 $disksize $totalsize
14306 parted $img set 1 boot on
14307
14308 modprobe dm-mod
14309 losetup /dev/loop0 $img
14310 kpartx -a /dev/loop0
14311
14312 dd if=/dev/vg_data/$host-disk of=/dev/mapper/loop0p1 bs=1M
14313 fsck.ext3 -f /dev/mapper/loop0p1 || true
14314 mkswap /dev/mapper/loop0p2
14315
14316 kpartx -d /dev/loop0
14317 losetup -d /dev/loop0
14318 </pre>
14319
14320 <p>The script is perhaps so simple that it is not copyrightable, but
14321 if it is, it is licenced using GPL v2 or later at your discretion.</p>
14322
14323 <p>After doing this, I booted a Debian CD in rescue mode in KVM with
14324 the new disk image attached, installed grub-pc and linux-image-686 and
14325 set up grub to boot from the disk image. After this, the KVM machines
14326 seem to work just fine.</p>
14327
14328 </div>
14329 <div class="tags">
14330
14331
14332 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
14333
14334
14335 </div>
14336 </div>
14337 <div class="padding"></div>
14338
14339 <div class="entry">
14340 <div class="title">
14341 <a href="http://www.hungry.com/~pere/blog/Lenny__Squeeze_upgrades__apt_vs_aptitude_with_the_Gnome_and_KDE_desktop.html">Lenny->Squeeze upgrades, apt vs aptitude with the Gnome and KDE desktop</a>
14342 </div>
14343 <div class="date">
14344 20th November 2010
14345 </div>
14346 <div class="body">
14347 <p>I'm still running upgrade testing of the
14348 <a href="https://people.skolelinux.org/~pere/debian-upgrade-testing/">Lenny
14349 Gnome and KDE Desktop</a>, but have not had time to spend on reporting the
14350 status. Here is a short update based on a test I ran 20101118.</p>
14351
14352 <p>I still do not know what a correct migration should look like, so I
14353 report any differences between apt and aptitude and hope someone else
14354 can see if anything should be changed.</p>
14355
14356 <p>This is for Gnome:</p>
14357
14358 <p>Installed using apt-get, missing with aptitude</p>
14359
14360 <blockquote><p>
14361 apache2.2-bin aptdaemon at-spi baobab binfmt-support
14362 browser-plugin-gnash cheese-common cli-common cpp-4.3 cups-pk-helper
14363 dmz-cursor-theme empathy empathy-common finger
14364 freedesktop-sound-theme freeglut3 gconf-defaults-service gdm-themes
14365 gedit-plugins geoclue geoclue-hostip geoclue-localnet geoclue-manual
14366 geoclue-yahoo gnash gnash-common gnome gnome-backgrounds
14367 gnome-cards-data gnome-codec-install gnome-core
14368 gnome-desktop-environment gnome-disk-utility gnome-screenshot
14369 gnome-search-tool gnome-session-canberra gnome-spell
14370 gnome-system-log gnome-themes-extras gnome-themes-more
14371 gnome-user-share gs-common gstreamer0.10-fluendo-mp3
14372 gstreamer0.10-tools gtk2-engines gtk2-engines-pixbuf
14373 gtk2-engines-smooth hal-info hamster-applet libapache2-mod-dnssd
14374 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap
14375 libart2.0-cil libatspi1.0-0 libboost-date-time1.42.0
14376 libboost-python1.42.0 libboost-thread1.42.0 libchamplain-0.4-0
14377 libchamplain-gtk-0.4-0 libcheese-gtk18 libclutter-gtk-0.10-0
14378 libcryptui0 libcupsys2 libdiscid0 libeel2-data libelf1 libepc-1.0-2
14379 libepc-common libepc-ui-1.0-2 libfreerdp-plugins-standard
14380 libfreerdp0 libgail-common libgconf2.0-cil libgdata-common libgdata7
14381 libgdl-1-common libgdu-gtk0 libgee2 libgeoclue0 libgexiv2-0 libgif4
14382 libglade2.0-cil libglib2.0-cil libgmime2.4-cil libgnome-vfs2.0-cil
14383 libgnome2.24-cil libgnomepanel2.24-cil libgnomeprint2.2-data
14384 libgnomeprintui2.2-common libgnomevfs2-bin libgpod-common libgpod4
14385 libgtk2.0-cil libgtkglext1 libgtksourceview-common
14386 libgtksourceview2.0-common libmono-addins-gui0.2-cil
14387 libmono-addins0.2-cil libmono-cairo2.0-cil libmono-corlib2.0-cil
14388 libmono-i18n-west2.0-cil libmono-posix2.0-cil
14389 libmono-security2.0-cil libmono-sharpzip2.84-cil
14390 libmono-system2.0-cil libmtp8 libmusicbrainz3-6
14391 libndesk-dbus-glib1.0-cil libndesk-dbus1.0-cil libopal3.6.8
14392 libpolkit-gtk-1-0 libpt-1.10.10-plugins-alsa
14393 libpt-1.10.10-plugins-v4l libpt2.6.7 libpython2.6 librpm1 librpmio1
14394 libsdl1.2debian libservlet2.4-java libsrtp0 libssh-4
14395 libtelepathy-farsight0 libtelepathy-glib0 libtidy-0.99-0
14396 libxalan2-java libxerces2-java media-player-info mesa-utils
14397 mono-2.0-gac mono-gac mono-runtime nautilus-sendto
14398 nautilus-sendto-empathy openoffice.org-writer2latex
14399 openssl-blacklist p7zip p7zip-full pkg-config python-4suite-xml
14400 python-aptdaemon python-aptdaemon-gtk python-axiom
14401 python-beautifulsoup python-bugbuddy python-clientform
14402 python-coherence python-configobj python-crypto python-cupshelpers
14403 python-cupsutils python-eggtrayicon python-elementtree
14404 python-epsilon python-evolution python-feedparser python-gdata
14405 python-gdbm python-gst0.10 python-gtkglext1 python-gtkmozembed
14406 python-gtksourceview2 python-httplib2 python-louie python-mako
14407 python-markupsafe python-mechanize python-nevow python-notify
14408 python-opengl python-openssl python-pam python-pkg-resources
14409 python-pyasn1 python-pysqlite2 python-rdflib python-serial
14410 python-tagpy python-twisted-bin python-twisted-conch
14411 python-twisted-core python-twisted-web python-utidylib python-webkit
14412 python-xdg python-zope.interface remmina remmina-plugin-data
14413 remmina-plugin-rdp remmina-plugin-vnc rhythmbox-plugin-cdrecorder
14414 rhythmbox-plugins rpm-common rpm2cpio seahorse-plugins shotwell
14415 software-center svgalibg1 system-config-printer-udev
14416 telepathy-gabble telepathy-mission-control-5 telepathy-salut tomboy
14417 totem totem-coherence totem-mozilla totem-plugins
14418 transmission-common xdg-user-dirs xdg-user-dirs-gtk xserver-xephyr
14419 zip
14420 </p></blockquote>
14421
14422 Installed using apt-get, removed with aptitude
14423
14424 <blockquote><p>
14425 arj bluez-utils cheese dhcdbd djvulibre-desktop ekiga eog
14426 epiphany-extensions epiphany-gecko evolution-exchange
14427 fast-user-switch-applet file-roller gcalctool gconf-editor gdm gedit
14428 gedit-common gnome-app-install gnome-games gnome-games-data
14429 gnome-nettool gnome-system-tools gnome-themes gnome-utils
14430 gnome-vfs-obexftp gnome-volume-manager gnuchess gucharmap
14431 guile-1.8-libs hal libavahi-compat-libdnssd1 libavahi-core5
14432 libavahi-ui0 libbind9-50 libbluetooth2 libcamel1.2-11 libcdio7
14433 libcucul0 libcurl3 libdirectfb-1.0-0 libdmx1 libdvdread3
14434 libedata-cal1.2-6 libedataserver1.2-9 libeel2-2.20 libepc-1.0-1
14435 libepc-ui-1.0-1 libexchange-storage1.2-3 libfaad0 libgadu3
14436 libgalago3 libgd2-noxpm libgda3-3 libgda3-common libggz2 libggzcore9
14437 libggzmod4 libgksu1.2-0 libgksuui1.0-1 libgmyth0 libgnome-desktop-2
14438 libgnome-pilot2 libgnomecups1.0-1 libgnomeprint2.2-0
14439 libgnomeprintui2.2-0 libgpod3 libgraphviz4 libgtk-vnc-1.0-0
14440 libgtkhtml2-0 libgtksourceview1.0-0 libgtksourceview2.0-0
14441 libgucharmap6 libhesiod0 libicu38 libisccc50 libisccfg50 libiw29
14442 libjaxp1.3-java-gcj libkpathsea4 liblircclient0 libltdl3 liblwres50
14443 libmagick++10 libmagick10 libmalaga7 libmozjs1d libmpfr1ldbl libmtp7
14444 libmysqlclient15off libnautilus-burn4 libneon27 libnm-glib0
14445 libnm-util0 libopal-2.2 libosp5 libparted1.8-10 libpisock9
14446 libpisync1 libpoppler-glib3 libpoppler3 libpt-1.10.10 libraw1394-8
14447 libsdl1.2debian-alsa libsensors3 libsexy2 libsmbios2 libsoup2.2-8
14448 libspeexdsp1 libssh2-1 libsuitesparse-3.1.0 libsvga1
14449 libswfdec-0.6-90 libtalloc1 libtotem-plparser10 libtrackerclient0
14450 libvoikko1 libxalan2-java-gcj libxerces2-java-gcj libxklavier12
14451 libxtrap6 libxxf86misc1 libzephyr3 mysql-common rhythmbox seahorse
14452 sound-juicer swfdec-gnome system-config-printer totem-common
14453 totem-gstreamer transmission-gtk vinagre vino w3c-dtd-xhtml wodim
14454 </p></blockquote>
14455
14456 <p>Installed using aptitude, missing with apt-get</p>
14457
14458 <blockquote><p>
14459 gstreamer0.10-gnomevfs
14460 </p></blockquote>
14461
14462 <p>Installed using aptitude, removed with apt-get</p>
14463
14464 <blockquote><p>
14465 [nothing]
14466 </p></blockquote>
14467
14468 <p>This is for KDE:</p>
14469
14470 <p>Installed using apt-get, missing with aptitude</p>
14471
14472 <blockquote><p>
14473 autopoint bomber bovo cantor cantor-backend-kalgebra cpp-4.3 dcoprss
14474 edict espeak espeak-data eyesapplet fifteenapplet finger gettext
14475 ghostscript-x git gnome-audio gnugo granatier gs-common
14476 gstreamer0.10-pulseaudio indi kaddressbook-plugins kalgebra
14477 kalzium-data kanjidic kapman kate-plugins kblocks kbreakout kbstate
14478 kde-icons-mono kdeaccessibility kdeaddons-kfile-plugins
14479 kdeadmin-kfile-plugins kdeartwork-misc kdeartwork-theme-window
14480 kdeedu kdeedu-data kdeedu-kvtml-data kdegames kdegames-card-data
14481 kdegames-mahjongg-data kdegraphics-kfile-plugins kdelirc
14482 kdemultimedia-kfile-plugins kdenetwork-kfile-plugins
14483 kdepim-kfile-plugins kdepim-kio-plugins kdessh kdetoys kdewebdev
14484 kdiamond kdnssd kfilereplace kfourinline kgeography-data kigo
14485 killbots kiriki klettres-data kmoon kmrml knewsticker-scripts
14486 kollision kpf krosspython ksirk ksmserver ksquares kstars-data
14487 ksudoku kubrick kweather libasound2-plugins libboost-python1.42.0
14488 libcfitsio3 libconvert-binhex-perl libcrypt-ssleay-perl libdb4.6++
14489 libdjvulibre-text libdotconf1.0 liberror-perl libespeak1
14490 libfinance-quote-perl libgail-common libgsl0ldbl libhtml-parser-perl
14491 libhtml-tableextract-perl libhtml-tagset-perl libhtml-tree-perl
14492 libio-stringy-perl libkdeedu4 libkdegames5 libkiten4 libkpathsea5
14493 libkrossui4 libmailtools-perl libmime-tools-perl
14494 libnews-nntpclient-perl libopenbabel3 libportaudio2 libpulse-browse0
14495 libservlet2.4-java libspeechd2 libtiff-tools libtimedate-perl
14496 libunistring0 liburi-perl libwww-perl libxalan2-java libxerces2-java
14497 lirc luatex marble networkstatus noatun-plugins
14498 openoffice.org-writer2latex palapeli palapeli-data parley
14499 parley-data poster psutils pulseaudio pulseaudio-esound-compat
14500 pulseaudio-module-x11 pulseaudio-utils quanta-data rocs rsync
14501 speech-dispatcher step svgalibg1 texlive-binaries texlive-luatex
14502 ttf-sazanami-gothic
14503 </p></blockquote>
14504
14505 <p>Installed using apt-get, removed with aptitude</p>
14506
14507 <blockquote><p>
14508 amor artsbuilder atlantik atlantikdesigner blinken bluez-utils cvs
14509 dhcdbd djvulibre-desktop imlib-base imlib11 kalzium kanagram kandy
14510 kasteroids katomic kbackgammon kbattleship kblackbox kbounce kbruch
14511 kcron kdat kdemultimedia-kappfinder-data kdeprint kdict kdvi kedit
14512 keduca kenolaba kfax kfaxview kfouleggs kgeography kghostview
14513 kgoldrunner khangman khexedit kiconedit kig kimagemapeditor
14514 kitchensync kiten kjumpingcube klatin klettres klickety klines
14515 klinkstatus kmag kmahjongg kmailcvt kmenuedit kmid kmilo kmines
14516 kmousetool kmouth kmplot knetwalk kodo kolf kommander konquest kooka
14517 kpager kpat kpdf kpercentage kpilot kpoker kpovmodeler krec
14518 kregexpeditor kreversi ksame ksayit kshisen ksig ksim ksirc ksirtet
14519 ksmiletris ksnake ksokoban kspaceduel kstars ksvg ksysv kteatime
14520 ktip ktnef ktouch ktron kttsd ktuberling kturtle ktux kuickshow
14521 kverbos kview kviewshell kvoctrain kwifimanager kwin kwin4 kwordquiz
14522 kworldclock kxsldbg libakode2 libarts1-akode libarts1-audiofile
14523 libarts1-mpeglib libarts1-xine libavahi-compat-libdnssd1
14524 libavahi-core5 libavc1394-0 libbind9-50 libbluetooth2
14525 libboost-python1.34.1 libcucul0 libcurl3 libcvsservice0
14526 libdirectfb-1.0-0 libdjvulibre21 libdvdread3 libfaad0 libfreebob0
14527 libgd2-noxpm libgraphviz4 libgsmme1c2a libgtkhtml2-0 libicu38
14528 libiec61883-0 libindex0 libisccc50 libisccfg50 libiw29
14529 libjaxp1.3-java-gcj libk3b3 libkcal2b libkcddb1 libkdeedu3
14530 libkdegames1 libkdepim1a libkgantt0 libkleopatra1 libkmime2
14531 libkpathsea4 libkpimexchange1 libkpimidentities1 libkscan1
14532 libksieve0 libktnef1 liblockdev1 libltdl3 liblwres50 libmagick10
14533 libmimelib1c2a libmodplug0c2 libmozjs1d libmpcdec3 libmpfr1ldbl
14534 libneon27 libnm-util0 libopensync0 libpisock9 libpoppler-glib3
14535 libpoppler-qt2 libpoppler3 libraw1394-8 librss1 libsensors3
14536 libsmbios2 libssh2-1 libsuitesparse-3.1.0 libswfdec-0.6-90
14537 libtalloc1 libxalan2-java-gcj libxerces2-java-gcj libxtrap6 lskat
14538 mpeglib network-manager-kde noatun pmount tex-common texlive-base
14539 texlive-common texlive-doc-base texlive-fonts-recommended tidy
14540 ttf-dustin ttf-kochi-gothic ttf-sjfonts
14541 </p></blockquote>
14542
14543 <p>Installed using aptitude, missing with apt-get</p>
14544
14545 <blockquote><p>
14546 dolphin kde-core kde-plasma-desktop kde-standard kde-window-manager
14547 kdeartwork kdebase kdebase-apps kdebase-workspace
14548 kdebase-workspace-bin kdebase-workspace-data kdeutils kscreensaver
14549 kscreensaver-xsavers libgle3 libkonq5 libkonq5-templates libnetpbm10
14550 netpbm plasma-widget-folderview plasma-widget-networkmanagement
14551 xscreensaver-data-extra xscreensaver-gl xscreensaver-gl-extra
14552 xscreensaver-screensaver-bsod
14553 </p></blockquote>
14554
14555 <p>Installed using aptitude, removed with apt-get</p>
14556
14557 <blockquote><p>
14558 kdebase-bin konq-plugins konqueror
14559 </p></blockquote>
14560
14561 </div>
14562 <div class="tags">
14563
14564
14565 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
14566
14567
14568 </div>
14569 </div>
14570 <div class="padding"></div>
14571
14572 <div class="entry">
14573 <div class="title">
14574 <a href="http://www.hungry.com/~pere/blog/Gnash_buildbot_slave_and_Debian_kfreebsd.html">Gnash buildbot slave and Debian kfreebsd</a>
14575 </div>
14576 <div class="date">
14577 20th November 2010
14578 </div>
14579 <div class="body">
14580 <p>Answering
14581 <a href="http://www.listware.net/201011/gnash-dev/67431-gnash-dev-buildbot-looking-for-slaves.html">the
14582 call from the Gnash project</a> for
14583 <a href="http://www.gnashdev.org:8010">buildbot</a> slaves to test the
14584 current source, I have set up a virtual KVM machine on the Debian
14585 Edu/Skolelinux virtualization host to test the git source on
14586 Debian/Squeeze. I hope this can help the developers in getting new
14587 releases out more often.</p>
14588
14589 <p>As the developers want less main-stream build platforms tested to,
14590 I have considered setting up a <a
14591 href="http://www.debian.org/ports/kfreebsd-gnu/">Debian/kfreebsd</a>
14592 machine as well. I have also considered using the kfreebsd
14593 architecture in Debian as a file server in NUUG to get access to the 5
14594 TB zfs volume we currently use to store DV video. Because of this, I
14595 finally got around to do a test installation of Debian/Squeeze with
14596 kfreebsd. Installation went fairly smooth, thought I noticed some
14597 visual glitches in the cdebconf dialogs (black cursor left on the
14598 screen at random locations). Have not gotten very far with the
14599 testing. Noticed cfdisk did not work, but fdisk did so it was not a
14600 fatal problem. Have to spend some more time on it to see if it is
14601 useful as a file server for NUUG. Will try to find time to set up a
14602 gnash buildbot slave on the Debian Edu/Skolelinux this weekend.</p>
14603
14604 </div>
14605 <div class="tags">
14606
14607
14608 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nuug">nuug</a>.
14609
14610
14611 </div>
14612 </div>
14613 <div class="padding"></div>
14614
14615 <div class="entry">
14616 <div class="title">
14617 <a href="http://www.hungry.com/~pere/blog/Debian_in_3D.html">Debian in 3D</a>
14618 </div>
14619 <div class="date">
14620 9th November 2010
14621 </div>
14622 <div class="body">
14623 <p><img src="http://thingiverse-production.s3.amazonaws.com/renders/23/e0/c4/f9/2b/debswagtdose_preview_medium.jpg"></p>
14624
14625 <p>3D printing is just great. I just came across this Debian logo in
14626 3D linked in from
14627 <a href="http://blog.thingiverse.com/2010/11/09/participatory-branding/">the
14628 thingiverse blog</a>.</p>
14629
14630 </div>
14631 <div class="tags">
14632
14633
14634 Tags: <a href="http://www.hungry.com/~pere/blog/tags/3d-printer">3d-printer</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
14635
14636
14637 </div>
14638 </div>
14639 <div class="padding"></div>
14640
14641 <div class="entry">
14642 <div class="title">
14643 <a href="http://www.hungry.com/~pere/blog/Software_updates_2010_10_24.html">Software updates 2010-10-24</a>
14644 </div>
14645 <div class="date">
14646 24th October 2010
14647 </div>
14648 <div class="body">
14649 <p>Some updates.</p>
14650
14651 <p>My <a href="http://pledgebank.com/gnash-avm2">gnash pledge</a> to
14652 raise money for the project is going well. The lower limit of 10
14653 signers was reached in 24 hours, and so far 13 people have signed it.
14654 More signers and more funding is most welcome, and I am really curious
14655 how far we can get before the time limit of December 24 is reached.
14656 :)</p>
14657
14658 <p>On the #gnash IRC channel on irc.freenode.net, I was just tipped
14659 about what appear to be a great code coverage tool capable of
14660 generating code coverage stats without any changes to the source code.
14661 It is called
14662 <a href="http://simonkagstrom.github.com/kcov/index.html">kcov</a>,
14663 and can be used using <tt>kcov &lt;directory&gt; &lt;binary&gt;</tt>.
14664 It is missing in Debian, but the git source built just fine in Squeeze
14665 after I installed libelf-dev, libdwarf-dev, pkg-config and
14666 libglib2.0-dev. Failed to build in Lenny, but suspect that is
14667 solvable. I hope kcov make it into Debian soon.</p>
14668
14669 <p>Finally found time to wrap up the release notes for <a
14670 href="http://lists.debian.org/debian-edu-announce/2010/10/msg00002.html">a
14671 new alpha release of Debian Edu</a>, and just published the second
14672 alpha test release of the Squeeze based Debian Edu /
14673 <a href="http://www.skolelinux.org/">Skolelinux</a>
14674 release. Give it a try if you need a complete linux solution for your
14675 school, including central infrastructure server, workstations, thin
14676 client servers and diskless workstations. A nice touch added
14677 yesterday is RDP support on the thin client servers, for windows
14678 clients to get a Linux desktop on request.</p>
14679
14680 </div>
14681 <div class="tags">
14682
14683
14684 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/multimedia">multimedia</a>.
14685
14686
14687 </div>
14688 </div>
14689 <div class="padding"></div>
14690
14691 <div class="entry">
14692 <div class="title">
14693 <a href="http://www.hungry.com/~pere/blog/Some_notes_on_Flash_in_Debian_and_Debian_Edu.html">Some notes on Flash in Debian and Debian Edu</a>
14694 </div>
14695 <div class="date">
14696 4th September 2010
14697 </div>
14698 <div class="body">
14699 <p>In the <a href="http://popcon.debian.org/unknown/by_vote">Debian
14700 popularity-contest numbers</a>, the adobe-flashplugin package the
14701 second most popular used package that is missing in Debian. The sixth
14702 most popular is flashplayer-mozilla. This is a clear indication that
14703 working flash is important for Debian users. Around 10 percent of the
14704 users submitting data to popcon.debian.org have this package
14705 installed.</p>
14706
14707 <p>In the report written by Lars Risan in August 2008
14708 («<a href="http://wiki.skolelinux.no/Dokumentasjon/Rapporter?action=AttachFile&do=view&target=Skolelinux_i_bruk_rapport_1.0.pdf">Skolelinux
14709 i bruk – Rapport for Hurum kommune, Universitetet i Agder og
14710 stiftelsen SLX Debian Labs</a>»), one of the most important problems
14711 schools experienced with <a href="http://www.skolelinux.org/">Debian
14712 Edu/Skolelinux</a> was the lack of working Flash. A lot of educational
14713 web sites require Flash to work, and lacking working Flash support in
14714 the web browser and the problems with installing it was perceived as a
14715 good reason to stay with Windows.</p>
14716
14717 <p>I once saw a funny and sad comment in a web forum, where Linux was
14718 said to be the retarded cousin that did not really understand
14719 everything you told him but could work fairly well. This was a
14720 comment regarding the problems Linux have with proprietary formats and
14721 non-standard web pages, and is sad because it exposes a fairly common
14722 understanding of whose fault it is if web pages that only work in for
14723 example Internet Explorer 6 fail to work on Firefox, and funny because
14724 it explain very well how annoying it is for users when Linux
14725 distributions do not work with the documents they receive or the web
14726 pages they want to visit.</p>
14727
14728 <p>This is part of the reason why I believe it is important for Debian
14729 and Debian Edu to have a well working Flash implementation in the
14730 distribution, to get at least popular sites as Youtube and Google
14731 Video to working out of the box. For Squeeze, Debian have the chance
14732 to include the latest version of Gnash that will make this happen, as
14733 the new release 0.8.8 was published a few weeks ago and is resting in
14734 unstable. The new version work with more sites that version 0.8.7.
14735 The Gnash maintainers have asked for a freeze exception, but the
14736 release team have not had time to reply to it yet. I hope they agree
14737 with me that Flash is important for the Debian desktop users, and thus
14738 accept the new package into Squeeze.</p>
14739
14740 </div>
14741 <div class="tags">
14742
14743
14744 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/multimedia">multimedia</a>, <a href="http://www.hungry.com/~pere/blog/tags/video">video</a>, <a href="http://www.hungry.com/~pere/blog/tags/web">web</a>.
14745
14746
14747 </div>
14748 </div>
14749 <div class="padding"></div>
14750
14751 <div class="entry">
14752 <div class="title">
14753 <a href="http://www.hungry.com/~pere/blog/Circular_package_dependencies_harms_apt_recovery.html">Circular package dependencies harms apt recovery</a>
14754 </div>
14755 <div class="date">
14756 27th July 2010
14757 </div>
14758 <div class="body">
14759 <p>I discovered this while doing
14760 <a href="http://www.hungry.com/~pere/blog/Automatic_upgrade_testing_from_Lenny_to_Squeeze.html">automated
14761 testing of upgrades from Debian Lenny to Squeeze</a>. A few packages
14762 in Debian still got circular dependencies, and it is often claimed
14763 that apt and aptitude should be able to handle this just fine, but
14764 some times these dependency loops causes apt to fail.</p>
14765
14766 <p>An example is from todays
14767 <a href="https://people.skolelinux.org/~pere/debian-upgrade-testing//test-20100727-lenny-squeeze-kde-aptitude.txt">upgrade
14768 of KDE using aptitude</a>. In it, a bug in kdebase-workspace-data
14769 causes perl-modules to fail to upgrade. The cause is simple. If a
14770 package fail to unpack, then only part of packages with the circular
14771 dependency might end up being unpacked when unpacking aborts, and the
14772 ones already unpacked will fail to configure in the recovery phase
14773 because its dependencies are unavailable.</p>
14774
14775 <p>In this log, the problem manifest itself with this error:</p>
14776
14777 <blockquote><pre>
14778 dpkg: dependency problems prevent configuration of perl-modules:
14779 perl-modules depends on perl (>= 5.10.1-1); however:
14780 Version of perl on system is 5.10.0-19lenny2.
14781 dpkg: error processing perl-modules (--configure):
14782 dependency problems - leaving unconfigured
14783 </pre></blockquote>
14784
14785 <p>The perl/perl-modules circular dependency is already
14786 <a href="http://bugs.debian.org/527917">reported as a bug</a>, and will
14787 hopefully be solved as soon as possible, but it is not the only one,
14788 and each one of these loops in the dependency tree can cause similar
14789 failures. Of course, they only occur when there are bugs in other
14790 packages causing the unpacking to fail, but it is rather nasty when
14791 the failure of one package causes the problem to become worse because
14792 of dependency loops.</p>
14793
14794 <p>Thanks to
14795 <a href="http://lists.debian.org/debian-devel/2010/06/msg00116.html">the
14796 tireless effort by Bill Allombert</a>, the number of circular
14797 dependencies
14798 <a href="http://debian.semistable.com/debgraph.out.html">left in Debian
14799 is dropping</a>, and perhaps it will reach zero one day. :)</p>
14800
14801 <p>Todays testing also exposed a bug in
14802 <a href="http://bugs.debian.org/590605">update-notifier</a> and
14803 <a href="http://bugs.debian.org/590604">different behaviour</a> between
14804 apt-get and aptitude, the latter possibly caused by some circular
14805 dependency. Reported both to BTS to try to get someone to look at
14806 it.</p>
14807
14808 </div>
14809 <div class="tags">
14810
14811
14812 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nuug">nuug</a>.
14813
14814
14815 </div>
14816 </div>
14817 <div class="padding"></div>
14818
14819 <div class="entry">
14820 <div class="title">
14821 <a href="http://www.hungry.com/~pere/blog/What_are_they_searching_for___PowerDNS_and_ISC_DHCP_in_LDAP.html">What are they searching for - PowerDNS and ISC DHCP in LDAP</a>
14822 </div>
14823 <div class="date">
14824 17th July 2010
14825 </div>
14826 <div class="body">
14827 <p>This is a
14828 <a href="http://www.hungry.com/~pere/blog/Time_for_new__LDAP_schemas_replacing_RFC_2307_.html">followup</a>
14829 on my
14830 <a href="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">previous
14831 work</a> on
14832 <a href="http://www.hungry.com/~pere/blog/Combining_PowerDNS_and_ISC_DHCP_LDAP_objects.html">merging
14833 all</a> the computer related LDAP objects in Debian Edu.</p>
14834
14835 <p>As a step to try to see if it possible to merge the DNS and DHCP
14836 LDAP objects, I have had a look at how the packages pdns-backend-ldap
14837 and dhcp3-server-ldap in Debian use the LDAP server. The two
14838 implementations are quite different in how they use LDAP.</p>
14839
14840 To get this information, I started slapd with debugging enabled and
14841 dumped the debug output to a file to get the LDAP searches performed
14842 on a Debian Edu main-server. Here is a summary.
14843
14844 <p><strong>powerdns</strong></p>
14845
14846 <a href="http://www.linuxnetworks.de/doc/index.php/PowerDNS_LDAP_Backend">Clues
14847 on how to</a> set up PowerDNS to use a LDAP backend is available on
14848 the web.
14849
14850 <p>PowerDNS have two modes of operation using LDAP as its backend.
14851 One "strict" mode where the forward and reverse DNS lookups are done
14852 using the same LDAP objects, and a "tree" mode where the forward and
14853 reverse entries are in two different subtrees in LDAP with a structure
14854 based on the DNS names, as in tjener.intern and
14855 2.2.0.10.in-addr.arpa.</p>
14856
14857 <p>In tree mode, the server is set up to use a LDAP subtree as its
14858 base, and uses a "base" scoped search for the DNS name by adding
14859 "dc=tjener,dc=intern," to the base with a filter for
14860 "(associateddomain=tjener.intern)" for the forward entry and
14861 "dc=2,dc=2,dc=0,dc=10,dc=in-addr,dc=arpa," with a filter for
14862 "(associateddomain=2.2.0.10.in-addr.arpa)" for the reverse entry. For
14863 forward entries, it is looking for attributes named dnsttl, arecord,
14864 nsrecord, cnamerecord, soarecord, ptrrecord, hinforecord, mxrecord,
14865 txtrecord, rprecord, afsdbrecord, keyrecord, aaaarecord, locrecord,
14866 srvrecord, naptrrecord, kxrecord, certrecord, dsrecord, sshfprecord,
14867 ipseckeyrecord, rrsigrecord, nsecrecord, dnskeyrecord, dhcidrecord,
14868 spfrecord and modifytimestamp. For reverse entries it is looking for
14869 the attributes dnsttl, arecord, nsrecord, cnamerecord, soarecord,
14870 ptrrecord, hinforecord, mxrecord, txtrecord, rprecord, aaaarecord,
14871 locrecord, srvrecord, naptrrecord and modifytimestamp. The equivalent
14872 ldapsearch commands could look like this:</p>
14873
14874 <blockquote><pre>
14875 ldapsearch -h ldap \
14876 -b dc=tjener,dc=intern,ou=hosts,dc=skole,dc=skolelinux,dc=no \
14877 -s base -x '(associateddomain=tjener.intern)' dNSTTL aRecord nSRecord \
14878 cNAMERecord sOARecord pTRRecord hInfoRecord mXRecord tXTRecord \
14879 rPRecord aFSDBRecord KeyRecord aAAARecord lOCRecord sRVRecord \
14880 nAPTRRecord kXRecord certRecord dSRecord sSHFPRecord iPSecKeyRecord \
14881 rRSIGRecord nSECRecord dNSKeyRecord dHCIDRecord sPFRecord modifyTimestamp
14882
14883 ldapsearch -h ldap \
14884 -b dc=2,dc=2,dc=0,dc=10,dc=in-addr,dc=arpa,ou=hosts,dc=skole,dc=skolelinux,dc=no \
14885 -s base -x '(associateddomain=2.2.0.10.in-addr.arpa)'
14886 dnsttl, arecord, nsrecord, cnamerecord soarecord ptrrecord \
14887 hinforecord mxrecord txtrecord rprecord aaaarecord locrecord \
14888 srvrecord naptrrecord modifytimestamp
14889 </pre></blockquote>
14890
14891 <p>In Debian Edu/Lenny, the PowerDNS tree mode is used with
14892 ou=hosts,dc=skole,dc=skolelinux,dc=no as the base, and these are two
14893 example LDAP objects used there. In addition to these objects, the
14894 parent objects all th way up to ou=hosts,dc=skole,dc=skolelinux,dc=no
14895 also exist.</p>
14896
14897 <blockquote><pre>
14898 dn: dc=tjener,dc=intern,ou=hosts,dc=skole,dc=skolelinux,dc=no
14899 objectclass: top
14900 objectclass: dnsdomain
14901 objectclass: domainrelatedobject
14902 dc: tjener
14903 arecord: 10.0.2.2
14904 associateddomain: tjener.intern
14905
14906 dn: dc=2,dc=2,dc=0,dc=10,dc=in-addr,dc=arpa,ou=hosts,dc=skole,dc=skolelinux,dc=no
14907 objectclass: top
14908 objectclass: dnsdomain2
14909 objectclass: domainrelatedobject
14910 dc: 2
14911 ptrrecord: tjener.intern
14912 associateddomain: 2.2.0.10.in-addr.arpa
14913 </pre></blockquote>
14914
14915 <p>In strict mode, the server behaves differently. When looking for
14916 forward DNS entries, it is doing a "subtree" scoped search with the
14917 same base as in the tree mode for a object with filter
14918 "(associateddomain=tjener.intern)" and requests the attributes dnsttl,
14919 arecord, nsrecord, cnamerecord, soarecord, ptrrecord, hinforecord,
14920 mxrecord, txtrecord, rprecord, aaaarecord, locrecord, srvrecord,
14921 naptrrecord and modifytimestamp. For reverse entires it also do a
14922 subtree scoped search but this time the filter is "(arecord=10.0.2.2)"
14923 and the requested attributes are associateddomain, dnsttl and
14924 modifytimestamp. In short, in strict mode the objects with ptrrecord
14925 go away, and the arecord attribute in the forward object is used
14926 instead.</p>
14927
14928 <p>The forward and reverse searches can be simulated using ldapsearch
14929 like this:</p>
14930
14931 <blockquote><pre>
14932 ldapsearch -h ldap -b ou=hosts,dc=skole,dc=skolelinux,dc=no -s sub -x \
14933 '(associateddomain=tjener.intern)' dNSTTL aRecord nSRecord \
14934 cNAMERecord sOARecord pTRRecord hInfoRecord mXRecord tXTRecord \
14935 rPRecord aFSDBRecord KeyRecord aAAARecord lOCRecord sRVRecord \
14936 nAPTRRecord kXRecord certRecord dSRecord sSHFPRecord iPSecKeyRecord \
14937 rRSIGRecord nSECRecord dNSKeyRecord dHCIDRecord sPFRecord modifyTimestamp
14938
14939 ldapsearch -h ldap -b ou=hosts,dc=skole,dc=skolelinux,dc=no -s sub -x \
14940 '(arecord=10.0.2.2)' associateddomain dnsttl modifytimestamp
14941 </pre></blockquote>
14942
14943 <p>In addition to the forward and reverse searches , there is also a
14944 search for SOA records, which behave similar to the forward and
14945 reverse lookups.</p>
14946
14947 <p>A thing to note with the PowerDNS behaviour is that it do not
14948 specify any objectclass names, and instead look for the attributes it
14949 need to generate a DNS reply. This make it able to work with any
14950 objectclass that provide the needed attributes.</p>
14951
14952 <p>The attributes are normally provided in the cosine (RFC 1274) and
14953 dnsdomain2 schemas. The latter is used for reverse entries like
14954 ptrrecord and recent DNS additions like aaaarecord and srvrecord.</p>
14955
14956 <p>In Debian Edu, we have created DNS objects using the object classes
14957 dcobject (for dc), dnsdomain or dnsdomain2 (structural, for the DNS
14958 attributes) and domainrelatedobject (for associatedDomain). The use
14959 of structural object classes make it impossible to combine these
14960 classes with the object classes used by DHCP.</p>
14961
14962 <p>There are other schemas that could be used too, for example the
14963 dnszone structural object class used by Gosa and bind-sdb for the DNS
14964 attributes combined with the domainrelatedobject object class, but in
14965 this case some unused attributes would have to be included as well
14966 (zonename and relativedomainname).</p>
14967
14968 <p>My proposal for Debian Edu would be to switch PowerDNS to strict
14969 mode and not use any of the existing objectclasses (dnsdomain,
14970 dnsdomain2 and dnszone) when one want to combine the DNS information
14971 with DHCP information, and instead create a auxiliary object class
14972 defined something like this (using the attributes defined for
14973 dnsdomain and dnsdomain2 or dnszone):</p>
14974
14975 <blockquote><pre>
14976 objectclass ( some-oid NAME 'dnsDomainAux'
14977 SUP top
14978 AUXILIARY
14979 MAY ( ARecord $ MDRecord $ MXRecord $ NSRecord $ SOARecord $ CNAMERecord $
14980 DNSTTL $ DNSClass $ PTRRecord $ HINFORecord $ MINFORecord $
14981 TXTRecord $ SIGRecord $ KEYRecord $ AAAARecord $ LOCRecord $
14982 NXTRecord $ SRVRecord $ NAPTRRecord $ KXRecord $ CERTRecord $
14983 A6Record $ DNAMERecord
14984 ))
14985 </pre></blockquote>
14986
14987 <p>This will allow any object to become a DNS entry when combined with
14988 the domainrelatedobject object class, and allow any entity to include
14989 all the attributes PowerDNS wants. I've sent an email to the PowerDNS
14990 developers asking for their view on this schema and if they are
14991 interested in providing such schema with PowerDNS, and I hope my
14992 message will be accepted into their mailing list soon.</p>
14993
14994 <p><strong>ISC dhcp</strong></p>
14995
14996 <p>The DHCP server searches for specific objectclass and requests all
14997 the object attributes, and then uses the attributes it want. This
14998 make it harder to figure out exactly what attributes are used, but
14999 thanks to the working example in Debian Edu I can at least get an idea
15000 what is needed without having to read the source code.</p>
15001
15002 <p>In the DHCP server configuration, the LDAP base to use and the
15003 search filter to use to locate the correct dhcpServer entity is
15004 stored. These are the relevant entries from
15005 /etc/dhcp3/dhcpd.conf:</p>
15006
15007 <blockquote><pre>
15008 ldap-base-dn "dc=skole,dc=skolelinux,dc=no";
15009 ldap-dhcp-server-cn "dhcp";
15010 </pre></blockquote>
15011
15012 <p>The DHCP server uses this information to nest all the DHCP
15013 configuration it need. The cn "dhcp" is located using the given LDAP
15014 base and the filter "(&(objectClass=dhcpServer)(cn=dhcp))". The
15015 search result is this entry:</p>
15016
15017 <blockquote><pre>
15018 dn: cn=dhcp,dc=skole,dc=skolelinux,dc=no
15019 cn: dhcp
15020 objectClass: top
15021 objectClass: dhcpServer
15022 dhcpServiceDN: cn=DHCP Config,dc=skole,dc=skolelinux,dc=no
15023 </pre></blockquote>
15024
15025 <p>The content of the dhcpServiceDN attribute is next used to locate the
15026 subtree with DHCP configuration. The DHCP configuration subtree base
15027 is located using a base scope search with base "cn=DHCP
15028 Config,dc=skole,dc=skolelinux,dc=no" and filter
15029 "(&(objectClass=dhcpService)(|(dhcpPrimaryDN=cn=dhcp,dc=skole,dc=skolelinux,dc=no)(dhcpSecondaryDN=cn=dhcp,dc=skole,dc=skolelinux,dc=no)))".
15030 The search result is this entry:</p>
15031
15032 <blockquote><pre>
15033 dn: cn=DHCP Config,dc=skole,dc=skolelinux,dc=no
15034 cn: DHCP Config
15035 objectClass: top
15036 objectClass: dhcpService
15037 objectClass: dhcpOptions
15038 dhcpPrimaryDN: cn=dhcp, dc=skole,dc=skolelinux,dc=no
15039 dhcpStatements: ddns-update-style none
15040 dhcpStatements: authoritative
15041 dhcpOption: smtp-server code 69 = array of ip-address
15042 dhcpOption: www-server code 72 = array of ip-address
15043 dhcpOption: wpad-url code 252 = text
15044 </pre></blockquote>
15045
15046 <p>Next, the entire subtree is processed, one level at the time. When
15047 all the DHCP configuration is loaded, it is ready to receive requests.
15048 The subtree in Debian Edu contain objects with object classes
15049 top/dhcpService/dhcpOptions, top/dhcpSharedNetwork/dhcpOptions,
15050 top/dhcpSubnet, top/dhcpGroup and top/dhcpHost. These provide options
15051 and information about netmasks, dynamic range etc. Leaving out the
15052 details here because it is not relevant for the focus of my
15053 investigation, which is to see if it is possible to merge dns and dhcp
15054 related computer objects.</p>
15055
15056 <p>When a DHCP request come in, LDAP is searched for the MAC address
15057 of the client (00:00:00:00:00:00 in this example), using a subtree
15058 scoped search with "cn=DHCP Config,dc=skole,dc=skolelinux,dc=no" as
15059 the base and "(&(objectClass=dhcpHost)(dhcpHWAddress=ethernet
15060 00:00:00:00:00:00))" as the filter. This is what a host object look
15061 like:</p>
15062
15063 <blockquote><pre>
15064 dn: cn=hostname,cn=group1,cn=THINCLIENTS,cn=DHCP Config,dc=skole,dc=skolelinux,dc=no
15065 cn: hostname
15066 objectClass: top
15067 objectClass: dhcpHost
15068 dhcpHWAddress: ethernet 00:00:00:00:00:00
15069 dhcpStatements: fixed-address hostname
15070 </pre></blockquote>
15071
15072 <p>There is less flexiblity in the way LDAP searches are done here.
15073 The object classes need to have fixed names, and the configuration
15074 need to be stored in a fairly specific LDAP structure. On the
15075 positive side, the invidiual dhcpHost entires can be anywhere without
15076 the DN pointed to by the dhcpServer entries. The latter should make
15077 it possible to group all host entries in a subtree next to the
15078 configuration entries, and this subtree can also be shared with the
15079 DNS server if the schema proposed above is combined with the dhcpHost
15080 structural object class.
15081
15082 <p><strong>Conclusion</strong></p>
15083
15084 <p>The PowerDNS implementation seem to be very flexible when it come
15085 to which LDAP schemas to use. While its "tree" mode is rigid when it
15086 come to the the LDAP structure, the "strict" mode is very flexible,
15087 allowing DNS objects to be stored anywhere under the base cn specified
15088 in the configuration.</p>
15089
15090 <p>The DHCP implementation on the other hand is very inflexible, both
15091 regarding which LDAP schemas to use and which LDAP structure to use.
15092 I guess one could implement ones own schema, as long as the
15093 objectclasses and attributes have the names used, but this do not
15094 really help when the DHCP subtree need to have a fairly fixed
15095 structure.</p>
15096
15097 <p>Based on the observed behaviour, I suspect a LDAP structure like
15098 this might work for Debian Edu:</p>
15099
15100 <blockquote><pre>
15101 ou=services
15102 cn=machine-info (dhcpService) - dhcpServiceDN points here
15103 cn=dhcp (dhcpServer)
15104 cn=dhcp-internal (dhcpSharedNetwork/dhcpOptions)
15105 cn=10.0.2.0 (dhcpSubnet)
15106 cn=group1 (dhcpGroup/dhcpOptions)
15107 cn=dhcp-thinclients (dhcpSharedNetwork/dhcpOptions)
15108 cn=192.168.0.0 (dhcpSubnet)
15109 cn=group1 (dhcpGroup/dhcpOptions)
15110 ou=machines - PowerDNS base points here
15111 cn=hostname (dhcpHost/domainrelatedobject/dnsDomainAux)
15112 </pre></blockquote>
15113
15114 <P>This is not tested yet. If the DHCP server require the dhcpHost
15115 entries to be in the dhcpGroup subtrees, the entries can be stored
15116 there instead of a common machines subtree, and the PowerDNS base
15117 would have to be moved one level up to the machine-info subtree.</p>
15118
15119 <p>The combined object under the machines subtree would look something
15120 like this:</p>
15121
15122 <blockquote><pre>
15123 dn: dc=hostname,ou=machines,cn=machine-info,dc=skole,dc=skolelinux,dc=no
15124 dc: hostname
15125 objectClass: top
15126 objectClass: dhcpHost
15127 objectclass: domainrelatedobject
15128 objectclass: dnsDomainAux
15129 associateddomain: hostname.intern
15130 arecord: 10.11.12.13
15131 dhcpHWAddress: ethernet 00:00:00:00:00:00
15132 dhcpStatements: fixed-address hostname.intern
15133 </pre></blockquote>
15134
15135 </p>One could even add the LTSP configuration associated with a given
15136 machine, as long as the required attributes are available in a
15137 auxiliary object class.</p>
15138
15139 </div>
15140 <div class="tags">
15141
15142
15143 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/ldap">ldap</a>, <a href="http://www.hungry.com/~pere/blog/tags/nuug">nuug</a>.
15144
15145
15146 </div>
15147 </div>
15148 <div class="padding"></div>
15149
15150 <div class="entry">
15151 <div class="title">
15152 <a href="http://www.hungry.com/~pere/blog/Combining_PowerDNS_and_ISC_DHCP_LDAP_objects.html">Combining PowerDNS and ISC DHCP LDAP objects</a>
15153 </div>
15154 <div class="date">
15155 14th July 2010
15156 </div>
15157 <div class="body">
15158 <p>For a while now, I have wanted to find a way to change the DNS and
15159 DHCP services in Debian Edu to use the same LDAP objects for a given
15160 computer, to avoid the possibility of having a inconsistent state for
15161 a computer in LDAP (as in DHCP but no DNS entry or the other way
15162 around) and make it easier to add computers to LDAP.</p>
15163
15164 <p>I've looked at how powerdns and dhcpd is using LDAP, and using this
15165 information finally found a solution that seem to work.</p>
15166
15167 <p>The old setup required three LDAP objects for a given computer.
15168 One forward DNS entry, one reverse DNS entry and one DHCP entry. If
15169 we switch powerdns to use its strict LDAP method (ldap-method=strict
15170 in pdns-debian-edu.conf), the forward and reverse DNS entries are
15171 merged into one while making it impossible to transfer the reverse map
15172 to a slave DNS server.</p>
15173
15174 <p>If we also replace the object class used to get the DNS related
15175 attributes to one allowing these attributes to be combined with the
15176 dhcphost object class, we can merge the DNS and DHCP entries into one.
15177 I've written such object class in the dnsdomainaux.schema file (need
15178 proper OIDs, but that is a minor issue), and tested the setup. It
15179 seem to work.</p>
15180
15181 <p>With this test setup in place, we can get away with one LDAP object
15182 for both DNS and DHCP, and even the LTSP configuration I suggested in
15183 an earlier email. The combined LDAP object will look something like
15184 this:</p>
15185
15186 <blockquote><pre>
15187 dn: cn=hostname,cn=group1,cn=THINCLIENTS,cn=DHCP Config,dc=skole,dc=skolelinux,dc=no
15188 cn: hostname
15189 objectClass: dhcphost
15190 objectclass: domainrelatedobject
15191 objectclass: dnsdomainaux
15192 associateddomain: hostname.intern
15193 arecord: 10.11.12.13
15194 dhcphwaddress: ethernet 00:00:00:00:00:00
15195 dhcpstatements: fixed-address hostname
15196 ldapconfigsound: Y
15197 </pre></blockquote>
15198
15199 <p>The DNS server uses the associateddomain and arecord entries, while
15200 the DHCP server uses the dhcphwaddress and dhcpstatements entries
15201 before asking DNS to resolve the fixed-adddress. LTSP will use
15202 dhcphwaddress or associateddomain and the ldapconfig* attributes.</p>
15203
15204 <p>I am not yet sure if I can get the DHCP server to look for its
15205 dhcphost in a different location, to allow us to put the objects
15206 outside the "DHCP Config" subtree, but hope to figure out a way to do
15207 that. If I can't figure out a way to do that, we can still get rid of
15208 the hosts subtree and move all its content into the DHCP Config tree
15209 (which probably should be renamed to be more related to the new
15210 content. I suspect cn=dnsdhcp,ou=services or something like that
15211 might be a good place to put it.</p>
15212
15213 <p>If you want to help out with implementing this for Debian Edu,
15214 please contact us on debian-edu@lists.debian.org.</p>
15215
15216 </div>
15217 <div class="tags">
15218
15219
15220 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/ldap">ldap</a>, <a href="http://www.hungry.com/~pere/blog/tags/nuug">nuug</a>.
15221
15222
15223 </div>
15224 </div>
15225 <div class="padding"></div>
15226
15227 <div class="entry">
15228 <div class="title">
15229 <a href="http://www.hungry.com/~pere/blog/Idea_for_storing_LTSP_configuration_in_LDAP.html">Idea for storing LTSP configuration in LDAP</a>
15230 </div>
15231 <div class="date">
15232 11th July 2010
15233 </div>
15234 <div class="body">
15235 <p>Vagrant mentioned on IRC today that ltsp_config now support
15236 sourcing files from /usr/share/ltsp/ltsp_config.d/ on the thin
15237 clients, and that this can be used to fetch configuration from LDAP if
15238 Debian Edu choose to store configuration there.</p>
15239
15240 <p>Armed with this information, I got inspired and wrote a test module
15241 to get configuration from LDAP. The idea is to look up the MAC
15242 address of the client in LDAP, and look for attributes on the form
15243 ltspconfigsetting=value, and use this to export SETTING=value to the
15244 LTSP clients.</p>
15245
15246 <p>The goal is to be able to store the LTSP configuration attributes
15247 in a "computer" LDAP object used by both DNS and DHCP, and thus
15248 allowing us to store all information about a computer in one place.</p>
15249
15250 <p>This is a untested draft implementation, and I welcome feedback on
15251 this approach. A real LDAP schema for the ltspClientAux objectclass
15252 need to be written. Comments, suggestions, etc?</p>
15253
15254 <blockquote><pre>
15255 # Store in /opt/ltsp/$arch/usr/share/ltsp/ltsp_config.d/ldap-config
15256 #
15257 # Fetch LTSP client settings from LDAP based on MAC address
15258 #
15259 # Uses ethernet address as stored in the dhcpHost objectclass using
15260 # the dhcpHWAddress attribute or ethernet address stored in the
15261 # ieee802Device objectclass with the macAddress attribute.
15262 #
15263 # This module is written to be schema agnostic, and only depend on the
15264 # existence of attribute names.
15265 #
15266 # The LTSP configuration variables are saved directly using a
15267 # ltspConfig prefix and uppercasing the rest of the attribute name.
15268 # To set the SERVER variable, set the ltspConfigServer attribute.
15269 #
15270 # Some LDAP schema should be created with all the relevant
15271 # configuration settings. Something like this should work:
15272 #
15273 # objectclass ( 1.1.2.2 NAME 'ltspClientAux'
15274 # SUP top
15275 # AUXILIARY
15276 # MAY ( ltspConfigServer $ ltsConfigSound $ ... )
15277
15278 LDAPSERVER=$(debian-edu-ldapserver)
15279 if [ "$LDAPSERVER" ] ; then
15280 LDAPBASE=$(debian-edu-ldapserver -b)
15281 for MAC in $(LANG=C ifconfig |grep -i hwaddr| awk '{print $5}'|sort -u) ; do
15282 filter="(|(dhcpHWAddress=ethernet $MAC)(macAddress=$MAC))"
15283 ldapsearch -h "$LDAPSERVER" -b "$LDAPBASE" -v -x "$filter" | \
15284 grep '^ltspConfig' | while read attr value ; do
15285 # Remove prefix and convert to upper case
15286 attr=$(echo $attr | sed 's/^ltspConfig//i' | tr a-z A-Z)
15287 # bass value on to clients
15288 eval "$attr=$value; export $attr"
15289 done
15290 done
15291 fi
15292 </pre></blockquote>
15293
15294 <p>I'm not sure this shell construction will work, because I suspect
15295 the while block might end up in a subshell causing the variables set
15296 there to not show up in ltsp-config, but if that is the case I am sure
15297 the code can be restructured to make sure the variables are passed on.
15298 I expect that can be solved with some testing. :)</p>
15299
15300 <p>If you want to help out with implementing this for Debian Edu,
15301 please contact us on debian-edu@lists.debian.org.</p>
15302
15303 <p>Update 2010-07-17: I am aware of another effort to store LTSP
15304 configuration in LDAP that was created around year 2000 by
15305 <a href="http://www.pcxperience.com/thinclient/documentation/ldap.html">PC
15306 Xperience, Inc., 2000</a>. I found its
15307 <a href="http://people.redhat.com/alikins/ltsp/ldap/">files</a> on a
15308 personal home page over at redhat.com.</p>
15309
15310 </div>
15311 <div class="tags">
15312
15313
15314 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/ldap">ldap</a>, <a href="http://www.hungry.com/~pere/blog/tags/nuug">nuug</a>.
15315
15316
15317 </div>
15318 </div>
15319 <div class="padding"></div>
15320
15321 <div class="entry">
15322 <div class="title">
15323 <a href="http://www.hungry.com/~pere/blog/jXplorer__a_very_nice_LDAP_GUI.html">jXplorer, a very nice LDAP GUI</a>
15324 </div>
15325 <div class="date">
15326 9th July 2010
15327 </div>
15328 <div class="body">
15329 <p>Since
15330 <a href="http://www.hungry.com/~pere/blog/LUMA__a_very_nice_LDAP_GUI.html">my
15331 last post</a> about available LDAP tools in Debian, I was told about a
15332 LDAP GUI that is even better than luma. The java application
15333 <a href="http://jxplorer.org/">jXplorer</a> is claimed to be capable of
15334 moving LDAP objects and subtrees using drag-and-drop, and can
15335 authenticate using Kerberos. I have only tested the Kerberos
15336 authentication, but do not have a LDAP setup allowing me to rewrite
15337 LDAP with my test user yet. It is
15338 <a href="http://packages.qa.debian.org/j/jxplorer.html">available in
15339 Debian</a> testing and unstable at the moment. The only problem I
15340 have with it is how it handle errors. If something go wrong, its
15341 non-intuitive behaviour require me to go through some query work list
15342 and remove the failing query. Nothing big, but very annoying.</p>
15343
15344 </div>
15345 <div class="tags">
15346
15347
15348 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/ldap">ldap</a>, <a href="http://www.hungry.com/~pere/blog/tags/nuug">nuug</a>.
15349
15350
15351 </div>
15352 </div>
15353 <div class="padding"></div>
15354
15355 <div class="entry">
15356 <div class="title">
15357 <a href="http://www.hungry.com/~pere/blog/Lenny__Squeeze_upgrades__apt_vs_aptitude_with_the_Gnome_desktop.html">Lenny->Squeeze upgrades, apt vs aptitude with the Gnome desktop</a>
15358 </div>
15359 <div class="date">
15360 3rd July 2010
15361 </div>
15362 <div class="body">
15363 <p>Here is a short update on my <a
15364 href="https://people.skolelinux.org/~pere/debian-upgrade-testing/">my
15365 Debian Lenny->Squeeze upgrade testing</a>. Here is a summary of the
15366 difference for Gnome when it is upgraded by apt-get and aptitude. I'm
15367 not reporting the status for KDE, because the upgrade crashes when
15368 aptitude try because of missing conflicts
15369 (<a href="http://bugs.debian.org/584861">#584861</a> and
15370 <a href="http://bugs.debian.org/585716">#585716</a>).</p>
15371
15372 <p>At the end of the upgrade test script, dpkg -l is executed to get a
15373 complete list of the installed packages. Based on this I see these
15374 differences when I did a test run today. As usual, I do not really
15375 know what the correct set of packages would be, but thought it best to
15376 publish the difference.</p>
15377
15378 <p>Installed using apt-get, missing with aptitude</p>
15379
15380 <blockquote><p>
15381 at-spi cpp-4.3 finger gnome-spell gstreamer0.10-gnomevfs
15382 libatspi1.0-0 libcupsys2 libeel2-data libgail-common libgdl-1-common
15383 libgnomeprint2.2-data libgnomeprintui2.2-common libgnomevfs2-bin
15384 libgtksourceview-common libpt-1.10.10-plugins-alsa
15385 libpt-1.10.10-plugins-v4l libservlet2.4-java libxalan2-java
15386 libxerces2-java openoffice.org-writer2latex openssl-blacklist p7zip
15387 python-4suite-xml python-eggtrayicon python-gtkhtml2
15388 python-gtkmozembed svgalibg1 xserver-xephyr zip
15389 </p></blockquote>
15390
15391 <p>Installed using apt-get, removed with aptitude</p>
15392
15393 <blockquote><p>
15394 bluez-utils dhcdbd djvulibre-desktop epiphany-gecko
15395 gnome-app-install gnome-mount gnome-vfs-obexftp gnome-volume-manager
15396 libao2 libavahi-compat-libdnssd1 libavahi-core5 libbind9-50
15397 libbluetooth2 libcamel1.2-11 libcdio7 libcucul0 libcurl3
15398 libdirectfb-1.0-0 libdvdread3 libedata-cal1.2-6 libedataserver1.2-9
15399 libeel2-2.20 libepc-1.0-1 libepc-ui-1.0-1 libexchange-storage1.2-3
15400 libfaad0 libgd2-noxpm libgda3-3 libgda3-common libggz2 libggzcore9
15401 libggzmod4 libgksu1.2-0 libgksuui1.0-1 libgmyth0 libgnome-desktop-2
15402 libgnome-pilot2 libgnomecups1.0-1 libgnomeprint2.2-0
15403 libgnomeprintui2.2-0 libgpod3 libgraphviz4 libgtkhtml2-0
15404 libgtksourceview1.0-0 libgucharmap6 libhesiod0 libicu38 libisccc50
15405 libisccfg50 libiw29 libkpathsea4 libltdl3 liblwres50 libmagick++10
15406 libmagick10 libmalaga7 libmtp7 libmysqlclient15off libnautilus-burn4
15407 libneon27 libnm-glib0 libnm-util0 libopal-2.2 libosp5
15408 libparted1.8-10 libpisock9 libpisync1 libpoppler-glib3 libpoppler3
15409 libpt-1.10.10 libraw1394-8 libsensors3 libsmbios2 libsoup2.2-8
15410 libssh2-1 libsuitesparse-3.1.0 libswfdec-0.6-90 libtalloc1
15411 libtotem-plparser10 libtrackerclient0 libvoikko1 libxalan2-java-gcj
15412 libxerces2-java-gcj libxklavier12 libxtrap6 libxxf86misc1 libzephyr3
15413 mysql-common swfdec-gnome totem-gstreamer wodim
15414 </p></blockquote>
15415
15416 <p>Installed using aptitude, missing with apt-get</p>
15417
15418 <blockquote><p>
15419 gnome gnome-desktop-environment hamster-applet python-gnomeapplet
15420 python-gnomekeyring python-wnck rhythmbox-plugins xorg
15421 xserver-xorg-input-all xserver-xorg-input-evdev
15422 xserver-xorg-input-kbd xserver-xorg-input-mouse
15423 xserver-xorg-input-synaptics xserver-xorg-video-all
15424 xserver-xorg-video-apm xserver-xorg-video-ark xserver-xorg-video-ati
15425 xserver-xorg-video-chips xserver-xorg-video-cirrus
15426 xserver-xorg-video-dummy xserver-xorg-video-fbdev
15427 xserver-xorg-video-glint xserver-xorg-video-i128
15428 xserver-xorg-video-i740 xserver-xorg-video-mach64
15429 xserver-xorg-video-mga xserver-xorg-video-neomagic
15430 xserver-xorg-video-nouveau xserver-xorg-video-nv
15431 xserver-xorg-video-r128 xserver-xorg-video-radeon
15432 xserver-xorg-video-radeonhd xserver-xorg-video-rendition
15433 xserver-xorg-video-s3 xserver-xorg-video-s3virge
15434 xserver-xorg-video-savage xserver-xorg-video-siliconmotion
15435 xserver-xorg-video-sis xserver-xorg-video-sisusb
15436 xserver-xorg-video-tdfx xserver-xorg-video-tga
15437 xserver-xorg-video-trident xserver-xorg-video-tseng
15438 xserver-xorg-video-vesa xserver-xorg-video-vmware
15439 xserver-xorg-video-voodoo
15440 </p></blockquote>
15441
15442 <p>Installed using aptitude, removed with apt-get</p>
15443
15444 <blockquote><p>
15445 deskbar-applet xserver-xorg xserver-xorg-core
15446 xserver-xorg-input-wacom xserver-xorg-video-intel
15447 xserver-xorg-video-openchrome
15448 </p></blockquote>
15449
15450 <p>I was told on IRC that the xorg-xserver package was
15451 <a href="http://git.debian.org/?p=pkg-xorg/xserver/xorg-server.git;a=commit;h=9c8080d06c457932d3bfec021c69ac000aa60120">changed
15452 in git</a> today to try to get apt-get to not remove xorg completely.
15453 No idea when it hits Squeeze, but when it does I hope it will reduce
15454 the difference somewhat.
15455
15456 </div>
15457 <div class="tags">
15458
15459
15460 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
15461
15462
15463 </div>
15464 </div>
15465 <div class="padding"></div>
15466
15467 <div class="entry">
15468 <div class="title">
15469 <a href="http://www.hungry.com/~pere/blog/LUMA__a_very_nice_LDAP_GUI.html">LUMA, a very nice LDAP GUI</a>
15470 </div>
15471 <div class="date">
15472 28th June 2010
15473 </div>
15474 <div class="body">
15475 <p>The last few days I have been looking into the status of the LDAP
15476 directory in Debian Edu, and in the process I started to miss a GUI
15477 tool to browse the LDAP tree. The only one I was able to find in
15478 Debian/Squeeze and Lenny is
15479 <a href="http://luma.sourceforge.net/">LUMA</a>, which has proved to
15480 be a great tool to get a overview of the current LDAP directory
15481 populated by default in Skolelinux. Thanks to it, I have been able to
15482 find empty and obsolete subtrees, misplaced objects and duplicate
15483 objects. It will be installed by default in Debian/Squeeze. If you
15484 are working with LDAP, give it a go. :)</p>
15485
15486 <p>I did notice one problem with it I have not had time to report to
15487 the BTS yet. There is no .desktop file in the package, so the tool do
15488 not show up in the Gnome and KDE menus, but only deep down in in the
15489 Debian submenu in KDE. I hope that can be fixed before Squeeze is
15490 released.</p>
15491
15492 <p>I have not yet been able to get it to modify the tree yet. I would
15493 like to move objects and remove subtrees directly in the GUI, but have
15494 not found a way to do that with LUMA yet. So in the mean time, I use
15495 <a href="http://www.lichteblau.com/ldapvi/">ldapvi</a> for that.</p>
15496
15497 <p>If you have tips on other GUI tools for LDAP that might be useful
15498 in Debian Edu, please contact us on debian-edu@lists.debian.org.</p>
15499
15500 <p>Update 2010-06-29: Ross Reedstrom tipped us about the
15501 <a href="http://packages.qa.debian.org/g/gq.html">gq</a> package as a
15502 useful GUI alternative. It seem like a good tool, but is unmaintained
15503 in Debian and got a RC bug keeping it out of Squeeze. Unless that
15504 changes, it will not be an option for Debian Edu based on Squeeze.</p>
15505
15506 </div>
15507 <div class="tags">
15508
15509
15510 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/ldap">ldap</a>, <a href="http://www.hungry.com/~pere/blog/tags/nuug">nuug</a>.
15511
15512
15513 </div>
15514 </div>
15515 <div class="padding"></div>
15516
15517 <div class="entry">
15518 <div class="title">
15519 <a href="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">Idea for a change to LDAP schemas allowing DNS and DHCP info to be combined into one object</a>
15520 </div>
15521 <div class="date">
15522 24th June 2010
15523 </div>
15524 <div class="body">
15525 <p>A while back, I
15526 <a href="http://www.hungry.com/~pere/blog/Time_for_new__LDAP_schemas_replacing_RFC_2307_.html">complained
15527 about the fact</a> that it is not possible with the provided schemas
15528 for storing DNS and DHCP information in LDAP to combine the two sets
15529 of information into one LDAP object representing a computer.</p>
15530
15531 <p>In the mean time, I discovered that a simple fix would be to make
15532 the dhcpHost object class auxiliary, to allow it to be combined with
15533 the dNSDomain object class, and thus forming one object for one
15534 computer when storing both DHCP and DNS information in LDAP.</p>
15535
15536 <p>If I understand this correctly, it is not safe to do this change
15537 without also changing the assigned number for the object class, and I
15538 do not know enough about LDAP schema design to do that properly for
15539 Debian Edu.</p>
15540
15541 <p>Anyway, for future reference, this is how I believe we could change
15542 the
15543 <a href="http://tools.ietf.org/html/draft-ietf-dhc-ldap-schema-00">DHCP
15544 schema</a> to solve at least part of the problem with the LDAP schemas
15545 available today from IETF.</p>
15546
15547 <pre>
15548 --- dhcp.schema (revision 65192)
15549 +++ dhcp.schema (working copy)
15550 @@ -376,7 +376,7 @@
15551 objectclass ( 2.16.840.1.113719.1.203.6.6
15552 NAME 'dhcpHost'
15553 DESC 'This represents information about a particular client'
15554 - SUP top
15555 + SUP top AUXILIARY
15556 MUST cn
15557 MAY (dhcpLeaseDN $ dhcpHWAddress $ dhcpOptionsDN $ dhcpStatements $ dhcpComments $ dhcpOption)
15558 X-NDS_CONTAINMENT ('dhcpService' 'dhcpSubnet' 'dhcpGroup') )
15559 </pre>
15560
15561 <p>I very much welcome clues on how to do this properly for Debian
15562 Edu/Squeeze. We provide the DHCP schema in our debian-edu-config
15563 package, and should thus be free to rewrite it as we see fit.</p>
15564
15565 <p>If you want to help out with implementing this for Debian Edu,
15566 please contact us on debian-edu@lists.debian.org.</p>
15567
15568 </div>
15569 <div class="tags">
15570
15571
15572 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/ldap">ldap</a>, <a href="http://www.hungry.com/~pere/blog/tags/nuug">nuug</a>.
15573
15574
15575 </div>
15576 </div>
15577 <div class="padding"></div>
15578
15579 <div class="entry">
15580 <div class="title">
15581 <a href="http://www.hungry.com/~pere/blog/Calling_tasksel_like_the_installer__while_still_getting_useful_output.html">Calling tasksel like the installer, while still getting useful output</a>
15582 </div>
15583 <div class="date">
15584 16th June 2010
15585 </div>
15586 <div class="body">
15587 <p>A few times I have had the need to simulate the way tasksel
15588 installs packages during the normal debian-installer run. Until now,
15589 I have ended up letting tasksel do the work, with the annoying problem
15590 of not getting any feedback at all when something fails (like a
15591 conffile question from dpkg or a download that fails), using code like
15592 this:
15593
15594 <blockquote><pre>
15595 export DEBIAN_FRONTEND=noninteractive
15596 tasksel --new-install
15597 </pre></blockquote>
15598
15599 This would invoke tasksel, let its automatic task selection pick the
15600 tasks to install, and continue to install the requested tasks without
15601 any output what so ever.
15602
15603 Recently I revisited this problem while working on the automatic
15604 package upgrade testing, because tasksel would some times hang without
15605 any useful feedback, and I want to see what is going on when it
15606 happen. Then it occured to me, I can parse the output from tasksel
15607 when asked to run in test mode, and use that aptitude command line
15608 printed by tasksel then to simulate the tasksel run. I ended up using
15609 code like this:
15610
15611 <blockquote><pre>
15612 export DEBIAN_FRONTEND=noninteractive
15613 cmd="$(in_target tasksel -t --new-install | sed 's/debconf-apt-progress -- //')"
15614 $cmd
15615 </pre></blockquote>
15616
15617 <p>The content of $cmd is typically something like "<tt>aptitude -q
15618 --without-recommends -o APT::Install-Recommends=no -y install
15619 ~t^desktop$ ~t^gnome-desktop$ ~t^laptop$ ~pstandard ~prequired
15620 ~pimportant</tt>", which will install the gnome desktop task, the
15621 laptop task and all packages with priority standard , required and
15622 important, just like tasksel would have done it during
15623 installation.</p>
15624
15625 <p>A better approach is probably to extend tasksel to be able to
15626 install packages without using debconf-apt-progress, for use cases
15627 like this.</p>
15628
15629 </div>
15630 <div class="tags">
15631
15632
15633 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nuug">nuug</a>.
15634
15635
15636 </div>
15637 </div>
15638 <div class="padding"></div>
15639
15640 <div class="entry">
15641 <div class="title">
15642 <a href="http://www.hungry.com/~pere/blog/Lenny__Squeeze_upgrades__removals_by_apt_and_aptitude.html">Lenny->Squeeze upgrades, removals by apt and aptitude</a>
15643 </div>
15644 <div class="date">
15645 13th June 2010
15646 </div>
15647 <div class="body">
15648 <p>My
15649 <a href="http://www.hungry.com/~pere/blog/Automatic_upgrade_testing_from_Lenny_to_Squeeze.html">testing
15650 of Debian upgrades</a> from Lenny to Squeeze continues, and I've
15651 finally made the upgrade logs available from
15652 <a href="http://www.hungry.com/~pere/debian-upgrade-testing/">http://www.hungry.com/~pere/debian-upgrade-testing/</a>.
15653 I am now testing dist-upgrade of Gnome and KDE in a chroot using both
15654 apt and aptitude, and found their differences interesting. This time
15655 I will only focus on their removal plans.</p>
15656
15657 <p>After installing a Gnome desktop and the laptop task, apt-get wants
15658 to remove 72 packages when dist-upgrading from Lenny to Squeeze. The
15659 surprising part is that it want to remove xorg and all
15660 xserver-xorg-video* drivers. Clearly not a good choice, but I am not
15661 sure why. When asking aptitude to do the same, it want to remove 129
15662 packages, but most of them are library packages I suspect are no
15663 longer needed. Both of them want to remove bluetooth packages, which
15664 I do not know. Perhaps these bluetooth packages are obsolete?</p>
15665
15666 <p>For KDE, apt-get want to remove 82 packages, among them kdebase
15667 which seem like a bad idea and xorg the same way as with Gnome. Asking
15668 aptitude for the same, it wants to remove 192 packages, none which are
15669 too surprising.</p>
15670
15671 <p>I guess the removal of xorg during upgrades should be investigated
15672 and avoided, and perhaps others as well. Here are the complete list
15673 of planned removals. The complete logs is available from the URL
15674 above. Note if you want to repeat these tests, that the upgrade test
15675 for kde+apt-get hung in the tasksel setup because of dpkg asking
15676 conffile questions. No idea why. I worked around it by using
15677 '<tt>echo >> /proc/<em>pidofdpkg</em>/fd/0</tt>' to tell dpkg to
15678 continue.</p>
15679
15680 <p><b>apt-get gnome 72</b>
15681 <br>bluez-gnome cupsddk-drivers deskbar-applet gnome
15682 gnome-desktop-environment gnome-network-admin gtkhtml3.14
15683 iceweasel-gnome-support libavcodec51 libdatrie0 libgdl-1-0
15684 libgnomekbd2 libgnomekbdui2 libmetacity0 libslab0 libxcb-xlib0
15685 nautilus-cd-burner python-gnome2-desktop python-gnome2-extras
15686 serpentine swfdec-mozilla update-manager xorg xserver-xorg
15687 xserver-xorg-core xserver-xorg-input-all xserver-xorg-input-evdev
15688 xserver-xorg-input-kbd xserver-xorg-input-mouse
15689 xserver-xorg-input-synaptics xserver-xorg-input-wacom
15690 xserver-xorg-video-all xserver-xorg-video-apm xserver-xorg-video-ark
15691 xserver-xorg-video-ati xserver-xorg-video-chips
15692 xserver-xorg-video-cirrus xserver-xorg-video-cyrix
15693 xserver-xorg-video-dummy xserver-xorg-video-fbdev
15694 xserver-xorg-video-glint xserver-xorg-video-i128
15695 xserver-xorg-video-i740 xserver-xorg-video-imstt
15696 xserver-xorg-video-intel xserver-xorg-video-mach64
15697 xserver-xorg-video-mga xserver-xorg-video-neomagic
15698 xserver-xorg-video-nsc xserver-xorg-video-nv
15699 xserver-xorg-video-openchrome xserver-xorg-video-r128
15700 xserver-xorg-video-radeon xserver-xorg-video-radeonhd
15701 xserver-xorg-video-rendition xserver-xorg-video-s3
15702 xserver-xorg-video-s3virge xserver-xorg-video-savage
15703 xserver-xorg-video-siliconmotion xserver-xorg-video-sis
15704 xserver-xorg-video-sisusb xserver-xorg-video-tdfx
15705 xserver-xorg-video-tga xserver-xorg-video-trident
15706 xserver-xorg-video-tseng xserver-xorg-video-v4l
15707 xserver-xorg-video-vesa xserver-xorg-video-vga
15708 xserver-xorg-video-vmware xserver-xorg-video-voodoo xulrunner-1.9
15709 xulrunner-1.9-gnome-support</p>
15710
15711 <p><b>aptitude gnome 129</b>
15712
15713 <br>bluez-gnome bluez-utils cpp-4.3 cupsddk-drivers dhcdbd
15714 djvulibre-desktop finger gnome-app-install gnome-mount
15715 gnome-network-admin gnome-spell gnome-vfs-obexftp
15716 gnome-volume-manager gstreamer0.10-gnomevfs gtkhtml3.14 libao2
15717 libavahi-compat-libdnssd1 libavahi-core5 libavcodec51 libbluetooth2
15718 libcamel1.2-11 libcdio7 libcucul0 libcupsys2 libcurl3 libdatrie0
15719 libdirectfb-1.0-0 libdvdread3 libedataserver1.2-9 libeel2-2.20
15720 libeel2-data libepc-1.0-1 libepc-ui-1.0-1 libfaad0 libgail-common
15721 libgd2-noxpm libgda3-3 libgda3-common libgdl-1-0 libgdl-1-common
15722 libggz2 libggzcore9 libggzmod4 libgksu1.2-0 libgksuui1.0-1 libgmyth0
15723 libgnomecups1.0-1 libgnomekbd2 libgnomekbdui2 libgnomeprint2.2-0
15724 libgnomeprint2.2-data libgnomeprintui2.2-0 libgnomeprintui2.2-common
15725 libgnomevfs2-bin libgpod3 libgraphviz4 libgtkhtml2-0
15726 libgtksourceview-common libgtksourceview1.0-0 libgucharmap6
15727 libhesiod0 libicu38 libiw29 libkpathsea4 libltdl3 libmagick++10
15728 libmagick10 libmalaga7 libmetacity0 libmtp7 libmysqlclient15off
15729 libnautilus-burn4 libneon27 libnm-glib0 libnm-util0 libopal-2.2
15730 libosp5 libparted1.8-10 libpoppler-glib3 libpoppler3 libpt-1.10.10
15731 libpt-1.10.10-plugins-alsa libpt-1.10.10-plugins-v4l libraw1394-8
15732 libsensors3 libslab0 libsmbios2 libsoup2.2-8 libssh2-1
15733 libsuitesparse-3.1.0 libswfdec-0.6-90 libtalloc1 libtotem-plparser10
15734 libtrackerclient0 libxalan2-java libxalan2-java-gcj libxcb-xlib0
15735 libxerces2-java libxerces2-java-gcj libxklavier12 libxtrap6
15736 libxxf86misc1 libzephyr3 mysql-common nautilus-cd-burner
15737 openoffice.org-writer2latex openssl-blacklist p7zip
15738 python-4suite-xml python-eggtrayicon python-gnome2-desktop
15739 python-gnome2-extras python-gtkhtml2 python-gtkmozembed
15740 python-numeric python-sexy serpentine svgalibg1 swfdec-gnome
15741 swfdec-mozilla totem-gstreamer update-manager wodim
15742 xserver-xorg-video-cyrix xserver-xorg-video-imstt
15743 xserver-xorg-video-nsc xserver-xorg-video-v4l xserver-xorg-video-vga
15744 zip</p>
15745
15746 <p><b>apt-get kde 82</b>
15747
15748 <br>cupsddk-drivers karm kaudiocreator kcoloredit kcontrol kde kde-core
15749 kdeaddons kdeartwork kdebase kdebase-bin kdebase-bin-kde3
15750 kdebase-kio-plugins kdesktop kdeutils khelpcenter kicker
15751 kicker-applets knewsticker kolourpaint konq-plugins konqueror korn
15752 kpersonalizer kscreensaver ksplash libavcodec51 libdatrie0 libkiten1
15753 libxcb-xlib0 quanta superkaramba texlive-base-bin xorg xserver-xorg
15754 xserver-xorg-core xserver-xorg-input-all xserver-xorg-input-evdev
15755 xserver-xorg-input-kbd xserver-xorg-input-mouse
15756 xserver-xorg-input-synaptics xserver-xorg-input-wacom
15757 xserver-xorg-video-all xserver-xorg-video-apm xserver-xorg-video-ark
15758 xserver-xorg-video-ati xserver-xorg-video-chips
15759 xserver-xorg-video-cirrus xserver-xorg-video-cyrix
15760 xserver-xorg-video-dummy xserver-xorg-video-fbdev
15761 xserver-xorg-video-glint xserver-xorg-video-i128
15762 xserver-xorg-video-i740 xserver-xorg-video-imstt
15763 xserver-xorg-video-intel xserver-xorg-video-mach64
15764 xserver-xorg-video-mga xserver-xorg-video-neomagic
15765 xserver-xorg-video-nsc xserver-xorg-video-nv
15766 xserver-xorg-video-openchrome xserver-xorg-video-r128
15767 xserver-xorg-video-radeon xserver-xorg-video-radeonhd
15768 xserver-xorg-video-rendition xserver-xorg-video-s3
15769 xserver-xorg-video-s3virge xserver-xorg-video-savage
15770 xserver-xorg-video-siliconmotion xserver-xorg-video-sis
15771 xserver-xorg-video-sisusb xserver-xorg-video-tdfx
15772 xserver-xorg-video-tga xserver-xorg-video-trident
15773 xserver-xorg-video-tseng xserver-xorg-video-v4l
15774 xserver-xorg-video-vesa xserver-xorg-video-vga
15775 xserver-xorg-video-vmware xserver-xorg-video-voodoo xulrunner-1.9</p>
15776
15777 <p><b>aptitude kde 192</b>
15778 <br>bluez-utils cpp-4.3 cupsddk-drivers cvs dcoprss dhcdbd
15779 djvulibre-desktop dosfstools eyesapplet fifteenapplet finger gettext
15780 ghostscript-x imlib-base imlib11 indi kandy karm kasteroids
15781 kaudiocreator kbackgammon kbstate kcoloredit kcontrol kcron kdat
15782 kdeadmin-kfile-plugins kdeartwork-misc kdeartwork-theme-window
15783 kdebase-bin-kde3 kdebase-kio-plugins kdeedu-data
15784 kdegraphics-kfile-plugins kdelirc kdemultimedia-kappfinder-data
15785 kdemultimedia-kfile-plugins kdenetwork-kfile-plugins
15786 kdepim-kfile-plugins kdepim-kio-plugins kdeprint kdesktop kdessh
15787 kdict kdnssd kdvi kedit keduca kenolaba kfax kfaxview kfouleggs
15788 kghostview khelpcenter khexedit kiconedit kitchensync klatin
15789 klickety kmailcvt kmenuedit kmid kmilo kmoon kmrml kodo kolourpaint
15790 kooka korn kpager kpdf kpercentage kpf kpilot kpoker kpovmodeler
15791 krec kregexpeditor ksayit ksim ksirc ksirtet ksmiletris ksmserver
15792 ksnake ksokoban ksplash ksvg ksysv ktip ktnef kuickshow kverbos
15793 kview kviewshell kvoctrain kwifimanager kwin kwin4 kworldclock
15794 kxsldbg libakode2 libao2 libarts1-akode libarts1-audiofile
15795 libarts1-mpeglib libarts1-xine libavahi-compat-libdnssd1
15796 libavahi-core5 libavc1394-0 libavcodec51 libbluetooth2
15797 libboost-python1.34.1 libcucul0 libcurl3 libcvsservice0 libdatrie0
15798 libdirectfb-1.0-0 libdjvulibre21 libdvdread3 libfaad0 libfreebob0
15799 libgail-common libgd2-noxpm libgraphviz4 libgsmme1c2a libgtkhtml2-0
15800 libicu38 libiec61883-0 libindex0 libiw29 libk3b3 libkcal2b libkcddb1
15801 libkdeedu3 libkdepim1a libkgantt0 libkiten1 libkleopatra1 libkmime2
15802 libkpathsea4 libkpimexchange1 libkpimidentities1 libkscan1
15803 libksieve0 libktnef1 liblockdev1 libltdl3 libmagick10 libmimelib1c2a
15804 libmozjs1d libmpcdec3 libneon27 libnm-util0 libopensync0 libpisock9
15805 libpoppler-glib3 libpoppler-qt2 libpoppler3 libraw1394-8 libsmbios2
15806 libssh2-1 libsuitesparse-3.1.0 libtalloc1 libtiff-tools
15807 libxalan2-java libxalan2-java-gcj libxcb-xlib0 libxerces2-java
15808 libxerces2-java-gcj libxtrap6 mpeglib networkstatus
15809 openoffice.org-writer2latex pmount poster psutils quanta quanta-data
15810 superkaramba svgalibg1 tex-common texlive-base texlive-base-bin
15811 texlive-common texlive-doc-base texlive-fonts-recommended
15812 xserver-xorg-video-cyrix xserver-xorg-video-imstt
15813 xserver-xorg-video-nsc xserver-xorg-video-v4l xserver-xorg-video-vga
15814 xulrunner-1.9</p>
15815
15816
15817 </div>
15818 <div class="tags">
15819
15820
15821 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
15822
15823
15824 </div>
15825 </div>
15826 <div class="padding"></div>
15827
15828 <div class="entry">
15829 <div class="title">
15830 <a href="http://www.hungry.com/~pere/blog/Automatic_upgrade_testing_from_Lenny_to_Squeeze.html">Automatic upgrade testing from Lenny to Squeeze</a>
15831 </div>
15832 <div class="date">
15833 11th June 2010
15834 </div>
15835 <div class="body">
15836 <p>The last few days I have done some upgrade testing in Debian, to
15837 see if the upgrade from Lenny to Squeeze will go smoothly. A few bugs
15838 have been discovered and reported in the process
15839 (<a href="http://bugs.debian.org/585410">#585410</a> in nagios3-cgi,
15840 <a href="http://bugs.debian.org/584879">#584879</a> already fixed in
15841 enscript and <a href="http://bugs.debian.org/584861">#584861</a> in
15842 kdebase-workspace-data), and to get a more regular testing going on, I
15843 am working on a script to automate the test.</p>
15844
15845 <p>The idea is to create a Lenny chroot and use tasksel to install a
15846 Gnome or KDE desktop installation inside the chroot before upgrading
15847 it. To ensure no services are started in the chroot, a policy-rc.d
15848 script is inserted. To make sure tasksel believe it is to install a
15849 desktop on a laptop, the tasksel tests are replaced in the chroot
15850 (only acceptable because this is a throw-away chroot).</p>
15851
15852 <p>A naive upgrade from Lenny to Squeeze using aptitude dist-upgrade
15853 currently always fail because udev refuses to upgrade with the kernel
15854 in Lenny, so to avoid that problem the file /etc/udev/kernel-upgrade
15855 is created. The bug report
15856 <a href="http://bugs.debian.org/566000">#566000</a> make me suspect
15857 this problem do not trigger in a chroot, but I touch the file anyway
15858 to make sure the upgrade go well. Testing on virtual and real
15859 hardware have failed me because of udev so far, and creating this file
15860 do the trick in such settings anyway. This is a
15861 <a href="http://www.linuxquestions.org/questions/debian-26/failed-dist-upgrade-due-to-udev-config_sysfs_deprecated-nonsense-804130/">known
15862 issue</a> and the current udev behaviour is intended by the udev
15863 maintainer because he lack the resources to rewrite udev to keep
15864 working with old kernels or something like that. I really wish the
15865 udev upstream would keep udev backwards compatible, to avoid such
15866 upgrade problem, but given that they fail to do so, I guess
15867 documenting the way out of this mess is the best option we got for
15868 Debian Squeeze.</p>
15869
15870 <p>Anyway, back to the task at hand, testing upgrades. This test
15871 script, which I call <tt>upgrade-test</tt> for now, is doing the
15872 trick:</p>
15873
15874 <blockquote><pre>
15875 #!/bin/sh
15876 set -ex
15877
15878 if [ "$1" ] ; then
15879 desktop=$1
15880 else
15881 desktop=gnome
15882 fi
15883
15884 from=lenny
15885 to=squeeze
15886
15887 exec &lt; /dev/null
15888 unset LANG
15889 mirror=http://ftp.skolelinux.org/debian
15890 tmpdir=chroot-$from-upgrade-$to-$desktop
15891 fuser -mv .
15892 debootstrap $from $tmpdir $mirror
15893 chroot $tmpdir aptitude update
15894 cat > $tmpdir/usr/sbin/policy-rc.d &lt;&lt;EOF
15895 #!/bin/sh
15896 exit 101
15897 EOF
15898 chmod a+rx $tmpdir/usr/sbin/policy-rc.d
15899 exit_cleanup() {
15900 umount $tmpdir/proc
15901 }
15902 mount -t proc proc $tmpdir/proc
15903 # Make sure proc is unmounted also on failure
15904 trap exit_cleanup EXIT INT
15905
15906 chroot $tmpdir aptitude -y install debconf-utils
15907
15908 # Make sure tasksel autoselection trigger. It need the test scripts
15909 # to return the correct answers.
15910 echo tasksel tasksel/desktop multiselect $desktop | \
15911 chroot $tmpdir debconf-set-selections
15912
15913 # Include the desktop and laptop task
15914 for test in desktop laptop ; do
15915 echo > $tmpdir/usr/lib/tasksel/tests/$test &lt;&lt;EOF
15916 #!/bin/sh
15917 exit 2
15918 EOF
15919 chmod a+rx $tmpdir/usr/lib/tasksel/tests/$test
15920 done
15921
15922 DEBIAN_FRONTEND=noninteractive
15923 DEBIAN_PRIORITY=critical
15924 export DEBIAN_FRONTEND DEBIAN_PRIORITY
15925 chroot $tmpdir tasksel --new-install
15926
15927 echo deb $mirror $to main > $tmpdir/etc/apt/sources.list
15928 chroot $tmpdir aptitude update
15929 touch $tmpdir/etc/udev/kernel-upgrade
15930 chroot $tmpdir aptitude -y dist-upgrade
15931 fuser -mv
15932 </pre></blockquote>
15933
15934 <p>I suspect it would be useful to test upgrades with both apt-get and
15935 with aptitude, but I have not had time to look at how they behave
15936 differently so far. I hope to get a cron job running to do the test
15937 regularly and post the result on the web. The Gnome upgrade currently
15938 work, while the KDE upgrade fail because of the bug in
15939 kdebase-workspace-data</p>
15940
15941 <p>I am not quite sure what kind of extract from the huge upgrade logs
15942 (KDE 167 KiB, Gnome 516 KiB) it make sense to include in this blog
15943 post, so I will refrain from trying. I can report that for Gnome,
15944 aptitude report 760 packages upgraded, 448 newly installed, 129 to
15945 remove and 1 not upgraded and 1024MB need to be downloaded while for
15946 KDE the same numbers are 702 packages upgraded, 507 newly installed,
15947 193 to remove and 0 not upgraded and 1117MB need to be downloaded</p>
15948
15949 <p>I am very happy to notice that the Gnome desktop + laptop upgrade
15950 is able to migrate to dependency based boot sequencing and parallel
15951 booting without a hitch. Was unsure if there were still bugs with
15952 packages failing to clean up their obsolete init.d script during
15953 upgrades, and no such problem seem to affect the Gnome desktop+laptop
15954 packages.</p>
15955
15956 </div>
15957 <div class="tags">
15958
15959
15960 Tags: <a href="http://www.hungry.com/~pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
15961
15962
15963 </div>
15964 </div>
15965 <div class="padding"></div>
15966
15967 <div class="entry">
15968 <div class="title">
15969 <a href="http://www.hungry.com/~pere/blog/Upstart_or_sysvinit___as_init_d_scripts_see_it.html">Upstart or sysvinit - as init.d scripts see it</a>
15970 </div>
15971 <div class="date">
15972 6th June 2010
15973 </div>
15974 <div class="body">
15975 <p>If Debian is to migrate to upstart on Linux, I expect some init.d
15976 scripts to migrate (some of) their operations to upstart job while
15977 keeping the init.d for hurd and kfreebsd. The packages with such
15978 needs will need a way to get their init.d scripts to behave
15979 differently when used with sysvinit and with upstart. Because of
15980 this, I had a look at the environment variables set when a init.d
15981 script is running under upstart, and when it is not.</p>
15982
15983 <p>With upstart, I notice these environment variables are set when a
15984 script is started from rcS.d/ (ignoring some irrelevant ones like
15985 COLUMNS):</p>
15986
15987 <blockquote><pre>
15988 DEFAULT_RUNLEVEL=2
15989 previous=N
15990 PREVLEVEL=
15991 RUNLEVEL=
15992 runlevel=S
15993 UPSTART_EVENTS=startup
15994 UPSTART_INSTANCE=
15995 UPSTART_JOB=rc-sysinit
15996 </pre></blockquote>
15997
15998 <p>With sysvinit, these environment variables are set for the same
15999 script.</p>
16000
16001 <blockquote><pre>
16002 INIT_VERSION=sysvinit-2.88
16003 previous=N
16004 PREVLEVEL=N
16005 RUNLEVEL=S
16006 runlevel=S
16007 </pre></blockquote>
16008
16009 <p>The RUNLEVEL and PREVLEVEL environment variables passed on from
16010 sysvinit are not set by upstart. Not sure if it is intentional or not
16011 to not be compatible with sysvinit in this regard.</p>
16012
16013 <p>For scripts needing to behave differently when upstart is used,
16014 looking for the UPSTART_JOB environment variable seem to be a good
16015 choice.</p>
16016
16017 </div>
16018 <div class="tags">
16019
16020
16021 Tags: <a href="http://www.hungry.com/~pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
16022
16023
16024 </div>
16025 </div>
16026 <div class="padding"></div>
16027
16028 <div class="entry">
16029 <div class="title">
16030 <a href="http://www.hungry.com/~pere/blog/A_manual_for_standards_wars___.html">A manual for standards wars...</a>
16031 </div>
16032 <div class="date">
16033 6th June 2010
16034 </div>
16035 <div class="body">
16036 <p>Via the
16037 <a href="http://feedproxy.google.com/~r/robweir/antic-atom/~3/QzU4RgoAGMg/weekly-links-10.html">blog
16038 of Rob Weir</a> I came across the very interesting essay named
16039 <a href="http://faculty.haas.berkeley.edu/shapiro/wars.pdf">The Art of
16040 Standards Wars</a> (PDF 25 pages). I recommend it for everyone
16041 following the standards wars of today.</p>
16042
16043 </div>
16044 <div class="tags">
16045
16046
16047 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/standard">standard</a>.
16048
16049
16050 </div>
16051 </div>
16052 <div class="padding"></div>
16053
16054 <div class="entry">
16055 <div class="title">
16056 <a href="http://www.hungry.com/~pere/blog/Sitesummary_tip__Listing_computer_hardware_models_used_at_site.html">Sitesummary tip: Listing computer hardware models used at site</a>
16057 </div>
16058 <div class="date">
16059 3rd June 2010
16060 </div>
16061 <div class="body">
16062 <p>When using sitesummary at a site to track machines, it is possible
16063 to get a list of the machine types in use thanks to the DMI
16064 information extracted from each machine. The script to do so is
16065 included in the sitesummary package, and here is example output from
16066 the Skolelinux build servers:</p>
16067
16068 <blockquote><pre>
16069 maintainer:~# /usr/lib/sitesummary/hardware-model-summary
16070 vendor count
16071 Dell Computer Corporation 1
16072 PowerEdge 1750 1
16073 IBM 1
16074 eserver xSeries 345 -[8670M1X]- 1
16075 Intel 2
16076 [no-dmi-info] 3
16077 maintainer:~#
16078 </pre></blockquote>
16079
16080 <p>The quality of the report depend on the quality of the DMI tables
16081 provided in each machine. Here there are Intel machines without model
16082 information listed with Intel as vendor and no model, and virtual Xen
16083 machines listed as [no-dmi-info]. One can add -l as a command line
16084 option to list the individual machines.</p>
16085
16086 <p>A larger list is
16087 <a href="http://narvikskolen.no/sitesummary/">available from the the
16088 city of Narvik</a>, which uses Skolelinux on all their shools and also
16089 provide the basic sitesummary report publicly. In their report there
16090 are ~1400 machines. I know they use both Ubuntu and Skolelinux on
16091 their machines, and as sitesummary is available in both distributions,
16092 it is trivial to get all of them to report to the same central
16093 collector.</p>
16094
16095 </div>
16096 <div class="tags">
16097
16098
16099 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/sitesummary">sitesummary</a>.
16100
16101
16102 </div>
16103 </div>
16104 <div class="padding"></div>
16105
16106 <div class="entry">
16107 <div class="title">
16108 <a href="http://www.hungry.com/~pere/blog/KDM_fail_at_boot_with_NVidia_cards___and_no_one_try_to_fix_it_.html">KDM fail at boot with NVidia cards - and no one try to fix it?</a>
16109 </div>
16110 <div class="date">
16111 1st June 2010
16112 </div>
16113 <div class="body">
16114 <p>It is strange to watch how a bug in Debian causing KDM to fail to
16115 start at boot when an NVidia video card is used is handled. The
16116 problem seem to be that the nvidia X.org driver uses a long time to
16117 initialize, and this duration is longer than kdm is configured to
16118 wait.</p>
16119
16120 <p>I came across two bugs related to this issue,
16121 <a href="http://bugs.debian.org/583312">#583312</a> initially filed
16122 against initscripts and passed on to nvidia-glx when it became obvious
16123 that the nvidia drivers were involved, and
16124 <a href="http://bugs.debian.org/524751">#524751</a> initially filed against
16125 kdm and passed on to src:nvidia-graphics-drivers for unknown reasons.</p>
16126
16127 <p>To me, it seem that no-one is interested in actually solving the
16128 problem nvidia video card owners experience and make sure the Debian
16129 distribution work out of the box for these users. The nvidia driver
16130 maintainers expect kdm to be set up to wait longer, while kdm expect
16131 the nvidia driver maintainers to fix the driver to start faster, and
16132 while they wait for each other I guess the users end up switching to a
16133 distribution that work for them. I have no idea what the solution is,
16134 but I am pretty sure that waiting for each other is not it.</p>
16135
16136 <p>I wonder why we end up handling bugs this way.</p>
16137
16138 </div>
16139 <div class="tags">
16140
16141
16142 Tags: <a href="http://www.hungry.com/~pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
16143
16144
16145 </div>
16146 </div>
16147 <div class="padding"></div>
16148
16149 <div class="entry">
16150 <div class="title">
16151 <a href="http://www.hungry.com/~pere/blog/Parallellized_boot_seem_to_hold_up_well_in_Debian_testing.html">Parallellized boot seem to hold up well in Debian/testing</a>
16152 </div>
16153 <div class="date">
16154 27th May 2010
16155 </div>
16156 <div class="body">
16157 <p>A few days ago, parallel booting was enabled in Debian/testing.
16158 The feature seem to hold up pretty well, but three fairly serious
16159 issues are known and should be solved:
16160
16161 <p><ul>
16162
16163 <li>The wicd package seen to
16164 <a href="http://bugs.debian.org/508289">break NFS mounting</a> and
16165 <a href="http://bugs.debian.org/581586">network setup</a> when
16166 parallel booting is enabled. No idea why, but the wicd maintainer
16167 seem to be on the case.</li>
16168
16169 <li>The nvidia X driver seem to
16170 <a href="http://bugs.debian.org/583312">have a race condition</a>
16171 triggered more easily when parallel booting is in effect. The
16172 maintainer is on the case.</li>
16173
16174 <li>The sysv-rc package fail to properly enable dependency based boot
16175 sequencing (the shutdown is broken) when old file-rc users
16176 <a href="http://bugs.debian.org/575080">try to switch back</a> to
16177 sysv-rc. One way to solve it would be for file-rc to create
16178 /etc/init.d/.legacy-bootordering, and another is to try to make
16179 sysv-rc more robust. Will investigate some more and probably upload a
16180 workaround in sysv-rc to help those trying to move from file-rc to
16181 sysv-rc get a working shutdown.</li>
16182
16183 </ul></p>
16184
16185 <p>All in all not many surprising issues, and all of them seem
16186 solvable before Squeeze is released. In addition to these there are
16187 some packages with bugs in their dependencies and run level settings,
16188 which I expect will be fixed in a reasonable time span.</p>
16189
16190 <p>If you report any problems with dependencies in init.d scripts to
16191 the BTS, please usertag the report to get it to show up at
16192 <a href="http://bugs.debian.org/cgi-bin/pkgreport.cgi?users=initscripts-ng-devel@lists.alioth.debian.org">the
16193 list of usertagged bugs related to this</a>.</p>
16194
16195 <p>Update: Correct bug number to file-rc issue.</p>
16196
16197 </div>
16198 <div class="tags">
16199
16200
16201 Tags: <a href="http://www.hungry.com/~pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
16202
16203
16204 </div>
16205 </div>
16206 <div class="padding"></div>
16207
16208 <div class="entry">
16209 <div class="title">
16210 <a href="http://www.hungry.com/~pere/blog/More_flexible_firmware_handling_in_debian_installer.html">More flexible firmware handling in debian-installer</a>
16211 </div>
16212 <div class="date">
16213 22nd May 2010
16214 </div>
16215 <div class="body">
16216 <p>After a long break from debian-installer development, I finally
16217 found time today to return to the project. Having to spend less time
16218 working dependency based boot in debian, as it is almost complete now,
16219 definitely helped freeing some time.</p>
16220
16221 <p>A while back, I ran into a problem while working on Debian Edu. We
16222 include some firmware packages on the Debian Edu CDs, those needed to
16223 get disk and network controllers working. Without having these
16224 firmware packages available during installation, it is impossible to
16225 install Debian Edu on the given machine, and because our target group
16226 are non-technical people, asking them to provide firmware packages on
16227 an external medium is a support pain. Initially, I expected it to be
16228 enough to include the firmware packages on the CD to get
16229 debian-installer to find and use them. This proved to be wrong.
16230 Next, I hoped it was enough to symlink the relevant firmware packages
16231 to some useful location on the CD (tried /cdrom/ and
16232 /cdrom/firmware/). This also proved to not work, and at this point I
16233 found time to look at the debian-installer code to figure out what was
16234 going to work.</p>
16235
16236 <p>The firmware loading code is in the hw-detect package, and a closer
16237 look revealed that it would only look for firmware packages outside
16238 the installation media, so the CD was never checked for firmware
16239 packages. It would only check USB sticks, floppies and other
16240 "external" media devices. Today I changed it to also look in the
16241 /cdrom/firmware/ directory on the mounted CD or DVD, which should
16242 solve the problem I ran into with Debian edu. I also changed it to
16243 look in /firmware/, to make sure the installer also find firmware
16244 provided in the initrd when booting the installer via PXE, to allow us
16245 to provide the same feature in the PXE setup included in Debian
16246 Edu.</p>
16247
16248 <p>To make sure firmware deb packages with a license questions are not
16249 activated without asking if the license is accepted, I extended
16250 hw-detect to look for preinst scripts in the firmware packages, and
16251 run these before activating the firmware during installation. The
16252 license question is asked using debconf in the preinst, so this should
16253 solve the issue for the firmware packages I have looked at so far.</p>
16254
16255 <p>If you want to discuss the details of these features, please
16256 contact us on debian-boot@lists.debian.org.</p>
16257
16258 </div>
16259 <div class="tags">
16260
16261
16262 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
16263
16264
16265 </div>
16266 </div>
16267 <div class="padding"></div>
16268
16269 <div class="entry">
16270 <div class="title">
16271 <a href="http://www.hungry.com/~pere/blog/Parallellized_boot_is_now_the_default_in_Debian_unstable.html">Parallellized boot is now the default in Debian/unstable</a>
16272 </div>
16273 <div class="date">
16274 14th May 2010
16275 </div>
16276 <div class="body">
16277 <p>Since this evening, parallel booting is the default in
16278 Debian/unstable for machines using dependency based boot sequencing.
16279 Apparently the testing of concurrent booting has been wider than
16280 expected, if I am to believe the
16281 <a href="http://lists.debian.org/debian-devel/2010/05/msg00122.html">input
16282 on debian-devel@</a>, and I concluded a few days ago to move forward
16283 with the feature this weekend, to give us some time to detect any
16284 remaining problems before Squeeze is frozen. If serious problems are
16285 detected, it is simple to change the default back to sequential boot.
16286 The upload of the new sysvinit package also activate a new upstream
16287 version.</p>
16288
16289 More information about
16290 <a href="http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot">dependency
16291 based boot sequencing</a> is available from the Debian wiki. It is
16292 currently possible to disable parallel booting when one run into
16293 problems caused by it, by adding this line to /etc/default/rcS:</p>
16294
16295 <blockquote><pre>
16296 CONCURRENCY=none
16297 </pre></blockquote>
16298
16299 <p>If you report any problems with dependencies in init.d scripts to
16300 the BTS, please usertag the report to get it to show up at
16301 <a href="http://bugs.debian.org/cgi-bin/pkgreport.cgi?users=initscripts-ng-devel@lists.alioth.debian.org">the
16302 list of usertagged bugs related to this</a>.</p>
16303
16304 </div>
16305 <div class="tags">
16306
16307
16308 Tags: <a href="http://www.hungry.com/~pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
16309
16310
16311 </div>
16312 </div>
16313 <div class="padding"></div>
16314
16315 <div class="entry">
16316 <div class="title">
16317 <a href="http://www.hungry.com/~pere/blog/Sitesummary_tip__Listing_MAC_address_of_all_clients.html">Sitesummary tip: Listing MAC address of all clients</a>
16318 </div>
16319 <div class="date">
16320 14th May 2010
16321 </div>
16322 <div class="body">
16323 <p>In the recent Debian Edu versions, the
16324 <a href="http://wiki.debian.org/DebianEdu/HowTo/SiteSummary">sitesummary
16325 system</a> is used to keep track of the machines in the school
16326 network. Each machine will automatically report its status to the
16327 central server after boot and once per night. The network setup is
16328 also reported, and using this information it is possible to get the
16329 MAC address of all network interfaces in the machines. This is useful
16330 to update the DHCP configuration.</p>
16331
16332 <p>To give some idea how to use sitesummary, here is a one-liner to
16333 ist all MAC addresses of all machines reporting to sitesummary. Run
16334 this on the collector host:</p>
16335
16336 <blockquote><pre>
16337 perl -MSiteSummary -e 'for_all_hosts(sub { print join(" ", get_macaddresses(shift)), "\n"; });'
16338 </pre></blockquote>
16339
16340 <p>This will list all MAC addresses assosiated with all machine, one
16341 line per machine and with space between the MAC addresses.</p>
16342
16343 <p>To allow system administrators easier job at adding static DHCP
16344 addresses for hosts, it would be possible to extend this to fetch
16345 machine information from sitesummary and update the DHCP and DNS
16346 tables in LDAP using this information. Such tool is unfortunately not
16347 written yet.</p>
16348
16349 </div>
16350 <div class="tags">
16351
16352
16353 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/sitesummary">sitesummary</a>.
16354
16355
16356 </div>
16357 </div>
16358 <div class="padding"></div>
16359
16360 <div class="entry">
16361 <div class="title">
16362 <a href="http://www.hungry.com/~pere/blog/systemd__an_interesting_alternative_to_upstart.html">systemd, an interesting alternative to upstart</a>
16363 </div>
16364 <div class="date">
16365 13th May 2010
16366 </div>
16367 <div class="body">
16368 <p>The last few days a new boot system called
16369 <a href="http://www.freedesktop.org/wiki/Software/systemd">systemd</a>
16370 has been
16371 <a href="http://0pointer.de/blog/projects/systemd.html">introduced</a>
16372
16373 to the free software world. I have not yet had time to play around
16374 with it, but it seem to be a very interesting alternative to
16375 <a href="http://upstart.ubuntu.com/">upstart</a>, and might prove to be
16376 a good alternative for Debian when we are able to switch to an event
16377 based boot system. Tollef is
16378 <a href="http://bugs.debian.org/580814">in the process</a> of getting
16379 systemd into Debian, and I look forward to seeing how well it work. I
16380 like the fact that systemd handles init.d scripts with dependency
16381 information natively, allowing them to run in parallel where upstart
16382 at the moment do not.</p>
16383
16384 <p>Unfortunately do systemd have the same problem as upstart regarding
16385 platform support. It only work on recent Linux kernels, and also need
16386 some new kernel features enabled to function properly. This means
16387 kFreeBSD and Hurd ports of Debian will need a port or a different boot
16388 system. Not sure how that will be handled if systemd proves to be the
16389 way forward.</p>
16390
16391 <p>In the mean time, based on the
16392 <a href="http://lists.debian.org/debian-devel/2010/05/msg00122.html">input
16393 on debian-devel@</a> regarding parallel booting in Debian, I have
16394 decided to enable full parallel booting as the default in Debian as
16395 soon as possible (probably this weekend or early next week), to see if
16396 there are any remaining serious bugs in the init.d dependencies. A
16397 new version of the sysvinit package implementing this change is
16398 already in experimental. If all go well, Squeeze will be released
16399 with parallel booting enabled by default.</p>
16400
16401 </div>
16402 <div class="tags">
16403
16404
16405 Tags: <a href="http://www.hungry.com/~pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nuug">nuug</a>.
16406
16407
16408 </div>
16409 </div>
16410 <div class="padding"></div>
16411
16412 <div class="entry">
16413 <div class="title">
16414 <a href="http://www.hungry.com/~pere/blog/Parallellizing_the_boot_in_Debian_Squeeze___ready_for_wider_testing.html">Parallellizing the boot in Debian Squeeze - ready for wider testing</a>
16415 </div>
16416 <div class="date">
16417 6th May 2010
16418 </div>
16419 <div class="body">
16420 <p>These days, the init.d script dependencies in Squeeze are quite
16421 complete, so complete that it is actually possible to run all the
16422 init.d scripts in parallell based on these dependencies. If you want
16423 to test your Squeeze system, make sure
16424 <a href="http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot">dependency
16425 based boot sequencing</a> is enabled, and add this line to
16426 /etc/default/rcS:</p>
16427
16428 <blockquote><pre>
16429 CONCURRENCY=makefile
16430 </pre></blockquote>
16431
16432 <p>That is it. It will cause sysv-rc to use the startpar tool to run
16433 scripts in parallel using the dependency information stored in
16434 /etc/init.d/.depend.boot, /etc/init.d/.depend.start and
16435 /etc/init.d/.depend.stop to order the scripts. Startpar is configured
16436 to try to start the kdm and gdm scripts as early as possible, and will
16437 start the facilities required by kdm or gdm as early as possible to
16438 make this happen.</p>
16439
16440 <p>Give it a try, and see if you like the result. If some services
16441 fail to start properly, it is most likely because they have incomplete
16442 init.d script dependencies in their startup script (or some of their
16443 dependent scripts have incomplete dependencies). Report bugs and get
16444 the package maintainers to fix it. :)</p>
16445
16446 <p>Running scripts in parallel could be the default in Debian when we
16447 manage to get the init.d script dependencies complete and correct. I
16448 expect we will get there in Squeeze+1, if we get manage to test and
16449 fix the remaining issues.</p>
16450
16451 <p>If you report any problems with dependencies in init.d scripts to
16452 the BTS, please usertag the report to get it to show up at
16453 <a href="http://bugs.debian.org/cgi-bin/pkgreport.cgi?users=initscripts-ng-devel@lists.alioth.debian.org">the
16454 list of usertagged bugs related to this</a>.</p>
16455
16456 </div>
16457 <div class="tags">
16458
16459
16460 Tags: <a href="http://www.hungry.com/~pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
16461
16462
16463 </div>
16464 </div>
16465 <div class="padding"></div>
16466
16467 <div class="entry">
16468 <div class="title">
16469 <a href="http://www.hungry.com/~pere/blog/Debian_has_switched_to_dependency_based_boot_sequencing.html">Debian has switched to dependency based boot sequencing</a>
16470 </div>
16471 <div class="date">
16472 27th July 2009
16473 </div>
16474 <div class="body">
16475 <p>Since this evening, with the upload of sysvinit version 2.87dsf-2,
16476 and the upload of insserv version 1.12.0-10 yesterday, Debian unstable
16477 have been migrated to using dependency based boot sequencing. This
16478 conclude work me and others have been doing for the last three days.
16479 It feels great to see this finally part of the default Debian
16480 installation. Now we just need to weed out the last few problems that
16481 are bound to show up, to get everything ready for Squeeze.</p>
16482
16483 <p>The next step is migrating /sbin/init from sysvinit to upstart, and
16484 fixing the more fundamental problem of handing the event based
16485 non-predictable kernel in the early boot.</p>
16486
16487 </div>
16488 <div class="tags">
16489
16490
16491 Tags: <a href="http://www.hungry.com/~pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nuug">nuug</a>.
16492
16493
16494 </div>
16495 </div>
16496 <div class="padding"></div>
16497
16498 <div class="entry">
16499 <div class="title">
16500 <a href="http://www.hungry.com/~pere/blog/Taking_over_sysvinit_development.html">Taking over sysvinit development</a>
16501 </div>
16502 <div class="date">
16503 22nd July 2009
16504 </div>
16505 <div class="body">
16506 <p>After several years of frustration with the lack of activity from
16507 the existing sysvinit upstream developer, I decided a few weeks ago to
16508 take over the package and become the new upstream. The number of
16509 patches to track for the Debian package was becoming a burden, and the
16510 lack of synchronization between the distribution made it hard to keep
16511 the package up to date.</p>
16512
16513 <p>On the new sysvinit team is the SuSe maintainer Dr. Werner Fink,
16514 and my Debian co-maintainer Kel Modderman. About 10 days ago, I made
16515 a new upstream tarball with version number 2.87dsf (for Debian, SuSe
16516 and Fedora), based on the patches currently in use in these
16517 distributions. We Debian maintainers plan to move to this tarball as
16518 the new upstream as soon as we find time to do the merge. Since the
16519 new tarball was created, we agreed with Werner at SuSe to make a new
16520 upstream project at <a href="http://savannah.nongnu.org/">Savannah</a>, and continue
16521 development there. The project is registered and currently waiting
16522 for approval by the Savannah administrators, and as soon as it is
16523 approved, we will import the old versions from svn and continue
16524 working on the future release.</p>
16525
16526 <p>It is a bit ironic that this is done now, when some of the involved
16527 distributions are moving to upstart as a syvinit replacement.</p>
16528
16529 </div>
16530 <div class="tags">
16531
16532
16533 Tags: <a href="http://www.hungry.com/~pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nuug">nuug</a>.
16534
16535
16536 </div>
16537 </div>
16538 <div class="padding"></div>
16539
16540 <div class="entry">
16541 <div class="title">
16542 <a href="http://www.hungry.com/~pere/blog/Debian_boots_quicker_and_quicker.html">Debian boots quicker and quicker</a>
16543 </div>
16544 <div class="date">
16545 24th June 2009
16546 </div>
16547 <div class="body">
16548 <p>I spent Monday and tuesday this week in London with a lot of the
16549 people involved in the boot system on Debian and Ubuntu, to see if we
16550 could find more ways to speed up the boot system. This was an Ubuntu
16551 funded
16552 <a href="https://wiki.ubuntu.com/FoundationsTeam/BootPerformance/DebianUbuntuSprint">developer
16553 gathering</a>. It was quite productive. We also discussed the future
16554 of boot systems, and ways to handle the increasing number of boot
16555 issues introduced by the Linux kernel becoming more and more
16556 asynchronous and event base. The Ubuntu approach using udev and
16557 upstart might be a good way forward. Time will show.</p>
16558
16559 <p>Anyway, there are a few ways at the moment to speed up the boot
16560 process in Debian. All of these should be applied to get a quick
16561 boot:</p>
16562
16563 <ul>
16564
16565 <li>Use dash as /bin/sh.</li>
16566
16567 <li>Disable the init.d/hwclock*.sh scripts and make sure the hardware
16568 clock is in UTC.</li>
16569
16570 <li>Install and activate the insserv package to enable
16571 <a href="http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot">dependency
16572 based boot sequencing</a>, and enable concurrent booting.</li>
16573
16574 </ul>
16575
16576 These points are based on the Google summer of code work done by
16577 <a href="http://initscripts-ng.alioth.debian.org/soc2006-bootsystem/">Carlos
16578 Villegas</a>.
16579
16580 <p>Support for makefile-style concurrency during boot was uploaded to
16581 unstable yesterday. When we tested it, we were able to cut 6 seconds
16582 from the boot sequence. It depend on very correct dependency
16583 declaration in all init.d scripts, so I expect us to find edge cases
16584 where the dependences in some scripts are slightly wrong when we start
16585 using this.</p>
16586
16587 <p>On our IRC channel for this effort, #pkg-sysvinit, a new idea was
16588 introduced by Raphael Geissert today, one that could affect the
16589 startup speed as well. Instead of starting some scripts concurrently
16590 from rcS.d/ and another set of scripts from rc2.d/, it would be
16591 possible to run a of them in the same process. A quick way to test
16592 this would be to enable insserv and run 'mv /etc/rc2.d/S* /etc/rcS.d/;
16593 insserv'. Will need to test if that work. :)</p>
16594
16595 </div>
16596 <div class="tags">
16597
16598
16599 Tags: <a href="http://www.hungry.com/~pere/blog/tags/bootsystem">bootsystem</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
16600
16601
16602 </div>
16603 </div>
16604 <div class="padding"></div>
16605
16606 <div class="entry">
16607 <div class="title">
16608 <a href="http://www.hungry.com/~pere/blog/BSAs_p_stander_om_piratkopiering_m_ter_motstand.html">BSAs påstander om piratkopiering møter motstand</a>
16609 </div>
16610 <div class="date">
16611 17th May 2009
16612 </div>
16613 <div class="body">
16614 <p>Hvert år de siste årene har BSA, lobbyfronten til de store
16615 programvareselskapene som Microsoft og Apple, publisert en rapport der
16616 de gjetter på hvor mye piratkopiering påfører i tapte inntekter i
16617 ulike land rundt om i verden. Resultatene er tendensiøse. For noen
16618 dager siden kom
16619 <a href="http://global.bsa.org/globalpiracy2008/studies/globalpiracy2008.pdf">siste
16620 rapport</a>, og det er flere kritiske kommentarer publisert de siste
16621 dagene. Et spesielt interessant kommentar fra Sverige,
16622 <a href="http://www.idg.se/2.1085/1.229795/bsa-hoftade-sverigesiffror">BSA
16623 höftade Sverigesiffror</a>, oppsummeres slik:</p>
16624
16625 <blockquote>
16626 I sin senaste rapport slår BSA fast att 25 procent av all mjukvara i
16627 Sverige är piratkopierad. Det utan att ha pratat med ett enda svenskt
16628 företag. "Man bör nog kanske inte se de här siffrorna som helt
16629 exakta", säger BSAs Sverigechef John Hugosson.
16630 </blockquote>
16631
16632 <p>Mon tro om de er like metodiske når de gjetter på andelen piratkopiering i Norge? To andre kommentarer er <a
16633 href="http://www.vnunet.com/vnunet/comment/2242134/bsa-piracy-figures-shot-reality">BSA
16634 piracy figures need a shot of reality</a> og <a
16635 href="http://www.michaelgeist.ca/content/view/3958/125/">Does The WIPO
16636 Copyright Treaty Work?</a></p>
16637
16638 <p>Fant lenkene via <a
16639 href="http://tech.slashdot.org/article.pl?sid=09/05/17/1632242">oppslag
16640 på Slashdot</a>.</p>
16641
16642 </div>
16643 <div class="tags">
16644
16645
16646 Tags: <a href="http://www.hungry.com/~pere/blog/tags/bsa">bsa</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/fildeling">fildeling</a>, <a href="http://www.hungry.com/~pere/blog/tags/norsk">norsk</a>, <a href="http://www.hungry.com/~pere/blog/tags/nuug">nuug</a>, <a href="http://www.hungry.com/~pere/blog/tags/opphavsrett">opphavsrett</a>, <a href="http://www.hungry.com/~pere/blog/tags/personvern">personvern</a>.
16647
16648
16649 </div>
16650 </div>
16651 <div class="padding"></div>
16652
16653 <div class="entry">
16654 <div class="title">
16655 <a href="http://www.hungry.com/~pere/blog/IDG_mener_linux_i_servermarkedet_vil_vokse_med_21__i_2009.html">IDG mener linux i servermarkedet vil vokse med 21% i 2009</a>
16656 </div>
16657 <div class="date">
16658 7th May 2009
16659 </div>
16660 <div class="body">
16661 <p>Kom over
16662 <a href="http://news.cnet.com/8301-13505_3-10216873-16.html">interessante
16663 tall</a> fra IDG om utviklingen av linuxservermarkedet. Fikk meg til
16664 å tenke på antall tjenermaskiner ved Universitetet i Oslo der jeg
16665 jobber til daglig. En rask opptelling forteller meg at vi har 490
16666 (61%) fysiske unix-tjener (mest linux men også noen solaris) og 196
16667 (25%) windowstjenere, samt 112 (14%) virtuelle unix-tjenere. Med den
16668 bakgrunnskunnskapen kan jeg godt tro at IDG er inne på noe.</p>
16669
16670 </div>
16671 <div class="tags">
16672
16673
16674 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/norsk">norsk</a>, <a href="http://www.hungry.com/~pere/blog/tags/nuug">nuug</a>.
16675
16676
16677 </div>
16678 </div>
16679 <div class="padding"></div>
16680
16681 <div class="entry">
16682 <div class="title">
16683 <a href="http://www.hungry.com/~pere/blog/Kryptert_harddisk___naturligvis.html">Kryptert harddisk - naturligvis</a>
16684 </div>
16685 <div class="date">
16686 2nd May 2009
16687 </div>
16688 <div class="body">
16689 <p><a href="http://www.dagensit.no/trender/article1658676.ece">Dagens
16690 IT melder</a> at Intel hevder at det er dyrt å miste en datamaskin,
16691 når en tar tap av arbeidstid, fortrolige dokumenter,
16692 personopplysninger og alt annet det innebærer. Det er ingen tvil om
16693 at det er en kostbar affære å miste sin datamaskin, og det er årsaken
16694 til at jeg har kryptert harddisken på både kontormaskinen og min
16695 bærbare. Begge inneholder personopplysninger jeg ikke ønsker skal
16696 komme på avveie, den første informasjon relatert til jobben min ved
16697 Universitetet i Oslo, og den andre relatert til blant annet
16698 foreningsarbeide. Kryptering av diskene gjør at det er lite
16699 sannsynlig at dophoder som kan finne på å rappe maskinene får noe ut
16700 av dem. Maskinene låses automatisk etter noen minutter uten bruk,
16701 og en reboot vil gjøre at de ber om passord før de vil starte opp.
16702 Jeg bruker Debian på begge maskinene, og installasjonssystemet der
16703 gjør det trivielt å sette opp krypterte disker. Jeg har LVM på toppen
16704 av krypterte partisjoner, slik at alt av datapartisjoner er kryptert.
16705 Jeg anbefaler alle å kryptere diskene på sine bærbare. Kostnaden når
16706 det er gjort slik jeg gjør det er minimale, og gevinstene er
16707 betydelige. En bør dog passe på passordet. Hvis det går tapt, må
16708 maskinen reinstalleres og alt er tapt.</p>
16709
16710 <p>Krypteringen vil ikke stoppe kompetente angripere som f.eks. kjøler
16711 ned minnebrikkene før maskinen rebootes med programvare for å hente ut
16712 krypteringsnøklene. Kostnaden med å forsvare seg mot slike angripere
16713 er for min del høyere enn gevinsten. Jeg tror oddsene for at
16714 f.eks. etteretningsorganisasjoner har glede av å titte på mine
16715 maskiner er minimale, og ulempene jeg ville oppnå ved å forsøke å
16716 gjøre det vanskeligere for angripere med kompetanse og ressurser er
16717 betydelige.</p>
16718
16719 </div>
16720 <div class="tags">
16721
16722
16723 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/norsk">norsk</a>, <a href="http://www.hungry.com/~pere/blog/tags/nuug">nuug</a>, <a href="http://www.hungry.com/~pere/blog/tags/sikkerhet">sikkerhet</a>.
16724
16725
16726 </div>
16727 </div>
16728 <div class="padding"></div>
16729
16730 <div class="entry">
16731 <div class="title">
16732 <a href="http://www.hungry.com/~pere/blog/Two_projects_that_have_improved_the_quality_of_free_software_a_lot.html">Two projects that have improved the quality of free software a lot</a>
16733 </div>
16734 <div class="date">
16735 2nd May 2009
16736 </div>
16737 <div class="body">
16738 <p>There are two software projects that have had huge influence on the
16739 quality of free software, and I wanted to mention both in case someone
16740 do not yet know them.</p>
16741
16742 <p>The first one is <a href="http://valgrind.org/">valgrind</a>, a
16743 tool to detect and expose errors in the memory handling of programs.
16744 It is easy to use, all one need to do is to run 'valgrind program',
16745 and it will report any problems on stdout. It is even better if the
16746 program include debug information. With debug information, it is able
16747 to report the source file name and line number where the problem
16748 occurs. It can report things like 'reading past memory block in file
16749 X line N, the memory block was allocated in file Y, line M', and
16750 'using uninitialised value in control logic'. This tool has made it
16751 trivial to investigate reproducible crash bugs in programs, and have
16752 reduced the number of this kind of bugs in free software a lot.
16753
16754 <p>The second one is
16755 <a href="http://en.wikipedia.org/wiki/Coverity">Coverity</a> which is
16756 a source code checker. It is able to process the source of a program
16757 and find problems in the logic without running the program. It
16758 started out as the Stanford Checker and became well known when it was
16759 used to find bugs in the Linux kernel. It is now a commercial tool
16760 and the company behind it is running
16761 <a href="http://www.scan.coverity.com/">a community service</a> for the
16762 free software community, where a lot of free software projects get
16763 their source checked for free. Several thousand defects have been
16764 found and fixed so far. It can find errors like 'lock L taken in file
16765 X line N is never released if exiting in line M', or 'the code in file
16766 Y lines O to P can never be executed'. The projects included in the
16767 community service project have managed to get rid of a lot of
16768 reliability problems thanks to Coverity.</p>
16769
16770 <p>I believe tools like this, that are able to automatically find
16771 errors in the source, are vital to improve the quality of software and
16772 make sure we can get rid of the crashing and failing software we are
16773 surrounded by today.</p>
16774
16775 </div>
16776 <div class="tags">
16777
16778
16779 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.
16780
16781
16782 </div>
16783 </div>
16784 <div class="padding"></div>
16785
16786 <div class="entry">
16787 <div class="title">
16788 <a href="http://www.hungry.com/~pere/blog/No_patch_is_not_better_than_a_useless_patch.html">No patch is not better than a useless patch</a>
16789 </div>
16790 <div class="date">
16791 28th April 2009
16792 </div>
16793 <div class="body">
16794 <p>Julien Blache
16795 <a href="http://blog.technologeek.org/2009/04/12/214">claim that no
16796 patch is better than a useless patch</a>. I completely disagree, as a
16797 patch allow one to discuss a concrete and proposed solution, and also
16798 prove that the issue at hand is important enough for someone to spent
16799 time on fixing it. No patch do not provide any of these positive
16800 properties.</p>
16801
16802 </div>
16803 <div class="tags">
16804
16805
16806 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nuug">nuug</a>.
16807
16808
16809 </div>
16810 </div>
16811 <div class="padding"></div>
16812
16813 <div class="entry">
16814 <div class="title">
16815 <a href="http://www.hungry.com/~pere/blog/Standardize_on_protocols_and_formats__not_vendors_and_applications.html">Standardize on protocols and formats, not vendors and applications</a>
16816 </div>
16817 <div class="date">
16818 30th March 2009
16819 </div>
16820 <div class="body">
16821 <p>Where I work at the University of Oslo, one decision stand out as a
16822 very good one to form a long lived computer infrastructure. It is the
16823 simple one, lost by many in todays computer industry: Standardize on
16824 open network protocols and open exchange/storage formats, not applications.
16825 Applications come and go, while protocols and files tend to stay, and
16826 thus one want to make it easy to change application and vendor, while
16827 avoiding conversion costs and locking users to a specific platform or
16828 application.</p>
16829
16830 <p>This approach make it possible to replace the client applications
16831 independently of the server applications. One can even allow users to
16832 use several different applications as long as they handle the selected
16833 protocol and format. In the normal case, only one client application
16834 is recommended and users only get help if they choose to use this
16835 application, but those that want to deviate from the easy path are not
16836 blocked from doing so.</p>
16837
16838 <p>It also allow us to replace the server side without forcing the
16839 users to replace their applications, and thus allow us to select the
16840 best server implementation at any moment, when scale and resouce
16841 requirements change.</p>
16842
16843 <p>I strongly recommend standardizing - on open network protocols and
16844 open formats, but I would never recommend standardizing on a single
16845 application that do not use open network protocol or open formats.</p>
16846
16847 </div>
16848 <div class="tags">
16849
16850
16851 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nuug">nuug</a>, <a href="http://www.hungry.com/~pere/blog/tags/standard">standard</a>.
16852
16853
16854 </div>
16855 </div>
16856 <div class="padding"></div>
16857
16858 <div class="entry">
16859 <div class="title">
16860 <a href="http://www.hungry.com/~pere/blog/Returning_from_Skolelinux_developer_gathering.html">Returning from Skolelinux developer gathering</a>
16861 </div>
16862 <div class="date">
16863 29th March 2009
16864 </div>
16865 <div class="body">
16866 <p>I'm sitting on the train going home from this weekends Debian
16867 Edu/Skolelinux development gathering. I got a bit done tuning the
16868 desktop, and looked into the dynamic service location protocol
16869 implementation avahi. It look like it could be useful for us. Almost
16870 30 people participated, and I believe it was a great environment to
16871 get to know the Skolelinux system. Walter Bender, involved in the
16872 development of the Sugar educational platform, presented his stuff and
16873 also helped me improve my OLPC installation. He also showed me that
16874 his Turtle Art application can be used in standalone mode, and we
16875 agreed that I would help getting it packaged for Debian. As a
16876 standalone application it would be great for Debian Edu. We also
16877 tried to get the video conferencing working with two OLPCs, but that
16878 proved to be too hard for us. The application seem to need more work
16879 before it is ready for me. I look forward to getting home and relax
16880 now. :)</p>
16881
16882 </div>
16883 <div class="tags">
16884
16885
16886 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nuug">nuug</a>.
16887
16888
16889 </div>
16890 </div>
16891 <div class="padding"></div>
16892
16893 <div class="entry">
16894 <div class="title">
16895 <a href="http://www.hungry.com/~pere/blog/Time_for_new__LDAP_schemas_replacing_RFC_2307_.html">Time for new LDAP schemas replacing RFC 2307?</a>
16896 </div>
16897 <div class="date">
16898 29th March 2009
16899 </div>
16900 <div class="body">
16901 <p>The state of standardized LDAP schemas on Linux is far from
16902 optimal. There is RFC 2307 documenting one way to store NIS maps in
16903 LDAP, and a modified version of this normally called RFC 2307bis, with
16904 some modifications to be compatible with Active Directory. The RFC
16905 specification handle the content of a lot of system databases, but do
16906 not handle DNS zones and DHCP configuration.</p>
16907
16908 <p>In <a href="http://www.skolelinux.org/">Debian Edu/Skolelinux</a>,
16909 we would like to store information about users, SMB clients/hosts,
16910 filegroups, netgroups (users and hosts), DHCP and DNS configuration,
16911 and LTSP configuration in LDAP. These objects have a lot in common,
16912 but with the current LDAP schemas it is not possible to have one
16913 object per entity. For example, one need to have at least three LDAP
16914 objects for a given computer, one with the SMB related stuff, one with
16915 DNS information and another with DHCP information. The schemas
16916 provided for DNS and DHCP are impossible to combine into one LDAP
16917 object. In addition, it is impossible to implement quick queries for
16918 netgroup membership, because of the way NIS triples are implemented.
16919 It just do not scale. I believe it is time for a few RFC
16920 specifications to cleam up this mess.</p>
16921
16922 <p>I would like to have one LDAP object representing each computer in
16923 the network, and this object can then keep the SMB (ie host key), DHCP
16924 (mac address/name) and DNS (name/IP address) settings in one place.
16925 It need to be efficently stored to make sure it scale well.</p>
16926
16927 <p>I would also like to have a quick way to map from a user or
16928 computer and to the net group this user or computer is a member.</p>
16929
16930 <p>Active Directory have done a better job than unix heads like myself
16931 in this regard, and the unix side need to catch up. Time to start a
16932 new IETF work group?</p>
16933
16934 </div>
16935 <div class="tags">
16936
16937
16938 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/ldap">ldap</a>, <a href="http://www.hungry.com/~pere/blog/tags/nuug">nuug</a>.
16939
16940
16941 </div>
16942 </div>
16943 <div class="padding"></div>
16944
16945 <div class="entry">
16946 <div class="title">
16947 <a href="http://www.hungry.com/~pere/blog/Endelig_er_Debian_Lenny_gitt_ut.html">Endelig er Debian Lenny gitt ut</a>
16948 </div>
16949 <div class="date">
16950 15th February 2009
16951 </div>
16952 <div class="body">
16953 <p>Endelig er <a href="http://www.debian.org/">Debian</a>
16954 <a href="http://www.debian.org/News/2009/20090214">Lenny</a> gitt ut.
16955 Et langt steg videre for Debian-prosjektet, og en rekke nye
16956 programpakker blir nå tilgjengelig for de av oss som bruker den
16957 stabile utgaven av Debian. Neste steg er nå å få
16958 <a href="http://www.skolelinux.org/">Skolelinux</a> /
16959 <a href="http://wiki.debian.org/DebianEdu/">Debian Edu</a> ferdig
16960 oppdatert for den nye utgaven, slik at en oppdatert versjon kan
16961 slippes løs på skolene. Takk til alle debian-utviklerne som har
16962 gjort dette mulig. Endelig er f.eks. fungerende avhengighetsstyrt
16963 bootsekvens tilgjengelig i stabil utgave, vha pakken
16964 <tt>insserv</tt>.</p>
16965
16966 </div>
16967 <div class="tags">
16968
16969
16970 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/norsk">norsk</a>.
16971
16972
16973 </div>
16974 </div>
16975 <div class="padding"></div>
16976
16977 <div class="entry">
16978 <div class="title">
16979 <a href="http://www.hungry.com/~pere/blog/Devcamp_brought_us_closer_to_the_Lenny_based_Debian_Edu_release.html">Devcamp brought us closer to the Lenny based Debian Edu release</a>
16980 </div>
16981 <div class="date">
16982 7th December 2008
16983 </div>
16984 <div class="body">
16985 <p>This weekend we had a small developer gathering for Debian Edu in
16986 Oslo. Most of Saturday was used for the general assemly for the
16987 member organization, but the rest of the weekend I used to tune the
16988 LTSP installation. LTSP now work out of the box on the 10-network.
16989 Acer Aspire One proved to be a very nice thin client, with both
16990 screen, mouse and keybard in a small box. Was working on getting the
16991 diskless workstation setup configured out of the box, but did not
16992 finish it before the weekend was up.</p>
16993
16994 <p>Did not find time to look at the 4 VGA cards in one box we got from
16995 the Brazilian group, so that will have to wait for the next
16996 development gathering. Would love to have the Debian Edu installer
16997 automatically detect and configure a multiseat setup when it find one
16998 of these cards.</p>
16999
17000 </div>
17001 <div class="tags">
17002
17003
17004 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/ltsp">ltsp</a>.
17005
17006
17007 </div>
17008 </div>
17009 <div class="padding"></div>
17010
17011 <div class="entry">
17012 <div class="title">
17013 <a href="http://www.hungry.com/~pere/blog/The_sorry_state_of_multimedia_browser_plugins_in_Debian.html">The sorry state of multimedia browser plugins in Debian</a>
17014 </div>
17015 <div class="date">
17016 25th November 2008
17017 </div>
17018 <div class="body">
17019 <p>Recently I have spent some time evaluating the multimedia browser
17020 plugins available in Debian Lenny, to see which one we should use by
17021 default in Debian Edu. We need an embedded video playing plugin with
17022 control buttons to pause or stop the video, and capable of streaming
17023 all the multimedia content available on the web. The test results and
17024 notes are available on
17025 <a href="http://wiki.debian.org/DebianEdu/BrowserMultimedia">the
17026 Debian wiki</a>. I was surprised how few of the plugins are able to
17027 fill this need. My personal video player favorite, VLC, has a really
17028 bad plugin which fail on a lot of the test pages. A lot of the MIME
17029 types I would expect to work with any free software player (like
17030 video/ogg), just do not work. And simple formats like the
17031 audio/x-mplegurl format (m3u playlists), just isn't supported by the
17032 totem and vlc plugins. I hope the situation will improve soon. No
17033 wonder sites use the proprietary Adobe flash to play video.</p>
17034
17035 <p>For Lenny, we seem to end up with the mplayer plugin. It seem to
17036 be the only one fitting our needs. :/</p>
17037
17038 </div>
17039 <div class="tags">
17040
17041
17042 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/multimedia">multimedia</a>, <a href="http://www.hungry.com/~pere/blog/tags/web">web</a>.
17043
17044
17045 </div>
17046 </div>
17047 <div class="padding"></div>
17048
17049 <p style="text-align: right;"><a href="debian.rss"><img src="http://www.hungry.com/~pere/blog/xml.gif" alt="RSS Feed" width="36" height="14" /></a></p>
17050 <div id="sidebar">
17051
17052
17053
17054 <h2>Archive</h2>
17055 <ul>
17056
17057 <li>2025
17058 <ul>
17059
17060 <li><a href="http://www.hungry.com/~pere/blog/archive/2025/01/">January (2)</a></li>
17061
17062 </ul></li>
17063
17064 <li>2024
17065 <ul>
17066
17067 <li><a href="http://www.hungry.com/~pere/blog/archive/2024/01/">January (1)</a></li>
17068
17069 <li><a href="http://www.hungry.com/~pere/blog/archive/2024/02/">February (1)</a></li>
17070
17071 <li><a href="http://www.hungry.com/~pere/blog/archive/2024/03/">March (2)</a></li>
17072
17073 <li><a href="http://www.hungry.com/~pere/blog/archive/2024/04/">April (3)</a></li>
17074
17075 <li><a href="http://www.hungry.com/~pere/blog/archive/2024/05/">May (1)</a></li>
17076
17077 <li><a href="http://www.hungry.com/~pere/blog/archive/2024/06/">June (1)</a></li>
17078
17079 <li><a href="http://www.hungry.com/~pere/blog/archive/2024/07/">July (2)</a></li>
17080
17081 <li><a href="http://www.hungry.com/~pere/blog/archive/2024/12/">December (1)</a></li>
17082
17083 </ul></li>
17084
17085 <li>2023
17086 <ul>
17087
17088 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/01/">January (3)</a></li>
17089
17090 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/02/">February (1)</a></li>
17091
17092 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/04/">April (2)</a></li>
17093
17094 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/05/">May (3)</a></li>
17095
17096 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/06/">June (1)</a></li>
17097
17098 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/08/">August (1)</a></li>
17099
17100 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/09/">September (1)</a></li>
17101
17102 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/10/">October (1)</a></li>
17103
17104 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/11/">November (4)</a></li>
17105
17106 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/12/">December (1)</a></li>
17107
17108 </ul></li>
17109
17110 <li>2022
17111 <ul>
17112
17113 <li><a href="http://www.hungry.com/~pere/blog/archive/2022/02/">February (1)</a></li>
17114
17115 <li><a href="http://www.hungry.com/~pere/blog/archive/2022/03/">March (3)</a></li>
17116
17117 <li><a href="http://www.hungry.com/~pere/blog/archive/2022/04/">April (2)</a></li>
17118
17119 <li><a href="http://www.hungry.com/~pere/blog/archive/2022/06/">June (2)</a></li>
17120
17121 <li><a href="http://www.hungry.com/~pere/blog/archive/2022/07/">July (1)</a></li>
17122
17123 <li><a href="http://www.hungry.com/~pere/blog/archive/2022/09/">September (1)</a></li>
17124
17125 <li><a href="http://www.hungry.com/~pere/blog/archive/2022/10/">October (1)</a></li>
17126
17127 <li><a href="http://www.hungry.com/~pere/blog/archive/2022/12/">December (1)</a></li>
17128
17129 </ul></li>
17130
17131 <li>2021
17132 <ul>
17133
17134 <li><a href="http://www.hungry.com/~pere/blog/archive/2021/01/">January (2)</a></li>
17135
17136 <li><a href="http://www.hungry.com/~pere/blog/archive/2021/02/">February (1)</a></li>
17137
17138 <li><a href="http://www.hungry.com/~pere/blog/archive/2021/05/">May (1)</a></li>
17139
17140 <li><a href="http://www.hungry.com/~pere/blog/archive/2021/06/">June (1)</a></li>
17141
17142 <li><a href="http://www.hungry.com/~pere/blog/archive/2021/07/">July (3)</a></li>
17143
17144 <li><a href="http://www.hungry.com/~pere/blog/archive/2021/08/">August (1)</a></li>
17145
17146 <li><a href="http://www.hungry.com/~pere/blog/archive/2021/09/">September (1)</a></li>
17147
17148 <li><a href="http://www.hungry.com/~pere/blog/archive/2021/10/">October (1)</a></li>
17149
17150 <li><a href="http://www.hungry.com/~pere/blog/archive/2021/12/">December (1)</a></li>
17151
17152 </ul></li>
17153
17154 <li>2020
17155 <ul>
17156
17157 <li><a href="http://www.hungry.com/~pere/blog/archive/2020/02/">February (2)</a></li>
17158
17159 <li><a href="http://www.hungry.com/~pere/blog/archive/2020/03/">March (2)</a></li>
17160
17161 <li><a href="http://www.hungry.com/~pere/blog/archive/2020/04/">April (2)</a></li>
17162
17163 <li><a href="http://www.hungry.com/~pere/blog/archive/2020/05/">May (3)</a></li>
17164
17165 <li><a href="http://www.hungry.com/~pere/blog/archive/2020/06/">June (2)</a></li>
17166
17167 <li><a href="http://www.hungry.com/~pere/blog/archive/2020/07/">July (1)</a></li>
17168
17169 <li><a href="http://www.hungry.com/~pere/blog/archive/2020/09/">September (1)</a></li>
17170
17171 <li><a href="http://www.hungry.com/~pere/blog/archive/2020/10/">October (1)</a></li>
17172
17173 <li><a href="http://www.hungry.com/~pere/blog/archive/2020/11/">November (1)</a></li>
17174
17175 </ul></li>
17176
17177 <li>2019
17178 <ul>
17179
17180 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/01/">January (4)</a></li>
17181
17182 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/02/">February (3)</a></li>
17183
17184 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/03/">March (3)</a></li>
17185
17186 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/05/">May (2)</a></li>
17187
17188 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/06/">June (5)</a></li>
17189
17190 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/07/">July (2)</a></li>
17191
17192 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/08/">August (1)</a></li>
17193
17194 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/09/">September (1)</a></li>
17195
17196 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/11/">November (1)</a></li>
17197
17198 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/12/">December (4)</a></li>
17199
17200 </ul></li>
17201
17202 <li>2018
17203 <ul>
17204
17205 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/01/">January (1)</a></li>
17206
17207 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/02/">February (5)</a></li>
17208
17209 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/03/">March (5)</a></li>
17210
17211 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/04/">April (3)</a></li>
17212
17213 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/06/">June (2)</a></li>
17214
17215 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/07/">July (5)</a></li>
17216
17217 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/08/">August (3)</a></li>
17218
17219 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/09/">September (3)</a></li>
17220
17221 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/10/">October (5)</a></li>
17222
17223 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/11/">November (2)</a></li>
17224
17225 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/12/">December (4)</a></li>
17226
17227 </ul></li>
17228
17229 <li>2017
17230 <ul>
17231
17232 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/01/">January (4)</a></li>
17233
17234 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/02/">February (3)</a></li>
17235
17236 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/03/">March (5)</a></li>
17237
17238 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/04/">April (2)</a></li>
17239
17240 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/06/">June (5)</a></li>
17241
17242 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/07/">July (1)</a></li>
17243
17244 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/08/">August (1)</a></li>
17245
17246 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/09/">September (3)</a></li>
17247
17248 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/10/">October (5)</a></li>
17249
17250 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/11/">November (3)</a></li>
17251
17252 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/12/">December (4)</a></li>
17253
17254 </ul></li>
17255
17256 <li>2016
17257 <ul>
17258
17259 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/01/">January (3)</a></li>
17260
17261 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/02/">February (2)</a></li>
17262
17263 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/03/">March (3)</a></li>
17264
17265 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/04/">April (8)</a></li>
17266
17267 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/05/">May (8)</a></li>
17268
17269 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/06/">June (2)</a></li>
17270
17271 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/07/">July (2)</a></li>
17272
17273 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/08/">August (5)</a></li>
17274
17275 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/09/">September (2)</a></li>
17276
17277 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/10/">October (3)</a></li>
17278
17279 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/11/">November (8)</a></li>
17280
17281 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/12/">December (5)</a></li>
17282
17283 </ul></li>
17284
17285 <li>2015
17286 <ul>
17287
17288 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/01/">January (7)</a></li>
17289
17290 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/02/">February (6)</a></li>
17291
17292 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/03/">March (1)</a></li>
17293
17294 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/04/">April (4)</a></li>
17295
17296 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/05/">May (3)</a></li>
17297
17298 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/06/">June (4)</a></li>
17299
17300 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/07/">July (6)</a></li>
17301
17302 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/08/">August (2)</a></li>
17303
17304 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/09/">September (2)</a></li>
17305
17306 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/10/">October (9)</a></li>
17307
17308 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/11/">November (6)</a></li>
17309
17310 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/12/">December (3)</a></li>
17311
17312 </ul></li>
17313
17314 <li>2014
17315 <ul>
17316
17317 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/01/">January (2)</a></li>
17318
17319 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/02/">February (3)</a></li>
17320
17321 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/03/">March (8)</a></li>
17322
17323 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/04/">April (7)</a></li>
17324
17325 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/05/">May (1)</a></li>
17326
17327 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/06/">June (2)</a></li>
17328
17329 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/07/">July (2)</a></li>
17330
17331 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/08/">August (2)</a></li>
17332
17333 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/09/">September (5)</a></li>
17334
17335 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/10/">October (6)</a></li>
17336
17337 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/11/">November (3)</a></li>
17338
17339 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/12/">December (5)</a></li>
17340
17341 </ul></li>
17342
17343 <li>2013
17344 <ul>
17345
17346 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/01/">January (11)</a></li>
17347
17348 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/02/">February (9)</a></li>
17349
17350 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/03/">March (9)</a></li>
17351
17352 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/04/">April (6)</a></li>
17353
17354 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/05/">May (9)</a></li>
17355
17356 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/06/">June (10)</a></li>
17357
17358 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/07/">July (7)</a></li>
17359
17360 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/08/">August (3)</a></li>
17361
17362 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/09/">September (5)</a></li>
17363
17364 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/10/">October (7)</a></li>
17365
17366 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/11/">November (9)</a></li>
17367
17368 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/12/">December (3)</a></li>
17369
17370 </ul></li>
17371
17372 <li>2012
17373 <ul>
17374
17375 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/01/">January (7)</a></li>
17376
17377 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/02/">February (10)</a></li>
17378
17379 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/03/">March (17)</a></li>
17380
17381 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/04/">April (12)</a></li>
17382
17383 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/05/">May (12)</a></li>
17384
17385 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/06/">June (20)</a></li>
17386
17387 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/07/">July (17)</a></li>
17388
17389 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/08/">August (6)</a></li>
17390
17391 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/09/">September (9)</a></li>
17392
17393 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/10/">October (17)</a></li>
17394
17395 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/11/">November (10)</a></li>
17396
17397 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/12/">December (7)</a></li>
17398
17399 </ul></li>
17400
17401 <li>2011
17402 <ul>
17403
17404 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/01/">January (16)</a></li>
17405
17406 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/02/">February (6)</a></li>
17407
17408 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/03/">March (6)</a></li>
17409
17410 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/04/">April (7)</a></li>
17411
17412 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/05/">May (3)</a></li>
17413
17414 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/06/">June (2)</a></li>
17415
17416 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/07/">July (7)</a></li>
17417
17418 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/08/">August (6)</a></li>
17419
17420 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/09/">September (4)</a></li>
17421
17422 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/10/">October (2)</a></li>
17423
17424 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/11/">November (3)</a></li>
17425
17426 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/12/">December (1)</a></li>
17427
17428 </ul></li>
17429
17430 <li>2010
17431 <ul>
17432
17433 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/01/">January (2)</a></li>
17434
17435 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/02/">February (1)</a></li>
17436
17437 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/03/">March (3)</a></li>
17438
17439 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/04/">April (3)</a></li>
17440
17441 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/05/">May (9)</a></li>
17442
17443 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/06/">June (14)</a></li>
17444
17445 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/07/">July (12)</a></li>
17446
17447 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/08/">August (13)</a></li>
17448
17449 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/09/">September (7)</a></li>
17450
17451 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/10/">October (9)</a></li>
17452
17453 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/11/">November (13)</a></li>
17454
17455 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/12/">December (12)</a></li>
17456
17457 </ul></li>
17458
17459 <li>2009
17460 <ul>
17461
17462 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/01/">January (8)</a></li>
17463
17464 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/02/">February (8)</a></li>
17465
17466 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/03/">March (12)</a></li>
17467
17468 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/04/">April (10)</a></li>
17469
17470 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/05/">May (9)</a></li>
17471
17472 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/06/">June (3)</a></li>
17473
17474 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/07/">July (4)</a></li>
17475
17476 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/08/">August (3)</a></li>
17477
17478 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/09/">September (1)</a></li>
17479
17480 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/10/">October (2)</a></li>
17481
17482 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/11/">November (3)</a></li>
17483
17484 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/12/">December (3)</a></li>
17485
17486 </ul></li>
17487
17488 <li>2008
17489 <ul>
17490
17491 <li><a href="http://www.hungry.com/~pere/blog/archive/2008/11/">November (5)</a></li>
17492
17493 <li><a href="http://www.hungry.com/~pere/blog/archive/2008/12/">December (7)</a></li>
17494
17495 </ul></li>
17496
17497 </ul>
17498
17499
17500
17501 <h2>Tags</h2>
17502 <ul>
17503
17504 <li><a href="http://www.hungry.com/~pere/blog/tags/3d-printer">3d-printer (19)</a></li>
17505
17506 <li><a href="http://www.hungry.com/~pere/blog/tags/amiga">amiga (1)</a></li>
17507
17508 <li><a href="http://www.hungry.com/~pere/blog/tags/aros">aros (1)</a></li>
17509
17510 <li><a href="http://www.hungry.com/~pere/blog/tags/bankid">bankid (4)</a></li>
17511
17512 <li><a href="http://www.hungry.com/~pere/blog/tags/betalkontant">betalkontant (9)</a></li>
17513
17514 <li><a href="http://www.hungry.com/~pere/blog/tags/bitcoin">bitcoin (13)</a></li>
17515
17516 <li><a href="http://www.hungry.com/~pere/blog/tags/bootsystem">bootsystem (17)</a></li>
17517
17518 <li><a href="http://www.hungry.com/~pere/blog/tags/bsa">bsa (2)</a></li>
17519
17520 <li><a href="http://www.hungry.com/~pere/blog/tags/chrpath">chrpath (3)</a></li>
17521
17522 <li><a href="http://www.hungry.com/~pere/blog/tags/debian">debian (205)</a></li>
17523
17524 <li><a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu (159)</a></li>
17525
17526 <li><a href="http://www.hungry.com/~pere/blog/tags/debian-handbook">debian-handbook (9)</a></li>
17527
17528 <li><a href="http://www.hungry.com/~pere/blog/tags/digistan">digistan (11)</a></li>
17529
17530 <li><a href="http://www.hungry.com/~pere/blog/tags/dld">dld (18)</a></li>
17531
17532 <li><a href="http://www.hungry.com/~pere/blog/tags/docbook">docbook (33)</a></li>
17533
17534 <li><a href="http://www.hungry.com/~pere/blog/tags/drivstoffpriser">drivstoffpriser (4)</a></li>
17535
17536 <li><a href="http://www.hungry.com/~pere/blog/tags/english">english (467)</a></li>
17537
17538 <li><a href="http://www.hungry.com/~pere/blog/tags/fiksgatami">fiksgatami (23)</a></li>
17539
17540 <li><a href="http://www.hungry.com/~pere/blog/tags/fildeling">fildeling (14)</a></li>
17541
17542 <li><a href="http://www.hungry.com/~pere/blog/tags/freeculture">freeculture (34)</a></li>
17543
17544 <li><a href="http://www.hungry.com/~pere/blog/tags/freedombox">freedombox (9)</a></li>
17545
17546 <li><a href="http://www.hungry.com/~pere/blog/tags/frikanalen">frikanalen (20)</a></li>
17547
17548 <li><a href="http://www.hungry.com/~pere/blog/tags/h264">h264 (20)</a></li>
17549
17550 <li><a href="http://www.hungry.com/~pere/blog/tags/intervju">intervju (43)</a></li>
17551
17552 <li><a href="http://www.hungry.com/~pere/blog/tags/isenkram">isenkram (19)</a></li>
17553
17554 <li><a href="http://www.hungry.com/~pere/blog/tags/kart">kart (23)</a></li>
17555
17556 <li><a href="http://www.hungry.com/~pere/blog/tags/kodi">kodi (6)</a></li>
17557
17558 <li><a href="http://www.hungry.com/~pere/blog/tags/ldap">ldap (9)</a></li>
17559
17560 <li><a href="http://www.hungry.com/~pere/blog/tags/lego">lego (5)</a></li>
17561
17562 <li><a href="http://www.hungry.com/~pere/blog/tags/lenker">lenker (8)</a></li>
17563
17564 <li><a href="http://www.hungry.com/~pere/blog/tags/linuxcnc">linuxcnc (8)</a></li>
17565
17566 <li><a href="http://www.hungry.com/~pere/blog/tags/lsdvd">lsdvd (2)</a></li>
17567
17568 <li><a href="http://www.hungry.com/~pere/blog/tags/ltsp">ltsp (1)</a></li>
17569
17570 <li><a href="http://www.hungry.com/~pere/blog/tags/madewithcc">madewithcc (3)</a></li>
17571
17572 <li><a href="http://www.hungry.com/~pere/blog/tags/mesh network">mesh network (8)</a></li>
17573
17574 <li><a href="http://www.hungry.com/~pere/blog/tags/multimedia">multimedia (46)</a></li>
17575
17576 <li><a href="http://www.hungry.com/~pere/blog/tags/nice free software">nice free software (15)</a></li>
17577
17578 <li><a href="http://www.hungry.com/~pere/blog/tags/noark5">noark5 (25)</a></li>
17579
17580 <li><a href="http://www.hungry.com/~pere/blog/tags/norsk">norsk (325)</a></li>
17581
17582 <li><a href="http://www.hungry.com/~pere/blog/tags/nuug">nuug (199)</a></li>
17583
17584 <li><a href="http://www.hungry.com/~pere/blog/tags/offentlig innsyn">offentlig innsyn (41)</a></li>
17585
17586 <li><a href="http://www.hungry.com/~pere/blog/tags/open311">open311 (2)</a></li>
17587
17588 <li><a href="http://www.hungry.com/~pere/blog/tags/opensnitch">opensnitch (4)</a></li>
17589
17590 <li><a href="http://www.hungry.com/~pere/blog/tags/opphavsrett">opphavsrett (76)</a></li>
17591
17592 <li><a href="http://www.hungry.com/~pere/blog/tags/personvern">personvern (114)</a></li>
17593
17594 <li><a href="http://www.hungry.com/~pere/blog/tags/raid">raid (4)</a></li>
17595
17596 <li><a href="http://www.hungry.com/~pere/blog/tags/reactos">reactos (1)</a></li>
17597
17598 <li><a href="http://www.hungry.com/~pere/blog/tags/reprap">reprap (11)</a></li>
17599
17600 <li><a href="http://www.hungry.com/~pere/blog/tags/rfid">rfid (3)</a></li>
17601
17602 <li><a href="http://www.hungry.com/~pere/blog/tags/robot">robot (17)</a></li>
17603
17604 <li><a href="http://www.hungry.com/~pere/blog/tags/rss">rss (1)</a></li>
17605
17606 <li><a href="http://www.hungry.com/~pere/blog/tags/ruter">ruter (7)</a></li>
17607
17608 <li><a href="http://www.hungry.com/~pere/blog/tags/scraperwiki">scraperwiki (2)</a></li>
17609
17610 <li><a href="http://www.hungry.com/~pere/blog/tags/sikkerhet">sikkerhet (60)</a></li>
17611
17612 <li><a href="http://www.hungry.com/~pere/blog/tags/sitesummary">sitesummary (4)</a></li>
17613
17614 <li><a href="http://www.hungry.com/~pere/blog/tags/skepsis">skepsis (5)</a></li>
17615
17616 <li><a href="http://www.hungry.com/~pere/blog/tags/standard">standard (76)</a></li>
17617
17618 <li><a href="http://www.hungry.com/~pere/blog/tags/stavekontroll">stavekontroll (7)</a></li>
17619
17620 <li><a href="http://www.hungry.com/~pere/blog/tags/stortinget">stortinget (14)</a></li>
17621
17622 <li><a href="http://www.hungry.com/~pere/blog/tags/surveillance">surveillance (65)</a></li>
17623
17624 <li><a href="http://www.hungry.com/~pere/blog/tags/sysadmin">sysadmin (5)</a></li>
17625
17626 <li><a href="http://www.hungry.com/~pere/blog/tags/usenix">usenix (2)</a></li>
17627
17628 <li><a href="http://www.hungry.com/~pere/blog/tags/valg">valg (9)</a></li>
17629
17630 <li><a href="http://www.hungry.com/~pere/blog/tags/verkidetfri">verkidetfri (22)</a></li>
17631
17632 <li><a href="http://www.hungry.com/~pere/blog/tags/video">video (80)</a></li>
17633
17634 <li><a href="http://www.hungry.com/~pere/blog/tags/vitenskap">vitenskap (4)</a></li>
17635
17636 <li><a href="http://www.hungry.com/~pere/blog/tags/web">web (42)</a></li>
17637
17638 </ul>
17639
17640
17641 </div>
17642 <p style="text-align: right">
17643 Created by <a href="http://steve.org.uk/Software/chronicle">Chronicle v4.6</a>
17644 </p>
17645
17646 </body>
17647 </html>