1 <!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Strict//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns=
"http://www.w3.org/1999/xhtml" dir=
"ltr">
5 <meta http-equiv=
"Content-Type" content=
"text/html;charset=utf-8" />
6 <title>Petter Reinholdtsen: Entries Tagged 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" />
14 <a href=
"http://www.hungry.com/~pere/blog/">Petter Reinholdtsen
</a>
21 <h3>Entries tagged "debian".
</h3>
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>
31 <p><a href=
"http://www.hungry.com/~pere/blog/What_is_the_most_supported_MIME_type_in_Debian_in_2018_.html">Seven
</a>
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>
39 <p><strong>Debian Unstable:
</strong></p>
43 ----- -----------------------
66 <p>The list was created like this using a sid chroot:
</p>
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
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:
82 % appstreamcli what-provides mediatype audio/x-scpls | grep Package: | sort -u
83 Package: alsaplayer-common
90 Package: cynthiune.app
97 Package: mediaconch-gui
98 Package: mediainfo-gui
110 Package: soundconverter
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>
122 % appstreamcli what-provides mediatype model/stl | grep Package: | sort -u
125 Package: open3d-viewer
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.
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>
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>.
150 <div class=
"padding"></div>
154 <a href=
"http://www.hungry.com/~pere/blog/The_2025_LinuxCNC_Norwegian_developer_gathering.html">The
2025 LinuxCNC Norwegian developer gathering
</a>
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>
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>
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>
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>
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
190 <p>As usual we hope to find sponsors to pay for food, lodging and travel.
</p>
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>
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>.
205 <div class=
"padding"></div>
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>
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>
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
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>
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>
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>
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>
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>.
272 <div class=
"padding"></div>
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>
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>
294 <p>To locate packages to work on, the following one-liner can be used:
</p>
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;"
305 <p>Pick a random package from the list and run the latest edition of
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
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>
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>
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>.
344 <div class=
"padding"></div>
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>
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>
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>
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>
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
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
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>
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>.
418 <div class=
"padding"></div>
422 <a href=
"http://www.hungry.com/~pere/blog/The_2024_LinuxCNC_Norwegian_developer_gathering.html">The
2024 LinuxCNC Norwegian developer gathering
</a>
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
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
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>
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>
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>.
465 <div class=
"padding"></div>
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>
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.
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:
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;"
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>
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>
509 # See also https://bugs.debian.org/
804722#
31
513 # Move to this Standards-Version.
518 if [ -z "$PKG" ]; then
519 echo "usage: $
0 <pkgname>"
523 if [ -e "${PKG}-salsa
" ]; then
524 echo "error: ${PKG}-salsa already exist, aborting.
"
528 if [ -z "ALLOWFAILURE
" ] ; then
532 # Fetch every snapshotted source package. Manually loop until all
533 # transfers succeed, as 'gbp import-dscs --debsnap' do not fail on
535 until debsnap --force -v $PKG || $ALLOWFAILURE ; do sleep 1; done
536 mkdir ${PKG}-salsa; cd ${PKG}-salsa
539 # Specify branches to override any debian/gbp.conf file present in the
541 gbp import-dscs --debian-branch=master --upstream-branch=upstream \
542 --pristine-tar ../source-$PKG/*.dsc
544 # Add Vcs pointing to Salsa Debian project (must be manually created
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
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
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
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
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
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>
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>
588 git remote add origin git@salsa.debian.org:debian/perl-byacc.git
589 git push --set-upstream origin master upstream pristine-tar
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>
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
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
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>
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>
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>
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
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>.
657 <div class=
"padding"></div>
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>
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>
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>
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>
707 <p>So, if you are a Debian Developer and got some spare time, perhaps
708 considering migrating some orphaned packages to git?
</p>
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>
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>.
723 <div class=
"padding"></div>
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>
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
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>
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
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>
780 <pre>/usr/bin/jq -r '."key"' ~/.config/Signal/config.json
</pre>
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>
789 % sqlcipher ~/.config/Signal/sql/db.sqlite
790 sqlite
> PRAGMA key = "x'secretkey'";
792 CREATE TABLE sqlite_stat1(tbl,idx,stat);
793 CREATE TABLE conversations(
794 id STRING PRIMARY KEY ASC,
802 , profileFamilyName TEXT, profileFullName TEXT, e164 TEXT, serviceId TEXT, groupId TEXT, profileLastFetchedAt INTEGER);
803 CREATE TABLE identityKeys(
804 id STRING PRIMARY KEY ASC,
808 id STRING PRIMARY KEY ASC,
811 CREATE TABLE sessions(
815 , ourServiceId STRING, serviceId STRING);
816 CREATE TABLE attachment_downloads(
817 id STRING primary key,
822 CREATE TABLE sticker_packs(
827 coverStickerId INTEGER,
829 downloadAttempts INTEGER,
833 stickerCount INTEGER,
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(
839 packId TEXT NOT NULL,
848 PRIMARY KEY (id, packId),
849 CONSTRAINT stickers_fk
851 REFERENCES sticker_packs(id)
854 CREATE TABLE sticker_references(
857 CONSTRAINT sticker_references_fk
859 REFERENCES sticker_packs(id)
863 shortName TEXT PRIMARY KEY,
866 CREATE TABLE messages(
867 rowid INTEGER PRIMARY KEY ASC,
873 schemaVersion INTEGER,
874 conversationId STRING,
877 hasAttachments INTEGER,
878 hasFileAttachments INTEGER,
879 hasVisualMediaAttachments INTEGER,
881 expirationStartTimestamp INTEGER,
884 messageTimer INTEGER,
885 messageTimerStart INTEGER,
886 messageTimerExpiresAt 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
896 expirationStartTimestamp + (expireTimer *
1000),
898 )), shouldAffectActivity INTEGER
899 GENERATED ALWAYS AS (
903 'change-number-notification',
904 'contact-removed-notification',
905 'conversation-merge',
906 'group-v1-migration',
908 'message-history-unsynced',
911 'universal-timer-notification',
914 ), shouldAffectPreview INTEGER
915 GENERATED ALWAYS AS (
919 'change-number-notification',
920 'contact-removed-notification',
921 'conversation-merge',
922 'group-v1-migration',
924 'message-history-unsynced',
927 'universal-timer-notification',
930 ), isUserInitiatedMessage INTEGER
931 GENERATED ALWAYS AS (
935 'change-number-notification',
936 'contact-removed-notification',
937 'conversation-merge',
938 'group-v1-migration',
941 'message-history-unsynced',
944 'universal-timer-notification',
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
958 isChangeCreatedByUs IS
0
960 GENERATED ALWAYS AS (
961 json_extract(json, '$.callId')
963 CREATE TABLE sqlite_stat4(tbl,idx,neq,nlt,ndlt,sample);
966 queueType TEXT STRING NOT NULL,
967 timestamp INTEGER NOT NULL,
970 CREATE TABLE reactions(
971 conversationId STRING,
974 messageReceivedAt INTEGER,
975 targetAuthorAci STRING,
976 targetTimestamp INTEGER,
979 CREATE TABLE senderKeys(
980 id TEXT PRIMARY KEY NOT NULL,
981 senderId TEXT NOT NULL,
982 distributionId TEXT NOT NULL,
984 lastUpdatedDate NUMBER NOT NULL
986 CREATE TABLE unprocessed(
987 id STRING PRIMARY KEY ASC,
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,
1000 timestamp INTEGER NOT NULL,
1001 contentHint INTEGER NOT NULL,
1003 , urgent INTEGER, hasPniSignatureMessage INTEGER DEFAULT
0 NOT NULL);
1004 CREATE TABLE sendLogRecipients(
1005 payloadId INTEGER NOT NULL,
1007 recipientServiceId STRING NOT NULL,
1008 deviceId INTEGER NOT NULL,
1010 PRIMARY KEY (payloadId, recipientServiceId, deviceId),
1012 CONSTRAINT sendLogRecipientsForeignKey
1013 FOREIGN KEY (payloadId)
1014 REFERENCES sendLogPayloads(id)
1017 CREATE TABLE sendLogMessageIds(
1018 payloadId INTEGER NOT NULL,
1020 messageId STRING NOT NULL,
1022 PRIMARY KEY (payloadId, messageId),
1024 CONSTRAINT sendLogMessageIdsForeignKey
1025 FOREIGN KEY (payloadId)
1026 REFERENCES sendLogPayloads(id)
1029 CREATE TABLE preKeys(
1030 id STRING PRIMARY KEY ASC,
1032 , ourServiceId NUMBER
1033 GENERATED ALWAYS AS (json_extract(json, '$.ourServiceId')));
1034 CREATE TABLE signedPreKeys(
1035 id STRING PRIMARY KEY ASC,
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,
1043 descriptionTemplate TEXT NOT NULL
1045 CREATE TABLE badgeImageFiles(
1046 badgeId TEXT REFERENCES badges(id)
1049 'order' INTEGER NOT NULL,
1054 CREATE TABLE storyReads (
1055 authorId STRING NOT NULL,
1056 conversationId STRING NOT NULL,
1057 storyId STRING NOT NULL,
1058 storyReadDate NUMBER NOT NULL,
1060 PRIMARY KEY (authorId, storyId)
1062 CREATE TABLE storyDistributions(
1063 id STRING PRIMARY KEY NOT NULL,
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)
1072 serviceId STRING NOT NULL,
1074 PRIMARY KEY (listId, serviceId)
1076 CREATE TABLE uninstalled_sticker_packs (
1077 id STRING NOT NULL PRIMARY KEY,
1078 uninstalledAt NUMBER NOT NULL,
1080 storageVersion NUMBER,
1081 storageUnknownFields BLOB,
1082 storageNeedsSync INTEGER NOT NULL
1084 CREATE TABLE groupCallRingCancellations(
1085 ringId INTEGER PRIMARY KEY,
1086 createdAt INTEGER NOT NULL
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)
1098 , conversationId STRING);
1099 CREATE TABLE mentions (
1100 messageId REFERENCES messages(id) ON DELETE CASCADE,
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
1122 [ dropped all indexes to save space in this blog post ]
1123 CREATE TRIGGER messages_on_view_once_update AFTER UPDATE ON messages
1125 new.body IS NOT NULL AND new.isViewOnce =
1
1127 DELETE FROM messages_fts WHERE rowid = old.rowid;
1129 CREATE TRIGGER messages_on_insert AFTER INSERT ON messages
1130 WHEN new.isViewOnce IS NOT
1 AND new.storyId IS NULL
1132 INSERT INTO messages_fts
1135 (new.rowid, new.body);
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
1143 DELETE FROM reactions WHERE rowid IN (
1144 SELECT rowid FROM reactions
1145 WHERE messageId = old.id
1147 DELETE FROM storyReads WHERE storyId = old.storyId;
1149 CREATE VIRTUAL TABLE messages_fts USING fts5(
1151 tokenize = 'signal_tokenizer'
1153 CREATE TRIGGER messages_on_update AFTER UPDATE ON messages
1155 (new.body IS NULL OR old.body IS NOT new.body) AND
1156 new.isViewOnce IS NOT
1 AND new.storyId IS NULL
1158 DELETE FROM messages_fts WHERE rowid = old.rowid;
1159 INSERT INTO messages_fts
1162 (new.rowid, new.body);
1164 CREATE TRIGGER messages_on_insert_insert_mentions AFTER INSERT ON messages
1166 INSERT INTO mentions (messageId, mentionAci, start, length)
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
1174 AND messages.id = new.id;
1176 CREATE TRIGGER messages_on_update_update_mentions AFTER UPDATE ON messages
1178 DELETE FROM mentions WHERE messageId = new.id;
1179 INSERT INTO mentions (messageId, mentionAci, start, length)
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
1187 AND messages.id = new.id;
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>
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>
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>.
1209 <div class=
"padding"></div>
1213 <a href=
"http://www.hungry.com/~pere/blog/New_chrpath_release_0_17.html">New chrpath release
0.17</a>
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>
1230 <p>New in
0.17 released
2023-
11-
10:
</p>
1233 <li>Moved project to Codeberg, as Alioth is shut down.
</li>
1234 <li>Add Solaris support (use
<sys/byteorder.h
> instead of
<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>
1241 <p>The latest edition is tagged and available from
1242 <a href=
"https://codeberg.org/pere/chrpath">https://codeberg.org/pere/chrpath
</a>.
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>
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>.
1257 <div class=
"padding"></div>
1261 <a href=
"http://www.hungry.com/~pere/blog/Test_framework_for_DocBook_processors___formatters.html">Test framework for DocBook processors / formatters
</a>
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>
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
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
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>
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>
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>
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
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
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)
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>
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>.
1386 <div class=
"padding"></div>
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>
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>
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>
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
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>
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>
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>.
1450 <div class=
"padding"></div>
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>
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
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>
1488 <p>If you got a infrastructure meter supporting the Meter Bus
1489 standard, I strongly recommend having a look at these nice
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>
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>.
1505 <div class=
"padding"></div>
1509 <a href=
"http://www.hungry.com/~pere/blog/The_2023_LinuxCNC_Norwegian_developer_gathering.html">The
2023 LinuxCNC Norwegian developer gathering
</a>
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>
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)."
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
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>
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>
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>.
1559 <div class=
"padding"></div>
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>
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>
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>
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>
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>
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>.
1606 <div class=
"padding"></div>
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>
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
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
1650 <a href=
"https://bugs.debian.org/1034286">ffmpeg-python
</a> was
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>
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>
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>
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>
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>
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>
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
<<EOF
1730 deb https://geekbay.nuug.no/~pere/openai-whisper/ bookworm main
1731 deb-src https://geekbay.nuug.no/~pere/openai-whisper/ bookworm main
1734 apt install openai-whisper
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>
1747 <p>Now I can start on the audio recording part of this project.
</p>
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>
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>.
1762 <div class=
"padding"></div>
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>
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>
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
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>
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>
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>
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>
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'
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>
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>.
1841 <div class=
"padding"></div>
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>
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>
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>
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>
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
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>
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>.
1903 <div class=
"padding"></div>
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>
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>
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>
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>
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>
1945 # Author: Petter Reinholdtsen
1946 # License: GPL v2 or later at your choice.
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.
1954 mimetype="application/vnd.openmotor+yaml"
1955 testfile="test/data/real/o3100/motor.ric"
1956 mydesktopfile="openmotor.desktop"
1958 filemime="$(xdg-mime query filetype "$testfile")"
1960 if [ "$mimetype" != "$filemime" ] ; then
1962 echo "error: xdg-mime claim motor file MIME type is $filemine, not $mimetype"
1964 echo "success: xdg-mime report correct mime type $mimetype for motor file"
1967 desktop=$(xdg-mime query default "$mimetype")
1969 if [ "$mydesktopfile" != "$desktop" ]; then
1971 echo "error: xdg-mime claim motor file should be handled by $desktop, not $mydesktopfile"
1973 echo "success: xdg-mime agree motor file should be handled by $mydesktopfile"
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>
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>
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>.
1995 <div class=
"padding"></div>
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>
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>
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
2022 <a href=
"https://github.com/evilsocket/opensnitch/issues/304">upstream
2023 want a Debian package too
</a>.
</p>
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
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>
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>.
2046 <div class=
"padding"></div>
2050 <a href=
"http://www.hungry.com/~pere/blog/LinuxCNC_MQTT_publisher_component.html">LinuxCNC MQTT publisher component
</a>
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>
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
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>
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>
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>
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>.
2108 <div class=
"padding"></div>
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>
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>
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>
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
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>
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>.
2159 <div class=
"padding"></div>
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>
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>
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>
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
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>
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>
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>
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>
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>
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>
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
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>.
2257 <div class=
"padding"></div>
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>
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>
2269 <p>(The picture is of the previous edition.)
</p>
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>
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>
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>
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>
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>.
2313 <div class="padding
"></div>
2317 <a href="http://www.hungry.com/~pere/blog/Automatic_LinuxCNC_servo_PID_tuning_.html
">Automatic LinuxCNC servo PID tuning?</a>
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
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.
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>
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>
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
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>
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
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>
2432 loadrt pid names=pid.x,pid.y,pid.z
2435 <p>Armed with the new and improved at_pid component, the new line will
2439 loadrt at_pid names=pid.x,pid.y,pid.z
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>
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>
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
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
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>
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>
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>
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>.
2505 <div class=
"padding"></div>
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>
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>
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>
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>
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>.
2545 <div class=
"padding"></div>
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>
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
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>
2572 geteltorito -o usbstick.img lenovo-firmware.iso
2573 sudo dd bs=
10M if=usbstick.img of=$(ls -tr /dev/sd?|tail -
1)
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>
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>.
2588 <div class=
"padding"></div>
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>
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
2609 <p>But what is LinuxCNC, you are probably wondering? Perhaps a
2610 Wikipedia quote is in place?
</p>
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)."
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
2629 <a href=
"https://hosted.weblate.org/engage/linuxcnc/">join the
2630 effort
</a> using Weblate.
</p>
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>
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>.
2645 <div class=
"padding"></div>
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>
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>
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
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>
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>.
2689 <div class=
"padding"></div>
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>
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:
2707 <li>Norwegian Bokmål
</li>
2710 <li>Brazil Portuguese
</li>
2715 <p>This is the list of languages more than
70% complete, in other
2716 words with not too much left to do:
</p>
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>
2729 <p>I wonder how long it will take to bring these to
100%.
</p>
2731 <p>Then there is the list of languages about halfway done:
</p>
2735 <li>Russian -
63%
</li>
2736 <li>Swedish -
53%
</li>
2737 <li>Chinese (Traditional) -
46%
</li>
2738 <li>Catalan -
45%
</li>
2742 <p>Several are on to a good start:
</p>
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>
2754 <p>Finally, there are the ones just getting started:
</p>
2758 <li>Korean -
4%
</li>
2759 <li>Croatian -
2%
</li>
2761 <li>Danish -
1%
</li>
2762 <li>Romanian -
1%
</li>
2766 <p>If you want to help provide a Debian instruction book in your own
2768 <a href=
"https://hosted.weblate.org/projects/debian-handbook/#languages">Weblate
</a>
2769 to contribute to the translations.
</p>
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>
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>.
2784 <div class=
"padding"></div>
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>
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>
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
2816 # Usage: $
0 <jami-address> <message>
2818 # Send
<message> to
<jami-address>, create local jami account if
2821 # License: GPL v2 or later at your choice
2822 # Author: Petter Reinholdtsen
2825 if [ -z "$HOME" ] ; then
2826 echo "error: missing \$HOME, required for dbus to work"
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
2835 if ! kill -
0 $DBUS_SESSION_BUS_PID
2>/dev/null ; then
2836 unset DBUS_SESSION_BUS_ADDRESS
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=$!
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
2854 dbus-send --session \
2855 --dest="cx.ring.Ring" /cx/ring/Ring/$part cx.ring.Ring.$part.$op $*
2861 dbus-send --session --print-reply \
2862 --dest="cx.ring.Ring" /cx/ring/Ring/$part cx.ring.Ring.$part.$op $*
2866 dringopreply ConfigurationManager getAccountList | \
2867 grep string | awk -F'"' '{print $
2}' | head -n
1
2870 account=$(firstaccount)
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"
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"
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
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>
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>.
2910 <div class=
"padding"></div>
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>
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>
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>
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.
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>
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>.
2956 <div class="padding
"></div>
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>
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>
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>
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>
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>.
2996 <div class="padding
"></div>
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>
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>
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
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>
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>.
3036 <div class="padding
"></div>
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>
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
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>
3067 <p><blockquote><pre>
3068 int socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
3069 </pre></blockquote></p>
3071 <p>the program code would be doing this:<p>
3073 <p><blockquote><pre>
3074 int socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TLS);
3075 </pre></blockquote></p>
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>
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>
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
3100 <p>I recommend you check out this simple and powerful approach to more
3101 secure network connections. :)</p>
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>
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>.
3116 <div class="padding
"></div>
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>
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>
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>
3162 <p>So, how do you do this, I am sure you are wondering by now. The
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>
3179 <tt>sip:657837644.522827@192.168.169.170</tt>
3182 <p>Now if only jami would reduce its memory usage, I could even
3183 recommend this setup to others. :)</p>
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>
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>.
3198 <div class="padding
"></div>
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>
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>
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>
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>
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>
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>
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>
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>.
3255 <div class=
"padding"></div>
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>
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>
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>
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>
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
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
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>
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>
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>.
3335 <div class=
"padding"></div>
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>
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>
3358 <p>Spillet er et ressursstyringsspill ala Civilization, og er morsomt
3359 å spille for oss som liker slikt. :)
</p>
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
3364 <b><a href=
"bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a></b>.
3365 Merk, betaling med bitcoin er ikke anonymt. :)
</p>
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>.
3376 <div class=
"padding"></div>
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>
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>
3395 <p>There are three main pieces involved. The first to enter Debian
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
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
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>
3418 <p>This should make it easier to have fun.
</p>
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>
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>.
3433 <div class=
"padding"></div>
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>
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>
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.
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
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>
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>
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>
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>.
3499 <div class="padding
"></div>
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>
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
3527 <p>To try to get one official MIME type for these files, I've brought
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>
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>
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>.
3548 <div class="padding
"></div>
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>
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>
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>
3572 <p><blockquote><pre>
3574 Name=Google drive autosync
3576 Exec=/home/user/bin/grive-sync
3577 </pre></blockquote></p>
3579 <p>Finally, I wrote the <tt>~/bin/grive-sync</tt> script to sync
3580 ~/googledrive/ with the files in Google Drive.</p>
3582 <p><blockquote><pre>
3587 if [ "$syncpid" ] ; then
3591 trap cleanup EXIT INT QUIT
3592 /usr/lib/grive/grive-sync.sh listen googledrive
2>&
1 | sed "s%^%$
0:%" &
3595 if ! xhost
>/dev/null
2>&
1 ; then
3596 echo "no DISPLAY, exiting as the user probably logged out"
3599 if [ ! -e /run/user/
1000/grive-sync.sh_googledrive ] ; then
3600 /usr/lib/grive/grive-sync.sh sync googledrive
3603 done
2>&
1 | sed "s%^%$
0:%"
3604 </pre></blockquote></p>
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>
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>
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>.
3623 <div class=
"padding"></div>
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>
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>
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>
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
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>
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>.
3665 <div class=
"padding"></div>
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>
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 <enclosure
> RSS tag), but was unable to find a current supplier
3687 of such frames. In the end I gave up that approach.
</p>
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>
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>
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>
3720 exiftool -headline='The RSS image title' \
3721 -description='The RSS image description.' \
3722 -subject+=for-family photo.jpeg
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>
3731 <p>Are there better ways to do this? Get in touch if you have better
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>
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>.
3747 <div class=
"padding"></div>
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>
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
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>
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.
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.
3793 curl --silent --header 'Content-Type: application/json' \
3794 --data-binary "{ \"id\":
1, \"jsonrpc\": \"
2.0\", \"method\": \"$cmd\", \"params\": $params }" \
3795 "http://$host/jsonrpc"
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
3804 if [ "$gstpid" ] && kill -
0 "$gstpid"
>/dev/null
2>&1; then
3808 trap cleanup EXIT INT
3810 if [ -n "$
1" ]; then
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. \
3833 # Give stream a second to get going
3836 # Ask kodi to start streaming using its JSON-RPC API
3837 kodicmd "$kodihost" Player.Open \
3838 "{\"item\": { \"file\": \"udp://@$mcast:$mcastport\" } }"
> /dev/null
3840 # wait for gst to end
3844 <p>I hope you find the approach useful. I know I do.
</p>
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>
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>.
3859 <div class=
"padding"></div>
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>
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>
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>
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>
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>
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>
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>
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}'
3911 <p>I ssh-ed into my Kodi box and created a file like this with the
3912 same IP address:
</p>
3915 echo rtsp://
192.168.11.4:
8080/test.sdp \
3916 > /storage/videos/screenstream.m3u
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
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
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
3944 cvlc screen:// --sout \
3945 '#transcode{vcodec=mp4v,acodec=mpga,vb=
800,ab=
128}:rtp{sdp=rtsp://:
8080/}'
3948 <p>and this on the Kodi end
<p>
3951 echo rtsp://
192.168.11.4:
8080/ \
3952 > /storage/videos/screenstream.m3u
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
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:
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.
3981 <p>and this on the Kodi end
<p>
3984 echo udp://@
239.255.0.1:
1234 \
3985 > /storage/videos/screenstream.m3u
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>
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>
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}'
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>
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>.
4018 <div class=
"padding"></div>
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>
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:
4037 <p><strong>Debian Unstable:
</strong></p>
4041 ----- -----------------------
4053 30 audio/x-vorbis+ogg
4054 29 image/x-portable-pixmap
4056 27 image/x-portable-bitmap
4058 26 application/x-ogg
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>
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
<filename
>", 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
<mime-type
>. For example if you, like
4076 me, want to know which packages support inode/directory, you can get a
4079 <p><blockquote><pre>
4080 % appstreamcli what-provides mimetype inode/directory | grep Package: | sort
4087 Package: doublecmd-common
4089 Package: enlightenment
4109 </pre></blockquote></p>
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>
4114 <p><blockquote><pre>
4115 % appstreamcli what-provides mimetype application/vnd.sketchup.skp
4116 Could not find component providing 'mimetype::application/vnd.sketchup.skp'.
4118 </pre></blockquote></p>
4120 <p>Yesterday I used it to figure out which packages support the STL
3D
4123 <p><blockquote><pre>
4124 % appstreamcli what-provides mimetype application/sla|grep Package
4129 </pre></blockquote></p>
4131 <p>PS: A new version of Cura was uploaded to Debian yesterday.
</p>
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>
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>.
4146 <div class=
"padding"></div>
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>
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
<somepackages
>' 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>
4168 <p><blockquote><pre>
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.
4186 for p in $(apt list --upgradable | ignore "$@" |cut -d/ -f1 | grep -v '^Listing...'); do
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
4197 </pre></blockquote></p>
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>
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>
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>
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>
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>.
4236 <div class=
"padding"></div>
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>
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
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
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>
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>.
4275 <div class=
"padding"></div>
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>
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>
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>
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>
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>
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>.
4325 <div class=
"padding"></div>
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>
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>
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
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>
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>
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
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>
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>
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>.
4384 <div class=
"padding"></div>
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>
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
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>
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>
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
4441 <a href=
"https://github.com/Oros42/IMSI-catcher/issues/14">the github
4442 issue for the topic
</a>.
4444 <p>If this sound interesting, visit the stand at the festival!
</p>
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>.
4455 <div class=
"padding"></div>
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>
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>
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>
4480 <p>Here is an updated recipe, using packages built by Debian and a git
4481 clone of two python scripts:
</p>
4485 <li>Start with a Debian machine running the Buster version (aka
4488 <li>Run '
<tt>apt install gr-gsm python-numpy python-scipy
4489 python-scapy
</tt>' as root to install required packages.
</li>
4491 <li>Fetch the code decoding GSM packages using '
<tt>git clone
4492 github.com/Oros42/IMSI-catcher.git
</tt>'.
</li>
4494 <li>Insert USB software defined radio supported by GNU Radio.
</li>
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>
4500 <li>Enter the IMSI-catcher directory and run '
<tt>python
4501 simple_IMSI-catcher.py
</tt>' to display the collected information.
</li>
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
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>
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>
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>
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>.
4545 <div class=
"padding"></div>
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>
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>
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>
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>
4587 <p>The updated and simpler recipe is thus to
</p>
4591 <li>start with a Debian machine running Stretch or newer,
</li>
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>
4596 <li>clone the git repostory from
<a href=
"https://github.com/Oros42/IMSI-catcher">https://github.com/Oros42/IMSI-catcher
</a>,
</li>
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>
4602 <li>go into the IMSI-catcher directory and run 'sudo python simple_IMSI-catcher.py' to extract the IMSI numbers.
</li>
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>
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>
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
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>.
4648 <div class=
"padding"></div>
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>
4658 <p align=
"center"><img align=
"center" src=
"http://www.hungry.com/~pere/blog/images/2017-07-25-debian-handbook-nb-testprint.png"/></p>
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>
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
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>
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
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>
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>.
4692 <div class="padding
"></div>
4696 <a href="http://www.hungry.com/~pere/blog/N_r_nynorskoversettelsen_svikter_til_eksamen___.html
">NÃ¥r nynorskoversettelsen svikter til eksamen...</a>
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>
4710 <p>Her er bokmålsoppgaven fra eksamenen:</p>
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>
4717 <p>Vedlegge er eksempler på tekster som kan gi relevante perspektiver
4720 <li>Flykningeregnskapet 2016, UNHCR og IDMC
4721 <li>«Grenseløst Europa for fall» A-Magasinet, 26. november 2015
4726 <p>Dette oversetter Apertium slik:</p>
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>
4733 <p>Vedleggja er døme på tekster som kan gje relevante perspektiv på
4737 <li>*Flykningeregnskapet 2016, *UNHCR og *IDMC</li>
4738 <li>«*Grenseløst Europa for fall» A-Magasinet, 26. november 2015</li>
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>
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>.
4760 <div class=
"padding"></div>
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>
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>
4780 nfs: server nfsserver not responding, still trying
4781 <br>nfs: server nfsserver OK
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
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>
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>
4803 <p>The content for a NFS mount point look similar to this:
</p>
4805 <p><blockquote><pre>
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
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
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
4841 device binfmt_misc mounted on /proc/sys/fs/binfmt_misc with fstype binfmt_misc
4843 </pre></blockquote></p>
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
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/.
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>
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>
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>.
4881 <div class=
"padding"></div>
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>
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>
4901 <p><a href=
"http://www.hungry.com/~pere/debian-handbook/debian-handbook-nb-NO.pdf">A
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>
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>.
4921 <div class=
"padding"></div>
4925 <a href=
"http://www.hungry.com/~pere/blog/Unlimited_randomness_with_the_ChaosKey_.html">Unlimited randomness with the ChaosKey?
</a>
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>
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; \
4951 0+
1 oppføringer inn
4953 28 byte kopiert,
0,
000264565 s,
106 kB/s
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>
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; \
4975 0+
1 oppføringer inn
4977 104 byte kopiert,
0,
000487647 s,
213 kB/s
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>
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
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>.
5005 <div class=
"padding"></div>
5009 <a href=
"http://www.hungry.com/~pere/blog/Where_did_that_package_go___mdash__geolocated_IP_traceroute.html">Where did that package go?
— geolocated IP traceroute
</a>
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
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
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>
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>
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>
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>
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>
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.
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>
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
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>.
5176 <div class=
"padding"></div>
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>
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>
5200 % appstreamcli what-provides modalias \
5201 usb:v1130p0202d0100dc00dsc00dp00ic03isc00ip00in00
5202 Identifier: pymissile [generic]
5204 Summary: Control original Striker USB Missile Launcher
5206 % appstreamcli what-provides modalias usb:v0694p0002d0000
5207 Identifier: libnxt [generic]
5209 Summary: utility library for talking to the LEGO Mindstorms NXT brick
5212 Identifier: t2n [generic]
5214 Summary: Simple command-line tool for Lego NXT
5217 Identifier: python-nxt [generic]
5219 Summary: Python driver/interface/wrapper for the Lego Mindstorms NXT robot
5222 Identifier: nbc [generic]
5224 Summary: C compiler for LEGO Mindstorms NXT bricks
5229 <p>A similar query can be done using the combined AppStream and
5230 Isenkram databases using the isenkram-lookup tool:
</p>
5233 % isenkram-lookup usb:v1130p0202d0100dc00dsc00dp00ic03isc00ip00in00
5235 % isenkram-lookup usb:v0694p0002d0000
5243 <p>You can find modalias values relevant for your machine using
5244 <tt>cat $(find /sys/devices/ -name modalias)
</tt>.
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>
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>
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>.
5278 <div class=
"padding"></div>
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>
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>
5299 <p>Here is an command line example from my Thinkpad laptop:
</p>
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:
5325 % /usr/sbin/isenkram-autoinstall-firmware -l
5326 info: did not find any firmware files requested by loaded kernel modules. exiting
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>
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>
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
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
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>
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>
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>.
5391 <div class=
"padding"></div>
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>
5401 <p align=
"center"><img width=
"70%" src=
"http://www.hungry.com/~pere/blog/images/2016-12-11-nice-oolite.png"/></p>
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
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>
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
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>
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>
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>
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>.
5452 <div class=
"padding"></div>
5456 <a href=
"http://www.hungry.com/~pere/blog/Quicker_Debian_installations_using_eatmydata.html">Quicker Debian installations using eatmydata
</a>
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.
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>
5488 preseed/
early_command="anna-install eatmydata-udeb"
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>
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>.
5511 <div class=
"padding"></div>
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>
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.
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
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.
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
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>.
5592 <div class=
"padding"></div>
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>
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
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>
5614 <p>To test it, install 'coz-profiler' using apt and run it like this:
</p>
5617 <tt>coz run --- /path/to/binary-with-debug-info
</tt>
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>
5627 <tt>sensible-browser /usr/share/coz-profiler/viewer/index.htm
</tt>
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
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>.
5644 <div class=
"padding"></div>
5648 <a href=
"http://www.hungry.com/~pere/blog/My_own_self_balancing_Lego_Segway.html">My own self balancing Lego Segway
</a>
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,
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
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
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>
5683 <p align=
"center"><img width=
"70%" src=
"http://www.hungry.com/~pere/blog/images/2016-11-04-lego-htway-robot.jpeg"></p>
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>
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">
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>
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
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>.
5716 <div class=
"padding"></div>
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>
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>
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
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>
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>
5767 <p>So, the updated recipe for Debian Jessie:
</p>
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.
5776 apt install git tor chromium
5777 git clone https://github.com/WhisperSystems/Signal-Desktop.git
5780 <li>Modify the source code using command listed in the the patch
5783 <li>Start Signal using the run-signal-app wrapper (for example using
5784 <tt>`pwd`/run-signal-app
</tt>).
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>
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>
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
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>
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>
5821 cd Signal-Desktop; cat
<<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
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
5845 - var BUILD_EXPIRATION =
0;
5846 + var BUILD_EXPIRATION = Date.now() + (
90 *
24 *
60 *
60 *
1000);
5848 window.extension = window.extension || {};
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
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') },
5863 clearQR: function() {
5864 diff --git a/options.html b/options.html
5865 index dc0f28e.
.8d709f6
100644
5869 <div class='nav'
>
5870 <h1
>{{ installWelcome }}
</h1
>
5871 <p
>{{ installTagline }}
</p
>
5872 -
<div
> <a class='button step2'
>{{ installGetStartedButton }}
</a
> </div
>
5873 +
<div
> <a class='button step2'
>{{ installGetStartedButton }}
</a
>
5874 +
<br
> <a
class="button callreg"
>Register without mobile phone
</a
>
5877 <span class='dot step1 selected'
></span
>
5878 <span class='dot step2'
></span
>
5879 <span class='dot step3'
></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
5887 +
userdata="`pwd`/userdata"
5888 +if [ -d "$userdata" ] && [ ! -d "$userdata/.git" ] ; then
5889 + (cd $userdata && git init)
5891 +(cd $userdata && git add . && git commit -m "Current status." || true)
5893 +
--proxy-server="socks://localhost:
9050" \
5894 + --user-data-dir=$userdata --load-and-launch-app=`pwd`
5896 chmod a+rx run-signal-app
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>
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>.
5912 <div class=
"padding"></div>
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>
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>
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>
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
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>
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>
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>
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:
5999 SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="
0694", ATTR{idProduct}=="
0001", \
6000 SYMLINK+="rcx-%k", TAG+="uaccess"
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
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>
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>
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>
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>
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>.
6044 <div class=
"padding"></div>
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>
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
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>
6072 <p>Our goal is still to make the Norwegian book available on paper as well as
6073 electronic form.
</p>
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>.
6084 <div class=
"padding"></div>
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>
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>
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>
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:
6121 <p><blockquote><pre>
6122 coz run --- program-to-run
6123 </pre></blockquote></p>
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 <coz.h> 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>
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
6141 <a href="https://www.usenix.org/conference/atc16/technical-sessions/presentation/curtsinger
">Coz:
6142 finding code that counts with causal profiling</a>.</p>
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
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>
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
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>.
6166 <div class="padding
"></div>
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>
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>
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>
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
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>
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>
6220 adb reboot-bootloader
6221 fastboot oem rebootRUU
6222 fastboot flash zip rom.zip
6223 fastboot flash zip rom.zip
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
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
6238 fastboot oem get_identifier_token 2>&1 | sed 's/(bootloader) //'
6241 <p>And once I got the unlock code via email, I could use it like
6245 fastboot flash unlocktoken Unlock_code.bin
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>
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>.
6263 <div class="padding
"></div>
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>
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>
6287 <p>First, I fetched the Signal desktop source from Github, using
6290 git clone https://github.com/WhisperSystems/Signal-Desktop.git
6293 <p>Next, I patched the source to use the production servers, to be
6294 able to talk to other Signal users:
</p>
6297 cat
<<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
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
6318 - var BUILD_EXPIRATION =
0;
6319 + var BUILD_EXPIRATION =
1474492690000;
6321 window.extension = window.extension || {};
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>
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>
6339 --proxy-server="socks://localhost:
9050" \
6340 --user-data-dir=`pwd`/userdata --load-and-launch-app=`pwd`
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>
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.
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>
6373 <p><strong>Update
2017-
01-
10</strong>: There is an updated blog post
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
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>.
6388 <div class=
"padding"></div>
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>
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>
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>
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>
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
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>.
6441 <div class=
"padding"></div>
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>
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
–
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>
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>
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>
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
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>
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>
6519 <p><blockquote><pre>
6520 <?xml
version="
1.0"
encoding="UTF-
8"?
>
6521 <mime-info
xmlns="http://www.freedesktop.org/standards/shared-mime-info"
>
6522 <mime-type
type="audio/x-rosegarden"
>
6523 <sub-class-of
type="application/x-gzip"/
>
6524 <comment
>Rosegarden project file
</comment
>
6525 <glob
pattern="*.rg"/
>
6528 </pre></blockquote></p>
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>
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>
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
6544 </pre></blockquote></p>
6546 <p>The fix was to add "audio/x-rosegarden;" at the end of the
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
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>.
6566 <div class=
"padding"></div>
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>
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>
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>
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>
6605 <p><blockquote><pre>
6621 </pre></blockquote></p>
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>.
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>
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>.
6640 <div class=
"padding"></div>
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>
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>
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
6668 <p align=
"center"><img src=
"http://www.hungry.com/~pere/blog/images/2016-05-23-battery-stats-rate.png"/></p>
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:
6675 <p align=
"center"><img src=
"http://www.hungry.com/~pere/blog/images/2016-05-23-battery-stats-history.png"/></p>
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
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
6688 <p>If you are interested in how your laptop battery is doing, please
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>
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>
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>.
6709 <div class=
"padding"></div>
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>
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>
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>.
6741 <div class=
"padding"></div>
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>
6751 <p><strong>Where I set out to figure out which multimedia player in
6752 Debian claim support for most file formats.
</strong></p>
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
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>
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>
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
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>.
6797 <div class=
"padding"></div>
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>
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>
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>
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>
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>.
6833 <div class=
"padding"></div>
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>
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
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>
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>
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>.
6873 <div class=
"padding"></div>
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>
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>
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>
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>
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>
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>.
6934 <div class=
"padding"></div>
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>
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>
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:
6958 /usr/share/battery-stats/battery-stats-graph /var/log/battery-stats.csv
6961 <p>Or select the 'Battery Level Graph' from your application menu.
</p>
6963 <p>The flow in/out of the battery can be seen by running (no menu
6967 /usr/share/battery-stats/battery-stats-graph-flow
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>
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>
6985 <p>If you are interested in how your laptop battery is doing, please
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>
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>.
7002 <div class=
"padding"></div>
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>
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>
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>
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>
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>
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
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
7054 <a href=
"https://github.com/petterreinholdtsen/battery-stats">github
</a>.
7055 I would love some help to improve the system further.
</p>
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>.
7066 <div class=
"padding"></div>
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>
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>
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>
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
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>.
7106 <p>To generate using debmake, use the -cc option:
7109 debmake -cc
> debian/copyright
7112 <p>Note there are some problems with python and non-ASCII names, so
7113 this might not be the best option.
</p>
7115 <p>The cme option is based on a config parsing library, and I found
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:
7122 cme update dpkg-copyright
7125 <p>This will create or update debian/copyright. The cme tool seem to
7126 handle UTF-
8 names better than debmake.
</p>
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>
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>
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>
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>
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
7156 licensecheck --copyright -r `find * -type f` | \
7157 /usr/lib/cdbs/licensecheck2dep5
> debian/copyright.auto
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>
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
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>.
7178 <div class=
"padding"></div>
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>
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
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>
7203 % apt install appstream
7207 % appstreamcli what-provides firmware:runtime ctfw-
3.2.3.0.bin | \
7208 awk '/Package:/ {print $
2}'
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>
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>
7225 % apt install appstream
7229 % appstreamcli what-provides mimetype image/svg+xml | \
7230 awk '/Package:/ {print $
2}'
7254 <p>I believe the MIME types are fetched from the desktop file for
7255 packages providing appstream metadata.
</p>
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>.
7266 <div class=
"padding"></div>
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>
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
7293 <p align=
"center"><img width=
"70%" src=
"http://www.hungry.com/~pere/blog/images/2016-01-24-nice-creepy-desktop-window.png"></p>
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
7315 <a href=
"https://github.com/jkakavas/creepy">upstream
</a>.
</p>
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>
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
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>
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>
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>.
7364 <div class=
"padding"></div>
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>
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>
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>
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
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
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>
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>
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>
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
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>.
7443 <div class=
"padding"></div>
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>
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>
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
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>
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>
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>
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>.
7508 <div class=
"padding"></div>
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>
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
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>
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
7555 <?xml
version="
1.0"
encoding="UTF-
8"?
>
7557 <id
>pymissile
</id
>
7558 <metadata_license
>MIT
</metadata_license
>
7559 <name
>pymissile
</name
>
7560 <summary
>Control original Striker USB Missile Launcher
</summary
>
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
7568 </description
>
7570 <modalias
>usb:v1130p0202d*
</modalias
>
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
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>
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>
7597 debian/pymissile.metainfo.xml usr/share/appdata
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
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>
7609 <p>To locate the modalias values of all hardware present in a machine,
7610 try running this command on the command line:
</p>
7613 cat $(find /sys/devices/|grep modalias)
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>
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>.
7629 <div class=
"padding"></div>
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>
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>
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>
7650 The GPL is not magic pixie dust. It does not work by itself.<br/>
7652 The first step is to choose a
7653 <a href="https://copyleft.org/
">copyleft</a> license for your
7656 The next step is, when someone fails to follow that copyleft license,
7657 <b>it must be enforced</b><br/>
7659 and its a simple fact of our modern society that such type of
7662 is incredibly expensive to do and incredibly difficult to do.
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>
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&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
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
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
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
7721 <a href="https://sfconservancy.org/blog/
2015/nov/
24/faif-carols-fundraiser/
">Carol
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
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>
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
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>.
7750 <div class="padding
"></div>
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>
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>
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 <pere@hungry.com>
7775 uid Petter Reinholdtsen <pere@debian.org>
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]
7781 <p>The key can be downloaded from the OpenPGP key servers, signed by
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>
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>.
7799 <div class="padding
"></div>
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>
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>
7817 <img src="http://www.hungry.com/~pere/blog/images/
2015-
09-
24-laptop-battery-graph.png
"/>
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
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
7830 <a href="https://github.com/jradavenport/batlog.git
">batlog</a>, not
7831 available in Debian.</p>
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>
7843 # http://www.ifweassume.com/2013/08/the-de-evolution-of-my-laptop-battery.html
7845 # http://blog.sleeplessbeastie.eu/2013/01/02/debian-how-to-monitor-battery-capacity/
7846 logfile=/var/log/hjemmenett-battery-status.log
7848 files="manufacturer model_name technology serial_number \
7849 energy_full energy_full_design energy_now cycle_count status"
7851 if [ ! -e "$logfile" ] ; then
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); \
7871 cd /sys/class/power_supply
7874 (cd $bat && log_battery
>> "$logfile")
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>
7887 <p>The collected log file look like this:
</p>
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,
7893 1443090528,LGC,
45N1025,Li-ion,
974,
4900000,
62160000,
4900000,
0,Full,
7894 1443090601,LGC,
45N1025,Li-ion,
974,
4900000,
62160000,
4900000,
0,Full,
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
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
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
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
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
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>.
7950 <div class=
"padding"></div>
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>
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>
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.
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>
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>
8001 <p>Again, thank you all for the very useful feedback. It help a lot
8002 as I keep looking for a replacement.
</p>
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
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>
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>.
8019 <div class=
"padding"></div>
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>
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
8035 <p>My requirements have not really changed since I bought it, and is
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
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>
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>
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>
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>.
8068 <div class=
"padding"></div>
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>
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,
8082 <a href=
"http://www.vitavonni.de/blog/201410/2014102101-avoiding-systemd.html">Erich
8084 <a href=
"http://smcv.pseudorandom.co.uk/2014/still_universal/">Simon
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
8092 <p><blockquote><pre>
8093 Package: systemd-sysv
8094 Pin: release o=Debian
8096 </pre></blockquote><p>
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>
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:
8111 <p><blockquote><pre>
8112 preseed/
late_command="in-target apt-get install --purge -y sysvinit-core"
8113 </pre></blockquote><p>
8115 <p>Next, the line to use in a preseed file:
</p>
8117 <p><blockquote><pre>
8118 d-i preseed/late_command string in-target apt-get install -y sysvinit-core
8119 </pre></blockquote><p>
8121 <p>One can of course also do this after the first boot by installing
8122 the sysvinit-core package.
</p>
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>
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
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>.
8145 <div class=
"padding"></div>
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>
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>
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>
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>
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
8200 <p><blockquote><pre>
8201 torsocks swaks --server dutlqrrmjhtfa3vp.onion \
8202 --to fbx@dutlqrrmjhtfa3vp.onion
8203 </pre></blockquote></p>
8205 <p>This will test the SMTP delivery using tor. Replace the email
8206 address with your own address to test your server. :)
</p>
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
8220 <p>Until I wipe my test machine, I can be reached using the
8221 <tt>fbx@dutlqrrmjhtfa3vp.onion
</tt> mail address, deliverable over
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>.
8233 <div class=
"padding"></div>
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>
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>
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
8264 </pre></blockquote></p>
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
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>
8279 <p><blockquote><pre>
8280 username username@example.org
8283 discard_if_reason "Posting restricted to members only. Remove us from your mail list."
8286 adminurl https://{domain}/mailman/admindb/{list}
8287 mailman-list@lists.example.com
8290 other-list@otherserver.example.org
8291 </pre></blockquote></p>
8293 <p>There are other options to set as well. Check the manual page to
8294 learn the details.
</p>
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>
8301 <p><blockquote><pre>
8302 PERL_LWP_SSL_VERIFY_HOSTNAME=
0 listadmin
8303 </pre></blockquote></p>
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
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
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>
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
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>.
8336 <div class=
"padding"></div>
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>
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>
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
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>
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>
8376 <p>The end result is two lines needed in your preseeding file to get
8377 firmware installed automatically by the installer:
</p>
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>
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>
8393 <p>If you decide to give this a go, please let me know (via email) how
8394 this recipe work for you. :)
</p>
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>
8402 <p><blockquote><pre>
8403 Task: isenkram-packages
8405 Description: Hardware specific packages (autodetected by isenkram)
8406 Based on the detected hardware various hardware specific packages are
8408 Test-new-install: show show
8410 Packages: for-current-hardware
8412 Task: isenkram-firmware
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
8419 Packages: for-current-hardware-firmware
8420 </pre></blockquote></p>
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:
8428 <p><blockquote><pre>
8431 PATH=/usr/sbin:$PATH
8433 isenkram-autoinstall-firmware -l
8434 </pre></blockquote></p>
8436 <p>With those two pieces in place, the firmware is installed by
8437 tasksel during the normal d-i run. :)
</p>
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
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>
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>.
8457 <div class=
"padding"></div>
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>
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>
8472 <p align=
"center"><img width=
"70%" src=
"http://www.hungry.com/~pere/blog/images/2014-10-04-ubuntu-ica-storo-crop.jpeg"></p>
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>
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>.
8487 <div class=
"padding"></div>
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>
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
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
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>
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>
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>.
8543 <div class=
"padding"></div>
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>
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
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>
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>
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>
8578 <p>When you get to the Debian Edu profile question, go to tty2
8579 (use Alt-Ctrl-F2), run
</p>
8581 <p><blockquote><pre>
8582 nano /usr/bin/edu-eatmydata-install
8583 </pre></blockquote></p>
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>
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
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
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>
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>
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>.
8627 <div class=
"padding"></div>
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>
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>
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
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>.
8671 <div class=
"padding"></div>
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>
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>
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
$program
$@", 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>
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
8732 <th>Machine/setup
</th>
8733 <th>Original tasksel
</th>
8734 <th>Optimised tasksel
</th>
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>
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>
8753 <td>Latitude D505 Minimal
</td>
8754 <td>22 min (
10:
37-
10:
59)
</td>
8755 <td>11 min (
11:
16-
11:
27)
</td>
8760 <td>Thinkpad X200 Minimal
</td>
8761 <td>6 min (
08:
19-
08:
25)
</td>
8762 <td>4 min (
08:
04-
08:
08)
</td>
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>
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
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>
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>
8802 <p><blockquote><pre>
8805 . /usr/share/debconf/confmodule
8807 logger -t my-pkgsel "info: $*"
8810 logger -t my-pkgsel "error: $*"
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
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" \
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
8827 error "unable to divert $file, as it is missing."
8831 error "unable to find /usr/bin/eatmydata after installing the eatmydata pacage"
8836 </pre></blockquote></p>
8838 <p>To clean up, another shell script should go into
8839 /usr/lib/finish-install.d/ with code like this:
8841 <p><blockquote><pre>
8843 . /usr/share/debconf/confmodule
8845 logger -t my-finish-install "error: $@"
8847 remove_install_override() {
8848 for bin in dpkg apt-get aptitude tasksel ; do
8850 if [ -x /target$file.edu ] ; then
8852 in-target dpkg-divert --package debian-edu-config \
8853 --rename --quiet --remove $file
8856 error "Missing divert for $file."
8859 sync # Flush file buffers before continuing
8862 remove_install_override
8863 </pre></blockquote></p>
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>
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
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>
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>
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>
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>.
8905 <div class=
"padding"></div>
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>
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>
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>
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>
8936 <p>Anyway, I've updated my ~/.gnupg/options file to now include this
8939 <p><blockquote><pre>
8940 keyserver pool.sks-keyservers.net
8941 </pre></blockquote></p>
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>
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.
8952 </pre></blockquote></p>
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>
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>.
8974 <div class=
"padding"></div>
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>
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>
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
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>
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>
9046 <p>The translators use different tools to edit the .po files. We
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>
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>
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>
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>
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>.
9092 <div class=
"padding"></div>
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>
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>
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
9118 <p><blockquote><pre>
9121 Description: Hardware specific packages (autodetected by isenkram)
9122 Based on the detected hardware various hardware specific packages are
9124 Test-new-install: mark show
9126 Packages: for-current-hardware
9127 </pre></blockquote></p>
9129 <p>The second part is in
9130 <tt>/usr/lib/tasksel/packages/for-current-hardware
</tt> and look like
9133 <p><blockquote><pre>
9138 isenkram-autoinstall-firmware -l
9140 </pre></blockquote></p>
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>
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
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>
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
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>
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>.
9193 <div class=
"padding"></div>
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>
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>
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>
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>
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
9236 sudo apt-get install git vmdebootstrap mercurial python-docutils \
9237 mktorrent extlinux virtualbox qemu-user-static binfmt-support \
9239 git clone http://anonscm.debian.org/git/freedombox/freedom-maker.git \
9241 make -C freedom-maker dreamplug-image raspberry-image virtualbox-image
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>
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>
9258 url=
<a href=
"http://www.reinholdtsen.name/freedombox/preseed-jessie.dat">http://www.reinholdtsen.name/freedombox/preseed-jessie.dat
</a>
9261 <p>I have not tested it myself the last few weeks, so I do not know if
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>
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>
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>.
9288 <div class=
"padding"></div>
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>
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>
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>
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
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:
9351 <p><blockquote><pre>
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>
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>
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...
9385 Compressing and uploading metadata...
9386 Wrote
0.00 MB of compressed metadata.
9387 #
</pre></blockquote></p>
9389 <p>The next step is mounting the file system to make the storage available.
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...
9405 Mounting filesystem...
9407 Filesystem Size Used Avail Use% Mounted on
9408 s3c://s.greenqloud.com:
443/bucket-name
1.0T
0 1.0T
0% /s3ql
9410 </pre></blockquote></p>
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:
9419 <p><blockquote><pre>
9422 </pre></blockquote></p>
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
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...
9471 Compressing and uploading metadata...
9472 Wrote
0.89 MB of compressed metadata.
9474 </pre></blockquote></p>
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
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
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.
9497 </pre></blockquote></p>
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
9505 <p><blockquote><pre>
9506 # s3qlctrl upload-meta /s3ql
9507 # s3qlctrl flushcache /s3ql
9509 </pre></blockquote></p>
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
9516 <p><blockquote><pre>
9518 Directory entries:
9141
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)
9527 </pre></blockquote></p>
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
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
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>
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>
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>
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>
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>.
9582 <div class="padding
"></div>
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>
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
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
9609 <a href=
"http://packages.qa.debian.org/vmdebootstrap">vmdebootstrap
</a>
9610 with a user with sudo access to become root:
9613 git clone http://anonscm.debian.org/git/freedombox/freedom-maker.git \
9615 sudo apt-get install git vmdebootstrap mercurial python-docutils \
9616 mktorrent extlinux virtualbox qemu-user-static binfmt-support \
9618 make -C freedom-maker dreamplug-image raspberry-image virtualbox-image
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
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>
9633 url=
<a href=
"http://www.reinholdtsen.name/freedombox/preseed-jessie.dat">http://www.reinholdtsen.name/freedombox/preseed-jessie.dat
</a>
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>
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>
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>.
9659 <div class=
"padding"></div>
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>
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>
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>
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>
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>.
9703 <div class=
"padding"></div>
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>
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>
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>
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}')
9735 </pre></blockquote></p>
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>
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
9747 <p>Run these commands as root to upgrade and test the new sysvinit
9750 <p><blockquote><pre>
9751 cat
> /etc/apt/sources.list.d/experimental.list
<<EOF
9752 deb http://http.debian.net/debian/ experimental main
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>
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
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>
9778 <p><blockquote><pre>
9779 cat
> /etc/apt/sources.list.d/hurd-ci.list
<<EOF
9780 deb http://darnassus.sceen.net/~teythoon/hurd-ci/ sid main
9782 </pre></blockquote></p>
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>
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
9807 </pre></blockquote></p>
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>
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>.
9823 <div class=
"padding"></div>
9827 <a href=
"http://www.hungry.com/~pere/blog/New_chrpath_release_0_16.html">New chrpath release
0.16</a>
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>
9858 <p>New in
0.16 released
2014-
01-
14:
</p>
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>
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>
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>.
9884 <div class=
"padding"></div>
9888 <a href=
"http://www.hungry.com/~pere/blog/New_chrpath_release_0_15.html">New chrpath release
0.15</a>
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>
9909 <p>New in
0.15 released
2013-
11-
24:
</p>
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
9917 <li>Updated README with current URLs.
</li>
9919 <li>Added byteswap fix found in Ubuntu, credited Jeremy Kerr and
9920 Matthias Klose.
</li>
9922 <li>Added missing help for -k|--keepgoing option, using patch by
9923 Petr Machata found in Fedora.
</li>
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>
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>
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>.
9947 <div class=
"padding"></div>
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>
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>
9964 #!/lib/init/init-d-script
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.
9977 DESC="enhanced syslogd"
9978 DAEMON=/usr/sbin/rsyslogd
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
9985 <p>How to do this, you ask? Well, one create a new script
9986 /lib/init/init-d-script looking something like this:
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
9997 # Function that starts the daemon/service
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 \
10008 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
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.
10017 # Function that stops the daemon/service
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
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.
10043 # Function that sends a SIGHUP to the daemon/service
10047 # If the daemon can reload its configuration without
10048 # restarting (for example, when it is sent a SIGHUP),
10049 # then implement that here.
10051 start-stop-daemon --stop --signal
1 --quiet --pidfile $PIDFILE --name $NAME
10056 scriptbasename="$(basename $
1)"
10057 echo "SN: $scriptbasename"
10058 if [ "$scriptbasename" != "init-d-library" ] ; then
10066 NAME=$(basename $DAEMON)
10067 PIDFILE=/var/run/$NAME.pid
10069 # Exit if the package is not installed
10070 #[ -x "$DAEMON" ] || exit
0
10072 # Read configuration variable file if it is present
10073 [ -r /etc/default/$NAME ] && . /etc/default/$NAME
10075 # Load the VERBOSE setting and other rcS variables
10076 . /lib/init/vars.sh
10080 [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
10083 0|
1) [ "$VERBOSE" != no ] && log_end_msg
0 ;;
10084 2) [ "$VERBOSE" != no ] && log_end_msg
1 ;;
10088 [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
10091 0|
1) [ "$VERBOSE" != no ] && log_end_msg
0 ;;
10092 2) [ "$VERBOSE" != no ] && log_end_msg
1 ;;
10096 status_of_proc "$DAEMON" "$NAME" && exit
0 || exit $?
10098 #reload|force-reload)
10100 # If do_reload() is not implemented then leave this commented out
10101 # and leave 'force-reload' as an alias for 'restart'.
10103 #log_daemon_msg "Reloading $DESC" "$NAME"
10107 restart|force-reload)
10109 # If the "reload" option is implemented then remove the
10110 # 'force-reload' alias
10112 log_daemon_msg "Restarting $DESC" "$NAME"
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
10130 echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}"
>&
2
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>
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>
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>.
10158 <div class=
"padding"></div>
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>
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>
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>
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>.
10193 <div class=
"padding"></div>
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>
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
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
10239 <a href=
"http://git.liw.fi/cgi-bin/cgit/cgit.cgi/vmdebootstrap/">the
10240 upstream project page
</a>.
</p>
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
10249 set -e # Exit on first error
10252 cat
<<EOF
> etc/apt/sources.list
10253 deb http://http.debian.net/debian/ jessie main contrib non-free
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
10265 <p>Next, fetch the latest vmdebootstrap script and call it like this
10266 to build the image:
</p>
10269 sudo ./vmdebootstrap \
10270 --variant minbase \
10272 --distribution jessie \
10273 --mirror http://http.debian.net/debian \
10278 --log-level debug \
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 \
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>
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>
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>
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>.
10320 <div class=
"padding"></div>
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>
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
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>
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>
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
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>.
10365 <div class=
"padding"></div>
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>
10372 27th September
2013
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>
10382 <li><a href=
"http://www.youtube.com/watch?v=ukvUz5taxvA">FreedomBox -
10383 2,
5 minute marketing film
</a> (Youtube)
</li>
10385 <li><a href=
"http://www.youtube.com/watch?v=SzW25QTVWsE">Eben Moglen
10386 discusses the Freedombox on CBS news
2011</a> (Youtube)
</li>
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>
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>
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>
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>
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>
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>
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>
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>
10419 <p>A larger list is available from
10420 <a href=
"https://wiki.debian.org/FreedomBox/TalksAndPresentations">the
10421 Freedombox Wiki
</a>.
</p>
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>
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>.
10444 <div class=
"padding"></div>
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>
10451 10th September
2013
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>
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>
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>
10486 <p>The current Freedombox setup consist of a set of bootstrapping
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>
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
10512 <p><strong>Debian Wheezy amd64
</strong></p>
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>
10522 <li>Answer the few language/region/password questions and pick disk to
10525 <li>When the installation is finished and the machine have rebooted a
10526 few times, your Freedombox is ready for testing.
</li>
10530 <p><strong>Raspberry Pi Raspbian
</strong></p>
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>
10538 deb
<a href=
"http://www.reinholdtsen.name/freedombox/">http://www.reinholdtsen.name/freedombox
</a> wheezy main
10540 <li><p>Run this as root:
</p>
10542 wget -O - http://www.reinholdtsen.name/freedombox/BE1A583D.asc | \
10545 apt-get install freedombox-setup
10546 /usr/lib/freedombox/setup
10548 <li>Reboot into your freshly created Freedombox.
</li>
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>
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>
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>
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>
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>.
10586 <div class="padding
"></div>
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>
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>
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>
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>.
10627 <div class="padding
"></div>
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>
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>
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>
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>
10677 <li>Set up cryptsetup to pass TRIM commands to the physical disk
10678 (adding discard to /etc/crypttab)</li>
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>
10684 <li>Set relatime as a file system option for ext3 and ext4 file
10687 <li>Tell swap to use TRIM commands by adding 'discard' to
10690 <li>Change I/O scheduler from cfq to deadline using a udev rule.</li>
10692 <li>Run fstrim on every ext3 and ext4 file system every night (from
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>
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>
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>
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>
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>
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>
10726 <p>The package should work on Ubuntu too, but I have not yet tested it
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
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>.
10746 <div class="padding
"></div>
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>
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>
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>
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>
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>
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
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>.
10807 <div class=
"padding"></div>
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>
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
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>
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>.
10840 <div class=
"padding"></div>
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>
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
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
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>
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>
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>
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.
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>
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
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>.
10926 <div class=
"padding"></div>
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>
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>
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>
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>
10961 <p>I look forward to figuring out how to turn off the touch pad.
</p>
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>.
10972 <div class=
"padding"></div>
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>
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>
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
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) ...
11011 <p>When all the requested firmware is present, a simple message is
11012 printed instead:
</p>
11015 # isenkram-autoinstall-firmware
11016 info: did not find any firmware files requested by loaded kernel modules. exiting
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>
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
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>
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>.
11049 <div class=
"padding"></div>
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>
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>
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>
11079 echo options i915 invert_brightness=
1 | tee /etc/modprobe.d/i915.conf
11080 update-initramfs -u -k all
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
11095 <p>My Packard Bell EasyNote LV got this output from <tt>lspci
11096 -vvnn</tt> for the video card in question:</p>
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-
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
11117 <p>The resulting intel_quirks entry would then look like this:</p>
11120 struct intel_quirk intel_quirks[] = {
11122 /* Packard Bell EasyNote LV11HC needs invert brightness quirk */
11123 { 0x0156, 0x1025, 0x0688, quirk_invert_brightness },
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
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>
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>
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
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>.
11170 <div class="padding
"></div>
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>
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
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>
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
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>
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
11218 <p>Thanks to Bob Rosbag, Florian Weimer, Philipp Kern, Ben Hutching,
11219 Michael Tokarev and others for feedback and ideas.
</p>
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>.
11230 <div class=
"padding"></div>
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>
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>
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>
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>
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>
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>.
11278 <div class=
"padding"></div>
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>
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>.
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>
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>
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>
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>
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>
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>
11344 PROFILE="Roaming-Workstation"
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
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>.
11362 <div class=
"padding"></div>
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>
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>
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>
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>
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>
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>.
11416 <div class=
"padding"></div>
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>
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
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
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
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>.
11459 <div class=
"padding"></div>
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>
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>
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
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>.
11490 <div class=
"padding"></div>
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>
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
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>
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
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>
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>.
11537 <div class=
"padding"></div>
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>
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>
11563 git clone http://anonscm.debian.org/git/collab-maint/isenkram.git
11564 cd isenkram && git-buildpackage -us -uc
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>
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
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
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>
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>.
11594 <div class=
"padding"></div>
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>
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
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>
11614 <p>The design is simple:
</p>
11618 <li>Add desktop entry in /usr/share/autostart/ causing a program
11619 hw-support-handlerd to start when the user log in.
</li>
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>
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>
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>
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>
11638 <li>aptdaemon ask for root password or sudo password, and install the
11639 package while showing progress information in a window.
</li>
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>
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>
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>
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
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>
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>
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>.
11685 <div class=
"padding"></div>
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>
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.
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>
11710 <li>Lightweight (around
1 kg) and small volume (preferably smaller
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
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
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>
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>
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>.
11753 <div class=
"padding"></div>
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>
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>
11775 def pkgs_handling_mimetype(mimetype):
11776 cache = apt.Cache()
11780 version = pkg.candidate
11781 if version is None:
11782 version = pkg.installed
11783 if version is None:
11785 record = version.record
11786 if not record.has_key('Npp-MimeType'):
11788 mime_types = record['Npp-MimeType'].split(',')
11789 for t in mime_types:
11790 t = t.rstrip().strip()
11792 thepkgs.append(pkg.name)
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):
11802 <p>It can be used like this to look up a given MIME type:
</p>
11805 % ./apt-find-browserplug-for-mimetype
11806 Browser plugin packages supporting audio/ogg:
11808 % ./apt-find-browserplug-for-mimetype application/x-shockwave-flash
11809 Browser plugin packages supporting application/x-shockwave-flash:
11810 browser-plugin-gnash
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>
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>
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>.
11835 <div class=
"padding"></div>
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>
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>
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>
11864 <p><strong>Debian Stable:
</strong></p>
11868 ----- -----------------------
11882 18 audio/x-musepack
11884 18 application/x-ogg
11891 <p><strong>Debian Testing:
</strong></p>
11895 ----- -----------------------
11911 18 application/x-ogg
11914 17 audio/x-musepack
11918 <p><strong>Debian Unstable:
</strong></p>
11922 ----- -----------------------
11939 18 application/x-ogg
11940 17 audio/x-musepack
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
11950 <p><strong>Update
2013-
01-
16 13:
35</strong>: Updated numbers after
11951 discovering a typo in my script.
</p>
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>.
11962 <div class=
"padding"></div>
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>
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
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
11989 Package: package-name
11990 <br>Modaliases: module(modaliasglob, modaliasglob, modaliasglob)
</p>
11993 <p>It is fairly trivial to write code to find the relevant packages
11994 for a given modalias value using this file.
</p>
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>
12001 <br>Modaliases: cheese(usb:v*p*d*dc*dsc*dp*ic0Eisc01ip*)
</p>
12004 <p>An entry like this would suggest the pcmciautils package when a
12005 CardBus bridge (bus class
0607) PCI device is present:
</p>
12008 Package: pcmciautils
12009 <br>Modaliases: pcmciautils(pci:v*d*sv*sd*bc06sc07i*)
12012 <p>An entry like this would suggest the package colorhug-client when
12013 plugging in a ColorHug with USB IDs
04D8:F8DA:
</p>
12016 Package: colorhug-client
12017 <br>Modaliases: colorhug-client(usb:v04D8pF8DAd*)
</p>
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>
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
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
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>
12043 <p>When I use it on a machine with a yubikey inserted, it suggest to
12044 install yubikey-personalization:
</p>
12047 % ./hw-support-lookup
12048 <br>yubikey-personalization
12052 <p>When I run it on my Thinkpad X40 with a PCMCIA/CardBus slot, it
12053 propose to install the pcmciautils package:
</p>
12056 % ./hw-support-lookup
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>
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>
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>
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>.
12088 <div class=
"padding"></div>
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>
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
12103 <a href=
"http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/">the
12104 Debian Edu subversion repository
</a>:
12106 <p><strong>Modalias decoded
</strong></p>
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 <URL:
<a href=
"https://wiki.archlinux.org/index.php/Modalias">https://wiki.archlinux.org/index.php/Modalias
</a> >,
12111 <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> >,
12112 <URL:
<a href=
"http://code.metager.de/source/history/linux/stable/scripts/mod/file2alias.c">http://code.metager.de/source/history/linux/stable/scripts/mod/file2alias.c
</a> > and
12113 <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> >.
12115 <p>The modalias entries for a given Linux machine can be found using
12116 this shell script:
</p>
12119 find /sys -name modalias -print0 | xargs -
0 cat | sort -u
12122 <p>The supported modalias globs for a given kernel module can be found
12126 % /sbin/modinfo psmouse | grep alias:
12127 alias: serio:ty05pr*id*ex*
12128 alias: serio:ty01pr*id*ex*
12132 <p><strong>PCI subtype
</strong></p>
12134 <p>A typical PCI entry can look like this. This is an Intel Host
12135 Bridge memory controller:
</p>
12138 pci:v00008086d00002770sv00001028sd000001ADbc06sc00i00
12141 <p>This represent these values:
</p>
12144 v
00008086 (vendor)
12145 d
00002770 (device)
12146 sv
00001028 (subvendor)
12147 sd
000001AD (subdevice)
12149 sc
00 (bus subclass)
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>
12158 <p>Not sure how to figure out the interface value, nor what it
12161 <p><strong>USB subtype
</strong></p>
12163 <p>Some typical USB entries can look like this. This is an internal
12164 USB hub in a laptop:
</p>
12167 usb:v1D6Bp0001d0206dc09dsc00dp00ic09isc00ip00
12170 <p>Here is the values included in this alias:
</p>
12173 v
1D6B (device vendor)
12174 p
0001 (device product)
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)
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>
12189 usb:v0AC8p3420d5000dcEFdsc02dp01ic01isc01ip00
12190 <br>usb:v0AC8p3420d5000dcEFdsc02dp01ic01isc02ip00
12191 <br>usb:v0AC8p3420d5000dcEFdsc02dp01ic0Eisc01ip00
12192 <br>usb:v0AC8p3420d5000dcEFdsc02dp01ic0Eisc02ip00
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>
12199 <p><strong>ACPI subtype
</strong></p>
12201 <p>The ACPI type is used for several non-PCI/USB stuff. This is an IR
12202 receiver in a Thinkpad X40:
</p>
12205 acpi:IBM0071:PNP0511:
12208 <p>The values between the colons are IDs.
</p>
12210 <p><strong>DMI subtype
</strong></p>
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>
12217 dmi:bvnIBM:bvr1UETB6WW(
1.66):bd06/
15/
2005:svnIBM:pn2371H4G:pvrThinkPadX40:rvnIBM:rn2371H4G:rvrNotAvailable:cvnIBM:ct10:cvrNotAvailable:
12220 <p>The values present are
</p>
12223 bvn IBM (BIOS vendor)
12224 bvr
1UETB
6WW(
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)
12237 <p>The chassis type
10 is Notebook. Other interesting values can be
12238 found in the dmidecode source:
</p>
12242 4 Low Profile Desktop
12255 17 Main Server Chassis
12256 18 Expansion Chassis
12258 20 Bus Expansion Chassis
12259 21 Peripheral Chassis
12261 23 Rack Mount Chassis
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>
12274 <p><strong>SerIO subtype
</strong></p>
12276 <p>This type is used for PS/
2 mouse plugs. One example is from my
12280 serio:ty01pr00id00ex00
12283 <p>The values present are
</p>
12292 <p>This type is supported by the psmouse driver. I am not sure what
12293 the valid values are.
</p>
12295 <p><strong>Other subtypes
</strong></p>
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>
12305 <p><strong>Looking up kernel modules using modalias values
</strong></p>
12307 <p>To check which kernel modules provide support for a given modalias,
12308 one can use the following shell script:
</p>
12311 for id in $(find /sys -name modalias -print0 | xargs -
0 cat | sort -u); do \
12313 /sbin/modprobe --show-depends "$id"|sed 's/^/ /' ; \
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>
12322 insmod /lib/modules/
2.6.32-
5-
686/kernel/drivers/acpi/ac.ko
12324 FATAL: Module acpi:device: not found.
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
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>
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>
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>.
12355 <div class=
"padding"></div>
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>
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>
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>.
12393 <div class="padding
"></div>
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>
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>
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
12422 <li>Add a desktop entry in /usr/share/autostart/ pointing to a program
12423 starting when a user log in.</li>
12425 <li>Set this program up to listen for kernel events emitted when new
12426 hardware is inserted into the computer.</li>
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
12432 <li>Show a message to the user proposing to install the discovered
12433 package, and make it easy to install it.</li>
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
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>
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
12462 <p align="center
"><img src="http://www.hungry.com/~pere/blog/images/
2013-
01-
09-hw-autoinstall.png
"></p>
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>
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>
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>
12486 <p>If you want to help getting such feature implemented in Debian,
12487 please send me an email. :)
</p>
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>.
12498 <div class=
"padding"></div>
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>
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>
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>
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>.
12532 <div class=
"padding"></div>
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>
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>
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
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>
12561 git clone git://git.debian.org/git/collab-maint/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>
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>
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>
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>.
12590 <div class=
"padding"></div>
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>
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
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>
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.
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>
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>
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>.
12671 <div class=
"padding"></div>
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>
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>
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>
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>
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>.
12707 <div class=
"padding"></div>
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>
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>
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>.
12731 <div class=
"padding"></div>
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>
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>
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>.
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>.
12770 <div class=
"padding"></div>
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>
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>
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>
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>
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>
12813 use File::Temp qw(tempdir);
12815 # Install needed RHEL packages if missing
12816 my %rhelmodules = (
12817 'XML::Simple' =
> 'perl-XML-Simple',
12819 for my $module (keys %rhelmodules) {
12820 eval "use $module;";
12822 my $pkg = $rhelmodules{$module};
12823 system("yum install -y $pkg");
12824 eval "use $module;";
12828 my $errorsto = 'pere@hungry.com';
12834 sub run_firmware_script {
12835 my ($opts, $script) = @_;
12837 print STDERR "fail: missing script name\n";
12840 print STDERR "Running $script\n\n";
12842 if (
0 == system("sh $script $opts")) { # FIXME correct exit code handling
12843 print STDERR "success: firmware script ran succcessfully\n";
12845 print STDERR "fail: firmware script returned error\n";
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");
12865 print STDERR "info: Downloading $url\n";
12866 system("wget --quiet \"$url\"");
12871 my $product = `dmidecode -s system-product-name`;
12874 if ($product =~ m/PowerEdge/) {
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');
12879 my $tmpdir = tempdir(
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
12889 for my $url (@paths) {
12890 fetch_dell_fw($url);
12892 run_firmware_scripts($fwopts, $tmpdir);
12894 print STDERR
"error: Unsupported Dell model '$product'.\n";
12895 print STDERR
"error: Please report to $errorsto.\n";
12899 print STDERR
"error: Unsupported Dell model '$product'.\n";
12900 print STDERR
"error: Please report to $errorsto.\n";
12904 sub fetch_dell_fw {
12906 my $url =
"ftp://ftp.us.dell.com/$path";
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;
12916 my $product = `dmidecode -s system-product-name`;
12918 my ($mybrand, $mymodel) = split(/\s+/, $product);
12920 print STDERR
"Finding firmware bundles for $mybrand $mymodel\n";
12922 my $xml = XMLin($filename);
12924 for my $bundle (@{$xml-
>{SoftwareBundle}}) {
12925 my $brand = $bundle-
>{TargetSystems}-
>{Brand}-
>{Display}-
>{content};
12926 my $model = $bundle-
>{TargetSystems}-
>{Brand}-
>{Model}-
>{Display}-
>{content};
12928 if ("ARRAY" eq ref $bundle-
>{TargetOSes}-
>{OperatingSystem}) {
12929 $oscode = $bundle-
>{TargetOSes}-
>{OperatingSystem}[
0]-
>{osCode};
12931 $oscode = $bundle-
>{TargetOSes}-
>{OperatingSystem}-
>{osCode};
12933 if ($mybrand eq $brand && $mymodel eq $model && "LIN" eq $oscode)
12935 @paths = map { $_-
>{path} } @{$bundle-
>{Contents}-
>{Package}};
12938 for my $component (@{$xml-
>{SoftwareComponent}}) {
12939 my $componenttype = $component-
>{ComponentType}-
>{value};
12941 # Drop application packages, only firmware and BIOS
12942 next if 'APAC' eq $componenttype;
12944 my $cpath = $component-
>{path};
12945 for my $path (@paths) {
12946 if ($cpath =~ m%/$path$%) {
12947 push(@paths, $cpath);
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
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>.
12970 <div class=
"padding"></div>
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>
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>
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)
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>
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
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>
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>
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>
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>.
13049 <div class="padding
"></div>
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>
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>
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>
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
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>
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>.
13112 <div class="padding
"></div>
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>
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
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>
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
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>
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>
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>
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>
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>
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>.
13194 <div class="padding
"></div>
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>
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>
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>
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>
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>.
13238 <div class="padding
"></div>
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>
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>
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>
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>
13276 <p>Perhaps something to consider for those of you in countries without
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>.
13288 <div class="padding
"></div>
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>
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
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>
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>
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>
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
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>
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>
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>
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>.
13378 <div class="padding
"></div>
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>
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>
13402 10de:03eb i2c_nforce2
13405 10de:03f0 snd_hda_intel
13410 109e:0878 snd_bt87x
13414 <p>The code in question look like this, slightly modified for
13415 readability and to drop the output to file descriptor 3:</p>
13418 if [ -d /sys/bus/pci/devices/ ] ; then
13419 echo loaded pci modules:
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}'`
13437 <p>Similar code could be used to extract USB device module
13441 if [ -d /sys/bus/usb/devices/ ] ; then
13442 echo loaded usb modules:
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
13462 <p>This might perhaps be something to include in other tools as
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>.
13474 <div class=
"padding"></div>
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>
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
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>
13503 <p>Anyway, to get to the point of this post. Here is the simple tests
13504 I perform on a new model.
</p>
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>
13512 <li>Is X.org working? If the graphical login screen show up after
13513 installation, X.org is working.
</li>
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>
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>
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>
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>
13533 <li>Is any built in camera working? Test using cheese, and see if a
13534 picture from the v4l device show up.
</li>
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
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
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
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
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
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>
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>.
13579 <div class=
"padding"></div>
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>
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>
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">1LfdGnGuWkpSJgbQySxxCWhv
8MHqvwst
3</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>
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>
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
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
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>
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>.
13675 <div class=
"padding"></div>
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>
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.
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>
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>
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,
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>
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>
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>.
13737 <div class=
"padding"></div>
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>
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>
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>
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>
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>.
13788 <div class=
"padding"></div>
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>
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>
13805 <p>This is for Gnome:
</p>
13807 <p>Installed using apt-get, missing with aptitude
</p>
13814 browser-plugin-gnash
13821 freedesktop-sound-theme
13823 gconf-defaults-service
13836 gnome-codec-install
13838 gnome-desktop-environment
13842 gnome-session-canberra
13844 gnome-themes-extras
13847 gstreamer0.10-fluendo-mp3
13848 gstreamer0.10-tools
13850 gtk2-engines-pixbuf
13851 gtk2-engines-smooth
13853 libapache2-mod-dnssd
13856 libaprutil1-dbd-sqlite3
13859 libboost-date-time1.42
.0
13860 libboost-python1.42
.0
13861 libboost-thread1.42
.0
13863 libchamplain-gtk-
0.4-
0
13865 libclutter-gtk-
0.10-
0
13872 libfreerdp-plugins-standard
13885 libgnome-vfs2.0-cil
13887 libgnomepanel2.24-cil
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
13904 libndesk-dbus-glib1.0-cil
13905 libndesk-dbus1.0-cil
13915 libtelepathy-farsight0
13924 nautilus-sendto-empathy
13928 python-aptdaemon-gtk
13930 python-beautifulsoup
13945 python-gtksourceview2
13956 python-pkg-resources
13963 python-twisted-conch
13964 python-twisted-core
13969 python-zope.interface
13971 remmina-plugin-data
13974 rhythmbox-plugin-cdrecorder
13981 system-config-printer-udev
13983 telepathy-mission-control-
5
13990 transmission-common
13996 <p>Installed using apt-get, removed with aptitude
</p>
14002 epiphany-extensions
14004 fast-user-switch-applet
14023 libgtksourceview2.0-
0
14025 libsdl1.2debian-alsa
14031 system-config-printer
14038 <p>Installed using aptitude, missing with apt-get
</p>
14041 gstreamer0.10-gnomevfs
14044 <p>Installed using aptitude, removed with apt-get
</p>
14050 <p>This is for KDE:
</p>
14052 <p>Installed using apt-get, missing with aptitude
</p>
14058 <p>Installed using apt-get, removed with aptitude
</p>
14062 network-manager-kde
14065 <p>Installed using aptitude, missing with apt-get
</p>
14081 kdeartwork-emoticons
14083 kdeartwork-theme-icon
14087 kdebase-workspace-bin
14088 kdebase-workspace-data
14100 konqueror-nsplugins
14102 kscreensaver-xsavers
14117 plasma-dataengines-workspace
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
14132 update-notifier-kde
14133 xscreensaver-data-extra
14135 xscreensaver-gl-extra
14136 xscreensaver-screensaver-bsod
14139 <p>Installed using aptitude, removed with apt-get
</p>
14143 google-gadgets-common
14161 libggadget-qt-
1.0-
0b
14166 libkonqsidebarplugin4a
14170 libkunitconversion4
14175 libplasma-geolocation-interface4
14177 libplasmagenericshell4
14191 libsmokeknewstuff2-
3
14192 libsmokeknewstuff3-
3
14194 libsmokektexteditor3
14202 libsmokeqtnetwork4-
3
14203 libsmokeqtopengl4-
3
14204 libsmokeqtscript4-
3
14208 libsmokeqtuitools4-
3
14209 libsmokeqtwebkit4-
3
14220 plasma-dataengines-addons
14221 plasma-scriptengine-superkaramba
14222 plasma-widget-lancelot
14223 plasma-widgets-addons
14224 plasma-widgets-workspace
14228 update-notifier-common
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>
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>.
14245 <div class=
"padding"></div>
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>
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>
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>
14277 # http://searchnetworking.techtarget.com.au/articles/
35011-Six-steps-for-migrating-Xen-virtual-machines-to-KVM
14282 if [ -z "$
1" ] ; then
14283 echo "Usage: $
0 <hostname
>"
14289 if [ ! -e /dev/vg_data/$host-disk ] ; then
14290 echo "error: unable to find LVM volume for $host"
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 ) ))
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
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
14309 losetup /dev/loop0 $img
14310 kpartx -a /dev/loop0
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
14316 kpartx -d /dev/loop0
14317 losetup -d /dev/loop0
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>
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>
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>.
14337 <div class=
"padding"></div>
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>
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>
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>
14356 <p>This is for Gnome:
</p>
14358 <p>Installed using apt-get, missing with aptitude
</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
14422 Installed using apt-get, removed with aptitude
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
14456 <p>Installed using aptitude, missing with apt-get
</p>
14459 gstreamer0.10-gnomevfs
14462 <p>Installed using aptitude, removed with apt-get
</p>
14468 <p>This is for KDE:
</p>
14470 <p>Installed using apt-get, missing with aptitude
</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
14505 <p>Installed using apt-get, removed with aptitude
</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
14543 <p>Installed using aptitude, missing with apt-get
</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
14555 <p>Installed using aptitude, removed with apt-get
</p>
14558 kdebase-bin konq-plugins konqueror
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>.
14570 <div class=
"padding"></div>
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>
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>
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>
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>.
14613 <div class=
"padding"></div>
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>
14623 <p><img src=
"http://thingiverse-production.s3.amazonaws.com/renders/23/e0/c4/f9/2b/debswagtdose_preview_medium.jpg"></p>
14625 <p>3D printing is just great. I just came across this Debian logo in
14627 <a href=
"http://blog.thingiverse.com/2010/11/09/participatory-branding/">the
14628 thingiverse blog
</a>.
</p>
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>.
14639 <div class=
"padding"></div>
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>
14649 <p>Some updates.
</p>
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.
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.
14662 <a href=
"http://simonkagstrom.github.com/kcov/index.html">kcov
</a>,
14663 and can be used using
<tt>kcov
<directory
> <binary
></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>
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>
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>.
14689 <div class=
"padding"></div>
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>
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
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>
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>
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>
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>.
14749 <div class=
"padding"></div>
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>
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>
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>
14775 <p>In this log, the problem manifest itself with this error:
</p>
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-
19lenny
2.
14781 dpkg: error processing perl-modules (--configure):
14782 dependency problems - leaving unconfigured
14783 </pre></blockquote>
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>
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
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>
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
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>.
14817 <div class=
"padding"></div>
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>
14828 <a href=
"http://www.hungry.com/~pere/blog/Time_for_new__LDAP_schemas_replacing_RFC_2307_.html">followup
</a>
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
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>
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>
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.
14844 <p><strong>powerdns
</strong></p>
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
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>
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>
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
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>
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
14898 dn: dc=tjener,dc=intern,ou=hosts,dc=skole,dc=skolelinux,dc=no
14900 objectclass: dnsdomain
14901 objectclass: domainrelatedobject
14904 associateddomain: tjener.intern
14906 dn: dc=
2,dc=
2,dc=
0,dc=
10,dc=in-addr,dc=arpa,ou=hosts,dc=skole,dc=skolelinux,dc=no
14908 objectclass: dnsdomain2
14909 objectclass: domainrelatedobject
14911 ptrrecord: tjener.intern
14912 associateddomain:
2.2.0.10.in-addr.arpa
14913 </pre></blockquote>
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
14928 <p>The forward and reverse searches can be simulated using ldapsearch
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
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>
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>
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>
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>
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>
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>
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>
14976 objectclass ( some-oid NAME 'dnsDomainAux'
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
14985 </pre></blockquote>
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>
14994 <p><strong>ISC dhcp
</strong></p>
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>
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>
15008 ldap-base-dn "dc=skole,dc=skolelinux,dc=no";
15009 ldap-dhcp-server-cn "dhcp";
15010 </pre></blockquote>
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>
15018 dn: cn=dhcp,dc=skole,dc=skolelinux,dc=no
15021 objectClass: dhcpServer
15022 dhcpServiceDN: cn=DHCP Config,dc=skole,dc=skolelinux,dc=no
15023 </pre></blockquote>
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>
15033 dn: cn=DHCP Config,dc=skole,dc=skolelinux,dc=no
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>
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>
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
15064 dn: cn=hostname,cn=group1,cn=THINCLIENTS,cn=DHCP Config,dc=skole,dc=skolelinux,dc=no
15067 objectClass: dhcpHost
15068 dhcpHWAddress: ethernet
00:
00:
00:
00:
00:
00
15069 dhcpStatements: fixed-address hostname
15070 </pre></blockquote>
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.
15082 <p><strong>Conclusion
</strong></p>
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>
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
15097 <p>Based on the observed behaviour, I suspect a LDAP structure like
15098 this might work for Debian Edu:
</p>
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>
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>
15119 <p>The combined object under the machines subtree would look something
15123 dn: dc=hostname,ou=machines,cn=machine-info,dc=skole,dc=skolelinux,dc=no
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>
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>
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>.
15148 <div class=
"padding"></div>
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>
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>
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>
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>
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
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
15187 dn: cn=hostname,cn=group1,cn=THINCLIENTS,cn=DHCP Config,dc=skole,dc=skolelinux,dc=no
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
15197 </pre></blockquote>
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>
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>
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>
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>.
15225 <div class=
"padding"></div>
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>
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>
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
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>
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>
15255 # Store in /opt/ltsp/$arch/usr/share/ltsp/ltsp_config.d/ldap-config
15257 # Fetch LTSP client settings from LDAP based on MAC address
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.
15263 # This module is written to be schema agnostic, and only depend on the
15264 # existence of attribute names.
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.
15270 # Some LDAP schema should be created with all the relevant
15271 # configuration settings. Something like this should work:
15273 # objectclass (
1.1.2.2 NAME 'ltspClientAux'
15276 # MAY ( ltspConfigServer $ ltsConfigSound $ ... )
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"
15292 </pre></blockquote>
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>
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>
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>
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>.
15319 <div class=
"padding"></div>
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>
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>
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>.
15353 <div class=
"padding"></div>
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>
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>
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>
15378 <p>Installed using apt-get, missing with aptitude
</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
15391 <p>Installed using apt-get, removed with aptitude
</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
15416 <p>Installed using aptitude, missing with apt-get
</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
15442 <p>Installed using aptitude, removed with apt-get
</p>
15445 deskbar-applet xserver-xorg xserver-xorg-core
15446 xserver-xorg-input-wacom xserver-xorg-video-intel
15447 xserver-xorg-video-openchrome
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.
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>.
15465 <div class=
"padding"></div>
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>
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>
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
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>
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>
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>
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>.
15515 <div class=
"padding"></div>
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>
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>
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>
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
15541 <p>Anyway, for future reference, this is how I believe we could change
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>
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
15553 DESC 'This represents information about a particular client'
15555 + SUP top AUXILIARY
15557 MAY (dhcpLeaseDN $ dhcpHWAddress $ dhcpOptionsDN $ dhcpStatements $ dhcpComments $ dhcpOption)
15558 X-NDS_CONTAINMENT ('dhcpService' 'dhcpSubnet' 'dhcpGroup') )
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>
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>
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>.
15577 <div class=
"padding"></div>
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>
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
15595 export DEBIAN_FRONTEND=noninteractive
15596 tasksel --new-install
15597 </pre></blockquote>
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.
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
15612 export DEBIAN_FRONTEND=noninteractive
15613 cmd="$(in_target tasksel -t --new-install | sed 's/debconf-apt-progress -- //')"
15615 </pre></blockquote>
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
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
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>.
15638 <div class="padding
"></div>
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>
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>
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>
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>
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
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>
15711 <p><b>aptitude gnome 129</b>
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
15746 <p><b>apt-get kde 82</b>
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>
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
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>.
15826 <div class="padding
"></div>
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>
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>
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>
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>
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
15887 exec
< /dev/null
15889 mirror=http://ftp.skolelinux.org/debian
15890 tmpdir=chroot-$from-upgrade-$to-$desktop
15892 debootstrap $from $tmpdir $mirror
15893 chroot $tmpdir aptitude update
15894 cat
> $tmpdir/usr/sbin/policy-rc.d
<<EOF
15898 chmod a+rx $tmpdir/usr/sbin/policy-rc.d
15900 umount $tmpdir/proc
15902 mount -t proc proc $tmpdir/proc
15903 # Make sure proc is unmounted also on failure
15904 trap exit_cleanup EXIT INT
15906 chroot $tmpdir aptitude -y install debconf-utils
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
15913 # Include the desktop and laptop task
15914 for test in desktop laptop ; do
15915 echo
> $tmpdir/usr/lib/tasksel/tests/$test
<<EOF
15919 chmod a+rx $tmpdir/usr/lib/tasksel/tests/$test
15922 DEBIAN_FRONTEND=noninteractive
15923 DEBIAN_PRIORITY=critical
15924 export DEBIAN_FRONTEND DEBIAN_PRIORITY
15925 chroot $tmpdir tasksel --new-install
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
15932 </pre></blockquote>
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>
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>
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
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>.
15965 <div class=
"padding"></div>
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>
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>
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
15993 UPSTART_EVENTS=startup
15995 UPSTART_JOB=rc-sysinit
15996 </pre></blockquote>
15998 <p>With sysvinit, these environment variables are set for the same
16002 INIT_VERSION=sysvinit-
2.88
16007 </pre></blockquote>
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>
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
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>.
16026 <div class=
"padding"></div>
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>
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>
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>.
16052 <div class=
"padding"></div>
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>
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>
16069 maintainer:~# /usr/lib/sitesummary/hardware-model-summary
16071 Dell Computer Corporation
1
16074 eserver xSeries
345 -[
8670M1X]-
1
16078 </pre></blockquote>
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>
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
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>.
16104 <div class=
"padding"></div>
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>
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
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>
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>
16136 <p>I wonder why we end up handling bugs this way.
</p>
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>.
16147 <div class=
"padding"></div>
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>
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:
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>
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>
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>
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>
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>
16195 <p>Update: Correct bug number to file-rc issue.
</p>
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>.
16206 <div class=
"padding"></div>
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>
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>
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
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
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>
16255 <p>If you want to discuss the details of these features, please
16256 contact us on debian-boot@lists.debian.org.
</p>
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>.
16267 <div class=
"padding"></div>
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>
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
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>
16297 </pre></blockquote>
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>
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>.
16313 <div class=
"padding"></div>
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>
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>
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>
16337 perl -MSiteSummary -e 'for_all_hosts(sub { print join(" ", get_macaddresses(shift)), "\n"; });'
16338 </pre></blockquote>
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>
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
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>.
16358 <div class=
"padding"></div>
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>
16368 <p>The last few days a new boot system called
16369 <a href=
"http://www.freedesktop.org/wiki/Software/systemd">systemd
</a>
16371 <a href=
"http://0pointer.de/blog/projects/systemd.html">introduced
</a>
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>
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
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>
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>.
16410 <div class=
"padding"></div>
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>
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>
16429 CONCURRENCY=makefile
16430 </pre></blockquote>
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>
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>
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>
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>
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>.
16465 <div class=
"padding"></div>
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>
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>
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>
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>.
16496 <div class=
"padding"></div>
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>
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>
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>
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>
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>.
16538 <div class=
"padding"></div>
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>
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
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>
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
16565 <li>Use dash as /bin/sh.
</li>
16567 <li>Disable the init.d/hwclock*.sh scripts and make sure the hardware
16568 clock is in UTC.
</li>
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>
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
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
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>
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>.
16604 <div class=
"padding"></div>
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>
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
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>
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.
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>
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>
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>.
16651 <div class=
"padding"></div>
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>
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>
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>.
16679 <div class=
"padding"></div>
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>
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>
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
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>.
16728 <div class=
"padding"></div>
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>
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>
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.
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>
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>
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>.
16784 <div class=
"padding"></div>
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>
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
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>.
16811 <div class=
"padding"></div>
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>
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
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>
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>
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>
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>.
16856 <div class=
"padding"></div>
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>
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
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>.
16891 <div class=
"padding"></div>
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>
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>
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>
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>
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>
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>
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>.
16943 <div class=
"padding"></div>
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>
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>
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>.
16975 <div class=
"padding"></div>
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>
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>
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>
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>.
17009 <div class=
"padding"></div>
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>
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>
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>
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>.
17047 <div class=
"padding"></div>
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>
17060 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2025/01/">January (
2)
</a></li>
17067 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2024/01/">January (
1)
</a></li>
17069 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2024/02/">February (
1)
</a></li>
17071 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2024/03/">March (
2)
</a></li>
17073 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2024/04/">April (
3)
</a></li>
17075 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2024/05/">May (
1)
</a></li>
17077 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2024/06/">June (
1)
</a></li>
17079 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2024/07/">July (
2)
</a></li>
17081 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2024/12/">December (
1)
</a></li>
17088 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2023/01/">January (
3)
</a></li>
17090 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2023/02/">February (
1)
</a></li>
17092 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2023/04/">April (
2)
</a></li>
17094 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2023/05/">May (
3)
</a></li>
17096 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2023/06/">June (
1)
</a></li>
17098 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2023/08/">August (
1)
</a></li>
17100 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2023/09/">September (
1)
</a></li>
17102 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2023/10/">October (
1)
</a></li>
17104 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2023/11/">November (
4)
</a></li>
17106 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2023/12/">December (
1)
</a></li>
17113 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2022/02/">February (
1)
</a></li>
17115 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2022/03/">March (
3)
</a></li>
17117 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2022/04/">April (
2)
</a></li>
17119 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2022/06/">June (
2)
</a></li>
17121 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2022/07/">July (
1)
</a></li>
17123 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2022/09/">September (
1)
</a></li>
17125 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2022/10/">October (
1)
</a></li>
17127 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2022/12/">December (
1)
</a></li>
17134 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2021/01/">January (
2)
</a></li>
17136 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2021/02/">February (
1)
</a></li>
17138 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2021/05/">May (
1)
</a></li>
17140 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2021/06/">June (
1)
</a></li>
17142 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2021/07/">July (
3)
</a></li>
17144 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2021/08/">August (
1)
</a></li>
17146 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2021/09/">September (
1)
</a></li>
17148 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2021/10/">October (
1)
</a></li>
17150 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2021/12/">December (
1)
</a></li>
17157 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2020/02/">February (
2)
</a></li>
17159 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2020/03/">March (
2)
</a></li>
17161 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2020/04/">April (
2)
</a></li>
17163 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2020/05/">May (
3)
</a></li>
17165 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2020/06/">June (
2)
</a></li>
17167 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2020/07/">July (
1)
</a></li>
17169 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2020/09/">September (
1)
</a></li>
17171 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2020/10/">October (
1)
</a></li>
17173 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2020/11/">November (
1)
</a></li>
17180 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2019/01/">January (
4)
</a></li>
17182 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2019/02/">February (
3)
</a></li>
17184 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2019/03/">March (
3)
</a></li>
17186 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2019/05/">May (
2)
</a></li>
17188 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2019/06/">June (
5)
</a></li>
17190 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2019/07/">July (
2)
</a></li>
17192 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2019/08/">August (
1)
</a></li>
17194 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2019/09/">September (
1)
</a></li>
17196 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2019/11/">November (
1)
</a></li>
17198 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2019/12/">December (
4)
</a></li>
17205 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2018/01/">January (
1)
</a></li>
17207 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2018/02/">February (
5)
</a></li>
17209 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2018/03/">March (
5)
</a></li>
17211 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2018/04/">April (
3)
</a></li>
17213 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2018/06/">June (
2)
</a></li>
17215 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2018/07/">July (
5)
</a></li>
17217 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2018/08/">August (
3)
</a></li>
17219 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2018/09/">September (
3)
</a></li>
17221 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2018/10/">October (
5)
</a></li>
17223 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2018/11/">November (
2)
</a></li>
17225 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2018/12/">December (
4)
</a></li>
17232 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2017/01/">January (
4)
</a></li>
17234 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2017/02/">February (
3)
</a></li>
17236 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2017/03/">March (
5)
</a></li>
17238 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2017/04/">April (
2)
</a></li>
17240 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2017/06/">June (
5)
</a></li>
17242 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2017/07/">July (
1)
</a></li>
17244 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2017/08/">August (
1)
</a></li>
17246 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2017/09/">September (
3)
</a></li>
17248 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2017/10/">October (
5)
</a></li>
17250 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2017/11/">November (
3)
</a></li>
17252 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2017/12/">December (
4)
</a></li>
17259 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2016/01/">January (
3)
</a></li>
17261 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2016/02/">February (
2)
</a></li>
17263 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2016/03/">March (
3)
</a></li>
17265 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2016/04/">April (
8)
</a></li>
17267 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2016/05/">May (
8)
</a></li>
17269 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2016/06/">June (
2)
</a></li>
17271 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2016/07/">July (
2)
</a></li>
17273 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2016/08/">August (
5)
</a></li>
17275 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2016/09/">September (
2)
</a></li>
17277 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2016/10/">October (
3)
</a></li>
17279 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2016/11/">November (
8)
</a></li>
17281 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2016/12/">December (
5)
</a></li>
17288 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2015/01/">January (
7)
</a></li>
17290 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2015/02/">February (
6)
</a></li>
17292 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2015/03/">March (
1)
</a></li>
17294 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2015/04/">April (
4)
</a></li>
17296 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2015/05/">May (
3)
</a></li>
17298 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2015/06/">June (
4)
</a></li>
17300 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2015/07/">July (
6)
</a></li>
17302 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2015/08/">August (
2)
</a></li>
17304 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2015/09/">September (
2)
</a></li>
17306 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2015/10/">October (
9)
</a></li>
17308 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2015/11/">November (
6)
</a></li>
17310 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2015/12/">December (
3)
</a></li>
17317 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2014/01/">January (
2)
</a></li>
17319 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2014/02/">February (
3)
</a></li>
17321 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2014/03/">March (
8)
</a></li>
17323 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2014/04/">April (
7)
</a></li>
17325 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2014/05/">May (
1)
</a></li>
17327 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2014/06/">June (
2)
</a></li>
17329 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2014/07/">July (
2)
</a></li>
17331 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2014/08/">August (
2)
</a></li>
17333 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2014/09/">September (
5)
</a></li>
17335 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2014/10/">October (
6)
</a></li>
17337 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2014/11/">November (
3)
</a></li>
17339 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2014/12/">December (
5)
</a></li>
17346 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2013/01/">January (
11)
</a></li>
17348 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2013/02/">February (
9)
</a></li>
17350 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2013/03/">March (
9)
</a></li>
17352 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2013/04/">April (
6)
</a></li>
17354 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2013/05/">May (
9)
</a></li>
17356 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2013/06/">June (
10)
</a></li>
17358 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2013/07/">July (
7)
</a></li>
17360 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2013/08/">August (
3)
</a></li>
17362 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2013/09/">September (
5)
</a></li>
17364 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2013/10/">October (
7)
</a></li>
17366 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2013/11/">November (
9)
</a></li>
17368 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2013/12/">December (
3)
</a></li>
17375 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2012/01/">January (
7)
</a></li>
17377 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2012/02/">February (
10)
</a></li>
17379 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2012/03/">March (
17)
</a></li>
17381 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2012/04/">April (
12)
</a></li>
17383 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2012/05/">May (
12)
</a></li>
17385 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2012/06/">June (
20)
</a></li>
17387 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2012/07/">July (
17)
</a></li>
17389 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2012/08/">August (
6)
</a></li>
17391 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2012/09/">September (
9)
</a></li>
17393 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2012/10/">October (
17)
</a></li>
17395 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2012/11/">November (
10)
</a></li>
17397 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2012/12/">December (
7)
</a></li>
17404 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2011/01/">January (
16)
</a></li>
17406 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2011/02/">February (
6)
</a></li>
17408 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2011/03/">March (
6)
</a></li>
17410 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2011/04/">April (
7)
</a></li>
17412 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2011/05/">May (
3)
</a></li>
17414 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2011/06/">June (
2)
</a></li>
17416 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2011/07/">July (
7)
</a></li>
17418 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2011/08/">August (
6)
</a></li>
17420 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2011/09/">September (
4)
</a></li>
17422 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2011/10/">October (
2)
</a></li>
17424 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2011/11/">November (
3)
</a></li>
17426 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2011/12/">December (
1)
</a></li>
17433 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2010/01/">January (
2)
</a></li>
17435 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2010/02/">February (
1)
</a></li>
17437 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2010/03/">March (
3)
</a></li>
17439 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2010/04/">April (
3)
</a></li>
17441 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2010/05/">May (
9)
</a></li>
17443 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2010/06/">June (
14)
</a></li>
17445 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2010/07/">July (
12)
</a></li>
17447 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2010/08/">August (
13)
</a></li>
17449 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2010/09/">September (
7)
</a></li>
17451 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2010/10/">October (
9)
</a></li>
17453 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2010/11/">November (
13)
</a></li>
17455 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2010/12/">December (
12)
</a></li>
17462 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2009/01/">January (
8)
</a></li>
17464 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2009/02/">February (
8)
</a></li>
17466 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2009/03/">March (
12)
</a></li>
17468 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2009/04/">April (
10)
</a></li>
17470 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2009/05/">May (
9)
</a></li>
17472 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2009/06/">June (
3)
</a></li>
17474 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2009/07/">July (
4)
</a></li>
17476 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2009/08/">August (
3)
</a></li>
17478 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2009/09/">September (
1)
</a></li>
17480 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2009/10/">October (
2)
</a></li>
17482 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2009/11/">November (
3)
</a></li>
17484 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2009/12/">December (
3)
</a></li>
17491 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2008/11/">November (
5)
</a></li>
17493 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2008/12/">December (
7)
</a></li>
17504 <li><a href=
"http://www.hungry.com/~pere/blog/tags/3d-printer">3d-printer (
19)
</a></li>
17506 <li><a href=
"http://www.hungry.com/~pere/blog/tags/amiga">amiga (
1)
</a></li>
17508 <li><a href=
"http://www.hungry.com/~pere/blog/tags/aros">aros (
1)
</a></li>
17510 <li><a href=
"http://www.hungry.com/~pere/blog/tags/bankid">bankid (
4)
</a></li>
17512 <li><a href=
"http://www.hungry.com/~pere/blog/tags/betalkontant">betalkontant (
9)
</a></li>
17514 <li><a href=
"http://www.hungry.com/~pere/blog/tags/bitcoin">bitcoin (
13)
</a></li>
17516 <li><a href=
"http://www.hungry.com/~pere/blog/tags/bootsystem">bootsystem (
17)
</a></li>
17518 <li><a href=
"http://www.hungry.com/~pere/blog/tags/bsa">bsa (
2)
</a></li>
17520 <li><a href=
"http://www.hungry.com/~pere/blog/tags/chrpath">chrpath (
3)
</a></li>
17522 <li><a href=
"http://www.hungry.com/~pere/blog/tags/debian">debian (
205)
</a></li>
17524 <li><a href=
"http://www.hungry.com/~pere/blog/tags/debian edu">debian edu (
159)
</a></li>
17526 <li><a href=
"http://www.hungry.com/~pere/blog/tags/debian-handbook">debian-handbook (
9)
</a></li>
17528 <li><a href=
"http://www.hungry.com/~pere/blog/tags/digistan">digistan (
11)
</a></li>
17530 <li><a href=
"http://www.hungry.com/~pere/blog/tags/dld">dld (
18)
</a></li>
17532 <li><a href=
"http://www.hungry.com/~pere/blog/tags/docbook">docbook (
33)
</a></li>
17534 <li><a href=
"http://www.hungry.com/~pere/blog/tags/drivstoffpriser">drivstoffpriser (
4)
</a></li>
17536 <li><a href=
"http://www.hungry.com/~pere/blog/tags/english">english (
467)
</a></li>
17538 <li><a href=
"http://www.hungry.com/~pere/blog/tags/fiksgatami">fiksgatami (
23)
</a></li>
17540 <li><a href=
"http://www.hungry.com/~pere/blog/tags/fildeling">fildeling (
14)
</a></li>
17542 <li><a href=
"http://www.hungry.com/~pere/blog/tags/freeculture">freeculture (
34)
</a></li>
17544 <li><a href=
"http://www.hungry.com/~pere/blog/tags/freedombox">freedombox (
9)
</a></li>
17546 <li><a href=
"http://www.hungry.com/~pere/blog/tags/frikanalen">frikanalen (
20)
</a></li>
17548 <li><a href=
"http://www.hungry.com/~pere/blog/tags/h264">h264 (
20)
</a></li>
17550 <li><a href=
"http://www.hungry.com/~pere/blog/tags/intervju">intervju (
43)
</a></li>
17552 <li><a href=
"http://www.hungry.com/~pere/blog/tags/isenkram">isenkram (
19)
</a></li>
17554 <li><a href=
"http://www.hungry.com/~pere/blog/tags/kart">kart (
23)
</a></li>
17556 <li><a href=
"http://www.hungry.com/~pere/blog/tags/kodi">kodi (
6)
</a></li>
17558 <li><a href=
"http://www.hungry.com/~pere/blog/tags/ldap">ldap (
9)
</a></li>
17560 <li><a href=
"http://www.hungry.com/~pere/blog/tags/lego">lego (
5)
</a></li>
17562 <li><a href=
"http://www.hungry.com/~pere/blog/tags/lenker">lenker (
8)
</a></li>
17564 <li><a href=
"http://www.hungry.com/~pere/blog/tags/linuxcnc">linuxcnc (
8)
</a></li>
17566 <li><a href=
"http://www.hungry.com/~pere/blog/tags/lsdvd">lsdvd (
2)
</a></li>
17568 <li><a href=
"http://www.hungry.com/~pere/blog/tags/ltsp">ltsp (
1)
</a></li>
17570 <li><a href=
"http://www.hungry.com/~pere/blog/tags/madewithcc">madewithcc (
3)
</a></li>
17572 <li><a href=
"http://www.hungry.com/~pere/blog/tags/mesh network">mesh network (
8)
</a></li>
17574 <li><a href=
"http://www.hungry.com/~pere/blog/tags/multimedia">multimedia (
46)
</a></li>
17576 <li><a href=
"http://www.hungry.com/~pere/blog/tags/nice free software">nice free software (
15)
</a></li>
17578 <li><a href=
"http://www.hungry.com/~pere/blog/tags/noark5">noark5 (
25)
</a></li>
17580 <li><a href=
"http://www.hungry.com/~pere/blog/tags/norsk">norsk (
325)
</a></li>
17582 <li><a href=
"http://www.hungry.com/~pere/blog/tags/nuug">nuug (
199)
</a></li>
17584 <li><a href=
"http://www.hungry.com/~pere/blog/tags/offentlig innsyn">offentlig innsyn (
41)
</a></li>
17586 <li><a href=
"http://www.hungry.com/~pere/blog/tags/open311">open311 (
2)
</a></li>
17588 <li><a href=
"http://www.hungry.com/~pere/blog/tags/opensnitch">opensnitch (
4)
</a></li>
17590 <li><a href=
"http://www.hungry.com/~pere/blog/tags/opphavsrett">opphavsrett (
76)
</a></li>
17592 <li><a href=
"http://www.hungry.com/~pere/blog/tags/personvern">personvern (
114)
</a></li>
17594 <li><a href=
"http://www.hungry.com/~pere/blog/tags/raid">raid (
4)
</a></li>
17596 <li><a href=
"http://www.hungry.com/~pere/blog/tags/reactos">reactos (
1)
</a></li>
17598 <li><a href=
"http://www.hungry.com/~pere/blog/tags/reprap">reprap (
11)
</a></li>
17600 <li><a href=
"http://www.hungry.com/~pere/blog/tags/rfid">rfid (
3)
</a></li>
17602 <li><a href=
"http://www.hungry.com/~pere/blog/tags/robot">robot (
17)
</a></li>
17604 <li><a href=
"http://www.hungry.com/~pere/blog/tags/rss">rss (
1)
</a></li>
17606 <li><a href=
"http://www.hungry.com/~pere/blog/tags/ruter">ruter (
7)
</a></li>
17608 <li><a href=
"http://www.hungry.com/~pere/blog/tags/scraperwiki">scraperwiki (
2)
</a></li>
17610 <li><a href=
"http://www.hungry.com/~pere/blog/tags/sikkerhet">sikkerhet (
60)
</a></li>
17612 <li><a href=
"http://www.hungry.com/~pere/blog/tags/sitesummary">sitesummary (
4)
</a></li>
17614 <li><a href=
"http://www.hungry.com/~pere/blog/tags/skepsis">skepsis (
5)
</a></li>
17616 <li><a href=
"http://www.hungry.com/~pere/blog/tags/standard">standard (
76)
</a></li>
17618 <li><a href=
"http://www.hungry.com/~pere/blog/tags/stavekontroll">stavekontroll (
7)
</a></li>
17620 <li><a href=
"http://www.hungry.com/~pere/blog/tags/stortinget">stortinget (
14)
</a></li>
17622 <li><a href=
"http://www.hungry.com/~pere/blog/tags/surveillance">surveillance (
65)
</a></li>
17624 <li><a href=
"http://www.hungry.com/~pere/blog/tags/sysadmin">sysadmin (
5)
</a></li>
17626 <li><a href=
"http://www.hungry.com/~pere/blog/tags/usenix">usenix (
2)
</a></li>
17628 <li><a href=
"http://www.hungry.com/~pere/blog/tags/valg">valg (
9)
</a></li>
17630 <li><a href=
"http://www.hungry.com/~pere/blog/tags/verkidetfri">verkidetfri (
22)
</a></li>
17632 <li><a href=
"http://www.hungry.com/~pere/blog/tags/video">video (
80)
</a></li>
17634 <li><a href=
"http://www.hungry.com/~pere/blog/tags/vitenskap">vitenskap (
4)
</a></li>
17636 <li><a href=
"http://www.hungry.com/~pere/blog/tags/web">web (
42)
</a></li>
17642 <p style=
"text-align: right">
17643 Created by
<a href=
"http://steve.org.uk/Software/chronicle">Chronicle v4.6
</a>